| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Абстрактные классы и методы |
| Автор: underW 8.7.2009, 13:37 | ||||
| Сейчас вот стал более глубоко вникать в ООП в PHP, так вот: Абстрактные классы и методы Абстрактные методы имеют только объявление и не имеют реализации. Класс, который содержит такие методы, должен быть обязательно объявлен как абстрактный:
Это все понятно, как объявлять и что это такое, НО ну никак не могу понять, зачеееем они надо???? Вот нашел такую цитату:
Зачем описывать объект, который будет реализован, но еще не реализован? В чем суть абстрактного класса??? Можно объяснить на пальцах? Спасибо. |
| Автор: MoLeX 8.7.2009, 13:46 |
| |
| Автор: icewind 8.7.2009, 14:28 |
| Экземпляры абстрактных классов не могут быть созданы. По этому они носят чисто описательный характер. Однако абстрактный класс не обязательно состоит только из абстрактных методов. Он может содержать методы с реализацией. Но если у класса есть хоть один абстрактный метод, то он сам должен быть объявлен как абстрактный |
| Автор: underW 9.7.2009, 00:20 |
| icewind,ну и что? каким образом это объясняет нужность абстрактных классов? |
| Автор: QryStaL 9.7.2009, 09:13 |
| underW, почитайте про концепцию полиморфизма. Through inheritance, a class can be used as more than one type; it can be used as its own type, any base types, or any interface type if it implements interfaces. This is called polymorphism. Polymorphism is important not only to the derived classes, but to the base classes as well. Anyone using the base class could, in fact, be using an object of the derived class that has been cast to the base class type. Designers of a base class can anticipate the aspects of their base class that are likely to change for a derived type. |
| Автор: Sentox 9.7.2009, 09:40 | ||
| Может такое обьяснение подойдёт. Есть класс "животные", но ведь "чистого обьекта" в природе не существует. По сути дела передавая информацию "животные" мы понимаем что это "обьекты(классы)" - собаки, кошки, ..... и т.д. и каждый имеет общую функциональность от класса "животные" ходить по земле, но в то же время имеют различные функции. Основная роль абстрактного класса дать группе обьектов (классов, которые наследуют абстрактный) один тип для последующего использования например:
Теперь в метод run() будут передаваться обьекты ТОЛЬКО типа Animal. Иначе интерпретатор вызовет ошибку, обеспечив функциональность метода за счёт передачи определённого типа. Ну вот что то типа того ... |
| Автор: solenko 9.7.2009, 10:20 | ||
пример, который, надеюсь, снимет вопросы:
Что мы имеем в итоге: 1. Один общий абстрактный класс и два специальных класса 2. Т.к. специальные классы наследуются от абстрактного, то имеют общий интерфейс 3. Абстрактный класс содержит реализацию, а, значит, код общих функций не дублируется как в случае использования интерфейса 4. Т.к. общий класс абстрактный, мы можем быть уверенны, что никто не будет пытатся его инстанцировать 5. Классу Foo абсолютно не важно куда будет сохранятся его логи, но важно знать интерфейс логгера. Указывая в проверке типа более общий класс мы как раз добиваемся поставленной задачи |
| Автор: underW 9.7.2009, 22:48 |
| ребят, спасибо, дошло |