Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 Strict private  [new]
Из одной мертвой галактики
Guest
Следует ли считать хорошей практикой использование strict private вместо private?
13 мар 18, 17:47    [21253452]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
SOFT FOR YOU
Member [заблокирован]

Откуда:
Сообщений: 2761
Имеет смысл использовать если ты делаешь платные компоненты и распространяешь в dcu
Мне кажется protected - самое то.
13 мар 18, 18:06    [21253503]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
Из одной мертвой галактики
Guest
SOFT FOR YOU
Имеет смысл использовать если ты делаешь платные компоненты и распространяешь в dcu
Мне кажется protected - самое то.


При чем тут "protected и "распространение в dcu"? Речь о strict private.
13 мар 18, 18:10    [21253509]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45107

Если ты делаешь классы исключительно для внутреннего потребления - сугубо пофиг.
У классов для сторонних пользователей любое private смердит, поскольку не позволяет
использовать полиморфизм ради которого (в том числе) классы и задумывались.

Posted via ActualForum NNTP Server 1.5

13 мар 18, 18:10    [21253510]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
SOFT FOR YOU
Member [заблокирован]

Откуда:
Сообщений: 2761
Из одной мертвой галактики,

Притом, что private вообще не нужен. Ни обычный, ни strict.
13 мар 18, 18:20    [21253531]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
Василий №2
Guest
Еретики... и private нужен, и strict. Я везде применяю strict, чтобы в подсказках лишние методы не маячили.
13 мар 18, 18:29    [21253558]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
Василий №2
Guest
Dimitry Sibiryakov
У классов для сторонних пользователей любое private смердит, поскольку не позволяет использовать полиморфизм ради которого (в том числе) классы и задумывались.

И каким же образом доступность кишок класса связана с полиморфизмом?

Вообще. Я вижу так: public и protected - это интерфейс, API. Менять его может быть затруднено и болезненно. А private - это внутренняя реализация, которую можно менять как вздумается. И без этой области свободных манипуляций внесение изменений в класс взрастит такой геморрой у разработчика, что ну вас нафиг с такими идеями.
13 мар 18, 18:41    [21253594]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45107

Василий №2
И каким же образом доступность кишок класса связана с полиморфизмом?

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

Posted via ActualForum NNTP Server 1.5

13 мар 18, 18:52    [21253609]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 1811
Из одной мертвой галактики
Следует ли считать хорошей практикой использование strict private вместо private?
Следует
13 мар 18, 18:59    [21253622]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1065
Из одной мертвой галактики
Следует ли считать хорошей практикой использование strict private вместо private?

Если у вас на каждый класс отдельный unit, то необязательно.
Если у вас более одного класса в модуле, и они могут пересекаться, то лучше strict.

Иначе от такого вы не будете защищены. К тому же IntelliSense не будет показывать мусор из strict private
 TA = class
  private
    F1: string;
  end;

  TB = class
  private
    procedure Test(aA: TA);
  end;

{ TB }

procedure TB.Test(aA: TA);
begin
  aA.F1 := 'asd';
end;
13 мар 18, 19:02    [21253628]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
rgreat
Member

Откуда:
Сообщений: 4169
Из одной мертвой галактики
Следует ли считать хорошей практикой использование strict private вместо private?
Нет.
13 мар 18, 19:05    [21253631]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
Василий №2
Guest
Dimitry Sibiryakov
Приватные методы нельзя оверрайдить. К приватным полям нельзя достучаться. Изменить
поведение базового класса, автор которого злоупотреблял приватностью, невозможно.
Полиморфизм недоступен.

Полиморфизм вполне себе доступен в рамках, отведенных для этого автором. Всё, что свыше этого, - от лукавого либо результат совсем уж убогой реализации. А вот доступ к кишкам класса куда вреднее. Например:
 Tclass = class
 private 
  FSomeObj: TObject
 public
  property SomeObj: TObject read FSomeObj;
 end;

При этом FSomeObj всегда создается в конструкторе и потому предполагается, что всегда не nil. Но условному апологету безграничного полиморфизма не нравится доступ по свойству, и он использует FSomeObj. А потом автор понимает, что FSomeObj нужен далеко не всегда и не сразу, поэтому встраивает создание перед использованием, меняя объявление на
  property SomeObj: TObject read GetSomeObj;

