Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];

Вниз

Общий 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.014 c
5-1127647314
Jioniro
2005-09-25 15:21
2006.03.19
Компонент кнопка аля ACDSee 7.0


9-1126299175
TButton
2005-09-10 00:52
2006.03.19
новое... т.е. старое


15-1140421884
Knight
2006-02-20 10:51
2006.03.19
Помогите выбрать мать...


2-1141374777
Neo Trinitron
2006-03-03 11:32
2006.03.19
Гиперссылка на форме


3-1138456107
midavik
2006-01-28 16:48
2006.03.19
не работает Linked Servers из Делфи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский