Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 79 80 [81] 82 83 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#1201
,
|
|
|
|
это инструмент реализации сквозной функциональности |
|
Сообщ.
#1202
,
|
|
|
|
Цитата --Ins-- @ Ещё раз.Если забудет в твоем случае - все будет работать неправильно, а в моем - ему и помнить то не нужно, за него уже подумали Цитата --Ins-- @ Он забыл определить такие действия. Дальше что? Получается, ты защитился от забывчивости только в конструкторе. Забыть же доопределить нужные действия он может в паре десятков методов. Смысл быть беременным на 5%?...независимо от того, забудет программист в потомке это сделать явно или не забудет? --Ins--, Цитата --Ins-- @ И решение (в Delphi, ес-но) - очень простое. В других языках решения столь же изящного нет. И в чем они более гибкие по части ООП? Цитата --Ins-- @ Простым хак быть не должен. В Плюсах много что можно хакнуть, но быдлорешения в нём даются тяжело. Это поощряет хорошие проектные решения, но даёт тебе возможность в тяжёлых ситуациях пойти наперекосяк своей совести. Дельфи этим качеством, увы, не обладает.Хак - это в с++ будет, потому что законного средства нет. А в дельфи это не хак, это использование гибких возможностей объектной модели Цитата --Ins-- @ Я уже напробовался в своё время. Спасибо Плюсам, что заставили научиться правильно проектировать. С разделением по ролям, областям ответственности, инвариантами состояний и гарантиями безопасности.Понимаю, что понять вам это трудно, потому что вы всегда решали эти задачи иначе с горем пополам. В общем, нужно попробовать Цитата --Ins-- @ Кажется, а очередной раз покидаю тему. Мир живёт инвариантами, а Дельфисты их обзывают ... э-э-э, неудачными проектными решениями. Дальнейший диалог считаю бессмысленным. Разговор окончен? И исключение при вызове конструктора - это Что это за запрет создания такой - вызывать исключение? |
|
Сообщ.
#1203
,
|
|
|
|
Что-то у тебя с логикой, однако. Как вытекает из Цитата KILLER @ AfterConstruction нужен для того чтобы гарантировано иметь блок, который выполнится после какихто действий ? Я не вижу причино-следственных связей |
|
Сообщ.
#1204
,
|
|
|
|
Цитата --Ins-- @ http://ins911.blogspot.com/2008/12/singletone-delphi.html - решение для D7, для более поздних имеет смысл список сделать классовой переменной. Для еще более поздних - таки да, возможны дженерики Но фишка - это то, что и без дженериков - чисто на переопределении NewInstance. Работает это так: не секрет что при конструировании любого объекта в первую очередь вызывается неявно метод TObject.NewInstance, который собственно выделяет память под экземпляр и возвращает ссылку на него. Этот метод виртуальный, что открывает большие перспективы. В частности, в данном классе логика его работы переопределена - если первый вызов - создаем экземпляр как раньше, т.е. вызываем унаследованную реализацию. Если же экземпляр уже был создан, то вместо этого просто возвращаем ссылку на него. При использовании же вызываем обычный конструктор. Я для наглядности ввел конструктор с названием GetInstance (название лучше отражает поведение, чем Create), а собственно Create - скрыл и сделал виртуальным, чтобы наследник переопределив его реализацию указал что должно произойти именно в момент создания (а не получения ссылки) первого и единственного экземпляра. Синглетон можно уничтожить явно, вызвав Free, а если нет - то он уничтожится автоматически. не сравнить с реализацией на Io... =) |
|
Сообщ.
#1205
,
|
|
|
|
Цитата korvin @ это инструмент реализации сквозной функциональности Чего чего? Это тогда когда по сути не известно вызовется у тебя сначало базовый конструктор а потом производный или наоборот? Я не удивлюсь, если эти AfterConstruction/BeforeConstruction, выззываются всегда, в определенном порядке... |
|
Сообщ.
#1206
,
|
|
|
|
Цитата Qraizer @ Я не буду на Плюсах реализовывать быдлоспроектированный проект, не жди от меня решений своей задачи. То, что и в Дельфи, и в Плюсах - D_KEY, рассказывал, как - это возможно, не делает такое проектное быдлорешение хорошим. Вот только Плюсы это не поощряют, а Дельфях пофиг. И это проблема языка, не помечаю это как ИМХО. Если даже сильные Дельфисты не видят очевидных ляпов в архитектуре бизнеслогики... а некоторые с тобой не согласны Добавлено Цитата KILLER @ Чего чего? Это тогда когда по сути не известно вызовется у тебя сначало базовый конструктор а потом производный или наоборот? Я не удивлюсь, если эти AfterConstruction/BeforeConstruction, выззываются всегда, в определенном порядке... hint: AOP ссылка выше |
|
Сообщ.
#1207
,
|
|
|
|
Цитата --Ins-- @ Я не вижу причино-следственных связей ![]() Ты не видишь, а я вижу, давай я тебе про них раскажу более детальнее, может быть тоже поймешь. Смотри, у тебя есть BeforeConstruction/AfterConstruction, вопрос зачем они нужны? Ответ за тем чтобы beforeConstruction гарантированно вызвался перед AfterConstruction - верно? Конечно верно, иначе они как минимум не оправдывали своих идентификаторов... Отсюда возникает вопрос, а зачем мне этиметоды, если я и так знаю, когда у меня объект начнет конструироваться и когда он это закончит??? Вот в делфи то и не так как раз, потому как там легко изменить порядок вызова конструкторов, легко вызвать виртуальный метод потомка из конструктора базового класса(это при то что конструктор производного еще не отработал?? )... |
|
Сообщ.
#1208
,
|
|
|
|
Цитата Qraizer @ У тебя глобальное свойство modified подконтрольно всей иерархии Для установки Set - да, а для сброса - Reset - нет И не должно быть оно подконтрольно потомкам. Оно сбрасывается только в трех случаях и баста. Эти случаи:1) После создания нового документа 2) После загрузки из файла 3) При сохранении в файл Все, другого не дано. И давать потомкам руками сбросывать это состояние - это глубость полнейшая. Не должно быть у них такой возможности даже, так как все случаи когда это нужно уже учтены. Ты только дашь ему возможность поломать поведение. Если ты этого не понимаешь, то я открыто выражаю сомнение в твоей квалификации. Инкапсуляция - это прежде всего защита от возможности сделать что-то не то, предоставляя клиенту ограниченный интерфейс Цитата Qraizer @ С разделением по ролям, областям ответственности Во-во, то-то и оно - в разделении ответственности Между классами в рамках иерархии.Цитата Qraizer @ Дальнейший диалог считаю бессмысленным. Разговор окончен? Qraizer, смешной ты человек. 1. Я тебя в эту тему не звал 2. Я тебя здесь силой не держу Хочешь - участвуй, если есть что сказать, не хочешь - чем ты мне угрожаешь? Добавлено Цитата KILLER @ Смотри, у тебя есть BeforeConstruction/AfterConstruction, вопрос зачем они нужны? Ответ за тем чтобы beforeConstruction гарантированно вызвался перед AfterConstruction - верно? У меня нет BeforeConstruction. Остальное нет смысла комменитровать У меня есть только AfterConstructioin, который вызовется в момент, когда объект полностью сконструирован и до возврата ссылки на него клиентскому коду. |
|
Сообщ.
#1209
,
|
|
|
|
Цитата --Ins-- @ У меня нет BeforeConstruction. Остальное нет смысла комменитровать ![]() Значит, видимо для этой модели хватает только одного AfterConstruction, только вот толку от нее, я никак не могу понять, эти вот твои проектные решения которые ты привел тут и являются по сути костылями, потому как запутывают логику окончательно... |
|
Сообщ.
#1210
,
|
|
|
|
фразы
Цитата KILLER @ я никак не могу понять и Цитата KILLER @ и являются по сути костылями противоречат друг другу |
|
Сообщ.
#1211
,
|
|
|
|
Ну вот к примеру:
Ссылка... Цитата Adding the AfterConstruction and BeforeDestruction methods to Delphi 4 is important for component builders that are providing VCL components for both Delphi and C++Builder, to avoid problems with the described differences in constructor and destructor behavior (virtual methods!) between Delphi and C++Builder. Добавлено Цитата --Ins-- @ противоречат друг другу ![]() Вырванные из контекста? Возможно, ты если цитируешь фразы - ты уж будь добр цитируй чтобы смысл сказаного сохранялся... |
|
Сообщ.
#1212
,
|
|
|
|
Цитата KILLER @ Значит, видимо для этой модели хватает только одного AfterConstruction я понимаю претензии к возможности вызывать методы в конструкторе, но вызывать метод объекта до того как он начал создаваться -- это как-то совсем нелепо. по схожим причинам нет и AfterDestrution. впрочем было бы удобно, если бы таки можно было задавать такие методы, только без доступа к самому объекту в них. другие методы часто имеют обе Before- и After- комбинации |
|
Сообщ.
#1213
,
|
|
|
|
Кстати. Почему объект должен следить за историей своих состояний так и не объяснили...
|
|
Сообщ.
#1214
,
|
|
|
|
Цитата korvin @ я понимаю претензии к возможности вызывать методы в конструкторе, но вызывать метод объекта до того как он начал создаваться -- это как-то совсем нелепо. по схожим причинам нет и AfterDestrution. впрочем было бы удобно, если бы таки можно было задавать такие методы, только без доступа к самому объекту в них. другие методы часто имеют обе Before- и After- комбинации Я выше, сразу перед этим твоим сообщением запостил ссылку - там дан ответ на твой вопрос |
|
Сообщ.
#1215
,
|
|
|
|
--Ins--, относительно синглетона. Так как ты хочешь не сделать без шаблонов по причине того, что в С++ не храниться такая информация о типе во время выполнения. С другой стороны, если сделать некоторое допущения, то можно придумать. Но это будет некрасиво.
У меня вопрос по твоей реализации. Разве после GetInstance не будет вызван конструктор? То есть ну будет ли вызван повторно конструктор для уже существующего объекта? |