powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
53 сообщений из 53, показаны все 3 страниц
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007273
Artem.1st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задачи проекта требуют внедрения Интерфейсов, в основном ради “Интерфейсов”, а не ради автоматических объектов. Вопрос к тем, кто активно это использует и может подсказать про сильные и слабые стороны.
Пока плохо разбираюсь в теме, ... лишь вижу, что исторически в основе Delphi(VCL, RTL) сильно преобладает программирование на динамических объектах, как и в моем проекте. Но новые задачи требуют много “абстракций”. Скорей всего активное внедрение интерфейсов, потребует изменить подход к программированию.
Здесь нужно понять: Какие подводные камни? Какая “выгода”, и какие ”неожиданности”? Какие варианты решений?

В help-у только техническая сторона вопроса, вроде, все просто в примерах. Но, во что это выливается на крупном проекте?
Многие delphi-блогеры жалуются на несовершенство ARC, якобы требует излишней аккуратности и внимания. Кто-то предлагает поставить базовую заглушку (как это сделано в TComponent)... якобы снимает часть проблем.

Заранее спасибо, за любую информацию по теме.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007276
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem.1st,

Интерфейсы имеют 2 особенности:
- абстракция
- подсчёт ссылок

Встречал проекты, где нужна абстракция. Какие тогда могут быть альтернативы?

В целом интерфейсы очень удобны, когда у одного и того же объекта может быть несколько хранилищ, он может мигрировать из одного в другое, в этом смысле конечно ARC убирает уйму головной боли
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007280
Artem.1st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Важное уточнение: тема касается именно Delphi-программирования без Com-технологии . ОС: Windows

SOFT FOR YOU,
спасибо за ответ.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007282
Artem.1st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[del]
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007286
Artem.1st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU

Встречал проекты, где нужна абстракция. Какие тогда могут быть альтернативы?

Не знаю, какая альтернатива, м.б. переход к интерфейсам - даже к лучшему. Но, к чему быть готовым?
Где-то на блогах было мнение, что работать с динамическими объектами(не забыть поставить .Free) требует меньше внимания, чем следить за комбинациями объектных и интерфейсных ссылок.
ARC - это хорошо, но оправдывает ли она себя в Delphi?
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007289
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem.1st,
Используй интерфейсы без COM. Можно прикручивать библиотеки, написанные на других языках с++ и c#.
В Delphi связка с java под андроид написана на интерфейсах.
Есть некоторые особенности работы с ними, но есть отладчик и можно им воспользоваться.
Основная проблема с интерфейсами в том, что они живут до тех пор, пока есть ссылки на него и уничтожаются не тогда, когда программист хочет, а когда кол-во ссылок = 0.
Можно отключить arc, написав объект заглюшку. Тогда надо будет приводить интерфейс к классу и его уничтожать в ручном режиме.
Еще есть safecall и автоматическая обработка ошибок.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007293
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интерфейсы только ради интерфейсов использовать не следует.

По той простой причине, что у них реализация не связана с контрактом. Т.е. если у вас есть код работы с каким-то интерфейсом, то чисто по коду вы никак не узнаете, что происходит на самом деле. Вам придётся запустить программу, чтобы увидеть какая именно из реализаций интерфейса будет передана/использована.

С просто объектами/классами такой проблемы нет, ну или она не стоит так остро: Ctrl + щелчок переместят вас в реализацию. Проблема может быть только с виртуальными методами.

Используйте интерфейсы только там, где вам нужны их плюсы.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007295
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem.1st,

COM это надстройка над интерфейсами
Совсем не обязательно использовать COM

Реализация интерфейсов в Delphi - прекрасная. Если не ошибаюсь, Delphi стал первым языком, где интерфейсы стали поддерживать ARC. В плюсах приходится подсчитывать ссылки самостоятельно.

Минусы интерфейсов есть. Но я даже не буду о них говорить, дабы не забивать голову лишним мусором )
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007296
Artem.1st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ziv-2014

