| imho.ws |
![]() |
|
|
|
# 1 |
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
aggregate() in PHP5
Вобщем изначально проблема в том что меня очень сильно угнетает отсутствие множественного наследования (multiple inheritance) в PHP.
А все-таки разделить логически код очень хочется, ну очень не нравится мне все в кучу кидать. Ну вот, поспрашивал, почитал, понравился мне способ с агрегированием, естественно решил попробовать, начал с изменения (а потом и оригинал) примера с вушеуказанной страницы МАНа и получил сразу: PHP код:
Вопрошая по сему факту гугла, наткнулся на обсуждение этой проблемы, ответов и решений там правда нету, но как я понял из дальнейших поисков это не поддерживается в PHP5. Может кто-то подскажет как можно прикрутить к нему эти возможности? Ну там ключ сборки, или где-то доступно расширение, настройки может быть... Ну И (или) дополнительный вопрос: Какими еще путями можно сделать аналог множественного наследования? Пожалуйста с короткими (пару строк) описаниями плюсов/минусов/ограничений и желательно где можно про это подробнее почитать, посмотреть примеры (или свои, если есть). Заранее всем благодарен.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. Последний раз редактировалось Hubbitus; 23.06.2005 в 17:58. |
|
|
|
|
# 2 |
|
::VIP::
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Имхо, прикручивать к языку то, что в нем концептуально не поддерживается - зло и прямой путь к самоубийству. Но это, ессно, мое пуристское имхо 8))
А если по теме - то, думаю, стоит обратить внимание на интерфейсы и подумать, а на самом ли деле тебе так уж нужно множественное наследование (или, может, просто стоить изменить дизайн и устранить необходимость в нем?). Multiple Inheritance and Interfaces OOL basics - Use interfaces for safe multiple inheritance and a great deal more
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti |
|
|
|
|
# 3 |
|
Junior Member
Регистрация: 12.09.2004
Сообщения: 106
![]() ![]() |
А нужно ли в задаче использовать множественное наследование ? Ведь априори без него можно почти всегда обойтись. Либо же интерфейсы путь к решению проблемы. Например в том же C# наследование поддерживается множественное только от интерфейсов. Безусловно это только моё мнение
|
|
|
|
|
# 4 | |||
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Цитата:
Цитата:
knight, на твое поддакивание позволь не отвечать, все в той же мере что ответил Выше ) А по указанным ссылкам про Java и С++ а не про PHP, я знаю что в них разрешено множественное наследование, вот этого же я и хочу.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. Последний раз редактировалось Hubbitus; 24.06.2005 в 11:26. |
|||
|
|
|
|
# 5 | |||||
|
::VIP::
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Цитата:
Multiple inheritance in Java Цитата:
Цитата:
Но лучше, конечно, читать только заголовки через слово - не дай бог кто просветить опять попытается 8)))))) PS: возвращаясь же к твоей aggregate(): PHP: aggregate - Manual Цитата:
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti |
|||||
|
|
|
|
# 6 | ||
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Прошу прощения, про Java'у я конечно же ошибся.
Но это нормально поддерживают C++ и JavaScript Цитата:
Множественное наследование интерфейсов мало чего дает для наследования классов (имплементации): Цитата:
P.S. Почему вместо ответа на вопрос чаще всего начинают с того что этого автору совсем не нужно делать, вместо помощи КАК это сделать? Ну или уж хотябы предложения как это сделать альтернативным способом...
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
||
|
|
|
|
# 7 | ||
|
::VIP::
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Цитата:
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti |
||
|
|
|
|
# 8 | |
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Saruman, а вот ты говоришь, ты можешь привести реальные доводы чем множественное наследование плохо так уж? Почему на него никто не жалуется в JavaScript и С++, но повсеместно кричат что это лишнее в PHP???
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
|
|
|
|
# 9 | |||
|
::VIP::
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Цитата:
Цитата:
Если хочешь конкретики - то дизайн в студию и будем уже тыкать пальцами и рассуждать о конкретных решениях. Существует вероятность, что я и признаю твою правоту в данном конкретном случае.
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti Последний раз редактировалось Saruman; 24.06.2005 в 21:25. |
|||
|
|
|
|
# 10 | |
|
Junior Member
Регистрация: 12.09.2004
Сообщения: 106
![]() ![]() |
Цитата:
|
|
|
|
|
|
# 11 |
|
::VIP::
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Кста, дописывая очередной тест, понял еще один недостаток MI и преимущество композиции. Если исходить из того, что тестами должен быть покрыт весь код (что логично, т.к. если суперкласс проходит набор тестов, это еще не значит, что аналогичные тесты будут 100% проходит и в субклассе), то при написании юнит теста для субкласса мы должны также полностью покрыть всю функциональность, наследуемую им от родителей. При этом, если дальнейшие изменения в суперклассах нарушат тесты данного субкласса, то не очевидно, изменения в каком из них привели к этому, т.к. все суперклассы имеют влияние на результаты тестов.
Если же мы использует композицию, то просто заменяем вложенный класс стабом/моком и забываем про изменения в нем. До тех пор, пока интерфейсные методы этого класса проходят тесты на заявленную функциональность, любые изменения в нем не приведут к нарушениям в использующих его классах. Это не считая того, что таким образом мы сокращаем объем необходимых тестов.
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti Последний раз редактировалось Saruman; 25.06.2005 в 02:02. |
|
|