|
|
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
rgreatПодставь вместо "интерфейсика" общий "классик" для экспорта данных в XML/JSON и ничего по сути не изменится То есть как не изменится!? Куда ты в данном примере поставишь общий "классик"? В условии данной задачи мы уже обговорили, что классы не наследуются по одной ветви. И мы не хотим или даже не можем вставлять никакой общий для них классик. Поэтому либо твой обработчик должен явно знать об этих классах и заниматься приведением перед вызовом, либо можно описать общий для них интерфейс и просто заставить их его поддерживать. Если таких классов наберется много, то преимущества интерфейсного подхода в данном случае становятся очевидны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 01:10 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
LeonidКуда ты в данном примере поставишь общий "классик"? Ну чисто из головы, не зная задачи: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. В условии данной задачи мы уже обговорили, что классы не наследуются по одной ветви. И мы не хотим или даже не можем вставлять никакой общий для них классик. Ну общий "интерфейсик" же тебе вставить можно, почему тогда нельзя заюзать общий классик? Поэтому либо твой обработчик должен явно знать об этих классах и заниматься приведением перед вызовом, либо можно описать общий для них интерфейс и просто заставить их его поддерживать. Если таких классов наберется много, то преимущества интерфейсного подхода в данном случае становятся очевидны.Давай меньше пафоса в стиле "становятся очевидно", а? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 01:24 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
А вообще пример не в тему, ибо делать общий экспорт в XML для таких разных классов как List,Queue,DataSet и Form это какой-то синтетический дурдом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 01:27 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
rgreatНу чисто из головы, не зная задачи: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Ты сам что не видишь разницы? В этом примере ты уже передаешь готовый ToXML в какую-то процедуру. И твоя процедура в данном случае может работать только с примитивом типа string. А если нужно будет еще что-то общее для всех этих объектов передать? Будешь везде параметры добавлять? Ну на мой взгляд куда проще описать общий для них интерфейс. Тогда даже если ты их не по одиночке будешь передавать и уж тем более не в готовом string виде, а, например, тупо списком интерфейсов или даже списком TObject-в передашь, то твой обработчик пробежится по списку, посмотрит кто поддерживает нужный ему интерфейс и тупо вызовет нужные обработчики уже из себя. Тем более, что обработчику может не только понадобиться уже готовый ответ, а еще и вызов еще каких-либо общих для этих объектов процедур. Хотя, с другой стороны, знаешь, делай так, как написал. Тебе можно ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 01:54 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
LeonidТы сам что не видишь разницы? В этом примере ты уже передаешь готовый ToXML в какую-то процедуру. И твоя процедура в данном случае может работать только с примитивом типа string. А если нужно будет еще что-то общее для всех этих объектов передать? Будешь везде параметры добавлять?Ты хотел пример замены одного на другое и все. Я его дал. А теперь мы начинаем играть в игру "усложним ТЗ на ходу". Ну ок, тогда я сделаю в классах процедуру ToXML в которую передам общий XMLModule где и будет все нужное. Ну на мой взгляд куда проще описать общий для них интерфейс. Тогда даже если ты их не по одиночке будешь передавать и уж тем более не в готовом string виде, а, например, тупо списком интерфейсов или даже списком TObject-в передашь, то твой обработчик пробежится по списку, посмотрит кто поддерживает нужный ему интерфейс и тупо вызовет нужные обработчики уже из себя. Тем более, что обработчику может не только понадобиться уже готовый ответ, а еще и вызов еще каких-либо общих для этих объектов процедур.Это все можно сделать и без интерфейсов. Хотя, с другой стороны, знаешь, делай так, как написал. Тебе можно ;)Рад что ты с этим не споришь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 02:18 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
rgreatЭто все можно сделать и без интерфейсов.Да без всего можно обойтись. Я тебе даже больше скажу! И без ООП люди до сих пор живут и как-то справляются. На Линухе таких вообще тьма. Впрочем, я же тебе так и говорил. Это всего лишь удобная возможность, которой очень многие и очень часто сейчас пользуются. А боязнь использования этого механизма в Дельфях у многих связана лишь с его немного своеобразной древней изначально заточенной под COM имплементацией. Но с такими заглушками как TSingletonImplementation и это не проблема. Но лично тебя никто не заставляет этим пользоваться. Так же как никто не заставляет тебя пользоваться дженериками и прочим. Хотя по факту ты ими все равно косвенно пользуешься. Они сейчас везде в библиотеке и в том числе в сторонних библиотеках. rgreatLeonidХотя, с другой стороны, знаешь, делай так, как написал. Тебе можно ;)Рад что ты с этим не споришь.А чего тут спорить-то? Уже и так все понятно. Вижу, уже даже написали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 02:37 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
Leonid Но лично тебя никто не заставляет этим пользоваться. Так же как никто не заставляет тебя пользоваться дженериками и прочим. Хотя по факту ты ими все равно косвенно пользуешься. Они сейчас везде в библиотеке и в том числе в сторонних библиотеках.Сколько высокомерия. С коня не свались когда мельницу атакуешь. P.S. А библиотека дженерик классов у меня даже своя есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 02:46 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
rgreatP.S. А библиотека дженерик классов у меня даже своя есть.Ну выходит, что практический смысл ты иногда включаешь. Ну так подождать годик-другой, может и интерфейсы так же полюбишь. Безусловно, сугубо с практической точки зрения и когда это надо Как знать, как знать... ;) Ну, бывай, Алешка! Смело бей карбонариев и бусурман! А вот книжек не читай - это лишнее. От этого только мигрени случаются, да волосы выпадают. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 02:59 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
Leonid, ну и тебе не кашлять, блондинка. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 03:12 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
Leonid, по теме, хреново пахнет это. Обычно надо куда то этот интерфейс передать, а там всё стандартно зашибёшся [Unsafe] вставлять проще сделать явную реализацию этих трёх злополучных методов (гуид кстати необязательный для интерфейса) что бы не переходить в критиканство, надёжнее вот так что-то выдать во внешку Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. ну или с Implements замутить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 09:24 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
rgreatLeonidrgreat, почему я тебе должен хрестоматийные истины расписывать. Или тебе самому лениво посмотреть? Вдруг ты мне "глаза откроешь"? На практике действительно часто либо не имеет смысла и даже вредно, либо принципиально нет возможности создавать иерархию в рамках наследования из одной цепи, но нужен "интерфейс" ( в данном случае можешь понимать "интерфейс" как нечто объединяющее твои возможно весьма разнородные объекты ), который позволит, например, однообразно передавать их в какую-то обобщенную обработку, которая в данном случае не нуждается в знании о всех этих конкретных классах. Так понятнее? Если нет - читай книжечки про паттерны и прочее.Дык о чем и речь. Область применения интерфейсов в реальной жизни весьма ограничена. Реализация плагинов: переход через границы DLL, возможность использовать другие языки программирования, которые реализуют возможности интерфейсов C++, C#. Без интерфейсов такое сделать будет сложно. Что чушь-то городить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 10:16 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
Интересный у вас спор. Моя практика показала: что интерфейс выделять, а потом его реализовывать в "моём" классе, что написать абстрактный класс, а потом делать от него наследника, который работает с "моим" классом - по трудозатратам примерно одинаково. Мм.. ну наверное надо какой-то пример, допустим есть грид, и мы хотим реализовать редактор ячейки в гриде. На интерфейсах это может выглядеть так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Допустим я хочу создать редактор на обычном TEdit, пишу свой класс-наследник от TEdit с реализацией интерфейса: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Тоже самое без интерфейсов, объявляем абстрактный класс (на уровне грида): Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. И всё равно пишу свой класс: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. А дальше начинаются интересные вещи: - если интерфейс уже опубликован, то его нельзя менять; - если реализаций интерфейса несколько - то тяжело найти конкретную реализацию (я про поиск по исходникам); - порой встречается дублирование кода в каждой из реализаций одного интерфейса (которую можно было бы вынести в абстрактный класс). Вот если реализовать и то, и другое, и поработать и с тем, и с тем, то тогда реально будет понимание того, надо оно или нет. Я когда только про интерфейсы почитал, да начал пробовать их использовать - тоже сначала думал, что крутая вещь. А время расставило всё по местам. Для себя я определился, что интерфейсы стоит объявлять: а) для реализации системы плагинов/когда необходимо взаимодействие с внешними библиотеками (dll) б) когда необходимо множественное наследование (ну то ещё такое) Во всех остальных случаях с интерфейсами больше мороки, чем пользы, особенно если у меня "монофайл" и все исходники на руках. И чем крупнее проект, тем сильнее это заметно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 10:45 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
SAS.Planet был целиком написан на интерфейсах примерно до 2014-го года. Это был тихий ад и ужас в плане поддержки и сопровождения кода. Потом аффтар одумался, и переписал всё на ООП. Код получился гораздо проще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 11:12 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
Кто придумал такой скобочный синтаксис? Код: pascal 1. 2. ИМХО, труЪ паскаль-код должен быть таким Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 11:32 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
КвейдКто придумал такой скобочный синтаксис? Код: pascal 1. 2. ИМХО, труЪ паскаль-код должен быть таким Код: pascal 1. 2. Язык Паскаль уже давно изговняли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 12:04 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
КвейдКто придумал такой скобочный синтаксис? ИМХО, труЪ паскаль-код должен быть таким Код: pascal 1. 2. Потому что это атрибуты и просто логика таких как Weak, Unsafe, Default и т.п. вшита в компилятор. У атрибутов могут быть конструкторы и параметры. Например Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 12:21 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
Интерфейсы позволяют реализовывать схемы прозрачного делегирования функционала. А в Delphi при этом еще можно избежать необходимости перекрестных ссылок и особенно сложных перекрестных ситуаций через несколько модулей, когда это в итоге приводит либо к circular reference либо к серьезному увеличению времени компиляции в большом проекте. Например, главный класс может содержать поля с объектами делегатов. Это классы, которые выполняют какой-то функционал для главного класса. Главный класс знает все про эти классы, а вот классы делегатов могут находится в других юнитах и не обязаны знать про создавший их главный объект ничего конкретного кроме некого интерфейса объявленного в отдельном общем модуле и который передается им при создании. В этом случае еще и упрощается создание и работа с такими делегатами из других модулей и классов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 15:03 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
defecator: >>> Язык Паскаль уже давно изговняли На языке Паскаль уже давно никто не пишет, кроме школьников. И то уже редко. Delphi - это одна из разновидностей Object Pascal. И можно только порадоваться, что Object Pascal пока еще развивается и старается хоть как-то идти в ногу со временем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 15:19 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
NordlysИнтерфейсы позволяют реализовывать схемы прозрачного делегирования функционала. А в Delphi при этом еще можно избежать необходимости перекрестных ссылок и особенно сложных перекрестных ситуаций через несколько модулей, когда это в итоге приводит либо к circular reference либо к серьезному увеличению времени компиляции в большом проекте. что, правда, что ли ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 15:47 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) ну или с Implements замутить Да ты просто СУПЕР!!!!! Спасибо за идею. Мучаюсь с древним проектом, пока работает, все пучком, как вносить изменения, особенно оптимизиционные, так ловля блох (потерянные ссылки) больше времени занимает, чем сами изменения. Блин, еще раз спасибо за идею!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 18:11 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
defecatorчто, правда, что ли ? У нас на риче подобное вылезало. Но он сам очень моструозный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 18:29 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
rgreatОпиши задачи где интерфейсы есть больше смысла применять чем другие инструменты. И почему. Хотел дать ссылку, как мне объясняли про интерфейсы, но не нашел. Тема называлась "Interface - в чем фишка!", опубликовано было в FIDO в октябре 2002 года Процитирую, что сохранил себе: Привет коллеги. Может ктонибудь объяснит в чем фишка исп-я интерфейсов? Единственное положительное от использования это счетчик ссылок, с авто-убиением и второе - это обязательное описание методов в классе (полож-е или отрицательоное :о? ) Пример с животными кот-й везде приводится очень хорошо делается и без интерфейсов. Пример: ТЛетим - высота полета над ур-м моря, скорость ТПлаваем - глубина, пресноводное или в морской воде обитает Потом объеделяем поведенческие метотоды ТЛетуноНыряльщик ТБегуноНыряльщик и т.д. в нутрях делаем ТЛетуноНыряльщик = class private FЛетим:ТЛетим FПлывем:ТПлаваем published property ВысотаПолета property ГлубинаПогружения Потом описываем спокойно животных ТДельфин=класс(ТМлекопитающее) private FЛетуноНыряльщик :ТЛетуноНыряльщик ; property МеханизмДвижения:ТЛетуноНыряльщик read FЛетуноНыряльщик ; ТУтка=класс(Птица) private FЛетуноНыряльщикБегающий :ТЛетуноНыряльщикБегающий ; property МеханизмДвижения:ТЛетуноНыряльщикБегающий read FЛетуноНыряльщикБегающий ; Все!!! В одном проперти все методы движения объекта животного. Так в чем фишка исп-я интерфейсов? Ненужно делать делегирования методов, они все в одной точке и ОТЛИЧНО поддаются контролю при программировании. Или использ-е интерфейсов с исп-м технологии СОМ связано? А то я что то не врубаюсь :) AWS ответы мне в конфу: авторА теперь представь что у тебя есть объект который занимается управлением стаи летунов и другой объект который управляет ныряльщиками, причем написанные не тобой и без исходников. Они подразумевают что все передаваемые под их начало объекты будут произведены от TЛетун и TНыряльщик соответственно. Очевидно что TУтка должен быть одновременно и TЛетун и TНыряльщик и никакие property для этого не подходят. Значит необходимо множественное наследование, которое есть в C++, но нет в Delphi и VB. Причем множественное наследование при программировании штука довольно-таки сложная. Особенно в нетривиальных ситуациях. Вот тут то и помогает интерфейсы. Если TУтка реализует интерфейсы TЛетун и TНыряльщик то управляющие объекты смогут с ним работать. -------------------- Ну тут уже разные люди всякие вещи сказали, я добавлю. Довольно приятная вещь - запрос интерфейса в runtime. Например, есть у нас объект TVehicle. Задача - сбить цель! А мы не знаем может ли этот объект сбивать цели. Поскольку TVehicle, то это может быть и "Мерседес" и "Шилка" и "Урал" и "Зенитный пулемет смонтированный на Урале". Но мы недолго думая пишем: procedure TGunSlinger.EngageTarget(const V:TInterfacedObject); var G:IAntiAircraftGun; begin if Supports(V,IAntiAircraftGun,G) then if G.HasAmmo and G.FindTarget then G.FireAtTarget else RunAway; end; Таким образом нам все равно на чем установлены средства ПВО. Главное что они есть. Привет! Интересный у тебя пример, самый понятливый :) Т.е. резюме:: 1.Экспресс диагностика методов от родителей. 2.Реализация нужных методов, для любого объекта. Т.е. в моем примере: Есть множество животных объектов, типа единого массива, со своими интерфейсами. При захвате этого объета можно реализть такой алгоритм "жизни". Procedure ОбъектПопалВВоду(ifObj:TInterfacedObject) begni If ifObj is IПлаваем then begin // реализация плавания end else begin // реализация предсмертного мата и отправки души на небо. end; end; Т.е. если сделать программу - "Животные", и что бы при работе спозиционировавшись на объекте, я мог знать то что реализовано у меня в срезе-интерфейсе? Так? К примеру Дельфин - интерфейсы срезы: Вид, место обитания, хищник, ареал популяции (в каких местах нах-ся) И у каждого есть свои методы получения данных об объекте. Так? Но ведь у интерфесов нет переменных и как к примеру ты узнаешь от интерфейса, какой калибр и емкость магазина, до какой высоты идет эфф-е поражение цели? Как узнать не делая второй интерфейс? AWS ответы Talk: Interface - в чем фишка! Sergey Skorodinsky Профиль 22 10 2002 20:32 ответить * Crossposted in RU.DELPHI Рад пpиветствовать тебя, AWS! Tuesday October 22 2002 07:45, AWS Владимиp wrote to All: AВ> Может ктонибyдь объяснит в чем фишка исп-я интеpфейсов? AВ> Единственное положительное от использования это счетчик ссылок, с AВ> авто-yбиением и втоpое - это обязательное описание методов в классе AВ> (полож-е или отpицательоное :о? ) Я использовал интеpфейс как меткy, что класс чем-то особенный (implements IMyInterface). Что то типа: {Delphi 5} type IMyInterface = interface ['{C3E2EE21-695A-11D5-B2CC-00A0CC26D098}'] end; ..... var MyI:IMyInterface; ..... if SomeObject.GetInterface(IMyInterface, MyI) then .. {object is marked} Пpи этом даже необязательно, что бы в этом интеpфейсе были описаны какие-то методы. Таким обpазом ты можешь создать свою иеpаpхию интеpфейсов (и даже не однy) котоpая бyдет сyществовать как бы паpаллельно с иеpаpхией объектов. А вот насчет использования интефейса для счетчика ссылок я много слышал, но так и не понимаю, что это такое. Hельзя ли коpоткий пpимеp? AВ> Пpимеp с животными кот-й везде пpиводится очень хоpошо делается и без AВ> интеpфейсов. AВ> Пpимеp: AВ> ТЛетим AВ> - высота полета над yp-м моpя, скоpость AВ> ТПлаваем AВ> - глyбина, пpесноводное или в моpской воде обитает AВ> Потом объеделяем поведенческие метотоды AВ> ТЛетyноHыpяльщик AВ> ТБегyноHыpяльщик и т.д. AВ> в нyтpях делаем Читай в любой ноpмальной книжке по ООП пpо отличия междy is-a and has-a relationship. По pyсски говоpя - быть кем-то(чем-то) и иметь кого-то (чего-то). Гyсаpы молчат. То есть отношения владения и отношения наследственности. Очень хоpошо описано в Бpюс Эккель "Thinking in Java", хоть это и оффтопик, но во вводной части очень много интеpесного пpо ООП вообще. AВ> ТЛетyноHыpяльщик = class AВ> private AВ> FЛетим:ТЛетим AВ> FПлывем:ТПлаваем Типичный has-a. То есть твой летyноныpяльщик владеет какими-то пpопеpтями. Само по себе это не значит способности летать/ныpять. Более класически (с интеpфейсами IDiveable и IFlyable, или IDiver и IFlyer) А yже в этих интеpфейсах должны быть методы соответственно Летать и Hыpять :-))). А yже твои тваpи (соppи - твои объекты) могyт имплементиpовать эти интеpфейсы, соответственно имея способности ныpять/летать. Пpи этом наследоватся в своей иеpаpхии ты можешь от pазных pодителей, не теpяя пpи этом способности летать. Hапpимеp твой класс ТСамолет и ТВеpтолет могyт наследоваться от ТМашина, но имплементиpовать интеpфейс IFlyer. Аналогично - класс TОpел (наследник ТПтичка), Аналогично ТКамень (если бpосить) (наследник ТМинеpал). Аналогично ТКомаpик (наследник ТBug). То есть опять же это как бы еще одно измеpение для постpоения твоей иеpаpхии. [...skip...] AВ> Потом описываем спокойно животных AВ> ТДельфин=класс(ТМлекопитающее) AВ> private AВ> FЛетyноHыpяльщик :ТЛетyноHыpяльщик ; AВ> property МеханизмДвижения:ТЛетyноHыpяльщик read FЛетyноHыpяльщик ; AВ> ТУтка=класс(Птица) AВ> private AВ> FЛетyноHыpяльщикБегающий :ТЛетyноHыpяльщикБегающий ; AВ> property МеханизмДвижения:ТЛетyноHыpяльщикБегающий read AВ> FЛетyноHыpяльщикБегающий ; AВ> Все!!! Пpи этом из твоей иеpаpхии совеpшенно не следyет что yтка может летать, ныpять и бегать. А вот из деклаpации TУтка=класс(ТПтица, IFlyer, IRunnable, IDiver) это следyет опpеделенно. Пpичем опять же - ты можешь в пpогpамме пpовеpить что-то типа If (твой_Объект имплементиpyет IFlyer) then твой_Объект.полетели (метод полетели должен быть описан в интеpфейсе IFlyer) AВ> В одном пpопеpти все методы движения объекта животного. Так не бывает. Миp многомеpен и летают не только наследники птиц. Hадеюсь, yвидимся! Sergey. ... Кyст - это совокyпность палок и веток pастyщих из одного места! Сообщение в Internet формате --------------- Re: Interface - в чем фишка! Kazantsev Alexey Профиль 23 10 2002 10:45 ответить Однако, здравствуйте! > А вот насчет использования интефейса для счетчика ссылок я много слышал, но так > и не понимаю, что это такое. Hельзя ли коpоткий пpимеp? ITransaction имеет методы Start, Commit, RollBack. Назначение понятно? Идем дальше. Begin Trans := TTransaction.Create(DataSet); // Счетчик ссылок увеличивается на 1. Start; Commit; // при выходе из области видимости переменной, счетчик уменьшается на 1 и = 0, при этом объект уничтожается. End; В случае возникновения исключительной ситуации внутри Start или Commit, вылетаем из процедуры. Удаляется объект TTransaction т.к. счетчик ссылок = 0, вызывается его деструктор, где проверяется: если не выполнился Commit то выполнить Rollback. Это очень и очень кратко, но использовать удобно :). __________________________________ Казанцев Алексей (kazav@udmurtneft.ru) Живое было общение, жаль, что нельзя сейчас опять все перечитать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 18:49 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
AWSVladimir, Вот еще неплохая статья про применение интерфейсов http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=468 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 19:03 |
|
||
|
Возможность создания новых типов интерфейсов в новых версиях Delphi
|
|||
|---|---|---|---|
|
#18+
rgreatLeonidНу а как еще тебя понять?Как написано. Русским по белому. Если ты очевидные удобства не принимаешь в принципе. Даже когда тебе детально "расжевывают", где это хорошо работает.Не увидел "разжевалки". А "очевидные удобства" таковы в теории а не на практике. А я практик. Не ссорьтесь Сказано же в исходном посте это может быть полезно в некоторых схемах. Я думаю ни кто не будет спорить с тем, что жизнь очень сложна и многогранна, поэтому всегда можно найти задачу под предложенное решение. Лично я так уже наелся этих ваших ARC-ов по самые ноздри 21154263 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2018, 19:04 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39620719&tid=2041083]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 473ms |

| 0 / 0 |