Можно отключить arc, написав объект заглюшку. Тогда надо будет приводить интерфейс к классу и его уничтожать в ручном режиме.

А такой вариант: Базовая заглушка + вся модель на динамических объектах(как VCL), а интерфейсы только по требованию?
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007302
Artem.1st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmoker

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

В проекте конструируются сложные абстрактные сущности. Даже стоял вопрос о переносе части реализации на С++, но вроде Delphi должна справиться, особенно если заранее знать о “подводных камнях.”
Спасибо, что обратили внимание на тему.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007312
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem.1st
ziv-2014

Можно отключить arc, написав объект заглюшку. Тогда надо будет приводить интерфейс к классу и его уничтожать в ручном режиме.

А такой вариант: Базовая заглушка + вся модель на динамических объектах(как VCL), а интерфейсы только по требованию?

Это говнокинг и лучше так без надобности не делать.
Так можно делать, если есть необходимость прибить объект в ручном режиме.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007318
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem.1st
А такой вариант: Базовая заглушка + вся модель на динамических объектах(как VCL), а интерфейсы только по требованию?

Нормальный вариант.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007331
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem.1st
Задачи проекта требуют внедрения Интерфейсов, в основном ради “Интерфейсов”

Я встречал мало задач, в которых были бы нужны или удобны "интерфейсы ради интерфейсов". В основном такое возникает у людей, обчитавшихся бандитов и иллюстрирующих принцип "когда у тебя в руках молоток, все задачи похожи на гвозди".

Как правило, если хорошо подумать над архитектурой, количество интерфейсов стремительно уменьшается, а управляемость и прозрачность приложения значительно увеличивается.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007336
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

+1
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007362
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Как правило, если хорошо подумать над архитектурой, количество интерфейсов стремительно уменьшается, а управляемость и прозрачность приложения значительно увеличивается.
Смотря какое приложение.
Если с плагинами, интерфейсы все же намного удобнее чем flat API. Ну и как уровень абстракции для сущностей типа ProgressBar, чтобы отвязаться от визуальной реализации.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007363
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Если с плагинами, интерфейсы все же намного удобнее чем flat API.

Я не знаю, что такое flat api, но в случае плагинов ни малейшей необходимости в интерфейсах не вижу - до тех пор, пока плагины пишутся на той же дельфе, интерфейсы только мешают. Если речь о сервере а-ля MS Word - тогда да, конечно, интерфейсы - то, что доктор прописал.

Соколинский Борис
Ну и как уровень абстракции для сущностей типа ProgressBar, чтобы отвязаться от визуальной реализации.

А смысл? Интерфейс для сущностей ProgressBar подразумевает, что будет какой-то объект, который будет держать в себе указатель PBar: IProgressBar и время от времени вызывать что-нибудь типа PBar.ShowProgress(50). В общем-то, изрядная порнография. Куда правильнее сделать ProgressNotification, и пусть на него подписывается хоть ProgressBar, хоть LogWriter.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007364
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

Ну конечно
Все вокруг дебилы. Используют интерфейсы
Один ты молодец )
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007365
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
до тех пор, пока плагины пишутся на той же дельфе...
Плагины на то и плагины, чтобы их можно было писать на чем угодно.

softwarer
Куда правильнее сделать ProgressNotification
А чем это правильнее?
Т.е. вместо простой реализации из двух сущностей добавлять третью - контроллер нотификаций а-ля TDataSource? Может в этом что-то и есть, но я не сталкивался с задачами, где бы это требовалось.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007368
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Плагины на то и плагины, чтобы их можно было писать на чем угодно.

Плагины нужны для решения конкретных задач. Если делать систему, плагины к которой будет писать широкий круг покупателей своими силами - интерфейсы абсолютно уместны. Но сколь я видел таких проектов, в итоге плагины к ним писал только автор универсального подхода, а покупатели в лучшем случае говорили "а напишите нам такое вот, мы заплатим". В то же время плагины - хорошая альтернатива монолитной архитектуре и для внутренней разработки. Но при этом все пишут на дельфе и интерфейсы становятся пятым колесом.

