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

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

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

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

Сообщение sts » 24.11.2010 22:37:26

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

А как же фраза "объект знает как себя печатать"? Зачем тогда ООП?
sts
постоялец
 
Сообщения: 451
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

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

Сообщение hinst » 24.11.2010 22:57:14

TList<E>

вообще-то шаблоны в паскале уже сделаны, не вижу связи между множественным наследованием и шаблонами
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

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

Сообщение sts » 24.11.2010 23:10:07

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

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

Сообщение Odyssey » 25.11.2010 00:54:55

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

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

В любом случае, моё дело предложить. Других способов сократить запись в текущей версии компилятора я не знаю.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

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

Сообщение perlpunk » 25.11.2010 12:02:12

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

это крайности - пихать всю функциональность в один объект. есть модули например - в нем и группируете функционал связанный. а уж сколько объектов и функций будет это не так важно.
perlpunk
новенький
 
Сообщения: 90
Зарегистрирован: 26.09.2008 21:19:48

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

Сообщение sts » 25.11.2010 12:38:43

хехе, вообщето это почти цитата из старой книги по ООП, спецом для процедурников придуманная, а эквивалентна она - "Зачем тогда ООП?" (которую я на вский случай добавил), а вы на нее набросились как на руководство к действию. Повторяю - суть того поста в том - Зачем тогда ООП если все процедурами делать.
sts
постоялец
 
Сообщения: 451
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

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

Сообщение FedeX » 25.11.2010 13:25:39

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

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

Сообщение sts » 25.11.2010 13:38:59

Насколько я понял вы унаследовались от класса который реализовывал нужный интерфейс и являлся (класс) наследником от TInterfacedObject в котором реализован подсчет ссылок и т.п.
Если же просто, написать свой интерфейс и реализовать в своем классе то никаких ссылок и release не будет.
Говорю в относительно к Delphi 6, как в новых не знаю.
sts
постоялец
 
Сообщения: 451
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

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

Сообщение FedeX » 25.11.2010 13:43:17

(Правил) Ну да, а разве можно не наследоваться от TInterfacedObject, при работе с интерфейсами, разве компилятор не будет ругаться на то что надо реализовать свои QueryInterface, Release etc..?
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

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

Сообщение sts » 25.11.2010 13:56:47

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

Добавлено спустя 2 минуты 16 секунд:
да, гуид все равно нужно указывать иначе не работает Form1 as IMyObject, хотя могли-бы и не требовать для "чистых".
(D6)
sts
постоялец
 
Сообщения: 451
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

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

Сообщение FedeX » 25.11.2010 14:00:34

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

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

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

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

Сообщение sts » 25.11.2010 14:05:23

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

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

Form1: TForm1

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


Вуаля!

Добавлено спустя 41 секунду:
D6
sts
постоялец
 
Сообщения: 451
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

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

Сообщение FedeX » 25.11.2010 14:07:15

Я точно не помню и проверить сейчас негде, но разве TForm не наследуеться в конечном счете от TInterfacedObject?
..или может там где-нибудь просто реализуються методы IUnknown-a?
Последний раз редактировалось FedeX 25.11.2010 14:18:56, всего редактировалось 1 раз.
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

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

Сообщение sts » 25.11.2010 14:08:52

неа

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

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

не наследуется от IUnknown и не имеет "QueryInterface, _AddRef, and _Release"
sts
постоялец
 
Сообщения: 451
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

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

Сообщение Иван Шихалев » 25.11.2010 14:23:02

Код: Выделить всё
{$INTERFACES CORBA}

Не оно?
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Пред.След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru