|
|
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Следует ли считать хорошей практикой использование strict private вместо private ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 17:47 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Имеет смысл использовать если ты делаешь платные компоненты и распространяешь в dcu Мне кажется protected - самое то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 18:06 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUИмеет смысл использовать если ты делаешь платные компоненты и распространяешь в dcu Мне кажется protected - самое то. При чем тут "protected и "распространение в dcu"? Речь о strict private . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 18:10 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Если ты делаешь классы исключительно для внутреннего потребления - сугубо пофиг. У классов для сторонних пользователей любое private смердит, поскольку не позволяет использовать полиморфизм ради которого (в том числе) классы и задумывались. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 18:10 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Из одной мертвой галактики, Притом, что private вообще не нужен. Ни обычный, ни strict. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 18:20 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Еретики... и private нужен, и strict. Я везде применяю strict, чтобы в подсказках лишние методы не маячили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 18:29 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovУ классов для сторонних пользователей любое private смердит, поскольку не позволяет использовать полиморфизм ради которого (в том числе) классы и задумывались. И каким же образом доступность кишок класса связана с полиморфизмом? Вообще. Я вижу так: public и protected - это интерфейс, API. Менять его может быть затруднено и болезненно. А private - это внутренняя реализация, которую можно менять как вздумается. И без этой области свободных манипуляций внесение изменений в класс взрастит такой геморрой у разработчика, что ну вас нафиг с такими идеями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 18:41 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Василий №2И каким же образом доступность кишок класса связана с полиморфизмом? Приватные методы нельзя оверрайдить. К приватным полям нельзя достучаться. Изменить поведение базового класса, автор которого злоупотреблял приватностью, невозможно. Полиморфизм недоступен. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 18:52 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Из одной мертвой галактикиСледует ли считать хорошей практикой использование strict private вместо private ?Следует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 18:59 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Из одной мертвой галактикиСледует ли считать хорошей практикой использование strict private вместо private ? Если у вас на каждый класс отдельный unit, то необязательно. Если у вас более одного класса в модуле, и они могут пересекаться, то лучше strict. Иначе от такого вы не будете защищены. К тому же IntelliSense не будет показывать мусор из strict private Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 19:02 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Из одной мертвой галактикиСледует ли считать хорошей практикой использование strict private вместо private ?Нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 19:05 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovПриватные методы нельзя оверрайдить. К приватным полям нельзя достучаться. Изменить поведение базового класса, автор которого злоупотреблял приватностью, невозможно. Полиморфизм недоступен. Полиморфизм вполне себе доступен в рамках, отведенных для этого автором. Всё, что свыше этого, - от лукавого либо результат совсем уж убогой реализации. А вот доступ к кишкам класса куда вреднее. Например: Код: pascal 1. 2. 3. 4. 5. 6. При этом FSomeObj всегда создается в конструкторе и потому предполагается, что всегда не nil. Но условному апологету безграничного полиморфизма не нравится доступ по свойству, и он использует FSomeObj. А потом автор понимает, что FSomeObj нужен далеко не всегда и не сразу, поэтому встраивает создание перед использованием, меняя объявление на Код: pascal 1. И вот тут апологет ловит AV at address $000000 и идет курить бамбук. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 19:22 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Действительно, странно противопоставлять полиморфизм механизмам инкапсуляции. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 19:25 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Василий №2Полиморфизм вполне себе доступен в рамках, отведенных для этого автором. Проблема в том, что автор, отдавая компоненты на сторону, обычно сам не знает, что именно может потребоваться перекрыть. Мне пару раз приходилось переписывать штатные VCL-компоненты только лишь потому, что авторы не добавили директиву virtual в одном месте. Даже в приведенном примере лучше сразу делать виртуальный геттер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 19:50 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Не просто же так частные поля делают. И закрывают информацию внутри класса. Так то можно, конечно, всё наружу или почти наружу вытащить, говоря - делайте что хотите, сломаете - ваши проблемы. Только, мне кажется, это плохой подход. Вообще. В крайнем случае можно сырцы поправить. А код без исходников лучше вообще не применять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 20:17 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
makhaonВ крайнем случае можно сырцы поправить.Эта практика намного хуже, напрочь убивает идею сопровождения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 20:35 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисmakhaonВ крайнем случае можно сырцы поправить.Эта практика намного хуже, напрочь убивает идею сопровождения. в реальной жизни гораздо быстрее исправить ошибку в исходниках, чем бесконечно переписываться с аффтаром, который может бюыть вообще недоступен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 20:42 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
defecator, это понятно. Но как же бесит при этом муторная сверка исходников после обновления... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 20:56 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
всем противникам strict private рекомендую вспомнить о class sealed, он вообще явно запрещает любых наследников класса)))) шах и мат полиформизму и его безумным поклонникам))) strict private вызывает ненависть? храните все в public!))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 20:57 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
asutp2всем противникам strict private рекомендую вспомнить о class sealed, он вообще явно запрещает любых наследников класса)))) шах и мат полиформизму и его безумным поклонникам))) strict private вызывает ненависть? храните все в public!))) пиши процедурно, безумец, не стесняйся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 21:01 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
defecatorasutp2всем противникам strict private рекомендую вспомнить о class sealed, он вообще явно запрещает любых наследников класса)))) шах и мат полиформизму и его безумным поклонникам))) strict private вызывает ненависть? храните все в public!))) пиши процедурно, безумец, не стесняйсяпочему же, я как раз сторонник классов, но считаю, что ВСЕГДА разрешать давать наследникам перекрывать ВСЕ свойства и методы мягко говоря неправильно. Так вообще можно дойти до того, что будет единственная ветка наследования класс1<-класс2<-класс3<-....<-класс9999999999999999 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 21:09 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
asutp2defecatorпропущено... пиши процедурно, безумец, не стесняйсяпочему же, я как раз сторонник классов, но считаю, что ВСЕГДА разрешать давать наследникам перекрывать ВСЕ свойства и методы мягко говоря неправильно. Так вообще можно дойти до того, что будет единственная ветка наследования класс1<-класс2<-класс3<-....<-класс9999999999999999 ты же назвал сторонников полиморфизма безумными а ведь полиморфизм это другое, не то, что ты только что описал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 21:12 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Буч - это голова. И Фаулер - это голова. Фаулер и Буч - это две головы. Читайте классиков, вопросы отпадут сами собой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 21:17 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
defecatorasutp2пропущено... почему же, я как раз сторонник классов, но считаю, что ВСЕГДА разрешать давать наследникам перекрывать ВСЕ свойства и методы мягко говоря неправильно. Так вообще можно дойти до того, что будет единственная ветка наследования класс1<-класс2<-класс3<-....<-класс9999999999999999 ты же назвал сторонников полиморфизма безумными а ведь полиморфизм это другое, не то, что ты только что описаля назвал безумными не тех, кто адекватно использует различные области видимости в классах/необходимые элементы для перекрытия в зависимости от задачи, а тех, кто желает изменять все что вздумается наследному классу и ненавидит strict private))). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 21:33 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
авторНо как же бесит при этом муторная сверка исходников после обновления... Дифф в помощь. Автоматический или руками пробежаться. Винмержем я, например, инди свожу за час-полтора. У меня правок десятка два мест. Шансов, что их добавят, я думаю, около нуля. Быстрее руками свести. Особенно если надо не часто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 21:39 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
asutp2defecatorпропущено... ты же назвал сторонников полиморфизма безумными а ведь полиморфизм это другое, не то, что ты только что описаля назвал безумными не тех, кто адекватно использует различные области видимости в классах/необходимые элементы для перекрытия в зависимости от задачи, а тех, кто желает изменять все что вздумается наследному классу и ненавидит strict private))). я не использую strict private и прочие дебильные генерики с твоей точки зрения я - безумный сторонник полиморфизма ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 21:53 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
makhaonавторНо как же бесит при этом муторная сверка исходников после обновления... Дифф в помощь. Автоматический или руками пробежаться. Винмержем я, например, инди свожу за час-полтора. У меня правок десятка два мест. Шансов, что их добавят, я думаю, около нуля. Быстрее руками свести. Особенно если надо не часто. я через Araxis Megre свожу, ещё быстрее получается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 21:54 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
makhaonДифф в помощь. Автоматический или руками пробежаться. Бесит не потому, что долго, а потому, что идиотское занятие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 22:00 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Из одной мертвой галактики, ИМХО нововведение хорошее, его действительно удобно использовать при рефакторинге, но одного его недостаточно. Использование сторонних компонентов (да и своих тоже), тут естественно плохо что нельзя что-то достать. Было бы неплохо иметь задекларированный потайной доступ к приватным объектам (недекларированный есть и не очень хороший). Например, в питоне и ряде других языков неплохая парадигма, это позволило бы простым поиском отслеживать в своих да и чужих исходниках необходимость улучшения компонента . по поводу задания\не задания виртуальности, ИМХО тут бы помогла реализация механизмов АОП - тогда бы эта проблема просто исчезла. PS: на каждый болт должна быть своя гайка, иначе использование превращается в гумно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 09:34 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
А у всех ли будет Delphi 2007 и выше ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 10:16 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
DimaBr, да, у всех. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 10:20 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)Было бы неплохо иметь задекларированный потайной доступ к приватным объектам 1) Если такое понадобилось - плохо спроектированная архитектура. 2) Если приперло, есть RTTI ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 10:22 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Кмк, легче при обновлении сторонних библиотек накатить диффом элементарные изменения, нежели ловить подводные камни. Если исходники есть - то можно и выстрелить себе в ногу, если очень хочется: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 11:04 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
X-Citekealon(Ruslan)Было бы неплохо иметь задекларированный потайной доступ к приватным объектам 1) Если такое понадобилось - плохо спроектированная архитектура. 2) Если приперло, есть RTTI1 - о чём и речь, но наш мир не идеален, и это нужно очень часто, а изменить компонент возможности нет - зачем сопротивляться очевидному? 2 - ИМХО лечилка хуже болезни, так как ошибки в декларациях при динамическом исполнении невозможно поймать при компиляции. Пока самый адекватный способ это баг в компиляторе с " with self do " в хелпере ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 12:09 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, Ок, переопределили метод, вытащили из текущей версии реализацию, добавили свой код. Пришла новая версия, в которой метод переписали. Что-то поменялось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 12:53 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
makhaonСоколинский Борис, Ок, переопределили метод, вытащили из текущей версии реализацию, добавили свой код. Пришла новая версия, в которой метод переписали. Что-то поменялось? +1. Вопросы видимости - в том числе вопросы протокола общения заказчика с пользователем. То есть, если можешь и хочешь лезть в кишки, то без претензий к разработчику насчет того, что в очередном апдейте изменилась внутренняя реализация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 13:03 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
makhaonОк, переопределили метод, вытащили из текущей версии реализацию, добавили свой код. Пришла новая версия, в которой метод переписали. Что-то поменялось? Не понял вопроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 13:35 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, Перегрузили виртуальный метод, утащили код, частично поменяли поведение. А его поведение опять поменялось в оригинальном классе. И опять сводить? :) Сильно ли тут перегрузка поможет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 13:53 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
makhaon, Эта ситуация принципиально проще. В идеале: 1. Смотрим в whatsnew отличия версий и решаем, нужно ли что-то менять у себя. 2. Если нужно - сравниваем свою надстройку с измененной базовой реализацией и выбираем одно из 3 решений 2а. оставить все как есть 2б. убрать собственный фикс если он уже присутствует в штатной версии. 2в. переписать надстройку. Собственно, только п. 2в может потребовать каких-то осмысленных действий. Но это намного проще тотального сличения исходников даже с помощью соответствующих инструментов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 14:39 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
жесть когда юзаешь крэкеры для доступа к приватам а в новой версии layout класса поменялся и новые члены воткнули не в конец ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 15:15 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
vavan, или вообще все кишки переписали к черту и ни одного старого private члена не оставили. А то и класс-адаптер подсунули, вместо старого, а реализацию в каком-нибудь вебсервисе заховали. Нефик лезть в private, то есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 15:20 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
чччДНефик лезть в private, то естьв неидеальном мире увы приходится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 15:24 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Соколинский Борисmakhaon, Эта ситуация принципиально проще. В идеале: 1. Смотрим в whatsnew отличия версий и решаем, нужно ли что-то менять у себя. 2. Если нужно - сравниваем свою надстройку с измененной базовой реализацией и выбираем одно из 3 решений 2а. оставить все как есть 2б. убрать собственный фикс если он уже присутствует в штатной версии. 2в. переписать надстройку. Собственно, только п. 2в может потребовать каких-то осмысленных действий. Но это намного проще тотального сличения исходников даже с помощью соответствующих инструментов.при таком подходе нужно использовать исключительно собственноручно написанные классы и компоненты... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 15:24 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
asutp2нужно использовать исключительно собственноручно написанные классы и компонентыв идеале с собственным компайлером и на своей оси ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 15:26 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
vavanasutp2нужно использовать исключительно собственноручно написанные классы и компонентыв идеале с собственным компайлером и на своей оси однозначно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 15:27 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
X-CiteЕсли у вас более одного класса в модуле, и они могут пересекаться, то лучше strict. +1 Когда 2 и более класса в одном модуле, они получают доступ к своим private элементам. Что бы это исправить, ввели новое словечко - strict private По идее, любой private и так должен быть strict private. Не знаю, о чём думало Ембрякоделло или как её там по имени. Если ты не разрабатываешь компоненты, то лучше использовать 1 модуль=1 класс. Private в Delphi - это недоразумение. А пример от X-Cite - это хороший пример того говнокода, который потом получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 15:30 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Valery_BЕсли ты не разрабатываешь компоненты, то лучше использовать 1 модуль=1 класс. Явист детектед)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 19:24 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Valery_B... Если ты не разрабатываешь компоненты, то лучше использовать 1 модуль=1 класс. ... А как ты реализуешь два класса в раздельных модулях, чтобы в каждом классе было поле типа другого класса? Это не C#, тут от циклических ссылок в uses компилятор благим матом вопит. Думаешь, в дельфи монструозных размеров модули создают из-за гигантофилии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 19:31 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Valery_BX-CiteЕсли у вас более одного класса в модуле, и они могут пересекаться, то лучше strict. +1 Когда 2 и более класса в одном модуле, они получают доступ к своим private элементам. Что бы это исправить, ввели новое словечко - strict private По идее, любой private и так должен быть strict private. Не знаю, о чём думало Ембрякоделло или как её там по имени. Если ты не разрабатываешь компоненты, то лучше использовать 1 модуль=1 класс. Private в Delphi - это недоразумение. А пример от X-Cite - это хороший пример того говнокода, который потом получается. дурная мысль заразна, гон на Embarcadero тоже не месту ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 19:46 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
чччДValery_B... Если ты не разрабатываешь компоненты, то лучше использовать 1 модуль=1 класс. ... А как ты реализуешь два класса в раздельных модулях, чтобы в каждом классе было поле типа другого класса? Это не C#, тут от циклических ссылок в uses компилятор благим матом вопит. Думаешь, в дельфи монструозных размеров модули создают из-за гигантофилии? Это решается разделением абстракции от реализации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 19:46 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
X-CiteчччДпропущено... А как ты реализуешь два класса в раздельных модулях, чтобы в каждом классе было поле типа другого класса? Это не C#, тут от циклических ссылок в uses компилятор благим матом вопит. Думаешь, в дельфи монструозных размеров модули создают из-за гигантофилии? Это решается разделением абстракции от реализации Код покажи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 20:22 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
чччДX-Citeпропущено... Это решается разделением абстракции от реализации Код покажи. ща он интерфейсов накидает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 21:12 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
defecatorща он интерфейсов накидает Зачем, если вдруг требуется циклическая зависимость, то это обычно необходимо только, если зависимый должен уведомлять владельца о чем либо. Например коллекция и элементы.. Тогда это Наблюдатель (шаблон проектирования) Если вдруг надо выполнить работу которую делает владелец из зависимого, то это уже некорректное проектирование и надо произвести композицию, выделить поведение в отдельную реализацию и передать ее как ссылку из владельца в зависимый элемент. Например это можно сделать через Мост (шаблон проектирования) При чем в этом случае можно обойтись без интерфейсов. В первом случае тоже можно обойтись без интерфейсов, если делегировать принцип наблюдения другим классам. Но это будет слегка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 21:32 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Шо тут показывать. Сделать одному из классов предка в отдельном модуле, да и всё. И в оба модуля подключить этот доп. модуль. Ну а во втором классе тип свойства указать как этот предок. Всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 21:45 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
X-Citedefecatorща он интерфейсов накидает Зачем, если вдруг требуется циклическая зависимость, то это обычно необходимо только, если зависимый должен уведомлять владельца о чем либо. Например коллекция и элементы.. При чем, если уведомлять коллекцию надо только для того, чтобы она уведомила другие элементы, то паттерн Наблюдатель тут не нужен. Здесь поможет Посредник ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 22:01 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
X-CiteПри чем, если уведомлять коллекцию надо только для того, чтобы она уведомила другие элементы, то паттерн Наблюдатель тут не нужен. Здесь поможет Посредник если перевести на русский, то это звучит как "фигачь OnClick, OnDraw, .... и ... выё..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 22:10 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
X-Citedefecatorща он интерфейсов накидает ... Например... Код давай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 23:14 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
чччДX-Citeпропущено... ... Например... Код давай. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Дополни код, чтобы он компилировался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 23:20 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Хорош троллить человека. :) Ну третий модуль добавь, например. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 23:33 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
...паттерн Наблюдатель...Посредник... И го'вна от GoF тоже не помогут, никак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 23:34 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам... Ну третий модуль добавь, например. И чем это поможет? В Delphi уже позволена Forward declaration классов за пределами модуля? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 23:38 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
чччД> И чем это поможет? От circular unit reference спасёт, ссылаться на третий модуль позволит. P.S. Выключи дурочку. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 23:45 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
чччДчччДпропущено... Код давай. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Дополни код, чтобы он компилировался. Это называется некорректно спроектированная архитектура. Так нельзя писать. Для этого необходимо произвести композицию реализации с выделением абстракции... То что вы написали, называется, как умею так и пишу... А сама среда еще и потворствует не думать, а писать как умею... Вся суть RAD в том, чтобы быстро выпускать небольшие продукты не рассчитывая на расширяемость... Когда проект или фреймворк превращается в долгоиграющий с постоянным расширением фуфнкционала растянутым во времени, такая практика приводит к печальным последствиям... Например к словам проще все переписать, чем вникнуть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 00:07 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
X-Cite...некорректно спроектированная архитектура...нельзя...необходимо произвести композицию реализации с выделением абстракции... Эту скучную песенку постоянно пели и шарписты, пока в очередной версии им перекрестные ссылки не разрешили. Теперь они просто действительно разносят классы по модулям. Или не разносят, в зависимости от настроения. Как и си-плюс-плюсники и другие программисты (кроме дельфистов, конечно, которые не просто катят квадратное колесо, а еще и нахваливают дорожные ямы). А так-то, да, так писать нельзя, полностью согласен. В Delphi. Не скомпилируется ибо. Исключительно из-за рукожопости разработчиков компилятора Delphi. ... ... ... Ну так что - будет код или ля-ля про паттерны дальше будешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 00:23 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
"Циркулярные" ссылки, конечно, не "перекрестные". :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 00:25 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
чччДНу так что - будет код или ля-ля про паттерны дальше будешь? Окей.. Чтобы написать код, мне нужна цель для которой необходимо так сделать... Ставь цель: например TA с помощью FB должен сделать то, а TB с помощью FA должен сделать это.. А я что-нибудь придумаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 00:28 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамчччД> И чем это поможет? От circular unit reference спасёт, ссылаться на третий модуль позволит. P.S. Выключи дурочку. Может, хоть ты код покажешь? 21257210 - допиши несколько строк, трудно тебе, что ли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 00:30 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
чччД> Может, хоть ты код покажешь? > 21257210 - допиши несколько строк, трудно тебе, что ли. Какой-то ты вредный в ночь со вторника на четверг. Не трудно, а лень. Ну, например, так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Давай, начинай рассказывать, что это некошерно, лишний модуль и класс и вообще тебе обязательно ссылка на потомок нужна, а не на базовый. Я заранее со всем соглашусь, чтобы два раза не вставать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 00:49 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
X-CiteчччДНу так что - будет код или ля-ля про паттерны дальше будешь? Окей.. Чтобы написать код, мне нужна цель для которой необходимо так сделать... Ставь цель: например TA с помощью FB должен сделать то, а TB с помощью FA должен сделать это.. А я что-нибудь придумаю... Вот тебе цель, вместе с ТЗ: 21257210 Ты же не обезьянка, а программист, должен уметь решать абстрактные задачи. Тем более, я тебя за язык не тянул, ты сам вызвался. А если у тебя вопросы по примерам - открой, к примеру, файл DB.pas - там их море. И заодно задумайся - от чего там в начале модуля такие смешные строчки: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Ты действительно думаешь, в этом модуле более 10тыс исключительно из любви к искусству? Нет, всего лишь потому, что классы. определенные в модуле, имеют члены с типом других классов, циркулярно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 00:53 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
P.S. Конечно, от этого давно пора избавиться. Равно как и от невозможности нормально код класса по модулям разносить. P.P.S. Чего у нас только нет! И этого у нас тоже нет... (с) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 00:54 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамчччД> Может, хоть ты код покажешь? > 21257210 - допиши несколько строк, трудно тебе, что ли. Какой-то ты вредный в ночь со вторника на четверг. Не трудно, а лень. Ну, например, так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Давай, начинай рассказывать, что это некошерно, лишний модуль и класс и вообще тебе обязательно ссылка на потомок нужна, а не на базовый. Я заранее со всем соглашусь, чтобы два раза не вставать. А давай "классовые" типы всегда типа TObject задавать - вот и нет проблемы, они ж все от него наследуются, и третий модуль не понадобится. Что нам, трудно явно к нужному типу привести. Это и дисциплинирует, и вообще - модно, молодежно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 01:04 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Смысла ругать дельфи нет: все равно ничего не исправишь, надо пользоваться тем, что есть. Надо спать идти. Вот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 01:05 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Да. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 01:08 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
чччДА если у тебя вопросы по примерам - открой, к примеру, файл DB.pas - там их море. И заодно задумайся - от чего там в начале модуля такие смешные строчки: Код: pascal 1. 2. 3. Ты действительно думаешь, в этом модуле более 10тыс исключительно из любви к искусству? Нет, всего лишь потому, что классы. определенные в модуле, имеют члены с типом других классов, циркулярно. Потому что криво спроектирована архитектура)))) берем пример TField Код: pascal 1. 2. 3. 4. Это сделано из-за вот такого говнокода: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Если выделить абстракцию Перечислитель в абстрактный класс, то TFieldsEnumerator можно будет объявить после TFields и TField и тогда не понадобится forward А так сделано потому, что TFields унаследован от TObject а TField от TComponent, Хотя по сути TFields это некая коллекция (список, словарь и т.п.), следовательно если бы выделили ее в отдельную абстракцию... Например вот так.. мне лень сделать это красивее... Код: 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. Все работает Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 01:26 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
X-Cite, ну с генериками финт раньше нельзя было сделать А теперь давай их все, как предлагают, выделим в отдельные модуля - итого выходит 6 модулей. Зашибись ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 08:34 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Без генериков можно сделать если TEnumeratorField поместить внутрь TFields. type TFields = class public type TEnumeratorFields = class property A: TFields end; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 09:04 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
X-CiteЭто называется некорректно спроектированная архитектура. То что вы написали, называется, как умею так и пишу... +2 X-Cite, Человеку, который хотя бы пытается использовать шаблоны, это объяснять не надо. А тем кто делает так всю жизнь, т.е. настоящие специалисты с 15 лет стажа - ты ничего объяснишь, и потратишь время впустую. Ну и далее, как обычно, попытаются привести примеры. Да, к сожалению, Delphi - позволяет делать много говнокода. Циркулярные ссылки, доступ к приватным элементам и много ещё чего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 09:15 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
чччДА как ты реализуешь два класса в раздельных модулях, чтобы в каждом классе было поле типа другого класса? Я не буду такого реализовывать. Приведённый пример с циркулярной ссылкой: автор1. Для работы лампочки нужна электростанция. 2. Для работы электростанции нужна лампочка. 3. Друг без друга они не работают. Вилок не предусмотренно разработчиком. Как хорошо, что во время ГОЭЛРО не знали Делфи. Ну и далее пытается доказать, гениальность и неизбежность такого подхода. И компилятор Делфи этому не препятствует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 09:28 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
X-Cite...Если выделить абстракцию Перечислитель в абстрактный класс... Ты задачу не решил, ты просто "заболтал" ее. ... Эта ( 21257210 ) "проблема" (создание двух классов с циркулярными ссылками) перестает быть проблемой всего лишь после помещения обоих классов в общий модуль. И сразу можно не ныть про генетики и неправильную архитектуру. Не нужно генерить говнокод, называя его паттернами, чтобы вытянуть себя за волосы из болота. Можно просто работать. Но при этом порождая гигантских объемов модули и помня о странном превращении (неполном, кстати) private в public в рамках общего модуля. Что мы и наблюдаем в том же DB.pas. Исключительно из-за рукожопости создателей delphi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 09:38 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Да, изменение защищённости private членов в рамках модуля менять чревато потерей совместимости со старыми библиотеками. Что тут сделаешь. Но что мешает за столько лет решить "проблему" циклических ссылок? Вот в C# этот косяк поправили довольно быстро, ну то Майкрософт, они богатые и могут позволить себе заботиться о комфорте пользователей. А тут средства вкладываются в FMX и прочий хлам и на все не хватает. Пользователям дельфей остаётся либо делать умные лица и рассказывать про паттерны (которые, сколько не надувайся, все равно не решают проблемы циркулярных ссылок), либо тупо создавать безобразно раздутые модули. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 09:52 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
чччД, Да нормально это в дельфи, именно под это среда и заточена. С отдельными файлами больше гемора в редакторе. strict просто добавляет дополнительные удобства. Правда периодически, появляются отдельные личности, которые тащут реализации костылей типа Singleton-а из других языков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 09:59 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
X-Citeс постоянным расширением фуфнкционала Какой внезапно правильный термин Для всех спорящих, товарищ Сталин уже давно сказал, что марксизм не догма, а руководство к действию :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 11:09 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
чччД, Отличная противоположность - каждый класс в своём модуле. Как-то пробовал такое отлаживать в плюсах. После 30-го +- открытого модуля я окончательно и бесповоротно потерялся. Спасибо, не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 13:53 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
makhaonчччД, Отличная противоположность - каждый класс в своём модуле. Как-то пробовал такое отлаживать в плюсах. После 30-го +- открытого модуля я окончательно и бесповоротно потерялся. Спасибо, не надо. Крайности всегда уродливы. Только в Delphi крайности "все в одном" избежать невозможно. А в C#/++ можно и так и эдак и вообще как хочешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 14:27 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
makhaonчччД, Отличная противоположность - каждый класс в своём модуле. Как-то пробовал такое отлаживать в плюсах. После 30-го +- открытого модуля я окончательно и бесповоротно потерялся. Спасибо, не надо. Особенно учитывая, что в плюсах на каждый модуль обычно по ДВА файла... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 14:37 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Василий №2... Особенно учитывая, что в плюсах на каждый модуль обычно по ДВА файла... А в Delphi на каждую форму еще и dfm, а в Америке негров линчуют. :) ... В C++ нет пока настоящих модулей. Но идет работа по их внедрению в язык, некоторые компиляторы уже поддерживают.. Правда, в последний стандарт их собирались включить, но почему-то решили чуть отложить. Но в составе MSVS уже компилятор их понимает и включены стандартные библиотеки, построенные по принципам модульности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 15:06 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)Было бы неплохо иметь задекларированный потайной доступ к приватным объектам RTTI же! У меня в проекте есть потомок TImage, которому в некоторых случаях нужно рисовать на "честной" канве, которая находится у родителя в private Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 15:45 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Василий №2учитывая, что в плюсах на каждый модуль обычно по ДВА файлада не, это сугубо по вкусу автора. масса либ существующих целиком в хедэрах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 15:51 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
vavanВасилий №2учитывая, что в плюсах на каждый модуль обычно по ДВА файлада не, это сугубо по вкусу автора. масса либ существующих целиком в хедэрах а функции в хедерах часом не инлайнятся автоматом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 15:56 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Квейд, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 16:19 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Квейдфункции в хедерах часом не инлайнятся автоматом?когда как ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 16:25 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)> Да нормально это в дельфи, именно под это среда и заточена. kealon(Ruslan)> С отдельными файлами больше гемора в редакторе. Среда заточена под то, под что её затачивали. VS как среда и C# как язык вполне себе удачно и удобно позволяют работать без всяких проблем с перекрестными ссылками, отладкой и пр. А геморрой или нет - на этот счёт есть разные мнения и не их (разработчиков IDE и языка) собачье дело решать, кому как удобнее, пусть каждый сам для себя решает/выбирает. Вернее, с т.з. бизнеса, конечно, вполне их право - "не хочешь - не покупай, иди на C#" - но с т.з. удобств и пр. - нет. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 22:15 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, гм, сравнивать возможности мелкой компании с MS как-то некорректно, что было актуально то и пилили н-р, CodeExplorer от 7-ки до последних версий практически не поменялся, если скакать по файлам - работать с ним практически невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2018, 09:13 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
Квейдkealon(Ruslan)Было бы неплохо иметь задекларированный потайной доступ к приватным объектам RTTI же! У меня в проекте есть потомок TImage, которому в некоторых случаях нужно рисовать на "честной" канве, которая находится у родителя в private Аналогичный по смыслу ответ электрика с опытом 20 лет: авторВ моём проекте есть лампочка, и в некоторых случаях нужно пробраться на электростанцию, что бы её включить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2018, 10:24 |
|
||
|
Strict private
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)> гм, сравнивать возможности мелкой компании с MS как-то некорректно Я в этих вопросах ни гу-гу, но думаю что это не столь неразрешимая и трудоемкая [под]задача, не пару человеко-месяцев максимум. В самом крайнем случае, если своих мозгов не хватает - можно было бы идею подсмотреть в готовых реализациях. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2018, 22:53 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2041140]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
192ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
144ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 625ms |

| 0 / 0 |