Соколинский Борис
А чем это правильнее?

Система становится более гибкой, модули - менее связанными, не строящими ненужных предположений друг о друге, абстракции - более естественными. В исходном варианте "объект" знает, что существует какой-то "прогрессбар", который ему надо пинать. Если нам нужно убрать прогрессбар из приложения - ну вот стал он не нужен - нам приходится править объект. В случае notification-а - мы просто убираем подписку, объект неизменен. Теперь допустим, что мы хотим пока идёт операция, каждую минуту писать в лог "процесс ещё не умер и не завис". В случае notification-а - мы вешаем подписку, которая это делает, в исходном случае - заставляем logwriter-а притвориться прогрессбаром, хотя он ну совершенно не прогрессбар. Теперь, когда нам потребуется одновременно рисовать прогрессбар и писать в лог - в исходном случае придётся либо добавлять в объект PBar2: IProgressBar, чтобы везде в коде скопировать вызовы ShowProgress, либо рожать прокси-объект, который для объекта притворится прогрессбаром, а внутри себя будет пинать как настоящий прогрессбар, так и лограйтер. В общем, одна сплошная порнография - и всё из-за нежелания воспользоваться notification-ами :)

Соколинский Борис
Может в этом что-то и есть, но я не сталкивался с задачами, где бы это требовалось.

Это, конечно, тоже своего рода молоток - когда начинаешь так делать, обнаруживаешь много задач, которые можно и стоит сделать так, хотя до того обходился иначе. Но в результате и приложение становится лучше по функционалу/интерфейсу, и код - лучше по читаемости/сопровождаемости.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007370
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Но при этом все пишут на дельфе и интерфейсы становятся пятым колесом.
У меня не раз и не два были случаи, когда нужно интегрировать некое оборудование с SDK в виде C++ объектов, что хочешь с ними, то и делай.

Соколинский Борис
Теперь допустим, что мы хотим пока идёт операция, каждую минуту писать в лог "процесс ещё не умер и не завис".
С логами, ИМХО, не очень удачный пример.
По самой сути, они должны быть супернадежными и писаться даже когда все что могло упасть уже упало. А если упал контроллер нотификаций...
Но это так, теоретизирование.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007372
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
У меня не раз и не два были случаи, когда нужно интегрировать некое оборудование с SDK в виде C++ объектов

На Delphi всё же редко пишут SDK к оборудованию.

Соколинский Борис
что хочешь с ними, то и делай.

Не удивлюсь, если это универсальный вариант, позволяющий работать с этим оборудованием из-под юниксов - в отличие от интерфейсов, привязанных к винде. Так что, возможно, здравое и грамотное решение.

Соколинский Борис
С логами, ИМХО, не очень удачный пример.

Он, конечно, крайне условный. Но сама по себе иллюстрируемая им потребность - вполне реальна. Как бы это сказать... "Прогресс" - это факт. "Прогрессбар" - это интерпретация факта. Жёсткая связь факта с интерпретацией - слабое звено в архитектуре.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007374
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
На Delphi всё же редко пишут SDK к оборудованию.
На Delphi пишут программы, которые используют SDK к оборудованию.

softwarer
Не удивлюсь, если это универсальный вариант, позволяющий работать с этим оборудованием из-под юниксов - в отличие от интерфейсов, привязанных к винде. Так что, возможно, здравое и грамотное решение.
То что я видел, было скорее от лени сделать по-человечески. Но важно не это, а насколько вообще корректно привязывать плагины к конкретной среде разработки (и тем более ее версии).


