Абстрактные классы, наследование, не вижу плюсов - объясните
От:
Аноним
Дата:
06.02.03 18:40
Оценка:
Например, предпологается использовать в программе несколько объектов классов полученых наследованием от одного базового. Поноачалу, базовай класс как ему и пологается реализует основные, базовые функции для всех. В классах наследниках добавляються дополнительные возможности. Вроде как будто все верно, и даже соответствует теории о постепенном уточнении характеристик и развитии в иерархии объектов (понятно хоть выразился ?). В программе я должен, нет другой возможности, обращатся к методам объектов через указатель на объект базового типа. И что у меня получается? — по мере добавления методов в классы наследники, мне приходиться возвращаться к базовому классу и добавлять в него абстрактные методы. Бред какой-то.
Это что, недостатки проектирования? Или что-то я непонимаю. Я пока не использую возможности языка для определения типов во время исполнения, не дошел еще — может быть в этом проблема.
Re: Абстрактные классы, наследование, не вижу плюсов - объяс
Здравствуйте, <Аноним>, Вы писали:
А>Например, предпологается использовать в программе несколько объектов классов полученых наследованием от одного базового. Поноачалу, базовай класс как ему и пологается реализует основные, базовые функции для всех. В классах наследниках добавляються дополнительные возможности. Вроде как будто все верно, и даже соответствует теории о постепенном уточнении характеристик и развитии в иерархии объектов (понятно хоть выразился ?). В программе я должен, нет другой возможности, обращатся к методам объектов через указатель на объект базового типа. И что у меня получается? — по мере добавления методов в классы наследники, мне приходиться возвращаться к базовому классу и добавлять в него абстрактные методы. Бред какой-то. А>Это что, недостатки проектирования? Или что-то я непонимаю. Я пока не использую возможности языка для определения типов во время исполнения, не дошел еще — может быть в этом проблема.
А ты ничего не слышал про тыкую вещь как проектирование, когда сначала разрабатываются концепции и обстракции, а только потом переходят к их реализации. В больших проектах да 1\3 времени уходит на проектирование. Вот почему сделать красиво и ясно важнее, чем удобство добавления чего-то нового.
... << RSDN@Home 1.0 beta 6a >>
Чтобы писать программы голова не нужна, нужна клавиатура.
Re[2]: Абстрактные классы, наследование, не вижу плюсов - об
D>А ты ничего не слышал про тыкую вещь как проектирование, когда сначала разрабатываются концепции и обстракции, а только потом переходят к их реализации. В больших проектах да 1\3 времени уходит на проектирование. Вот почему сделать красиво и ясно важнее, чем удобство добавления чего-то нового.
А ты не слышал что отвечать вопросом на вопрос — дурной тон? Как тебе вообще?
Тоесть ты хочешь сказать, что надо напихать в базовый класс все методы наследников? У меня вполне реальное условие, обращаться к объекту через указатель на базовый класс.
А как быть разработчику библиотеки, позвонить мне и спросить что я собираюсь делать с его объектами?
Re: Абстрактные классы, наследование, не вижу плюсов - объяс
Здравствуйте, Аноним, Вы писали:
А>Например, предпологается использовать в программе несколько объектов классов полученых наследованием от одного базового. Поноачалу, базовай класс как ему и пологается реализует основные, базовые функции для всех. В классах наследниках добавляються дополнительные возможности. Вроде как будто все верно, и даже соответствует теории о постепенном уточнении характеристик и развитии в иерархии объектов (понятно хоть выразился ?). В программе я должен, нет другой возможности, обращатся к методам объектов через указатель на объект базового типа.
Никому ты ничего не должен Если логика класса-клиента зависит от логики производного класса, то обращайся непосредственно к производному.
А>И что у меня получается? — по мере добавления методов в классы наследники, мне приходиться возвращаться к базовому классу и добавлять в него абстрактные методы. Бред какой-то. А>Это что, недостатки проектирования?
Истино так. Точнее — недостатки декомпозиции. Просто проектирование, при подходе использующем постепенное уточнение, продолжается постоянно и к нему всё время нужно внимательно относиться. За всю Одессу не скажу, но по моему опыту, накопленные таким способом абстрактные методы в базовом классе — верный кандидат на выделение в отдельный класс или группу классов. Иначе обычно получалась каша.
А> Или что-то я непонимаю. Я пока не использую возможности языка для определения типов во время исполнения, не дошел еще — может быть в этом проблема.
Без определения типов в runtime, как правило, можно обойтись. Условно говоря: в том месте, где можно поставить RTTI, с точки зрения C++ лучше провести перепроектирование (допроектирование) части программы. ИМХО, это совершенно уместно, поскольку и программа получается жёстче => надёжней, и производительность выше (отсутствуют ветки распознавания типа аргумента).
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re: Абстрактные классы, наледование, не вижу плюов - объясни
Здравствуйте, Вы писали:
> Например, предпологается использовать в программе несколько объектов > классов полученых наследованием от одного базового. Поноачалу, базовай > класс как ему и пологается реализует основные, базовые функции для > всех.
Думаю, что дискуссия рискует потерять связь с реальностью, если пример не будет слегка уточнен.
> В классах наследниках добавляються дополнительные возможности. > Вроде как будто все верно, и даже соответствует теории о постепенном > уточнении характеристик
Спорный вопрос. Все зависит от того, что ты понимаешь под добавлением новых возможностей. Обычно при уточнении возможности как раз
уменьшаются. Подозреваю, что более полезные ответы последуют, если ты приведешь конкретный пример.
Posted via RSDN NNTP Server 1.4.5 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[3]: Абстрактные классы, наследование, не вижу плюсов - об
Здравствуйте, Strudel, Вы писали:
S>А ты не слышал что отвечать вопросом на вопрос — дурной тон? Как тебе вообще?
ИМХО это ответ а не вопрос. S>Тоесть ты хочешь сказать, что надо напихать в базовый класс все методы наследников? У меня вполне реальное условие, обращаться к объекту через указатель на базовый класс.
А ты слышал про интерфейсы. Если не слышал обьясняю. Интерфейс это абсолютно абстрактный класс те ни каких реализаций, ни каких данных только сигнатуры связаных по смыслу методов. Дык вот класс будет наследован от нескольких интерфейсов. Таким образом достигается большея уневирсальность. S>А как быть разработчику библиотеки, позвонить мне и спросить что я собираюсь делать с его объектами?
Зачем? Он просо определит интерфейсы, а ты их должен реализовать.
... << RSDN@Home 1.0 beta 5 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Абстрактные классы, наследование, не вижу плюсов - объяс