Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 285 286 [287] 288 289 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#4291
,
|
|
|
|
korvin, не во всех случаях свойства (как таковые) однозначно отображаются на внутренний стейт объекта (который является инкапсулированным). Свойства - это часть интерфейса. Глупо не использовать то, что использовать логично (с точки зрения семантики). Если, условно, у объекта есть длина, почему я должен формировать для этого запрос "Дай мне свою длину"?
|
|
Сообщ.
#4292
,
|
|
|
|
Цитата korvin @ а ниче, что, свойство может вернуть ссылку на объект, поля которого могут измениться и наш исходный объект-"контейнер" не сможет этого отследить? так что "только для чтения" в делфи -- это миф. вот const в С++ может, да, тут уже обсуждали Это проблема взаимоотношений контейнера и этого объекта. Если контейнер не может засечь изменение своего атрибута, то это явно указание на плохой дизайн. Как пример, свойство Lines у TMemo - именно что объект (TStrings), список строк. Но изменения этого списка приводят к изменению собственно текста. И объект переноса данных обычно такого не делает, он должен быть простым, фактически это просто структура. |
|
Сообщ.
#4293
,
|
|
|
|
Тем более, что свойства никоим образом не нарушают инкапсуляцию.
|
|
Сообщ.
#4294
,
|
|
|
|
Вроде бы речь шла о том, что в java у интерфейсов свойств нет Цитата korvin @ Цитата (Romkin @ Сегодня, 21:22) Потому что там тоже есть свойства. И в DTO обычно только они. где "там"? в джава-интерфейсах свойств нет, в Racket интерфейсах свойств нет. и что за DTO? Точно пятница |
|
Сообщ.
#4295
,
|
|
|
|
Цитата Flex Ferrum @ korvin, не во всех случаях свойства (как таковые) однозначно отображаются на внутренний стейт объекта (который является инкапсулированным). Свойства - это часть интерфейса. Глупо не использовать то, что использовать логично (с точки зрения семантики). Если, условно, у объекта есть длина, почему я должен формировать для этого запрос "Дай мне свою длину"? тебе религия запрещает называть метод length(), только getLength()? в джаве сейчас всё стилизуют под get-|set- имена =( а во многих ЯП даже скобочки не требуются =) Добавлено Цитата Flex Ferrum @ Тем более, что свойства никоим образом не нарушают инкапсуляцию. самым прямым -- вместо описания поведения объекта описывают объект как тупой набор свойств. |
|
Сообщ.
#4296
,
|
|
|
|
Собственно, есть проблема в Delphi, связанная с тем, что избегается создание мелких оторванных объектов: их же нужно потом отследить и уничтожить. Поэтому гораздо чаще такой объект делается вложенным в контейнер, который и отслеживает время его жизни, и дает к нему доступ через свои свойства.
Вот это вот может приводить к говнокоду, ибо соблазнительно не делать декомпозицию, а написать сразу единый объект. Но понятно, что свойства в этом случае не при чем, собственно. |
|
Сообщ.
#4297
,
|
|
|
|
Цитата Romkin @ Это проблема взаимоотношений контейнера и этого объекта. Если контейнер не может засечь изменение своего атрибута, то это явно указание на плохой дизайн. Как пример, свойство Lines у TMemo - именно что объект (TStrings), список строк. Но изменения этого списка приводят к изменению собственно текста. покажешь (скопипастишь сюда) реализацию? Добавлено Цитата Romkin @ И объект переноса данных обычно такого не делает, он должен быть простым, фактически это просто структура. ну я про объекты и ООП, а не про структуры |
|
Сообщ.
#4298
,
|
|
|
|
Цитата korvin @ тебе религия запрещает называть метод length(), только getLength()? в джаве сейчас всё стилизуют под get-|set- имена =( а во многих ЯП даже скобочки не требуются =) Длину может захотеться еще и устанавливать. А если доступ к атрибуту - то метод просто не нужен: ![]() ![]() TFoo = class strict private FFoo: integer; public Foo: integer read FFoo; end; Зачем мне метод? Понадобится - введу, и это гарантированно не окажет влияния вне объекта. |
|
Сообщ.
#4299
,
|
|
|
|
Цитата korvin @ ебе религия запрещает называть метод length(), только getLength()? Ты мне объясни - почему я должен писать .length() вместо просто .length? Тут есть что-то антирелигиозное? |
|
Сообщ.
#4300
,
|
|
|
|
Цитата Romkin @ Вроде бы речь шла о том, что в java у интерфейсов свойств нет ![]() если нет свойств в интерфейсах, то логчно предположить, что их нет вообще. в любом случае в джаве нет свойств Добавлено Цитата Flex Ferrum @ Ты мне объясни - почему я должен писать .length() вместо просто .length? Тут есть что-то антирелигиозное? ![]() юзай нормальные языки, пиши просто length. я так и делаю. кстати в делфе скобки для функций и процедур без аргументов тоже не нужны, да... Добавлено Цитата Romkin @ Длину может захотеться еще и устанавливать. нет, не может. + есть более адекватное и информативное слово resize |
|
Сообщ.
#4301
,
|
|
|
|
Цитата korvin @ юзай нормальные языки, пиши просто length. Да я юзаю нормальный йазыг, и пишу length вместо length(). |
|
Сообщ.
#4302
,
|
|
|
|
Цитата Romkin @ ![]() ![]() TFoo = class strict private FFoo: integer; public Foo: integer read FFoo; end; Зачем мне метод? Понадобится - введу, и это гарантированно не окажет влияния вне объекта. таки чем это отличается от ![]() ![]() TFoo = class strict private FFoo: integer; public Foo: integer { return FFoo; } end; ? зачем мне свойства(лишняя, ненужная сущность), если есть методы? |
|
Сообщ.
#4303
,
|
|
|
|
Цитата korvin @ покажешь (скопипастишь сюда) реализацию? Млин, ну не вечером в пятницу? Идея там простая, там конкретный потомок абстрактного TStrings, которому передается владелец-мемо, и при изменении он его извещает. Собственно, проще это показать на примере TCollection, там каждый элемент живет своей жизнью, для удаления объекта он просто уничтожается. Цитата korvin @ ну я про объекты и ООП, а не про структуры Структура - тоже объект |
|
Сообщ.
#4304
,
|
|
|
|
я уж не говорю, что в случае нетривиальных геттеров и сеттеров тебе придется описывать и методы, и свойства
|
|
Сообщ.
#4305
,
|
|
|
|
Цитата korvin @ нет, не может. + есть более адекватное и информативное слово resize Да ну нафиг. Есть свойство длина - какую поставил такая и будет. Цитата korvin @ если нет свойств в интерфейсах, то логчно предположить, что их нет вообще. в любом случае в джаве нет свойств Ну ты явно сделал упор именно на интерфейсы, я уж подумал, может что поменялось. Цитата korvin @ Цитата (Flex Ferrum @ Сегодня, 21:58) Ты мне объясни - почему я должен писать .length() вместо просто .length? Тут есть что-то антирелигиозное? юзай нормальные языки, пиши просто length. я так и делаю. кстати в делфе скобки для функций и процедур без аргументов тоже не нужны, да... Тут скорее вопрос - а нафига я вообще должен писать геттер, если у меня поле? Свойство только для чтения - и все. Нафиг прокладки! |