softwarer
Но сама по себе иллюстрируемая им потребность - вполне реальна. Как бы это сказать... "Прогресс" - это факт. "Прогрессбар" - это интерпретация факта. Жёсткая связь факта с интерпретацией - слабое звено в архитектуре.
Ну так промежуточная сущность - еще более слабое.
Развивая предыдущий пример: предположим, возникла потребность рядом с прогресбар-ом поместить кнопку "Cancel". В случае двух-сущностной архитектуры это модифицируется просто: добавляем к имплементации IProgressIndicator IProgressCanceled, в процессе проверяем его наличие и состояние. Все.
А если есть контроллер нотификаций возникает дилемма - в случае асинхронной реализации процесс не узнает, что его остановили, в синхронной - какой-то получатель может заблокировать работу всего сразу. И т.п.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007377
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понял, один из собеседников не работал в сколько-нибудь сложных проектах и считает своим долгом рассуждать об инструментах, которые в его сфере не применимы

Если нужно множественное наследование - нет других инструментов кроме интерфейсов. Для плагинной системы средней сложности тоже нет альтернатив. Мне довелось работать над крупным проектом, где часть написана на Delphi, а часть на C#, и вызовы мигрируют из одних интерфейсов в другие.

Конечно интерфейсы используют для ARC в первую очередь. Здесь так же нет альтернатив.

Но зачем с серьёзным видом рассуждать об инструментах, цель которых больше, чем твои задачи - мне, честно говоря, не понятно
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007378
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
На Delphi пишут программы, которые используют SDK к оборудованию.

Безусловно. Но это перпендикулярно вопросу "как реализовывать api в программе, подключающей плагины".

Соколинский Борис
То что я видел, было скорее от лени сделать по-человечески.

Возможно. Не возьмусь судить.

Соколинский Борис
Но важно не это, а насколько вообще корректно привязывать плагины к конкретной среде разработки (и тем более ее версии).

Мне кажется, я ответил - ровно настолько, насколько можно предсказать круг писателей плагинов.

Соколинский Борис
Развивая предыдущий пример: предположим, возникла потребность рядом с прогресбар-ом поместить кнопку "Cancel". В случае двух-сущностной архитектуры это модифицируется просто: добавляем к имплементации IProgressIndicator IProgressCanceled, в процессе проверяем его наличие и состояние. Все.

Боюсь, это решение ниже всякой критики. Смотрите сами: прерывать процесс - это потребность, которая может возникнуть где угодно. Без всякой связи с прогрессбаром. Запихивать его в прогрессбар - это примерно то же самое, что у TForm-а сделать метод ExecSQL. Теперь если мы захотим, допустим, повесить watchdog timer, который прервёт процесс по таймауту - этому таймеру надо будет притвориться progressbar-ом. И ещё отдельно - то, что не вызывающий сообщает процессу о необходимости прерваться, а сам процесс вынужден тратить время на некие периодические опросы.

Соколинский Борис
А если есть контроллер нотификаций возникает дилемма

Не возникает. В случае нотификаций, если Вы хотите реализовать подобную вывернутую идею с опросом, всё делается очень просто: делается другое оповещение (ProcessCancellationCheck). Процесс когда хочет дёргает его. Ваша кнопка - подписывается на него и сообщает свой статус "да, меня нажимали". И watchdog timer тоже подписывается и сообщает свой статус - "да, время вышло".

Но это, конечно, если предположить, что у процесса (или его контроллера) по каким-то причинам нет метода Cancel, который выглядит наиболее логичным решением для этого случая.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007387
Artem.1st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ziv-2014
Еще есть safecall и автоматическая обработка ошибок.

Я правильно понял, что safecall - это надстройка над stdcall?
Спасибо.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007388
Artem.1st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmoker
у них реализация не связана с контрактом. Т.е. если у вас есть код работы с каким-то интерфейсом, то чисто по коду вы никак не узнаете, что происходит на самом деле. Вам придётся запустить программу, чтобы увидеть какая именно из реализаций интерфейса будет передана/использована.

