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

    ExpandedWrap disabled
      class Window
        method resize (new_x, new_y)
          ...
        end
        ...
      end

    пишут
    ExpandedWrap disabled
      class Window
        field _x
        field _y
        property x { set _x; get _x }
        property y { set _y; get_ y }
      end

    конечно сеттеры и геттеры могут быть менее тривиальными, но
    1) я, например, всегда воспринимаю проперти-геттер как чтение _значение поля_, без каких-либо вычислений
    2) и сеттер практически так же, в данном случае вызов window.set_x 30 недостаточно информативен, происходит ли при этом перерисовка окна или нужно вызывать window.repaint ?
      Цитата korvin @
      2) и сеттер практически так же, в данном случае вызов window.set_x 30 недостаточно информативен, происходит ли при этом перерисовка окна или нужно вызывать window.repaint ?

      Свойства были придуманы для того, чтобы сделать некоторые вещи более очевидными. В частности, ожидается что общение с окном изменяет его мгновенно. Что, кстати, не исключает наличия метода, который принимает сразу прямоугольник для окна, наравне со свойствами.
      По слухам, Delphi началась с надписи Button.Caption := 'Hello world' на доске.
      Геттеры и сеттеры рекомендуется делать небольшими, именно для избежания переноса в них основной функциональности.
      Свойства эффективное средство для ограничения видимости и написания более ясного кода, мне кажется. А говнокод можно писать любыми средствами :)
        Цитата Romkin @
        Свойства были придуманы для того, чтобы сделать некоторые вещи более очевидными.

        ага, чтение и запись приватных полей объекта, т.е. "раскрытие" инкапсуляции

        Добавлено
        Цитата Romkin @
        Геттеры и сеттеры рекомендуется делать небольшими, именно для избежания переноса в них основной функциональности.

        именно такие они и не нужны, ибо опять получается тупо чтение/запись приватного поля

        Добавлено
        Цитата Romkin @
        Свойства эффективное средство для ограничения видимости и написания более ясного кода, мне кажется.

        вовсе нет, они делают из объектов простые кортежи нивелируя всю суть ООП и инкапсуляции в частности
          Цитата korvin @
          именно такие они и не нужны, ибо опять получается тупо чтение/запись приватного поля

          Поля вообще может не быть, это к слову. Или быть, но доступ к нему контролируется, что и требуется. Это не раскрытие инкапсуляции, а наоборот, декомпозиция методов объекта с целью унификации.
          И в том, и в другом случае эффект не отличается от использования доступа через методы объекта, поскольку свойства всего лишь сахар.

          Добавлено
          Цитата korvin @
          вовсе нет, они делают из объектов простые кортежи нивелируя всю суть ООП и инкапсуляции в частности

          Поясни свою мысль. Особенно меня интересует эта мысль в приложении к т.н. объектам переноса данных и интерфейсам.
            Цитата Romkin @
            Поля вообще может не быть, это к слову.

            для этого есть методы

            Добавлено
            Цитата Romkin @
            Или быть, но доступ к нему контролируется, что и требуется.

            для этого есть типы

            Добавлено
            Цитата Romkin @
            Это не раскрытие инкапсуляции, а наоборот, декомпозиция методов объекта с целью унификации.

            эээ... ты про эту унификацию?

            Добавлено
            Цитата Romkin @
            декомпозиция методов объекта с целью унификации.

            кстати, что вообще эта фраза означает?

            Добавлено
            Цитата Romkin @
            Поясни свою мысль. Особенно меня интересует эта мысль в приложении к т.н. объектам переноса данных и интерфейсам.

            а меня интересует, при чем тут перенос данных и интрфейсы?
              Цитата korvin @
              а меня интересует, при чем тут перенос данных и интрфейсы?

              Потому что там тоже есть свойства. И в DTO обычно только они.
              Цитата korvin @
              кстати, что вообще эта фраза означает?

              То и означает, фактически это рефакторинг с выделением метода, причем в случае свойства многократно используемый код выделяется в геттер/сеттер еще на этапе проектирования, что удобно.
              Цитата korvin @
              Цитата (Romkin @ Сегодня, 21:10)
              Поля вообще может не быть, это к слову.

              для этого есть методы

              Мне гораздо удобнее обращаться с width окна как с атрибутом окна, а не иметь два метода для изменения ширины. Это, думаю, достаточно очевидно.
              Цитата korvin @
              Цитата (Romkin @ Сегодня, 21:10)
              Или быть, но доступ к нему контролируется, что и требуется.

              для этого есть типы

              Э? Если атрибут только для чтения, как ты это объявишь с помощью типа?
                Цитата Romkin @
                Потому что там тоже есть свойства. И в DTO обычно только они.

                где "там"? в джава-интерфейсах свойств нет, в Racket интерфейсах свойств нет. и что за DTO?

                Добавлено
                Цитата Romkin @
                То и означает, фактически это рефакторинг с выделением метода, причем в случае свойства многократно используемый код выделяется в геттер/сеттер еще на этапе проектирования, что удобно.

                что приводит к говнокоду

                Добавлено
                Цитата Romkin @
                Мне гораздо удобнее обращаться с width окна как с атрибутом окна, а не иметь два метода для изменения ширины. Это, думаю, достаточно очевидно.

                интересно зачем тебе два метода изменения ширины окна?
                  Цитата korvin @
                  для этого есть типы

                  А, да, и объяви тип для условия есть объект с полями StartDate и EndDate, и поля связаны условием StartDate <= EndDate.
                    Цитата Romkin @
                    Э? Если атрибут только для чтения, как ты это объявишь с помощью типа?

                    зачем мне это объявлять с помощью типа? про типы я говорил в контексте "установки" значения

                    Добавлено
                    Цитата Romkin @
                    А, да, и объяви тип для условия есть объект с полями StartDate и EndDate, и поля связаны условием StartDate <= EndDate.

                    зачем? я просто объявлю объект с методом changePeriod(period : Period), если уж на то пошло, а не отдельными setStartDate, setEndDate
                    и поле соответственно будет одно, типа Period, у которого еще в конструкторе проверяется startDate <= endDate

                    Добавлено
                    при этом я смогу использовать тип Period везде где надо и не заботится в каждом классе об удовлетворении условия startDate <= endDate
                      Цитата korvin @
                      что приводит к говнокоду

                      Чиво-чиво? Выделение повторяющегося участка кода в отдельный метод приводит к говнокоду?!

                      Цитата korvin @
                      где "там"? в джава-интерфейсах свойств нет, в Racket интерфейсах свойств нет. и что за DTO?

                      А при чем ждесь java? В ней много чего нет, и что? А в Delphi у интерфейсов есть свойства.
                      DTO = data transfer object, объект переноса данных. В Delphi часто это структура с атрибутами только для чтения, значения которых задаются при ее создании.
                      Цитата korvin @
                      интересно зачем тебе два метода изменения ширины окна?

                      Оговорился, для доступа. GetWidth и SetWidth, поля-то нет, там вызов функций API идет.

                      Добавлено
                      Цитата korvin @
                      зачем мне это объявлять с помощью типа? про типы я говорил в контексте "установки" значения

                      Вот в контексте установки и объявлять. Чтобы нельзя было установить значения полей, нарушающие условие.
                      Цитата korvin @
                      при этом я смогу использовать тип Period везде где надо и не заботится в каждом классе об удовлетворении условия startDate <= endDate

                      Собственно об этом объекте я и говорил. То есть, при изменении периода будешь создавать новый объект? А как обеспечишь невозможность изменения его атрибутов уже после создания?
                        Цитата Romkin @
                        Чиво-чиво? Выделение повторяющегося участка кода в отдельный метод приводит к говнокоду?!

                        выделение из метода геттеров+сеттеров(а авторефакторинг обычно на большее не способен, ибо не может знать семантику) приводит к говнокоду, да

                        Добавлено
                        Цитата Romkin @
                        А при чем ждесь java? В ней много чего нет, и что? А в Delphi у интерфейсов есть свойства.

                        при том, что она, например, гораздо больше распространена, чем делфи, да =)
                          Цитата korvin @
                          выделение из метода геттеров+сеттеров(а авторефакторинг обычно на большее не способен, ибо не может знать семантику) приводит к говнокоду, да

                          Я говорил о том, что наличие свойств приводит к выделению еще на этапе проектирования. Собственно, ты сейчас только что сказал, что наоборот, отсутствие свойств приводит к говнокоду, ибо нужно авторефакторить :tong:
                            Цитата Romkin @
                            DTO = data transfer object, объект переноса данных. В Delphi часто это структура с атрибутами только для чтения, значения которых задаются при ее создании.

                            а ниче, что, свойство может вернуть ссылку на объект, поля которого могут измениться и наш исходный объект-"контейнер" не сможет этого отследить? так что "только для чтения" в делфи -- это миф. вот const в С++ может, да, тут уже обсуждали
                              Цитата korvin @
                              при том, что она, например, гораздо больше распространена, чем делфи, да =)

                              И все графики распространенности показывают достаточно убедительное пике. Вроде тут выше приводилось, или поблизости. Кстати, а что, в java у объектов есть свойства?
                                Цитата Romkin @
                                Цитата korvin @
                                зачем мне это объявлять с помощью типа? про типы я говорил в контексте "установки" значения

                                Вот в контексте установки и объявлять. Чтобы нельзя было установить значения полей, нарушающие условие.
                                Цитата korvin @
                                при этом я смогу использовать тип Period везде где надо и не заботится в каждом классе об удовлетворении условия startDate <= endDate

                                Собственно об этом объекте я и говорил. То есть, при изменении периода будешь создавать новый объект? А как обеспечишь невозможность изменения его атрибутов уже после создания?

                                в смысле? у меня же нет дурацких setStartDate и setEndDate =)

                                Добавлено
                                Цитата Romkin @
                                И все графики распространенности показывают достаточно убедительное пике. Вроде тут выше приводилось, или поблизости. Кстати, а что, в java у объектов есть свойства?

                                эм... нет, я вообще-то об этом и говорил.... пятница, да? =))
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 284 285 [286] 287 288 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.4090 ]   [ 14 queries used ]   [ Generated: 1.08.26, 10:28 GMT ]