Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
ВнизМножественное наследование? Найти похожие ветки
← →
misha123 (2004-09-28 13:16) [0]Доброго дня, еще раз :)
Теоретический вопрос - если я например хочу сделать компонент, который унаследуется от, например Tcombobox и TCaption (т.е. что-то похожее на labelededit) - то я должен наследовать свой класс от этих двух классов? Так понятное дело нельзя - шаманство :) Но как тогда реализовывать подобные штучки?
Спасибо.
← →
serge © (2004-09-28 13:19) [1]Perehoditi na C++ :)
← →
DiamondShark © (2004-09-28 13:22) [2]
> Но как тогда реализовывать подобные штучки?
Агрегацией.
А МН тут вообще не при делах.
← →
serge © (2004-09-28 13:27) [3]Look at the sources of "что-то похожее на labelededit"
← →
Apl (2004-09-28 13:31) [4]разработчики VCl решили эту проблему введя в классы поля других типов, например
TMyClass=class(TControl)
FLabel:TLabel;
FPanel:TPanel;
...
← →
Amoeba © (2004-09-28 13:42) [5]
> DiamondShark © (28.09.04 13:22) [2]
Полностью согласен, что задача не имеет никакого отношения к множественному наследованию.
← →
Lin7 (2004-09-28 13:43) [6]Если уж хочется множественное наследование - можешь в Delphi реализовать его с помощью интерфейсов, но в твоём случае лучше агрегация.
← →
Amoeba © (2004-09-28 13:51) [7]Можно и с помощью интерфейсов, только это будет удаление гланд через одно известное место...
← →
DiamondShark © (2004-09-28 14:15) [8]Вот ведь каша какая в головах.
МН (и, как более общий случай, реализация интерфейсов) используется, когда объект реализует несколько (логически различных) програмных сервисов.
К визуальному поведению графического контрола МН не имеет абсолютно никакого отношения.
Сложные контролы как в дельфи (grid+inplace edit в стандарном наборе, button edit в RX), так и в Windows (combo, list view) прекрасно обходятся без всякого множественного наследования.
← →
TUser © (2004-09-28 14:30) [9]Я, кстати, почему-то ни разу не видел классов, унаследованных от TCaption. Пусть не множественно, пусть хоть как-нибудь
:)
← →
Amoeba © (2004-09-28 14:48) [10]Сложно наследовать от TCaption когда это всего лишь тип, а не класс.
type TCaption = string;
← →
TUser © (2004-09-28 14:56) [11]
> Amoeba © (28.09.04 14:48) [10]
WideString
← →
Amoeba © (2004-09-28 15:14) [12]
> TUser © (28.09.04 14:56) [11]
>
> > Amoeba © (28.09.04 14:48) [10]
>
> WideString
А это смотря в какой версии Delphi. В D5 - string.
← →
TUser © (2004-09-28 16:05) [13]Буду знать
← →
misha123 (2004-09-29 18:05) [14]ВОПРОС был ТЕОРЕТИЧЕСКИЙ! :)
Множественное наследование (я кстати не считаю это правильным) - не панацея, я только предположил... :)
И кстати визуальный компонент я привел только (!) в качестве примера.
Что значит агрегация? (хотя бы кратко)
Спасибо.
← →
Cobalt © (2004-09-29 23:14) [15]2 misha123 (29.09.04 18:05) [14]
Агрегация - это когда для исполнения некоторого функционала заводится поле - класс, исполняющий этот функционал.
← →
misha123 (2004-09-30 11:12) [16]спасибо, понял
← →
Суслик © (2004-09-30 11:14) [17]
> [15] Cobalt © (29.09.04 23:14)
Чем агрегация от композиции отличается.
← →
Cobalt © (2004-09-30 11:36) [18]2 Суслик © (30.09.04 11:14) [17]
Пока что понятия не имею. Когда столкнусь - скажу ;)
← →
DiamondShark © (2004-09-30 12:12) [19]
> Суслик © (30.09.04 11:14) [17]
> Чем агрегация от композиции отличается.
Тем, что при агрегации програмные сервисы, предоставляемые внутренними объектами делаются доступными извне, как если бы это были сервисы самого агрегата.
Так что в примере со сложным контролом его правильнее назвать композитом, а не агрегатом.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.037 c