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

    Вот, кстати, в отсутствии const в шарпе геттры делаю не изменяющими состояния объекта - ну, собственно, как свойству и положено :)

    Отсутствие const в языке со статической типизацией я понять не могу в принципе.

    Цитата
    в то время как метод говорит о том, что он что-то делает :)
    Это ООП ;)
      Цитата MyNameIsIgor @
      Мы отдаём точку (Point) и пользователь хочет изменить у неё одну из координат.

      это был бы выстрел в воздух...
      меняешь состояние временного объекта(структуры/записи)
        Цитата Shaggy @
        Цитата MyNameIsIgor @
        Мы отдаём точку (Point) и пользователь хочет изменить у неё одну из координат.

        это был бы выстрел в воздух...
        меняешь состояние временного объекта(структуры/записи)

        Но никто же не мешает использовать этот временный объект дальше в выражении.
          Цитата D_KEY @
          Отсутствие const в языке со статической типизацией я понять не могу в принципе.

          эээ... в хаскелле и окамле нет const.
            Цитата --Ins-- @
            Нет, смотри. Points[0] - это свойство. Ты же хочешь изменить его значение, неважно что частично. Так вот, ты это хочешь сделать в обход сеттера. А если в сеттера дергается что-то важное? Например OnChange или что-то в этом роде. Что же тогда будет? Это только кажется логичным, на самом деле что нельзя - это правильно. Свойство при получении не отдается пользователю на растерзание. Фишка свойств как раз в том, чтобы доступ к данным ОГРАНИЧИТЬ, запретив установку и получение в обход акцессоров
            А если свойство имеет классовый тип, мы там не напоримся на очередной сеанс уличной магии?
              Цитата D_KEY @
              Но никто же не мешает использовать этот временный объект дальше в выражении.


              Не мешает, используй. Так можно
              ExpandedWrap disabled
                Value := Points[0].X + 10;

              Так:
              ExpandedWrap disabled
                Points[0].X := бла-бла-бла. // Что ты тут дальше использовать будешь то? ;)
                Цитата D_KEY @
                А можешь в общих чертах рассказать?

                Собственно тоже цикл. По счётчику цикла получался экземпляр типа-значения. Лямбда захватывала и полученный экземпляр, и счётчик. В результате глубоко в коде, куда отдавалась лямбда, происходила ошибка, т.к. он предполагал равенство захваченного экземпляра и того, что он сам требовал по захваченному счётчику. Как-то так... Проблема в том, что ошибка вылазила не там, где она собственно есть. Понятно объяснил? :)
                Цитата --Ins-- @
                Нет, смотри. Points[0] - это свойство. Ты же хочешь изменить его значение, неважно что частично. Так вот, ты это хочешь сделать в обход сеттера. А если в сеттера дергается что-то важное? Например OnChange или что-то в этом роде. Что же тогда будет? Это только кажется логичным, на самом деле что нельзя - это правильно. Свойство при получении не отдается пользователю на растерзание. Фишка свойств как раз в том, чтобы доступ к данным ОГРАНИЧИТЬ, запретив установку и получение в обход акцессоров

                Мы пытаемся изменить одну из координат. Так вот как раз на неё нет никакого сеттера. Если он нужен, то надо координаты в точке делать не публичными полями, а свойствами.
                Цитата Shaggy @
                это был бы выстрел в воздух...
                меняешь состояние временного объекта(структуры/записи)

                Да понимаю я всё. Мне просто кажется нелогичным такой интерфейс. Просто есть мысли как сделать это работающим, но возникает вопрос: а оно мне надо? Вывод: нет, не надо.
                Сообщение отредактировано: MyNameIsIgor -
                  Цитата D_KEY @
                  Но никто же не мешает использовать этот временный объект дальше в выражении.

                  ты не понял, тебе отдали копию, полученный объект с хранилищем уже не связан
                  сохрани в переменной и используй
                    Цитата Повстанець @
                    А если свойство имеет классовый тип, мы там не напоримся на очередной сеанс уличной магии?


                    Что ты подразумеваешь под уличной магией? :)
                      Цитата korvin @
                      Цитата D_KEY @
                      Отсутствие const в языке со статической типизацией я понять не могу в принципе.

                      эээ... в хаскелле и окамле нет const.

                      Я имел в виду семантику, а не синтаксис ;)

                      Добавлено
                      Цитата --Ins-- @
                      Цитата D_KEY @
                      Но никто же не мешает использовать этот временный объект дальше в выражении.


                      Не мешает, используй. Так можно
                      ExpandedWrap disabled
                        Value := Points[0].X + 10;

                      Так:
                      ExpandedWrap disabled
                        Points[0].X := бла-бла-бла. // Что ты тут дальше использовать будешь то? ;)

                      Я наверно не так понял, что имелось в виду :)
                        Цитата MyNameIsIgor @
                        Мы пытаемся изменить одну из координат. Так вот как раз на неё нет никакого сеттера.


                        Но ведь на его контейнер (Point) сеттер есть. А что будет если мы должны получать уведомления об изменениях. И в сеттере Point у нас соответствующий код дергается. Ты уверен, что было бы правильно разрешить просто тихо изменить значение одной из координат? Я вот не уверен :)

                        Цитата MyNameIsIgor @
                        Если он нужен, то надо координаты в точке делать не публичными полями, а свойствами.


                        Да, так и нужно
                          Цитата --Ins-- @
                          Цитата Повстанець @
                          А если свойство имеет классовый тип, мы там не напоримся на очередной сеанс уличной магии?


                          Что ты подразумеваешь под уличной магией? :)

                          То, что мы получим ссылку на объект(ведь так?), а не копию. Кстати, сможем ли мы поменять состояние это объекта через вызов метода?
                          Если да, то о какой инкапсуляции может идти речь?
                            Цитата D_KEY @
                            Кстати, сможем ли мы поменять состояние это объекта через вызов метода?


                            Конечно сможем :)

                            Цитата D_KEY @
                            Если да, то о какой инкапсуляции может идти речь?


                            А че не так-то? :blink:
                              Цитата --Ins-- @
                              Но ведь на его контейнер (Point) сеттер есть. А что будет если мы должны получать уведомления об изменениях. И в сеттере Point у нас соответствующий код дергается. Ты уверен, что было бы правильно разрешить просто тихо изменить значение одной из координат?

                              Вообще, да, уверен, потому что при
                              ExpandedWrap disabled
                                point.X := 10;

                              никто никаких уведомлений не получает. Так отчего же их кто-то должен получать при таком коде?
                              ExpandedWrap disabled
                                rect.Points[0].X := 10;

                              И почему этот код не должен работать?
                              Он должен работать и изменять соответствующий rect. Это если по-правильному...
                              Сообщение отредактировано: MyNameIsIgor -
                                Form.ActiveControl := Panel;
                                и
                                Form.ActiveControl.Visible := False;

                                Где тут нарушение инкапсуляции? :)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 36 37 [38] 39 40 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.1418 ]   [ 15 queries used ]   [ Generated: 29.07.26, 03:42 GMT ]