| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Extensions > Преимущества и недостатки, т.е. в каком случае исп |
| Автор: -=Ustas=- 2.6.2006, 23:31 | ||||
| Мое почтение! Неоднократно встречал подобные конструкции:
Сам такого не применял, стало интересно, что это и в чем его преимущества перед обычным наследованием. Копал литературу, и пришел к теме делигирования. Т.е., pls, поясните разницу между данными подходами, их преимущества / недостатки, рациональность / нерациональность их использования в каких-нить частных случаях:
Желательно, было бы кульно, если разъяснили бы все на примерах, в каких случаях стоит применять, а в каких нет.... Сеньки заранее! |
| Автор: Mal Hack 2.6.2006, 23:45 |
| Лично я преимуществ не вижу. Это все-таки разгные понятия. Наследование подрозумевает под собой переопределение, как бы абстрактных параметров, а тут - просто замещение, что не есть хорошо. ОДин большой объект с кучей всего. В случае модификаций, придется менять все. Нет абстракции |
| Автор: <Spawn> 5.6.2006, 08:10 | ||
| Это не делегирование, а лишь обычная ссылка на экземпляр класса, хранящаяся в переменной-члене класса a. Делегирование выглядело бы так(PHP5):
Т.е. при создании экземпляра класса b ты внутри инстанцируешь скрытый экземпляр класса a, благодаря чему доступ к его методам скрыт. Так вот для того чтобы получить возможность доступа к этим методам (или к части методов) и используют подход, именуемый делегирование, т.е. это попросту обертка для вызова метода внутреннего объекта. Зачем это нужно? К примеру затем, чтобы: 1) Скрыть какие то методы существующего класса 2) Упростить инструкцию вызова нужного метода (к примеру, не совсем быстро набирать что то вроде $instance->objectA->objectB->objectC->objectD->objectE->someMethod()->helloWorld() 3) Адаптация интерфейсов (можешь посмотреть ООД шаблон, именуемый адаптером - adapter (или оберткой - wrapper)). Т.е. у тебя имеются разнородные интерфейсы, допустим mysql и oracle API и нужно привести их к одному интерфейсу для создания уровня абстракции от СУБД. Для этого пишется нужный набор классов, которые делегируют вызовы этих API в нужном интерфейсе. |
| Автор: -=Ustas=- 5.6.2006, 08:18 |
| Пасибки за пояснительный пример! |
| Автор: szz 20.7.2006, 06:16 | ||||
Это вроде композицией называется (по крайней мере в С++), впрочем есть и другие названия.
Не согласен. Все зависит от случая - бывает когда композиция необходима (например, если у вас есть класс "точка", а потом вы создаете класс "Треугольник". В треугольнике будут три точки, все логично. И еще много примеров пользы такого подхода) |