Просмотр полной версии : Повторение функциональности
sospamom
19.09.2013, 17:07
От класса Motion наследуются классы Linear и Circular. В Linear и Circular никакие функции Motiona не переопределяются.
От класса Linear наследуются 4 класса, которые переопределяют только те функции, которые были в Motion.
Теперь от класса Circular я хочу наследовать 4 класса, которые один в один как вышеупомянутые 4 класса, но только наследуются от Circular.
Мне не нравится, что я ту же функциональность описываю по второму разу. Как красиво решить эту проблему?
AlexCooper
19.09.2013, 17:11
Создать "супер"-класс где будут описаны Ваши методы и наследовать Linear и Circular от этого класса. То-есть по сути в Motion создать Ваши protection методы.
Akopalipsis
19.09.2013, 17:34
Хотел в будущем создать тему, но раз уж подняли тему о наследовании.
Когда я смотрел как устроен BulkLoader я впервые увидел вот какой подход -
есть супер класс в котором прописаны все слушатели и обработчики. И остальные классы ( загрузка битмапов, звука и т.д. ) наследуются от этого супер класса, но они не чего не решают. Они по событиям уведомляют супер класс, который уже решает, что с чем делать. То есть он как контроллер. И мне интересно - это нормальный подход, вот так вот делать?
sospamom
19.09.2013, 17:39
Сорри. Забыл упомянуть.
4 класса по-разному переопределяют одни и те же методы класса Motion.
AlexCooper
19.09.2013, 17:40
Конечно нормальный, только он не решает, а просто выполняет свои прямые "обязанности". Зачем плодить сущность для каждого из загрузчика если механизм загрузки один и тотже, разница только в способе интерпретации полученных данных.
Добавлено через 55 секунд
Сорри. Забыл упомянуть.
4 класса по-разному переопределяют одни и те же методы класса Motion.
можете показать код, как-то сегодня гадание на кофейной гуще не идет.
Akopalipsis
19.09.2013, 17:45
а просто выполняет свои прямые "обязанности".
То есть он являясь супер классом, является ещё и менеджером?
Ведь когда одна загрузка завершилась, он говорит, что нужно грузить следующую ссылку..
Хотел в будущем создать тему, но раз уж подняли тему о наследовании.
Когда я смотрел как устроен BulkLoader я впервые увидел вот какой подход -
есть супер класс в котором прописаны все слушатели и обработчики. И остальные классы ( загрузка битмапов, звука и т.д. ) наследуются от этого супер класса, но они не чего не решают. Они по событиям уведомляют супер класс, который уже решает, что с чем делать. То есть он как контроллер. И мне интересно - это нормальный подход, вот так вот делать?
Я тоже так делаю :)
Добавлено через 2 минуты
То есть он являясь супер классом, является ещё и менеджером?
Ведь когда одна загрузка завершилась, он говорит, что нужно грузить следующую ссылку..
Нет. просто он делает одно общее дело за детей.
sospamom
19.09.2013, 17:52
class Motion {
function run() {
trace("motion run");
}
}
class Linear extends Motion {
function line() {
}
}
class Circular extends Motion {
function circle() {
}
}
class FirstLinear extends Linear {
override function run() {
trace("first run");
}
}
class SecondLinear extends Linear {
override function run() {
trace("second run");
}
}
class ThirdLinear extends Linear {
override function run() {
trace("third run");
}
}
class FourthLinear extends Linear {
override function run() {
trace("fourth run");
}
}
class FirstCircular extends Circular {
override function run() {
trace("first run");
}
}
class SecondCircular extends Circular {
override function run() {
trace("second run");
}
}
class ThirdCircular extends Circular {
override function run() {
trace("third run");
}
}
class FourthCircular extends Circular {
override function run() {
trace("fourth run");
}
}
AlexCooper
19.09.2013, 19:14
Вас не устраивают оверрайды?
Ну можно написать примерно так ( хотя я не исключено что могу глубоко ошибаться так как никогда так не делал)
class Linear extends Motion {
function line() {
}
override function run() {
if (this is FirstLinear) trace("first run");
if (this is SecondLinear) trace("2 run");
if (this is ThirdLinear ) trace("3 run");
if (this is FourthLinear ) trace("4 run");
}
}
но врятли что-то это сократит да и вообще херит ООП, лучше мне кажется вывести переменную и от неё плясать, если FirstLinear, SecondLinear, ThirdLinear , FourthLinear работают одинаково с каким-то исключением вроди толщины линии, тогда может и вовсе не нужно это клонирование классов. В чём разница между этими классами?
sospamom
19.09.2013, 21:06
спасибо
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.