Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Embarcadero RAD Studio XE4

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

Открыть новую тему     Написать ответ в эту тему

Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
HeMet

Цитата:
Нужно использовать TDictionary<string, T>.

Врят ли найдётся человек, который будет использовать TStringList.AddObject('a', Pointer($1)) вне известных компонентов (TMemo, TCombobox и т.п)

Всего записей: 766 | Зарегистр. 18-05-2009 | Отправлено: 10:46 17-06-2013 | Исправлено: Eternal_Shield, 10:46 17-06-2013
Arioch1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
почем нельзя "достать" из объекта, который поддерживает IChild родительский интерфейс IParent?

 
diamond problem
 

Код:
IParent=interface  
 end;  
   
 ISon=interface(IParent)  
 end;
 
 IDaughter=interface(IParent)  
 end;
 
 
TChild=class(TInterfacedObject, ISon,IDaughter);
 
i_parent := IParent(TChild.Create); // which one ???
 

 
Добавлено:

Цитата:
который будет использовать TStringList.AddObject(

 
сейчас - да.
а когда дженериков не было ?

Всего записей: 904 | Зарегистр. 03-03-2010 | Отправлено: 12:16 17-06-2013
ego666

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Еще раз - TList<T> невозможно расширить так, чтобы изменить поведение - в этом имхо убогость его архитектуры.

Убогость в твоей логической цепочке. Ещё раз: TList выполняет ровно то, что в него заложено, но если бы он вообще был ни на что негоден, то тогда можно было бы говорить о убогости.
 

Цитата:
На Win это обсуловлено спецификой поддержки COM. И непонятно чем это обсуловлено на OSX/iOS

Тем, что интерфейсы в Delphi придерживаются идеологии COM, не конкретной платформозависимой фичей MS, а именно её идеологии.
 

Цитата:
Мне такое поведение кажется нелогичным

http://forum.ru-board.com/topic.cgi?forum=33&topic=13680&start=357&limit=1&m=1#1
 
Добавлено:

Цитата:
diamond problem

Интересно, а в джаве/шарпе что будет с аналогичным кодом? У них же интерфейсы наследуются.

Всего записей: 77 | Зарегистр. 14-06-2013 | Отправлено: 12:19 17-06-2013
deks



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Arioch1
 
Ну - какой интерфейс IParent реализуется объектом TChild, такой и доставать!  
 
Не забываем, что проблема "ромбовидного" наследования характерна именно для множественного наследования полноценных объектов, то есть там, где есть РЕАЛИЗАЦИЯ методов базового класса, которая может быть различна у потомков.  
 
А вот интерфейс - это как бы АБСТРАКТНЫЙ класс, без реализации.  
 
Поэтому все упрощается:  в указанном примере все будет ок, вся неоднозначность должна быть снята при реализации TChild, мы просто укажем явно как именно реализовывать IParent.  
 
Добавлено:
ego666
 

Цитата:
Убогость в твоей логической цепочке. Ещё раз: TList выполняет ровно то, что в него заложено, но если бы он вообще был ни на что негоден, то тогда можно было бы говорить о убогости.

 
Убогость в том, что TList мог бы выполнять гораздо больше путем простой метки "virtual" у методов. Причем, причины отсутствия этой метки не ясны. И убогость в том, что он может выполнять ТОЛЬКО ТО что в него заложено, а изменить поведение не получится. Если тебе кажется что менять поведение стандартных контейнеров нет смысла - ну и живи с этим чувством! Я ж не спорю с твоим мироощущением - ты имеешь на него полное право. Видимо, по существу означенной проблемы ты возразить не можешь: TList не может менять свое поведение.  
 
Ну и я никогда не говорил "TList ни на что не годен". Если бы он не мог выполнять то, что в него заложено - стоило бы говорить не об убогости, а о неработоспособности.  
 
Еще раз: есть задача изменить поведение TList. Подробнее: есть реализованный на его базе список файлов в каталоге. Список с отложенным чтением самого каталога (чтобы объект создавался быстро), но по доступу, например к свойству Count этот список читается. Вопрос: как реализовать это на TList?  
 
Мой ответ: никак! По непонятной причине методы TList не виртуальные, нужно делать собственную реализацию. У этого подхода огромный недостаток -  для любых посторонних объектов, которые умеют работать с TList, собственная реализация не подходит!  

Всего записей: 857 | Зарегистр. 09-10-2003 | Отправлено: 12:25 17-06-2013
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Arioch1

Цитата:
а когда дженериков не было ?

В случае с компонентами, конкретно я всегда создавал DummyObject с необходимыми мне полями и всё, либо соотв. дин. массив.  
 
Тут, конечно, другой гемор появлялся, но чтобы Pointer(43) пихать в AddObject ... было пару раз по молодости.
 

Всего записей: 766 | Зарегистр. 18-05-2009 | Отправлено: 12:53 17-06-2013
ego666

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подробнее...
 
Добавлено:
P.S.
А можно как-нибудь писать длинные посты без сворачивания?

Всего записей: 77 | Зарегистр. 14-06-2013 | Отправлено: 13:00 17-06-2013 | Исправлено: ego666, 13:27 17-06-2013
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ego666

Цитата:
Интересно, а в джаве/шарпе что будет с аналогичным кодом? У них же интерфейсы наследуются.

Это-сэто, а что, в C#/Java есть понятие интерфейса, а не, тупо, класса? Разумеется, что в C# аналогичный код работает, ибо "интерфейс" всего лишь абстрактный класс. Нету в этих языках понятия интерфейс, имхо.

Всего записей: 766 | Зарегистр. 18-05-2009 | Отправлено: 14:21 17-06-2013
deks



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Eternal_Shield
 
Хм. А чем дельфовый интерфейс концептуально отличается от абстрактного класса? Ну, кроме возможности реализовать много интерфейсов одним классом?

Всего записей: 857 | Зарегистр. 09-10-2003 | Отправлено: 16:12 17-06-2013
valgreesh



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Arioch1

Цитата:
Другими словами интеропа - нет, он не обеспечен ни проблемно, ни тем более беспроблемно (но есть теоретическая возможность его обеспечить и COM VTBL этому как-то поможет)

Интероп с win32 обеспечен таки беспроблемный (для буквоедов добавлю - при условии использования ограниченного количества типов и прочее бла-бла) (мы можем получить интерфейс извне и использовать его привычным образом - Direct2D, например. Мы можем отдать интерфейс во вне и его смогут использовать). Что же касается Objective-C... Чем являются тамошние протоколы, если не абстрактными классами из C++ -> интерфейсами?

Всего записей: 292 | Зарегистр. 30-11-2011 | Отправлено: 16:42 17-06-2013
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Еще раз - TList<T> невозможно расширить так, чтобы изменить поведение - в этом имхо убогость его архитектуры. В .NET/Java/ObjC можно менять поведение, а в Дельфи нет
ну брось. Это всего лишь вариант реализации. Юзай Delphi.Collections. Там все  есть.
 
 
Добавлено:
Я вот понять не могу.. Если я пишу код для ios, и подключаю внешнюю нестандартную(скажем,C++) библиотеку, то как это все может работать в эмуляторе, если эмулятор работает по x86, а устройство - на ARM?  
Мне что, нужно два варианта библиотеки? И получается, отлаживать 1-в-1 можно только подключив ios устройство?
И еще вопрос. В лазаре вообще нет отладчика для ios, или андроида?

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 17:17 17-06-2013
deks



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlekXL
 

Цитата:
Юзай Delphi.Collections

Можно и его, там есть - не спорю. Мне не понятно, почему в TList нету - и обидно, что контролы заточенные под TList с ходу не едят альтернативы! На ровном месте пустые хлопоты..
 

Цитата:
как это все может работать в эмуляторе

 
Для эмулятора все компилируется для x86, для устройства - в armv7, armv7s. И приложение, и библиотеки. И да, без устройства отладить приложение не получится - производительность эмулятора в x86 и arm на устройстве может ОЧЕНЬ СИЛЬНО отличаться. К тому же на эмуляторе есть/были ограничения в поддерживаемых фичах (Game Center, iCloud, etc).

Всего записей: 857 | Зарегистр. 09-10-2003 | Отправлено: 19:01 17-06-2013
Arioch1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Интероп с win32 обеспечен таки беспроблемный

причем еще в Delphi 2.0
 

Цитата:
Что же касается Objective-C... Чем являются тамошние протоколы

Не знаю и знать не хочу
Мне обещали УЖЕ реализованное БЕСПРОБЛЕМНОЕ взаимодействие на уровне базовый для языков строительных блоков - объектов
 
Добавлено:

Цитата:
А чем дельфовый интерфейс концептуально отличается от абстрактного класса?

Например явным запретом на наследование и поддержкой нескольких парраллельно существующих интерфейсов одной сущностью (I1.Count и i2.Count при этом совсем разные методы)
 

Цитата:
Поэтому все упрощается:  в указанном примере все будет ок, вся неоднозначность должна быть снята при реализации TChild, мы просто укажем явно как именно реализовывать IParent.  

 
Это разумеется. Можно сделать класс, поддерживающий и IParent и IChild, их обоих.
Но вопрос-то был - http://forum.ru-board.com/topic.cgi?forum=33&topic=13680&start=340#19 - именно почему так нужно делать, почему IParent не появляется автоматически, при указании IChild

Всего записей: 904 | Зарегистр. 03-03-2010 | Отправлено: 19:46 17-06-2013
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
deks

Цитата:
Хм. А чем дельфовый интерфейс концептуально отличается от абстрактного класса? Ну, кроме возможности реализовать много интерфейсов одним классом?

Я бы не стал называть интерфейс абстрактным классом. Мало общего начиная с низу и кончая верхом ))  
 
