![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Общий unit подрывает инкапсуляцию??!! [D6, 2000]
frostyland © (2006-03-01 11:14:00)Приветствую всех.
С Делфи занимаюсь недавно, столкнулся с правилом, что
все класссы, объявленные в общем юните, являются друзьями.
Т.е., чтобы поддержать базовый принцип инкапсуляции, необходимо объявлять каждый класс в своем юните?
С уважением, В.
Ega23 (2006-03-01 13:52:00) [1]
> TThread.Synchronize это использует, например.
Я уже точно не помню. Где-то с БД-компонентами натыкался. Толи связь TDataSet->TDataSource, толи TDataSource->TDataLink
TUser (2006-03-01 13:46:00) [2]> Не обязательно. Просто используй public declarations и всё.
>
> З.Ы. Уже не помню точно где в исходниках VCL (вроде в TdataSource)
> натолкнулся на использование private-полей "дружественного"
> класса. Зачем это понадобилось - неясно.
TThread.Synchronize это использует, например.
Alkid (2006-03-01 11:47:00) [3]
> ну и будут эти пользователи сами себе злобные буратины!
> проблемы будут с их кодом, не с моим
Не, неправильная философия :) Вообще есть одна ценная мысль об объектном программировании: в идеале класс в принципе не должен позволять себя "сломать", т.е. привести манипуляциями своими публичными методами со стороны клиентского кода к потере целостности своих данных и прочим ошибкам.
Это, конечно, идеал и он не всегда достижим, но к нему стоит стремится. :)
Так что всегда надо хорошенько подумать, что стоит в public заносить, а что нет.
umbra (2006-03-01 11:42:00) [4]2 Alkid © (01.03.06 11:37) [4]
ну и будут эти пользователи сами себе злобные буратины! проблемы будут с их кодом, не с моим
Alkid (2006-03-01 11:37:00) [5]
> насколько я понимаю, принцип инкапсуляции заключается в
> том, чтобы не использовать напрямую данные. А видно их,
> не видно - это не важно.
Нет, принцип инкапсуляции состоит в СКРЫТИИ данных и реализации и ЗАПРЕТЕ на прямой доступ к ним.
Вообще, если ты разрешил делать что-то, то это МОЖЕТ быть использовано.
А значит при достижении количества пользователей твоего кода определённого количества можно сказать с высокой степенью вероятности, что это БУДЕТ использовано. Если оставил лазейку и отдал класс на использование другим, то потом просто так её не закроешь.
umbra (2006-03-01 11:27:00) [6]насколько я понимаю, принцип инкапсуляции заключается в том, чтобы не использоватьнапрямую данные. А видно их, не видно - это не важно.
Сайбель Алексей (2006-03-01 11:26:00) [7]По моему, в BDS 2006 убрали эту "фишку"
Ega23 (2006-03-01 11:18:00) [8]Не обязательно. Просто используй public declarations и всё.
З.Ы. Уже не помню точно где в исходниках VCL (вроде в TdataSource) натолкнулся на использование private-полей "дружественного" класса. Зачем это понадобилось - неясно.
ИМХО, лучше так не делать.