Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Abstract Methods


Автор: Christoph 17.1.2009, 21:11
Не могу понять зачем нужные абстрактные методы?! И для чего его создавать? если нужно создавать наследника, и только потом использовать! Искал в инете, в книге инфу, толком нет объяснения

Автор: Bose 17.1.2009, 21:57
Цитата(Christoph @  17.1.2009,  20:11 Найти цитируемый пост)
Не могу понять зачем нужные абстрактные методы?! 

Как на самом деле не знаю, но могу нафантазировать следующее:
Полагаю, что абстрактные методы введены в язык как попытка заменить интерфейсы. В первых версиях Delphi вроде бы не было поддержки интерфейсов(IInterface), а необходимость определять методы в предке была. Вероятно, затем их и ввели.

Если есть опыт работы с базами данных в Дельфи, то советую посмотреть например класс TDataset. Отличный пример использования абстрактных методов.  

Автор: skyboy 17.1.2009, 22:54
Цитата(Bose @  17.1.2009,  20:57 Найти цитируемый пост)
попытка заменить интерфейсы

интерфейсы Delphi не позволяют включать в них реализацию: только описание(да, да, в классе, реализующем интерфейс, будет делегат). 
абстрактные же методы входят в состав "обычных" классов, осталные методы того же класса вполне могут быть не абстрактными.
класс-предок, реализующий некий http://en.wikipedia.org/wiki/Template_method_pattern проще и нагляднее будет, как класс с абстрактными методами, чем интерфейс + класс, реализующий только пару из объявленных в интерфейсе методов(я уже слегка подзабыл: а вообще возможно в классе, реализующем некий интерфейс, реализовать не все методы, объявленные в интерфейсе?)

Добавлено через 1 минуту и 37 секунд
пожалуй, абстрактные методы не столько для описания интерфейса класса(ибо есть интерфейсы и так), а для явной или неявной реализации шаблонного метода и чтоб обязать(обязать программиста на уровне синтаксиса) переопределять методы-"пустышки" в потомках.

Автор: Bose 17.1.2009, 23:46
Цитата(skyboy @  17.1.2009,  21:54 Найти цитируемый пост)
я уже слегка подзабыл: а вообще возможно в классе, реализующем некий интерфейс, реализовать не все методы, объявленные в интерфейсе?

С интерфейсами нельзя. Delphi не даст даже скомпилировать такой код, в отличие от классов с абстрактными методами. 

Автор: skyboy 17.1.2009, 23:53
значит, вот ещё отличие абстрактных методов от полностью абстрактных классов smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)