Подробнее...  
 
В С++ же общее всё от и до. В С# тоже самое, стоит лишь поиграться с наследованием и видно, что поведение одинаковое с классами. Думаю, что и layout 100% одинаковый. Подробнее...
 

Всего записей: 766 | Зарегистр. 18-05-2009 | Отправлено: 21:18 17-06-2013 | Исправлено: Eternal_Shield, 21:19 17-06-2013
valgreesh



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Arioch1

Цитата:
причем еще в Delphi 2.0

Ценное замечание, особенно если учесть, что речь об интерфейсах...
 

Цитата:
Мне обещали УЖЕ реализованное БЕСПРОБЛЕМНОЕ взаимодействие на уровне базовый для языков строительных блоков - объектов

Никто таких глупостей не обещал.

Всего записей: 292 | Зарегистр. 30-11-2011 | Отправлено: 23:11 17-06-2013
ego666

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
именно почему так нужно делать, почему IParent не появляется автоматически, при указании IChild

не тупи, с предыдущей страницы вам уже два раза объясняли.
 
Вот пример как это может вылезти боком:
 
Добавлено:
Подробнее...
 
Добавлено:

Цитата:
А чем дельфовый интерфейс концептуально отличается от абстрактного класса?

http://docwiki.embarcadero.com/RADStudio/XE2/en/Object_Interfaces_Index
 