И вот тут апологет ловит AV at address $000000 и идет курить бамбук.
13 мар 18, 19:22    [21253659]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
Из одной мертвой галактики
Guest
Действительно, странно противопоставлять полиморфизм механизмам инкапсуляции. :)
13 мар 18, 19:25    [21253662]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 7658
Василий №2
Полиморфизм вполне себе доступен в рамках, отведенных для этого автором.
Проблема в том, что автор, отдавая компоненты на сторону, обычно сам не знает, что именно может потребоваться перекрыть.
Мне пару раз приходилось переписывать штатные VCL-компоненты только лишь потому, что авторы не добавили директиву virtual в одном месте.
Даже в приведенном примере лучше сразу делать виртуальный геттер.
13 мар 18, 19:50    [21253686]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2577
Не просто же так частные поля делают. И закрывают информацию внутри класса. Так то можно, конечно, всё наружу или почти наружу вытащить, говоря - делайте что хотите, сломаете - ваши проблемы. Только, мне кажется, это плохой подход. Вообще. В крайнем случае можно сырцы поправить. А код без исходников лучше вообще не применять.
13 мар 18, 20:17    [21253710]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 7658
makhaon
В крайнем случае можно сырцы поправить.
Эта практика намного хуже, напрочь убивает идею сопровождения.
13 мар 18, 20:35    [21253725]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
defecator
Member

Откуда:
Сообщений: 39635
Соколинский Борис
makhaon
В крайнем случае можно сырцы поправить.
Эта практика намного хуже, напрочь убивает идею сопровождения.

в реальной жизни гораздо быстрее исправить ошибку в исходниках,
чем бесконечно переписываться с аффтаром, который может бюыть вообще недоступен
13 мар 18, 20:42    [21253732]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 7658
defecator, это понятно.
Но как же бесит при этом муторная сверка исходников после обновления...
13 мар 18, 20:56    [21253756]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 259
всем противникам strict private рекомендую вспомнить о class sealed, он вообще явно запрещает любых наследников класса)))) шах и мат полиформизму и его безумным поклонникам))) strict private вызывает ненависть? храните все в public!)))
13 мар 18, 20:57    [21253757]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
defecator
Member

Откуда:
Сообщений: 39635
asutp2
всем противникам strict private рекомендую вспомнить о class sealed, он вообще явно запрещает любых наследников класса)))) шах и мат полиформизму и его безумным поклонникам))) strict private вызывает ненависть? храните все в public!)))

пиши процедурно, безумец, не стесняйся
13 мар 18, 21:01    [21253761]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 259
defecator
asutp2
всем противникам strict private рекомендую вспомнить о class sealed, он вообще явно запрещает любых наследников класса)))) шах и мат полиформизму и его безумным поклонникам))) strict private вызывает ненависть? храните все в public!)))

пиши процедурно, безумец, не стесняйся
почему же, я как раз сторонник классов, но считаю, что ВСЕГДА разрешать давать наследникам перекрывать ВСЕ свойства и методы мягко говоря неправильно. Так вообще можно дойти до того, что будет единственная ветка наследования класс1<-класс2<-класс3<-....<-класс9999999999999999
13 мар 18, 21:09    [21253779]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
defecator
Member

Откуда:
Сообщений: 39635
asutp2
defecator
пропущено...

пиши процедурно, безумец, не стесняйся
почему же, я как раз сторонник классов, но считаю, что ВСЕГДА разрешать давать наследникам перекрывать ВСЕ свойства и методы мягко говоря неправильно. Так вообще можно дойти до того, что будет единственная ветка наследования класс1<-класс2<-класс3<-....<-класс9999999999999999

ты же назвал сторонников полиморфизма безумными
а ведь полиморфизм это другое, не то, что ты только что описал
13 мар 18, 21:12    [21253784]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
schi
Member

Откуда: Москва
Сообщений: 2455
Буч - это голова. И Фаулер - это голова. Фаулер и Буч - это две головы. Читайте классиков, вопросы отпадут сами собой.
13 мар 18, 21:17    [21253791]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 259
defecator
asutp2
пропущено...
почему же, я как раз сторонник классов, но считаю, что ВСЕГДА разрешать давать наследникам перекрывать ВСЕ свойства и методы мягко говоря неправильно. Так вообще можно дойти до того, что будет единственная ветка наследования класс1<-класс2<-класс3<-....<-класс9999999999999999

ты же назвал сторонников полиморфизма безумными
а ведь полиморфизм это другое, не то, что ты только что описал
я назвал безумными не тех, кто адекватно использует различные области видимости в классах/необходимые элементы для перекрытия в зависимости от задачи, а тех, кто желает изменять все что вздумается наследному классу и ненавидит strict private))).
13 мар 18, 21:33    [21253811]     Ответить | Цитировать Сообщить модератору
 Re: Strict private  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2577
автор
Но как же бесит при этом муторная сверка исходников после обновления...


Дифф в помощь. Автоматический или руками пробежаться. Винмержем я, например, инди свожу за час-полтора. У меня правок десятка два мест. Шансов, что их добавят, я думаю, около нуля. Быстрее руками свести. Особенно если надо не часто.
13 мар 18, 21:39    [21253819]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Delphi Ответить