Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.19;
Скачать: CL | DM;

Вниз

Общий unit подрывает инкапсуляцию??!!   Найти похожие ветки 

 
frostyland   (2006-03-01 11:14) [0]

Приветствую всех.
С Делфи занимаюсь недавно, столкнулся с правилом, что
все класссы, объявленные в общем юните, являются друзьями.
Т.е., чтобы поддержать базовый принцип инкапсуляции, необходимо объявлять каждый класс в своем юните?

С уважением, В.


 
Ega23 ©   (2006-03-01 11:18) [1]

Не обязательно. Просто используй public declarations и всё.
З.Ы. Уже не помню точно где в исходниках VCL (вроде в TdataSource) натолкнулся на использование private-полей "дружественного" класса. Зачем это понадобилось - неясно.
ИМХО, лучше так не делать.


 
Сайбель Алексей ©   (2006-03-01 11:26) [2]

По моему, в BDS 2006 убрали эту "фишку"


 
umbra ©   (2006-03-01 11:27) [3]

насколько я понимаю, принцип инкапсуляции заключается в том, чтобы не использовать напрямую данные. А видно их, не видно - это не важно.


 
Alkid ©   (2006-03-01 11:37) [4]


> насколько я понимаю, принцип инкапсуляции заключается в
> том, чтобы не использовать напрямую данные. А видно их,
> не видно - это не важно.

  Нет, принцип инкапсуляции состоит в СКРЫТИИ данных и реализации и ЗАПРЕТЕ  на прямой доступ к ним.

 Вообще, если ты разрешил делать что-то, то это МОЖЕТ быть использовано.
А значит при достижении количества пользователей твоего кода определённого количества можно сказать с высокой степенью вероятности, что это БУДЕТ использовано. Если оставил лазейку и отдал класс на использование другим, то потом просто так её не закроешь.


 
umbra ©   (2006-03-01 11:42) [5]

2 Alkid ©   (01.03.06 11:37) [4]

ну и будут эти пользователи сами себе злобные буратины! проблемы будут с их кодом, не с моим


 
Alkid ©   (2006-03-01 11:47) [6]


> ну и будут эти пользователи сами себе злобные буратины!
> проблемы будут с их кодом, не с моим

  Не, неправильная философия :) Вообще есть одна ценная мысль об объектном программировании: в идеале класс в принципе не должен позволять себя "сломать", т.е. привести манипуляциями своими публичными методами со стороны клиентского кода к потере целостности своих данных и прочим ошибкам.
Это, конечно, идеал и он не всегда достижим, но к нему стоит стремится. :)
Так что всегда надо хорошенько подумать, что стоит в public заносить, а что нет.


 
TUser ©   (2006-03-01 13:46) [7]

> Не обязательно. Просто используй public declarations и всё.
>
> З.Ы. Уже не помню точно где в исходниках VCL (вроде в TdataSource)
> натолкнулся на использование private-полей "дружественного"
> класса. Зачем это понадобилось - неясно.

TThread.Synchronize это использует, например.


 
Ega23 ©   (2006-03-01 13:52) [8]


> TThread.Synchronize это использует, например.


Я уже точно не помню. Где-то с БД-компонентами натыкался. Толи связь TDataSet->TDataSource, толи TDataSource->TDataLink



Страницы: 1 вся ветка

Текущий архив: 2006.03.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
3-1138199915
Kot_
2006-01-25 17:38
2006.03.19
Пропадают записи.


1-1139730336
Alextp
2006-02-12 10:45
2006.03.19
RLINK32: Too many resources to handle


15-1140990334
Volf_555
2006-02-27 00:45
2006.03.19
Какой есть чат для локальной сети наподобие аськи?


1-1140081895
syte_ser78
2006-02-16 12:24
2006.03.19
переименовка группы Action в ActionManager


6-1133606005
Volf_555
2005-12-03 13:33
2006.03.19
Как изменить прокси-сервер из Delphi?