powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как правильно наследовать?
5 сообщений из 30, страница 2 из 2
Как правильно наследовать?
    #37158340
Вот это:

maytonЕсли он вносит фундаментальные изменения в задачу "через каждый час" то
его не спасёт и множественное наследование интерфейсов.

+ вот это

maytonБыло: цветная коробка с размерами, обладающая весом (1 класс).

Надо: добавить интерфейс получения 6 рисунков с 6 сторон (2-й класс-наследник или поддержка интерфейса)

говорит только об одном: реальной задачи у нашего пубсега нет, а есть просто желание поговорить о чем-то там якобы умными словами. Может быть - написать курсовой, или реферат.


Не надо искать глубинный смысл там, где его нет. Его там просто нет. Изначально.
...
Рейтинг: 0 / 0
Как правильно наследовать?
    #37158353
Фотография Mumbo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GysВ С++ все легко решается с помощью множественого наследования с виртуальным базовым классом, в С# хз...онли интерфейс наверно.
Легко, но не очень удачно. Не лучшим образом с точки зрения повторного использования и с других точек зрения. Если функциональность, не являющаяся по своей сути монополией объекта, нарушающая для него принцип сильной связности (high cohesion) оказывается все-же "захардкодена" в этом самом объекте, то это не очень удачно. И повторное использование такой функциональности затруднено, и получены монолитные классы-всемогутеры, самостоятельно решающие разнородные задачи.
Многие (почти все) эксперты в области проектирования сходятся во мнении, что в дизайне следует стремиться не к монолитным классам, а отдавать предпочтение разработке маленьких, очень узко заточенных, минимальных классов. Направленных на одну задачу, повторно используемых и простых. "Ясность лучше хитроумия" (с). И эти маленькие "зернышки" реализации подключать уже через композицию к другим классам.
И вообще-то, широко известно, что множественное наследование реализаций (именно реализиций, а не интерфейсов ) - неудачный дизайн. Уже об этом во многих известных книжках гуру написано. Например, Саттер в "решении сложных задачах по C++" дает совершенно ясную рекомендацию: избегайте множественного наследования от более чем 1 абстрактного класса .
...
Рейтинг: 0 / 0
Как правильно наследовать?
    #37158357
Фотография Mumbo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mumbo,
очепятка вкралась. следует читать так:
избегайте множественного наследования от более чем 1 НЕабстрактного класса.
...
Рейтинг: 0 / 0
Как правильно наследовать?
    #37158476
Фотография Mumbo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
J.dсделайте один класс А с динамическим набором свойств,
в конструктор передавайте экземпляр класса Б возвращающий заготовленный набор свойств.
если требуется храните в экземпляре его "тип".

))

Такая "плагинная" конструкция очень хороша, но не всегда применима.
Если каждый из аспектов функциональности (плагинов) автономен, и не требуется поддержать особую взаимосвязь между некоторыми плагинами, и необычную взаимосвязь между плагином и его "хостом", то все шикарно. Делаем один класс Ящик. И его динамически оснащаем автономными плагинами. Если такой вариант по условиям задачи подходит - его и использовать.

Но ведь на практике плагины редко автономны. Как правило, должен быть реализован синергетический эффект, когда целое - нечто большее, чем сумма частей. (Потому что система обычно и призвана дать пользователю прелести совместного, гармноничного использования разных инструментов, как ансамбля, а не создается просто как пакет разрозненных утилит, то есть как ряд отдельно и независимо играющих инструментов. Всем нужны симфонии, а не какофонии.)

Предположим, что в примере требуется, чтобы совместно сыграли "габариты" и "цвет". Допустим, чтобы при изменении габаритов ящика его цвет менялся (при сжатии меньше некоторого объема он бы краснел, а при растяжении больше другого значения объема - синел).

Некоторые альтернативы реализации:
(1) Плагины знают о специфике других плагинов и хоста. Но тогда эти плагины или потеряют свойства повторного использования (только для ящиков и тд) или будут генерировать очень много повторно не применимых подклассов.
(2) Хост знает о специфике плагинов. То есть, ящик бы знал, что вот это не просто какой-то плагин, а именно габариты. Ловил от него события об изменении, с их своеобразными сигнатурами. И в обработчике события управлял бы плагином цвета.
(3) Чтобы были разнообразные связующие сущности, коннекторы, которые реализуют связки и зависимости, и хост ими тоже динамически бы оснащается. Коннекторы учитывают специфику плагинов аналогично тому, как это делает хост в альтернативе (2). Но тут коннектор, неправильно работающий, может испороть всю работу хоста.

Наиболее простым, надежным, и удовлетворяющим масштабу требований представляется подход (2). Причем реализованный не в ран-тайме, а в дизайн-тайме. Тут и наследование можно применить в разумной мере, и инкапсуляция всех сторон соблюдена, и все просто, а простота лучше сложности.
...
Рейтинг: 0 / 0
Как правильно наследовать?
    #37160655
Raziel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо.
Было несколько похожих задач. Недавно столкнулся ещё раз с подобной (только ессно не с коробками - всё гораздо сложнее, с контролами и действиями/реакциями на действия) и мне захотелось узнать, как лучше решить эту проблему.
...
Рейтинг: 0 / 0
5 сообщений из 30, страница 2 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как правильно наследовать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]