Добавлено:
Меня вот ещё волнует какой вопрос, начиная с Delphi 2010 (если не вру) появилась поддержка расширенного RTTI и заканчивая на Delphi XE3 в ней постепенно исправлялись баги. И вот вопрос, как теперь на новом компиляторе под iOS обстоят дела с поддержкой расширенного RTTI? Оно вообще есть надеюсь? В полной ли мере? Уже с новыми багами?

Всего записей: 77 | Зарегистр. 14-06-2013 | Отправлено: 05:32 18-06-2013 | Исправлено: ego666, 05:58 18-06-2013
Arioch1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Ценное замечание, особенно если учесть, что речь об интерфейсах...

Не совсем, речь о том, что якобы интерфейсы обеспечили возможность использования win32
 

Цитата:
Никто таких глупостей не обещал.


Цитата:
 обеспечивается беспроблемный интероп с ... Objective C ... кодом

 

Всего записей: 904 | Зарегистр. 03-03-2010 | Отправлено: 08:36 18-06-2013
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ego666

Цитата:
Вот пример как это может вылезти боком:  

Интересно, что этот пример демонстрирует? Почему TFileList не унаследован от TList? Тогда будут доступны интерфейсы IList и IFileList из TFileList и не надо будет реализовывать дополнительно методы IList в TFileList
 