Как раз нужна "виртуальность" для Класса целиком(а не для отдельных методов).
Еще Вы указали на серьезную проблему: Как проще ориентироваться в коде с “виртуальными” Классами?
“Запускать и смотреть” ... боюсь, не подходит. Придется искать какую-то методику или полезное CASE-средство, типа Rational Rose ?
Спасибо.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007389
Artem.1st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer

Как правило, если хорошо подумать над архитектурой, количество интерфейсов стремительно уменьшается, а управляемость и прозрачность приложения значительно увеличивается.

Задача такова, что приходится рассматривать в т.ч. "концепцию к архитектуре" (а про саму архитектуру - это отдельная тема, она кажется проще)
softwarer

Я встречал мало задач, в которых были бы нужны или удобны "интерфейсы ради интерфейсов".

Т.е. встречали. Вам повезло. А мне приходится продолжить поиск ...
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007390
Artem.1st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Куда правильнее сделать ProgressNotification, и пусть на него подписывается хоть ProgressBar, хоть LogWriter.

Как правильно называется эта технология Notification/Подписки ... ?
М.б. есть какая-нибудь ссылка почитать?
Спасибо.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007416
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem.1st
ziv-2014
Еще есть safecall и автоматическая обработка ошибок.

Я правильно понял, что safecall - это надстройка над stdcall?
Спасибо.

Да, но удобная надстройка в плане обработки ошибок.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007417
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem.1st,

Это паттерн «издатель-подписчик»
Стандартной реализации в Delphi нет, есть в Qt (сигналы-слоты), но тоже сомнительное удовольствие
Придётся пилить вручную, разруливать синхронизацию и т.д.

Уйти от интерфейсов в сторону издателя-подписчика - это что-то новенькое
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007420
Artem.1st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU

Это паттерн «издатель-подписчик»

Имелось ввиду не шаблон, а работающая концепция.
Вроде, хорошая идея - соединить объекты в одной точке(не надо бегать по коду, искать зависимости). Отключил один, подключил другой.
Но, м.б. нюансы реализации ... вот что интересно
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007425
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem.1st,

Я же написал, что нет
Самое близкое это TAction
Но они на то и паттерны, что реализуются под конкретную задачу
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007445
pvv.pas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOU

...
Для плагинной системы средней сложности тоже нет альтернатив.
...

Есть. Абстрактные классы с абстрактными методами.

SOFT FOR YOU

...
Конечно интерфейсы используют для ARC в первую очередь. Здесь так же нет альтернатив.
...

Есть. Умные указатели на managed records.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007447
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pvv.pas

Есть. Абстрактные классы с абстрактными методами.


Плагины подразумевают, что они могут быть написаны на разных языках
Список VMT различается не только для разных языков, но и для разных версий Delphi
Т.е. сделать можно, но это костыль. А интерфейсы - вещь в целом стандартизированная, как минимум в пределах Windows точно

pvv.pas

Есть. Умные указатели на managed records.


Они появились в 10.4
Ну и виртуальных методов нет, значит невозможна универсализация
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007449
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU

Т.е. сделать можно, но это костыль. А интерфейсы - вещь в целом стандартизированная, как минимум в пределах Windows точно

Интерфейсы в делфи стандартные для всех платформ. Вся FMX написана на интерфейсах.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007450
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pvv.pas

...
Есть. Абстрактные классы с абстрактными методами.
...

Абстрактные классы - это вертикальное масштабирование, интерфейсы - горизонтальное.
Для плагинов у классов больше минусов, а у интерфейсов больше плюсов (разделение менеджеров памяти, множественное наследование, поддержка разными языками программирования).
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007452
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem.1st
Как проще ориентироваться в коде с “виртуальными” Классами?
“Запускать и смотреть” ... боюсь, не подходит. Придется искать какую-то методику или полезное CASE-средство, типа Rational Rose ?

