|
|
|||||
Регистрация: Mar 2010
Сообщений: 137
|
Верно, намекали. Но наследование - это отдельный механизм, пусть и работает он аналогично включению! На нём завязана логика построения кода: способ указать, что наследник не просто надстройка, он следующее звено в развитии идеи отца.
Согласен. Я не совсем корректно указал в примере предпосылки. Я имел в виду, что мы надстраиваем трассировщиком иерархию-проект, а не конкретную реализацию кода. Последний раз редактировалось semenyakinVS; 17.01.2011 в 16:34. Причина: Правил текст от ошибок |
|
|||||
Регистрация: Mar 2010
Сообщений: 137
|
Включение = композиция
|
|
|||||
Никто не мешает наследовать отдельно включаемый класс, если я правильно понял проблему.. Т.е. например:
Иерархия для включения: public interface ITrace { function traceObject():void; } public class BaseTrace implements ITrace { public function BaseTrace() { } /* INTERFACE ITrace */ public function traceObject():void { trace("trace:"); } } public class CircleTrace extends BaseTrace { public function CircleTrace() { } override public function traceObject():void { super.traceObject(); trace("-circle"); } } public class BoxTrace extends BaseTrace { public function BoxTrace() { } override public function traceObject():void { super.traceObject(); trace("-box") } } public class Box2Trace extends BoxTrace { public function Box2Trace() { } override public function traceObject():void { super.traceObject(); trace("-box2"); } } public class Shape { public function Shape() { } public function draw():void { trace("draw void"); } } public class Circle extends Shape implements ITrace { public function Circle() { } override public function draw():void { super.draw(); } /* INTERFACE ITrace */ private var _implTrace:CircleTrace = new CircleTrace(); public function traceObject():void { _implTrace.traceObject(); } } public class Box extends Shape implements ITrace { public function Box() { _implTrace = createTrace(); } override public function draw():void { trace("draw box"); } private var _implTrace:ITrace; protected function createTrace():ITrace { return new BoxTrace(); } /* INTERFACE ITrace */ public function traceObject():void { _implTrace.traceObject(); } } public class Box2 extends Box { public function Box2() { } override protected function createTrace():ITrace { return new Box2Trace(); } } Добавлено через 3 минуты Опять же, при таком подходе можно использовать один и тот же Trace объект, для разных наследников Shape... К примеру наш Box2Trace вполне может подходить для какого нибудь Box3 наследуемого от Shape, а не Box2. И получится вполне себе повторное использование кода, что при множественном наследовании невозможно... Пример конечно надуманный, но и проблема, по моему тоже
__________________
Искренне Ваш, Джек. |
|
|||||
Регистрация: Mar 2010
Сообщений: 137
|
Так. А если у нас есть отрезок который:
1. Включён в иерархию (параметр Parent). 2. Способен выводиться на экран (Shape для вывода). 3. Наследует прямую (со всеми вытекающими). 4. ... Остаётся действовать только по описанному выше (на предыдущей странице) методу. Цитата:
Цитата:
Цитата:
А вообще, лучшего решения, увы, пока не вижу. Если найду - обязательно напишу. Последний раз редактировалось semenyakinVS; 17.01.2011 в 22:20. Причина: Нажал несколько раз ЕНТЕР |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Я считаю что GoFы поняли суть программирования и решили поделиться ей с нами. Только вот писав "предпочитайте" они никак не имели ввиду "всегда используйте". Если композиция неуместна, а наследование - в самый раз, то используйте наследование.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
.
|
Я внимательно ознакомился с топиком, но ровным счетом не увидел проблемы. Вероятно, я просто никогда не использовал множественного наследования. А скорее всего не обладаю подходящим типом мышления.
Хоть убейте, но я не могу понять что такое отрезок прямой, включенный в иерархию в виде parent. У меня нет таких проблем. |
Часовой пояс GMT +4, время: 06:15. |
|
« Предыдущая тема | Следующая тема » |
|
|