Odyssey писал(а):Хм.. А если способ связи форм и прав доступа позволит такое сделать, то как насчёт AccessManager.GetAccessRight(Form1, ...), или даже просто GetAccessRight(Form1, ...)? Т.е. вынести методы работы с правами доступа из классов? При этом теоретически классы могут всё также реализовать интерфейсы, и GetAccessRight(Form1, ...) -- служить синтаксическим сахаром для (Form1 as IAccessRight).getAccessRight(...).
А как же фраза "объект знает как себя печатать"? Зачем тогда ООП?
sts писал(а):А как же фраза "объект знает как себя печатать"? Зачем тогда ООП?
Зависит от архитектуры. Например, если "печатать" можно множеством способов, то объекту слишком много придётся знать. В таком случае иногда имеет смысл разгрузить объекты и сделать несколько внешних TObjectPrinter'ов, для каждого способа печати свой. При этом TObjectPrinter -- вполне себе ООП, просто другой способ группировки функциональности.
В любом случае, моё дело предложить. Других способов сократить запись в текущей версии компилятора я не знаю.
sts писал(а):А как же фраза "объект знает как себя печатать"? Зачем тогда ООП?
это крайности - пихать всю функциональность в один объект. есть модули например - в нем и группируете функционал связанный. а уж сколько объектов и функций будет это не так важно.
хехе, вообщето это почти цитата из старой книги по ООП, спецом для процедурников придуманная, а эквивалентна она - "Зачем тогда ООП?" (которую я на вский случай добавил), а вы на нее набросились как на руководство к действию. Повторяю - суть того поста в том - Зачем тогда ООП если все процедурами делать.
Кстати, насчет множественого наследования. На паскале я уже давненько не писал, но как-то давно понадобилось мне унаследоваваться от пары-тройки интерфейсов и тут я вродь столкнулся с тем, что мои обьекты сразу стали себя вести как интерфейсы (заработал гребаный подсчет ссылок, := nil стал работать как Release - пришлось наследоваться от TInterfacedObject и прочая нах. не нужная мне дрянь). Можно в Object Pascal от этого как-то избавиться чтоб интерфейсы были не более чем протоколы описывающие интерфейс обьектов как в Яве? Мне COM OLE и всякие автоматические счетчики ссылок уже сто лет как нафиг не нужны, а получаеться я не могу в Паскале использовать интерфейсы без всех этих дополнительных "подарков". Ссори если что путаю - на Паскале давно не программировал, и когда программировал, то интерфейсы использовал только в контексте COM или OLE (как компоненты DirectX etc..).
Последний раз редактировалось FedeX 25.11.2010 12:41:17, всего редактировалось 1 раз.
Насколько я понял вы унаследовались от класса который реализовывал нужный интерфейс и являлся (класс) наследником от TInterfacedObject в котором реализован подсчет ссылок и т.п. Если же просто, написать свой интерфейс и реализовать в своем классе то никаких ссылок и release не будет. Говорю в относительно к Delphi 6, как в новых не знаю.
(Правил) Ну да, а разве можно не наследоваться от TInterfacedObject, при работе с интерфейсами, разве компилятор не будет ругаться на то что надо реализовать свои QueryInterface, Release etc..?
Добавлено спустя 2 минуты 16 секунд: да, гуид все равно нужно указывать иначе не работает Form1 as IMyObject, хотя могли-бы и не требовать для "чистых". (D6)
Другими словами можно ли в Object Pascal использовать интерфейсы, но при этом не наследоваться от никому не нужного и вводящего смятение в код lUnknown Может есть какой-то хак чтобы обойти наследование от него?
>можно, тогда они "чистые"
и как это можно сделать если компилятор нахально неявно делает предком любого интерфейса lUnknown с требованием реализовать все его методы?
Я точно не помню и проверить сейчас негде, но разве TForm не наследуеться в конечном счете от TInterfacedObject? ..или может там где-нибудь просто реализуються методы IUnknown-a?
Последний раз редактировалось FedeX 25.11.2010 13:18:56, всего редактировалось 1 раз.
Добавлено спустя 47 секунд: и вот когда этих интерфейсов штук 40, и их свойства частично пересекаются (согласно предметной области) вот тогда и задумываешься...
Добавлено спустя 10 минут 34 секунды: перечитал вопрос - уточняю - IMyObject = interface
не наследуется от IUnknown и не имеет "QueryInterface, _AddRef, and _Release"