Хз. Как минимум - можно в комментариях указывать имя типичного реализующего объекта с опциональным списком других возможных кандидатов.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007461
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU
Это паттерн «издатель-подписчик»
Стандартной реализации в Delphi нет, есть в Qt (сигналы-слоты)

System.Messaging
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007469
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Да, ты прав
Только я не вижу синхронизации там
Но идея неплохая
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007608
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kazantsev Alexey
SOFT FOR YOU
Это паттерн «издатель-подписчик»
Стандартной реализации в Delphi нет, есть в Qt (сигналы-слоты)

System.Messaging

Это ж .нет, в дельфях не нашел
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007656
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
Kazantsev Alexey
пропущено...
System.Messaging

Это ж .нет, в дельфях не нашел

http://docwiki.embarcadero.com/CodeExamples/Sydney/en/System.Messaging_(Delphi)
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007658
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
Это ж .нет, в дельфях не нашел

Начиная с XE6.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007747
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость

Kazantsev Alexey
Начиная с XE6.

Тьфу ты блин. Смотрел в хелпе от 10.3, через поиск не находит, в содержании нет, а в статье про System прошерстил только Unit scopes, не дошел до Units
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007961
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор http://docwiki.embarcadero.com/CodeExamples/Sydney/en/System.Messaging_(Delphi) меня вот всегда интересовало эти косорукие сами пользуются тем, что пишут или нет - и так куда не взглянешь
использовать генерики, что бы потом приводить типы - это верх .......
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40007998
istrebitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan),

Поглядел немного код, я правильно понимаю, что если мне надо будет передавать TMessage<UnicodeString> в разных местах в смысле
источник1 должен посылать в приёмник1, источник2 должен посылать в приёмник2
то получать я их буду в обоих подписчиках? И надо оборачивать UnicodeString чтоб тип был разный. Сделали бы хоть по ID'шнику.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40008003
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
istrebitel,

{ TMessageManager can have many independent instances , but it
maintains one global instance accessible by TMessageManager.DefaultManager }
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40008116
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
istrebitel
kealon(Ruslan),

Поглядел немного код, я правильно понимаю, что если мне надо будет передавать TMessage<UnicodeString> в разных местах в смысле
источник1 должен посылать в приёмник1, источник2 должен посылать в приёмник2
то получать я их буду в обоих подписчиках? И надо оборачивать UnicodeString чтоб тип был разный. Сделали бы хоть по ID'шнику.
в принципе, не особо проблема, для примитивных типов можно завести свой тип - TSomeType = type ...;

а вот приводить типы каждый раз это что-то с чем-то
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40008419
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
в принципе, не особо проблема, для примитивных типов можно завести свой тип - TSomeType = type ...;

а вот приводить типы каждый раз это что-то с чем-то

А вы предлагаете что?
Variant или TValue?
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40008458
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747,

было бы логично и правильно

Код: pascal
1.
procedure(const Sender: TObject; const M: TMessage<UnicodeString>)
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40008548
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а где же мальчик? (С)
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40008581
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
Код: pascal
1.
procedure(const Sender: TObject; const M: TMessage<UnicodeString>)


Если нужен Sender (в большинстве случаев не нужен и даже вреден) его можно положить в сам message. Что касается конкретно этой реализации - ничего не скажу, поскольку не пользовался. Я ещё во времена Delphi 2 сделал себе пару компонент, чтобы процесс был нагляднее. Когда на форме лежит ConnectionLostNotification - обычно дополнительных вопросов уже не возникает.
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40008599
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

про Sender вопросов нет, он обычно нафиг не нужен, а вот само сообщение нужно - иначе нафига ж его принимать
и это не должно вызывать as-выражений
...
Рейтинг: 0 / 0
Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
    #40008602
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
и это не должно вызывать as-выражений

При реализации через генерики - определённо.
...
Рейтинг: 0 / 0
53 сообщений из 53, показаны все 3 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Интерфейсы. Сравнение ARC и Pure. Какие предпочтения ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]