Множественное наследование

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

sts
энтузиаст
Сообщения: 549
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

Odyssey писал(а):Хм.. А если способ связи форм и прав доступа позволит такое сделать, то как насчёт AccessManager.GetAccessRight(Form1, ...), или даже просто GetAccessRight(Form1, ...)? Т.е. вынести методы работы с правами доступа из классов? При этом теоретически классы могут всё также реализовать интерфейсы, и GetAccessRight(Form1, ...) -- служить синтаксическим сахаром для (Form1 as IAccessRight).getAccessRight(...).

А как же фраза "объект знает как себя печатать"? Зачем тогда ООП?
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

TList<E>

вообще-то шаблоны в паскале уже сделаны, не вижу связи между множественным наследованием и шаблонами
sts
энтузиаст
Сообщения: 549
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

дык яж про развитие в том посте писал, а эти генерики вышли из стадии экспериментальных? вроде раньше нельзя было ограничить по предку и т.п.
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

sts писал(а):А как же фраза "объект знает как себя печатать"? Зачем тогда ООП?

Зависит от архитектуры. Например, если "печатать" можно множеством способов, то объекту слишком много придётся знать. В таком случае иногда имеет смысл разгрузить объекты и сделать несколько внешних TObjectPrinter'ов, для каждого способа печати свой. При этом TObjectPrinter -- вполне себе ООП, просто другой способ группировки функциональности.

В любом случае, моё дело предложить. Других способов сократить запись в текущей версии компилятора я не знаю.
perlpunk
новенький
Сообщения: 90
Зарегистрирован: 26.09.2008 21:19:48

Сообщение perlpunk »

sts писал(а):А как же фраза "объект знает как себя печатать"? Зачем тогда ООП?

это крайности - пихать всю функциональность в один объект. есть модули например - в нем и группируете функционал связанный. а уж сколько объектов и функций будет это не так важно.
sts
энтузиаст
Сообщения: 549
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

хехе, вообщето это почти цитата из старой книги по ООП, спецом для процедурников придуманная, а эквивалентна она - "Зачем тогда ООП?" (которую я на вский случай добавил), а вы на нее набросились как на руководство к действию. Повторяю - суть того поста в том - Зачем тогда ООП если все процедурами делать.
Аватара пользователя
FedeX
постоялец
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение FedeX »

Кстати, насчет множественого наследования. На паскале я уже давненько не писал, но как-то давно понадобилось мне унаследоваваться от пары-тройки интерфейсов и тут я вродь столкнулся с тем, что мои обьекты сразу стали себя вести как интерфейсы (заработал гребаный подсчет ссылок, := nil стал работать как Release - пришлось наследоваться от TInterfacedObject и прочая нах. не нужная мне дрянь). Можно в Object Pascal от этого как-то избавиться чтоб интерфейсы были не более чем протоколы описывающие интерфейс обьектов как в Яве? Мне COM OLE и всякие автоматические счетчики ссылок уже сто лет как нафиг не нужны, а получаеться я не могу в Паскале использовать интерфейсы без всех этих дополнительных "подарков". Ссори если что путаю - на Паскале давно не программировал, и когда программировал, то интерфейсы использовал только в контексте COM или OLE (как компоненты DirectX etc..).
Последний раз редактировалось FedeX 25.11.2010 12:41:17, всего редактировалось 1 раз.
sts
энтузиаст
Сообщения: 549
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

Насколько я понял вы унаследовались от класса который реализовывал нужный интерфейс и являлся (класс) наследником от TInterfacedObject в котором реализован подсчет ссылок и т.п.
Если же просто, написать свой интерфейс и реализовать в своем классе то никаких ссылок и release не будет.
Говорю в относительно к Delphi 6, как в новых не знаю.
Аватара пользователя
FedeX
постоялец
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение FedeX »

(Правил) Ну да, а разве можно не наследоваться от TInterfacedObject, при работе с интерфейсами, разве компилятор не будет ругаться на то что надо реализовать свои QueryInterface, Release etc..?
sts
энтузиаст
Сообщения: 549
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

можно, тогда они "чистые"

Добавлено спустя 2 минуты 16 секунд:
да, гуид все равно нужно указывать иначе не работает Form1 as IMyObject, хотя могли-бы и не требовать для "чистых".
(D6)
Аватара пользователя
FedeX
постоялец
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение FedeX »

Другими словами можно ли в Object Pascal использовать интерфейсы, но при этом не наследоваться от никому не нужного и вводящего смятение в код lUnknown :roll:
Может есть какой-то хак чтобы обойти наследование от него?

>можно, тогда они "чистые"

и как это можно сделать если компилятор нахально неявно делает предком любого интерфейса lUnknown с требованием реализовать все его методы?
sts
энтузиаст
Сообщения: 549
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

ну незнаю, я делаю так
интерфейс IDocumentForm
гуид
тра-ля-ля

TForm1 = (TForm, IDocumentForm)
реализация тра-ля-ля

Form1: TForm1

(Form1 as IDocumentForm).тра-ля-ля


Вуаля!

Добавлено спустя 41 секунду:
D6
Аватара пользователя
FedeX
постоялец
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение FedeX »

Я точно не помню и проверить сейчас негде, но разве TForm не наследуеться в конечном счете от TInterfacedObject?
..или может там где-нибудь просто реализуються методы IUnknown-a?
Последний раз редактировалось FedeX 25.11.2010 13:18:56, всего редактировалось 1 раз.
sts
энтузиаст
Сообщения: 549
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

неа

Добавлено спустя 47 секунд:
и вот когда этих интерфейсов штук 40, и их свойства частично пересекаются (согласно предметной области) вот тогда и задумываешься...

Добавлено спустя 10 минут 34 секунды:
перечитал вопрос - уточняю -
IMyObject = interface

не наследуется от IUnknown и не имеет "QueryInterface, _AddRef, and _Release"
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

Код: Выделить всё

{$INTERFACES CORBA}

Не оно?
Ответить