![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| underW |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 22.9.2008 Репутация: 1 Всего: 3 |
Сейчас вот стал более глубоко вникать в ООП в PHP, так вот:
Абстрактные классы и методы Абстрактные методы имеют только объявление и не имеют реализации. Класс, который содержит такие методы, должен быть обязательно объявлен как абстрактный:
Это все понятно, как объявлять и что это такое, НО ну никак не могу понять, зачеееем они надо???? Вот нашел такую цитату:
Зачем описывать объект, который будет реализован, но еще не реализован? В чем суть абстрактного класса??? Можно объяснить на пальцах? Спасибо. |
||||
|
|||||
| MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
-------------------- Amazing |
|||
|
||||
| icewind |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 11.4.2009 Где: Ростов-на-Дону Репутация: 20 Всего: 20 |
Экземпляры абстрактных классов не могут быть созданы. По этому они носят чисто описательный характер. Однако абстрактный класс не обязательно состоит только из абстрактных методов. Он может содержать методы с реализацией. Но если у класса есть хоть один абстрактный метод, то он сам должен быть объявлен как абстрактный
-------------------- ![]() |
|||
|
||||
| underW |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 22.9.2008 Репутация: 1 Всего: 3 |
icewind,ну и что? каким образом это объясняет нужность абстрактных классов?
|
|||
|
||||
| QryStaL |
|
|||
![]() Intellectual feast ![]() ![]() Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: 1 Всего: 32 |
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. -------------------- I don't need a reason being who I am... |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Абстрактные классы - это рамки, в которых развивается модель классов. Можно писать письмо на листочке в клеточку, можно на a4, а можно на листе обоев. Смысл выбора типа бумаги выясняется уже потом, когда приходится письмо отправлять по обычной почте, складывать в папочку или вешать на стену... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Sentox |
|
|||
|
как то так ![]() ![]() Профиль Группа: Участник Сообщений: 392 Регистрация: 27.1.2009 Где: Зимбабве Репутация: 7 Всего: 7 |
Может такое обьяснение подойдёт.
Есть класс "животные", но ведь "чистого обьекта" в природе не существует. По сути дела передавая информацию "животные" мы понимаем что это "обьекты(классы)" - собаки, кошки, ..... и т.д. и каждый имеет общую функциональность от класса "животные" ходить по земле, но в то же время имеют различные функции. Основная роль абстрактного класса дать группе обьектов (классов, которые наследуют абстрактный) один тип для последующего использования например:
Теперь в метод run() будут передаваться обьекты ТОЛЬКО типа Animal. Иначе интерпретатор вызовет ошибку, обеспечив функциональность метода за счёт передачи определённого типа. Ну вот что то типа того ... Это сообщение отредактировал(а) Sentox - 9.7.2009, 09:51 |
|||
|
||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
пример, который, надеюсь, снимет вопросы:
Что мы имеем в итоге: 1. Один общий абстрактный класс и два специальных класса 2. Т.к. специальные классы наследуются от абстрактного, то имеют общий интерфейс 3. Абстрактный класс содержит реализацию, а, значит, код общих функций не дублируется как в случае использования интерфейса 4. Т.к. общий класс абстрактный, мы можем быть уверенны, что никто не будет пытатся его инстанцировать 5. Классу Foo абсолютно не важно куда будет сохранятся его логи, но важно знать интерфейс логгера. Указывая в проверке типа более общий класс мы как раз добиваемся поставленной задачи -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| underW |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 22.9.2008 Репутация: 1 Всего: 3 |
ребят, спасибо, дошло
|
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |