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