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


    Кем?
      Цитата --Ins-- @
      Кем?
      компилятором.
        Цитата Повстанець @
        компилятором.


        Как?
          Цитата --Ins-- @
          Как?
          Ошибкой при любой попытке изменить состояние своих полей, или состояние любого из предков.
            Цитата korvin @
            Цитата D_KEY @
            Как минимим, нужно или заствлять клиента явно удалять копии, или использовать обертки, которые не предоставляют удобного доступа к объекту.
            1) кто удалит копию? если обертка, то какой интерфейс она предоставляет клиенту и что ему придется об этом знать?
            Пойдут ли на это программисты?
            2) каким образом?
            3) тогда потеряем возможность модифицировать его внутри TRect.

            1) да хоть owner, Inc же писал способы, и CodeMonkey в соседней теме не раз упоминал InterfacedObject

            Какая-то обертка, которую нужно еще откуда-то взять и которая не предоставляет удобного унифицированного доступа к объекту?
            Цитата
            2)
            ExpandedWrap disabled
                property Left read Point.X;
                property Top read Point.Y;

            вместо возврата точки. заодно и обращение короче.

            В данном случае - согласен, а если X и Y - тоже объекты?

            Цитата
            3) нет, ведь мы можем присвоить полю новый объект-точку вместо старой.

            Вот тут соглашусь. То есть единственный вариант - "иммутабельный" класс TPoint(кстати, в таком случае, объект-ссылка для клиента мало будет отличаться от объекта-значения ;) ).
            Хочу заметить, что С++ не мешает поступить также.

            Цитата
            Цитата Повстанець @
            Каждый язык, прямо или коственно поддерживает ООП. Вопрос только как именно поддерживает. С++ имеет некую объектную модель, позволяющую покрыть не всю, конечно, но бОльшую часть потребностей, возникающих при ООП проектировании на уровне объявления. Всё то же самое можно реализовать и в С, процедурами, указателями и модулями. Но на уровне реализации. В делфи тоже есть некая объектная система, но элементарная защита объекта реализуется почему то сишными способами.

            а const -- это ппц какой оопшный способ? а защита объекта делается в делфи обычным оопшным способом -- инкапсуляцией

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


              1. А метод объекта можно вызвать?
              2. А в метод другого объекта ссылку на себя параметром передать можно?
              3. А метод просто другого объекта вызвать можно?
                Цитата korvin @
                Цитата Повстанець @
                Можешь ссылаться на меня. Если у тебя есть другое определение константности объекта, с удовольствием его послушаю.

                меня интересует, как теория ООП(ну или известная литература/специалисты по ООП) определяют механизм, изменяющий интерфейс объекта (и видимо всех его членов-объектов). таков был вопрос вообще-то.

                А как это связано с const?
                Интерфейс объекта не меняется. Просто ты говоришь: "я не буду менять состояние этого объекта". Затем, если ты скажешь "измени объект", то компилятор скажет тебе: "незя".
                Так понятно?
                  Цитата Повстанець @
                  Какая теория ООП? Программирование стало академической наукой? Где я был в это время? Нет никакой теории. Ести ИМХО отдельных специалистов. Ты конечно хочешь мне намекнуть, что такого понятия, как константный объект нет. Но ведь константные объекты есть, а понятия нет. Как так получается? Если его действительно нет -- считай меня пионером и можешь смело ссылаться.

                  программирование -- это не только код писать. фразы "Теория алгоритмов", "Теория автоматов", "Теория типов" тебе ни о чем не говорят? да, для ООП не существует единой теории ввиду наличия разных интерпретаций первичных постулатов. но есть общепризнанные труды, Г.Буча например, Мейера того же.

                  нет, я хочу тебе намекнуть, что нет формального описания в литературе по ООП механизма, изменяющего интерфейс объекта с мутабельного на иммутабельный, поэтому заявлять, что язык, в котором этот механизм искаробки на уровне языка реализован, является Ъ-ООПшным, а все остальные -- нет, как-то необосновано.
                    --Ins--, ну ты прям считаешь, что разработчики C++ - глупы.

                    Цитата --Ins-- @
                    1. А метод объекта можно вызвать?

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

                    Да, константную.
                    Цитата --Ins-- @
                    А метод просто другого объекта вызвать можно?

                    Ессно глобальные объекты константными не будут
                      Цитата --Ins-- @
                      Цитата Повстанець @
                      Ошибкой при любой попытке изменить состояние своих полей, или состояние любого из предков.


                      1. А метод объекта можно вызвать?
                      2. А в метод другого объекта ссылку на себя параметром передать можно?
                      3. А метод просто другого объекта вызвать можно?

                      1. можно, если они const'антные
                      2. const'антную
                      3. да

                      --Ins--, фактически константный метод, это такой метод, куда this передается как указатель на константный объект.
                        Цитата Мяут-Настоящий @
                        Цитата korvin @
                        угу, вот так взяли и одним махом изменили интерфейс объекта, описанный в его классе.

                        Ээээ, наоборот, конкретизировали:
                        ExpandedWrap disabled
                          class C {
                            public:
                              int f() const {
                                 //Здесь гарантируется, что объект неизменен
                              }
                          };

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

                          Он не меняет интерфейс. Вообще никак. Он позволяет в множестве элементов интерфейса определять группу операций являющихся иммутабельными.
                            Цитата Мяут-Настоящий @
                            Ессно глобальные объекты константными не будут


                            Что значит "глобальные объекты"? Просто об этом объекте кто-то еще может знать. Так можно или нет вызвать в константном методе метод какого-то другого объекта?

                            Добавлено
                            Цитата D_KEY @
                            3. да


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

                              Да не меняешь ты интерфейс. Кстати, const есть в С, куда попал из первоначальных версий С++. Так что ООП тут не причем.

                              Добавлено
                              Цитата --Ins-- @
                              Цитата D_KEY @
                              3. да


                              А кто гарантирует, что в этом методе твой объект не будет изменен?

                              А как он будет изменен, если ты его туда не передавал?
                                Цитата --Ins-- @
                                1. А метод объекта можно вызвать?
                                только константный.
                                Цитата --Ins-- @
                                2. А в метод другого объекта ссылку на себя параметром передать можно?
                                Только константную.
                                Цитата --Ins-- @
                                3. А метод просто другого объекта вызвать можно?
                                Если он не интегрирован то да.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 50 51 [52] 53 54 ...  494 495


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