![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2011
Сообщений: 20
|
Возникла проблема: существует два класса А и В. Нужно, чтобы класс В расширял А. И мне надо в классе А создать экземпляр класса В, который будет, в зависимости от ситуации, вызывать функции в классе А. Но я не могу этого сделать, так как в классе А класс В не создается из-за получающейся бесконечности. Думал создать класс С, в класс А запихать функции, которые нужны классу В, и затем из класса С вызывать методы из класса А, который в свою очередь связан с В. Но это по определенным причинам не совсем подходит.
|
|
|||||
|
Регистрация: Dec 2009
Сообщений: 125
|
У вас каша в голове, почитайте К. Мука и про ООП.
|
|
|||||
|
Регистрация: Jan 2009
Сообщений: 1,651
|
Цитата:
__________________
мой пустой блог |
|
|||||
|
Регистрация: Apr 2011
Сообщений: 20
|
Объяснил я видимо коряво) Есть класс Connection, который разными методами по разному отправляет запросы на сервер. Существует класс Skill, метод которого вызывается в Connection, делает определенные действия и вызывает метод в Connection(метод этот отправляет запрос на сервер, принимает данные и обновляет интерфейс).
|
|
|||||
|
Modus ponens
|
Ну не дурдом, вполне штатная ситуация: DisplayObject - родительский класс по отношению к DisplayObjectContainer, но у него есть свойство типа DisplayObjectContainer (parent).
AS3 такое тоже позволяет, т.е. заявлять о зависимостки к наследникам. Хорошо это или нет? - я не знаю, это может усложнить ситуацию, но в целом, я не вижу ничего плохого в этом. Но я так понял, что проблема скорее в том что: class A { public function A() { new B(); } } class B extends A { public function B() { super(); } } Соответственно, варианты решения: - вообще убрать создание чего бы то ни было из конструктора (это по ряду причин редко когда чем-то хорошим заканчивается), перенесите содержание конструктора в другую функцию. Если хочется полсе этого можно еще добавить статический метод, который обернет конструктор и функцию-иницализатор, например, так: calss A { public function A() {} public function initialize():void { new B(); } public static function makeA():A { var a:A = new A(); a.initialize(); return a; } } Но для каких-то других случаев можно придумать другие решения. Например, лениво создавать B, т.е. только тогда, когда он понадобиться, и таким образом можно реализовать условно бесконечную цепочку. Например:
__________________
Hell is the possibility of sanity |
|
|||||
|
wvxvw, оно понятно, что человеку хочется наследования, но как он с этим будет дальше писать своё приложение?
На худой конец вместо такого ифа можно полиморфный фабричный метод newInstance() сделать и вызывать в конструкторе, но так то зачем? Цитата:
Передать Connection в Skill можно при вызове его метода или при передаче Skill в Connection (я не знаю как там у вас всё организовано) Какое наследование? Зачем наследование? |
|
|||||
|
Регистрация: Apr 2011
Сообщений: 20
|
wvxvw, спасибо! Окончательно разобрался в своей галиматье, буду переделывать архитектуру немного.
|
|
|||||
|
Modus ponens
|
expl, Мало ли зачем это (кому-то) нужно. Я лучше не буду за ОПа додумывать. Можно так сделать? - да. Есть какие-то ситуации, когда это может быть легитимным подходом? - да, пожалуй. Это не единственный вариант, который я предложил.
Я рассчитваю на то, что люди сознательные, посмотрят на разные варианты и выберут, что подходит.
__________________
Hell is the possibility of sanity |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:14. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|