На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 286 287 [288] 289 290 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Цитата Romkin @
    Млин, ну не вечером в пятницу? Идея там простая, там конкретный потомок абстрактного TStrings, которому передается владелец-мемо, и при изменении он его извещает.

    суперкрасивое решение

    Добавлено
    Цитата Romkin @
    Структура - тоже объект :)

    нет.
      Цитата korvin @
      суперкрасивое решение

      Да, и достаточно эффективное. Собственно, подробную реализацию я не смотрел, возможно он и напрямую API юзает. Здесь выбор за проектировщиком.
        Цитата Romkin @
        Да ну нафиг. Есть свойство длина - какую поставил такая и будет.

        ага, только из этого:
        ExpandedWrap disabled
          object.length := newLength

        что это должно как-то сказаться на объекте, кроме изменения значения поля length
          Цитата korvin @
          Структура - тоже объект

          нет.

          Вах-вах. Методы-то есть, конструктор есть. Чего еще надо? Наследования? Оно не необходимо, чтобы объект назывался объектом, достаточно инкапсуляции.

          Добавлено
          Цитата korvin @
          ага, только из этого:

          object.length := newLength

          что это должно как-то сказаться на объекте, кроме изменения значения поля length

          Объект - единая сущность, что внутри изменилось наружного пользователя не колебет. И никаких предположений тут делать не надо.
          А вот методом resize ты как раз и намекаешь на внутреннее устройство.
          Сообщение отредактировано: Romkin -
            Цитата Romkin @
            Да, и достаточно эффективное.

            чем оно эффективнее использования метода
            ExpandedWrap disabled
              method Memo.add line
                lines.add line
                redraw
              end

            ? и еще, получается программист думает, что Memo.lines имеет тип TStrings, хотя на деле оказывается, что нифига, поведение-то отличается

            Добавлено
            Цитата Romkin @
            Вах-вах. Методы-то есть, конструктор есть. Чего еще надо? Наследования? Оно не необходимо, чтобы объект назывался объектом, достаточно инкапсуляции.

            а ее-то как раз и нет

            Добавлено
            Цитата Romkin @
            А вот методом resize ты как раз и намекаешь на внутреннее устройство.

            ух ты! каким макаром?
              Цитата korvin @
              ? и еще, получается программист думает, что Memo.lines имеет тип TStrings, хотя на деле оказывается, что нифига, поведение-то отличается

              Чито? Чем отличается-то?
              Цитата korvin @
              чем оно эффективнее использования метода

              method Memo.add line
              lines.add line
              redraw
              end

              в твоей терминологии:
              ExpandedWrap disabled
                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 с тем же эффектом.
                Цитата Romkin @
                Очень много отличий?

                да. в том, что решение о перерисовке принимает не сам графический объект, для которого это имеет смысл, а простой список строк
                  Цитата korvin @
                  да. в том, что решение о перерисовке принимает не сам графический объект, для которого это имеет смысл, а простой список строк

                  Не простой, а список строк мемо-поля, его неотъемлемый атрибут. Что, Memo1.Lines.Add('AAA'); трудно понять?
                  И на самом деле там идет извещение скорее всего, честно даже не интересовался.
                    Цитата 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 этого не следует. имя типа должно отражать его суть, а не быть поводом задуматься, а что же оно на самом деле из себя представляет?

                    Добавлено
                    Цитата Romkin @
                    Далеко ходить не надо: TMoney

                    и?

                    Добавлено
                    если в некоторых язычках смешивают понятия структур и объектов в одну кучу, это не значит, что реально нужно так делать. что им мешало вместо record написать class?
                      Цитата korvin @
                      вообще никакой нет, на то они и структуры.

                      Вообще я под инкапсуляцией подразумеваю приватные поля и контроль доступа к ним. И вроде бы в Delphi в структурах это есть.
                      И если ты посмотришь по ссылке на TMoney, то там вообще экземпляр TCurrency создать нельзя. А экземпляр TMoney - константа после создания.
                      Цитата korvin @
                      а можешь Memo1.copyDataFrom(Memo2), что будет намного информативней

                      Гыгы. И еще кучу методов типа copyDataFrom(iniFile), copyDataFrom(Grid.Cols) и так далее? В топку!
                        Цитата Romkin @
                        Вообще я под инкапсуляцией подразумеваю приватные поля и контроль доступа к ним.

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

                        Цитата Romkin @
                        И вроде бы в Delphi в структурах это есть.

                        я и говорю смешали в кучу непонятно зачем.

                        Добавлено
                        Цитата Romkin @
                        Гыгы. И еще кучу методов типа copyDataFrom(iniFile), copyDataFrom(Grid.Cols) и так далее? В топку!

                        нет, только один
                        ExpandedWrap disabled
                          method Memo.copyDataFrom (CanGiveCollection<Stringable> anyObject)
                            clear
                            addAll(anyObject.items)
                          end
                        Сообщение отредактировано: korvin -
                          Цитата Flex Ferrum @
                          Если, условно, у объекта есть длина, почему я должен формировать для этого запрос "Дай мне свою длину"?

                          Может потому, что в ОО-теории ты не должен знать, что есть у объекта :) ?

                          Добавлено
                          Цитата Romkin @
                          И вроде бы в Delphi в структурах это есть.

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

                          Добавлено
                          У меня глупый вопрос, люди, использующие свойства, как их обозначают на UML? Как публичные атрибуты?
                          Сообщение отредактировано: D_KEY -
                            Цитата Flex Ferrum @
                            Тем более, что свойства никоим образом не нарушают инкапсуляцию.

                            Кое-кто так и не осилил фундаментальных принципов ООП :P
                              Кстати, мне вот интересно, можно ли в Дельфи обеспечить ОП-шное раздельное наследование аттрибутов при ромбовидной иерархии иначе чем ручным программированием инвариантов? Иначе же минимальной единицей разделения/совмещения является исключительно класс.
                                Цитата D_KEY @
                                Цитата Flex Ferrum @
                                Если, условно, у объекта есть длина, почему я должен формировать для этого запрос "Дай мне свою длину"?

                                Может потому, что в ОО-теории ты не должен знать, что есть у объекта :)

                                Не знаю, как там в тру-ООП-теории, но, по идее, пользователь объекта знает о нем ровно то, что сам объект считает должным ему сообщить. :) А потому, если объект сообщает клиенту, что у него есть длина, значит клиент может ее запросить. Или изменить. Не нарушая инкапсуляции объекта, поскольку делает это посредством публичного интерфейса и под полным контролем. Собственно, под свойствами мною понимается именно это - элемент публичного интерфейса объекта, скрывающий за собой доступ к сеттеру и геттеру, а потому никак инкапсуляцию не нарушающий.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 286 287 [288] 289 290 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.4299 ]   [ 15 queries used ]   [ Generated: 1.08.26, 09:37 GMT ]