Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 286 287 [288] 289 290 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#4306
,
|
|
|
|
|
Сообщ.
#4307
,
|
|
|
|
Цитата korvin @ суперкрасивое решение Да, и достаточно эффективное. Собственно, подробную реализацию я не смотрел, возможно он и напрямую API юзает. Здесь выбор за проектировщиком. |
|
Сообщ.
#4308
,
|
|
|
|
ага, только из этого: ![]() ![]() object.length := newLength что это должно как-то сказаться на объекте, кроме изменения значения поля length |
|
Сообщ.
#4309
,
|
|
|
|
Цитата korvin @ Структура - тоже объект нет. Вах-вах. Методы-то есть, конструктор есть. Чего еще надо? Наследования? Оно не необходимо, чтобы объект назывался объектом, достаточно инкапсуляции. Добавлено Цитата korvin @ ага, только из этого: object.length := newLength что это должно как-то сказаться на объекте, кроме изменения значения поля length Объект - единая сущность, что внутри изменилось наружного пользователя не колебет. И никаких предположений тут делать не надо. А вот методом resize ты как раз и намекаешь на внутреннее устройство. |
|
Сообщ.
#4310
,
|
|
|
|
Цитата Romkin @ Да, и достаточно эффективное. чем оно эффективнее использования метода ![]() ![]() method Memo.add line lines.add line redraw end ? и еще, получается программист думает, что Memo.lines имеет тип TStrings, хотя на деле оказывается, что нифига, поведение-то отличается Добавлено Цитата Romkin @ Вах-вах. Методы-то есть, конструктор есть. Чего еще надо? Наследования? Оно не необходимо, чтобы объект назывался объектом, достаточно инкапсуляции. а ее-то как раз и нет Добавлено Цитата Romkin @ А вот методом resize ты как раз и намекаешь на внутреннее устройство. ух ты! каким макаром? |
|
Сообщ.
#4311
,
|
|
|
|
Цитата korvin @ ? и еще, получается программист думает, что Memo.lines имеет тип TStrings, хотя на деле оказывается, что нифига, поведение-то отличается Чито? Чем отличается-то? Цитата korvin @ чем оно эффективнее использования метода method Memo.add line lines.add line redraw end в твоей терминологии: ![]() ![]() method lines.add line inherited OwnerMemo.redraw end Очень много отличий? Добавлено Цитата korvin @ ух ты! каким макаром? Метод предполагает изменение размера контейнера, а этого может не быть при изменении длины. И связь с методом length для меня не так уж очевидна. Цитата korvin @ а ее-то как раз и нет Э. Объясни, какой инкапсуляции нет в структуре? Добавлено Цитата korvin @ чем оно эффективнее использования метода method Memo.add line lines.add line redraw end ? и еще, получается программист думает, что Memo.lines имеет тип TStrings, хотя на деле оказывается, что нифига, поведение-то отличается А, да и главное: у меня есть метод, принимающий TStrings и заполняющий список строк. Я с его помощью могу заполнить мемо, грид, ини-файл и т.д. А ты со своим методом Memo.add что делать будешь? Добавлено Цитата Romkin @ Цитата (korvin @ Сегодня, 22:14) а ее-то как раз и нет Э. Объясни, какой инкапсуляции нет в структуре? Далеко ходить не надо: TMoney Добавлено А, да, я еще могу написать Memo1.Lines := Memo2.Lines; скопировав содержимое. Равно как и Memo1.Lines := Grid1.Rows с тем же эффектом. |
|
Сообщ.
#4312
,
|
|
|
|
Цитата Romkin @ Очень много отличий? да. в том, что решение о перерисовке принимает не сам графический объект, для которого это имеет смысл, а простой список строк |
|
Сообщ.
#4313
,
|
|
|
|
Цитата korvin @ да. в том, что решение о перерисовке принимает не сам графический объект, для которого это имеет смысл, а простой список строк Не простой, а список строк мемо-поля, его неотъемлемый атрибут. Что, Memo1.Lines.Add('AAA'); трудно понять? И на самом деле там идет извещение скорее всего, честно даже не интересовался. |
|
Сообщ.
#4314
,
|
|
|
|
Цитата Romkin @ Метод предполагает изменение размера контейнера, а этого может не быть при изменении длины. И связь с методом length для меня не так уж очевидна. че, серьезно? а что может быть? что за размер такой у контейнера? уж не про память ли ты? ниче, что этим вообще не стоит давать возможность управлять, если контейнер -- набор элементов? и да, даже в этом случае changeLength заметно лучше setLength ну и не используй length, используй size. Добавлено Цитата Romkin @ Э. Объясни, какой инкапсуляции нет в структуре? вообще никакой нет, на то они и структуры. Добавлено Цитата Romkin @ А, да, я еще могу написать Memo1.Lines := Memo2.Lines; скопировав содержимое. Равно как и Memo1.Lines := Grid1.Rows с тем же эффектом. а можешь Memo1.copyDataFrom(Memo2), что будет намного информативней Добавлено Цитата Romkin @ Не простой, а список строк мемо-поля, его неотъемлемый атрибут. Что, Memo1.Lines.Add('AAA'); трудно понять? И на самом деле там идет извещение скорее всего, честно даже не интересовался. из имени типа TStrings этого не следует. имя типа должно отражать его суть, а не быть поводом задуматься, а что же оно на самом деле из себя представляет? Добавлено и? Добавлено если в некоторых язычках смешивают понятия структур и объектов в одну кучу, это не значит, что реально нужно так делать. что им мешало вместо record написать class? |
|
Сообщ.
#4315
,
|
|
|
|
Цитата korvin @ вообще никакой нет, на то они и структуры. Вообще я под инкапсуляцией подразумеваю приватные поля и контроль доступа к ним. И вроде бы в Delphi в структурах это есть. И если ты посмотришь по ссылке на TMoney, то там вообще экземпляр TCurrency создать нельзя. А экземпляр TMoney - константа после создания. Цитата korvin @ а можешь Memo1.copyDataFrom(Memo2), что будет намного информативней Гыгы. И еще кучу методов типа copyDataFrom(iniFile), copyDataFrom(Grid.Cols) и так далее? В топку! |
|
Сообщ.
#4316
,
|
|
|
|
Цитата Romkin @ Вообще я под инкапсуляцией подразумеваю приватные поля и контроль доступа к ним. о боже... инкапсуляция -- это сокрытие реализации, но даже в с твоей позиции, у структур нет приватных полей и контроля доступа, на то они и структуры. Цитата Romkin @ И вроде бы в Delphi в структурах это есть. я и говорю смешали в кучу непонятно зачем. Добавлено Цитата Romkin @ Гыгы. И еще кучу методов типа copyDataFrom(iniFile), copyDataFrom(Grid.Cols) и так далее? В топку! нет, только один ![]() ![]() method Memo.copyDataFrom (CanGiveCollection<Stringable> anyObject) clear addAll(anyObject.items) end |
|
Сообщ.
#4317
,
|
|
|
|
Цитата Flex Ferrum @ Если, условно, у объекта есть длина, почему я должен формировать для этого запрос "Дай мне свою длину"? Может потому, что в ОО-теории ты не должен знать, что есть у объекта ? Добавлено Цитата Romkin @ И вроде бы в Delphi в структурах это есть. Причем тут язык? В С++ структура от классов отличается только поведением по умолчанию. С точки зрения, скажем так, концепции, структура не обеспечивает инкапсуляцию - это просто набор именованных полей. Добавлено У меня глупый вопрос, люди, использующие свойства, как их обозначают на UML? Как публичные атрибуты? |
|
Сообщ.
#4318
,
|
|
|
|
Кое-кто так и не осилил фундаментальных принципов ООП |
|
Сообщ.
#4319
,
|
|
|
|
Кстати, мне вот интересно, можно ли в Дельфи обеспечить ОП-шное раздельное наследование аттрибутов при ромбовидной иерархии иначе чем ручным программированием инвариантов? Иначе же минимальной единицей разделения/совмещения является исключительно класс.
|
|
Сообщ.
#4320
,
|
|
|
|
Цитата D_KEY @ Цитата Flex Ferrum @ Если, условно, у объекта есть длина, почему я должен формировать для этого запрос "Дай мне свою длину"? Может потому, что в ОО-теории ты не должен знать, что есть у объекта ![]() Не знаю, как там в тру-ООП-теории, но, по идее, пользователь объекта знает о нем ровно то, что сам объект считает должным ему сообщить. А потому, если объект сообщает клиенту, что у него есть длина, значит клиент может ее запросить. Или изменить. Не нарушая инкапсуляции объекта, поскольку делает это посредством публичного интерфейса и под полным контролем. Собственно, под свойствами мною понимается именно это - элемент публичного интерфейса объекта, скрывающий за собой доступ к сеттеру и геттеру, а потому никак инкапсуляцию не нарушающий. |