Да и с каких это пор родитель (в вашем случае IList) обязан знать, что добавлено в наследниках (IFileList) и, главное, по какому такому святому правилу? Вот это уже реальным  бредом пахнет, а не то, что Вам пытался донести deks с проблемами TList<>, но как об стенку горохом

Всего записей: 766 | Зарегистр. 18-05-2009 | Отправлено: 11:44 18-06-2013 | Исправлено: Eternal_Shield, 11:49 18-06-2013
ego666

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Почему TFileList не унаследован от TList?

С какой стати? Первый - это массив элементов. Второй - допустим список строк в файле. Внутренняя реализация этих классов совершенно разная.
 

Цитата:
Тогда будут доступны интерфейсы IList и IFileList из TFileList

Ты наверное не понял, ещё посмотри раз код, мне как раз и нужно чтобы интерфейса IList не было в TFileList, т.к. сам по себе IList без методов Open и Close (как в IFileList) бесполезен и опасен.
 

Цитата:
и не надо будет реализовывать дополнительно методы IList в TFileList

Мне не это нужно. Понимаешь, это интерфейс а не класс, в IFileList от IList наследуется интерфейс, а не реализация, в TList и TFileList интерфейсы будут реализованы по разному, целиком и полностью по разному.
 
Добавлено:

Цитата:
Да и с каких это пор родитель (в вашем случае IList) обязан знать, что добавлено в наследниках (IFileList) и, главное, по какому такому святому правилу?

А он и не знает и не должен знать, потому что он абстрактный интерфейс, он может как угодно быть реализован, от него можно как угодно унаследоваться и потом этого наследника можно тоже как угодно реализовать и эта реализация может на сколько угодно отличаться от реализации родителя, потому что это интерфейсы, такова их идеология (двигаемая COM'ом).
 
Ещё раз повторю, ты просто не понял кода (и возможно зачем вообще нужны интерфейсы).

Всего записей: 77 | Зарегистр. 14-06-2013 | Отправлено: 12:09 18-06-2013 | Исправлено: ego666, 12:09 18-06-2013
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ego666

Цитата:
Ещё раз повторю, ты просто не понял кода (и возможно зачем вообще нужны интерфейсы).

Я отлично понял, как эта логика работает. Подробности реализации меня не интересуют. Достаточно было сказать:

Цитата:
Мне не это нужно. Понимаешь, это интерфейс а не класс, в IFileList от IList наследуется интерфейс, а не реализация, в TList и TFileList интерфейсы будут реализованы по разному, целиком и полностью по разному.  

и на этом остановиться, а не изображать из меня идиота. Делать мне нечего, как гадать на кофейной гуще на тему "чего там под капотом".
 

Цитата:
А он и не знает и не должен знать, потому что он абстрактный интерфейс, он может как угодно быть реализован, от него можно как угодно унаследоваться и потом этого наследника можно тоже как угодно реализовать и эта реализация может на сколько угодно отличаться от реализации родителя, потому что это интерфейсы, такова их идеология (двигаемая COM'ом).  

А мы не путаем IUnknown и IDispatch? Формализуйте понятие "абстрактный интерфейс" ...

Всего записей: 766 | Зарегистр. 18-05-2009 | Отправлено: 12:45 18-06-2013
ego666

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
и на этом остановиться, а не изображать из меня идиота

извиняюсь
 
Добавлено:

Цитата:
А мы не путаем IUnknown и IDispatch

это вообще из другой оперы.
 

Цитата:
Формализуйте понятие "абстрактный интерфейс"

COM рекомендует писать интерфейсы с неопределённым смыслом (с простым/обобщённым/универсальным наименованием методов), чтобы каждая отдельная реализация этого интерфейса могла его, "смысл" интерфейса, интерпретировать по своему.

Всего записей: 77 | Зарегистр. 14-06-2013 | Отправлено: 13:07 18-06-2013 | Исправлено: ego666, 13:15 18-06-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Embarcadero RAD Studio XE4


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru