Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отсутствие множественного наследования


Страницы:   1 2

Juice ©   (2005-08-03 22:41:00) 

Почему, или в чем смысл, или какое обьяснение этому факту?


Суслик   (2005-08-15 11:56:00) [1]

Иногда мн. наследования действительно не хватает, причем есно множественного наследования интерфейсов классов.

Множественное наследование реализации легко заменяется агрегацией, но как сказал ИШ, тоскливо для методов агрегируемых классов прописывать  делегирующие методы.

Интерфейсы (ключевое слово interface) я тоже недолюбливаю (хотя и пользуюсь) - семантика подсчета ссылок не всегда для меня ясна. К тому же бывают проблемы, когда мешаешь объекты с интерфейсами.

Поэтому пользуюсь способом агрегации + создание делегирующих методов к методам агрегируемого класса или открытие доступа к агрегируемому классу.

ЗЫ. Эх, сделали бы в дельфи как в java - объект и интерфейс "живут" по одинаковым законам. Другая бы жизнь началась :)


Игорь Шевченко   (2005-08-15 11:41:00) [2]

tesseract ©   (15.08.05 10:48) [30]


> Интересный факт, но как раз COM интерфейсы поддерживают
> множественное наследование.


Это не множественное наследование.


tesseract   (2005-08-15 10:48:00) [3]

Интересный факт, но как раз COM интерфейсы поддерживают множественное наследование.

пример из реального кода:

 TCasLP = class(TAutoObject, ICasLP)
т.е. реально работает. где-то читал в какой то ли книге то ли  книге про данный механизм. И работает он только для интерфейсов.


Игорь Шевченко   (2005-08-15 10:29:00) [4]


> Почему, или в чем смысл, или какое обьяснение этому факту?


Язык так устроен. Иногда его (множественного наследования) не хватает, приходится искать обходные пути. Реализовывать каждый раз методы какого-либо интерфейса - скучно.


Eraser   (2005-08-14 14:26:00) [5]

wnew ©   (14.08.05 00:53) [26]

Но часто ТАКОЕ наследование путают с инкапсуляцией.


AlexWlad   (2005-08-14 11:32:00) [6]

wnew ©   (14.08.05 00:53) [26]

Не для "..."точной" симуляции наших представлений в жизни...", для облегчения проектирования решений сложных задач. И никто не запрещает использовать, если язык позволяет. Просто слишком много разработчиков парились с М.Н. и их опыт говорит о "нежелательности" его применения.


wnew   (2005-08-14 00:53:00) [7]


> Anatoly Podgoretsky ©   (13.08.05 15:14) [22]
> Это умные люди, которые редко встречаются.

Вобще-то ООП изобретено для "точной" симуляции наших представлений в жизни, а множественное наследие у нас, то есть - в нашей жизни сплошь и рядом:)


Eraser   (2005-08-13 21:51:00) [8]

Juice ©   (13.08.05 17:56) [24]
Это Microsoft'овская разработка или нет?


Нет, корба придумана не MS.


Juice   (2005-08-13 17:56:00) [9]


> Почитай-ка лучше теЁрию про IUnknown, Iinterface, COM и
> ActiveX

Да вот уже начинаю потихоньку, однако кажется что рановато еще.  Не зря кстати говорят что это самый сложный аспект программирования в Windows.
> Cross-Platform COM  -  типа COM, только как CORBA. Используется
> Mozilla / OpenOffice  и ТП.

Это Microsoft'овская разработка или нет? И отличается ли он от обычного COM в плане подходов программирования ? В двух словах если можно...


tesseract   (2005-08-13 16:57:00) [10]

Juice>>>До версии Delphi 5 включительно базовым классом интерфейса был IUnknown, но в Delphi 6 ему дано новое имя, IInterface, более точно указывающее на тот факт, что эта функциональная возможность языка совершенно независима от COM-технологии компании Microsof(которая использует имя IUnknow как собственный базовый интерфейс). Интерфейсы Delphi также доступны и в Kylix. (Марко Кэнту - Delphi 7 для профессионалов)
Почитай-ка лучше теЁрию про IUnknown, Iinterface, COM и ActiveX.
>>> Да Delphi COM использует по полной. Базовый класс Tobject
> содержит всё необходимое для работы с COM (или Cross-Platform
> Com).

Cross-Platform COM  -  типа COM, только как CORBA. Используется Mozilla / OpenOffice  и ТП.


Anatoly Podgoretsky   (2005-08-13 15:14:00) [11]

Это умные люди, которые редко встречаются.


AlexWlad   (2005-08-13 15:11:00) [12]

Многие Си-шники говорят : если в твоей иерархии появилось множ. насл. - хреновый ты проектировщик.


Anatoly Podgoretsky   (2005-08-13 14:36:00) [13]

В современных языках отказались от этого.


Juice   (2005-08-13 13:55:00) [14]


> Да Delphi COM использует по полной. Базовый класс Tobject
> содержит всё необходимое для работы с COM (или Cross-Platform
> Com).

А что есть такой ?


Juice   (2005-08-13 13:54:00) [15]

До версии Delphi 5 включительно базовым классом интерфейса был IUnknown, но в Delphi 6 ему дано новое имя, IInterface, более точно указывающее на тот факт, что эта функциональная возможность языка совершенно независима от COM-технологии компании Microsof(которая использует имя IUnknow как собственный базовый интерфейс). Интерфейсы Delphi также доступны и в Kylix. (Марко Кэнту - Delphi 7 для профессионалов)


Джо   (2005-08-04 13:55:00) [16]

Да, похоже, я был не прав насчет COM-интерфейсов. Из oleaut32.dll, действительно импортируются функции для работы с WideString... Как-то никогда не задумывался над реализацией интерфейсов в Делфи, а примелькавшееся в Справке, к месту и не к месту употребляемое COM-interfaces, создало ошибочное предстваление. Спасибо, что поправили.


Гаврила   (2005-08-04 12:19:00) [17]

Ну да, совместимо, но это детали реализации ,а не концептуальный принцип.
COM предполагает наличие некоего COM - сервера (неважно, какого вида)
который для данного случая необязателен.
Поэтому, имхо, при  реализации такой схемы ,как предлагает Джо  в [3] корректнее его не упоминать, а говорить просто об интерфейсах


DiamondShark   (2005-08-04 11:51:00) [18]


> Почему, или в чем смысл, или какое обьяснение этому факту?

Вы не стали алкоголиком. Какое объяснение этому факту?


tesseract   (2005-08-04 10:50:00) [19]

В Delphi используется RTTI которая может функционировать только с динамическими классами. А если заглянуть поглубже в механизм  RTTI (RTFM),то множественное наследование оказывается совершенно либо невозможным, либо крайне проблематичным. Данный механизм в Delphi замещается другим - делегированием.

>>AFAIK, без. Но интерфейсы Delphi совместимы с интерфейсами COM.
Да Delphi COM использует по полной. Базовый класс Tobject содержит всё необходимое для работы с COM (или Cross-Platform Com). ЛюбойVCL-компонент можно превратить в ActiveX за пару кликов мышкой.


evvcom   (2005-08-04 08:38:00) [20]


> Если оба предка одноглазые - то от обоих

Один глаз от одного, второй от другого. Получится полноценный ребенок! :-))


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо