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

    знаю, а не в триалке тексты Firemonkey открыты?
      Цитата Flex Ferrum @
      Вот ты мне скажи - ты мало видел примеров говнодизайна публичных интерфейсов без использования свойств? :) Злоупотреблять можно всем и везде. То, что ножом можно порезаться - это не повод делать его тупым. :D

      Так стоит ли овчинка выделки? Ну не было бы у тебя свойства поверх метода получения списка и что?
        Цитата D_KEY @
        Так стоит ли овчинка выделки?

        "Цена удобства". :) В ту же тему:

        ExpandedWrap disabled
          class SurfaceMap
          {
          public:
             property size_t ColsCount {get {return m_Cells.чего-то-там();}}
             property size_t RowsCount {get {return m_Cells.чего-то-там-другое();}}
             property SurfaceCell& Cells(int row, int col) {get {return m_Cells[row][col];}}
           
          private:
             boost::multi_index<SurfaceCell, 2> m_Cells;
          };
           
          // ...
          SurfaceMap map(10, 10);
          assert(map.ColsCount == 10);
          assert(map.RowsCount == 10);
           
          map.Cells[5][7].TerrinType = Terrain::BlueGrass;
        Сообщение отредактировано: Flex Ferrum -
          Цитата Flex Ferrum @
          Эммм... А как ты будешь связывать модель и представление? Духом святым?

          Ага, всё таки их к VS да и Qt прикручивали не интереса ради ;)
            Альтернативный вариант:
            ExpandedWrap disabled
              // 1
              SurfaceMap map(10, 10);
              assert(map.ColsCount == 10);
              assert(map.RowsCount == 10);
               
              map.Cells[5][7].TerrinType = Terrain::BlueGrass;
               
              // 2
              SurfaceMap map(10, 10);
              assert(map.GetColsCount() == 10);
              assert(map.GetRowsCount() == 10);
               
              map.GetCell(5, 7).SetTerrinType(Terrain::BlueGrass);
            Сообщение отредактировано: Flex Ferrum -
              Цитата DesweR @
              знаю, а не в триалке тексты Firemonkey открыты?

              Вообще должны быть, никаких причин закрывать нет.
              Цитата D_KEY @
              Так стоит ли овчинка выделки? Ну не было бы у тебя свойства поверх метода получения списка и что?

              Если свойства сделаны хорошо - стоит. Если просто свойства как обертка над геттером и сеттером, то понятно что сахар.
              Но в Delphi с ними еще и RTTI работает, а это значит, что они участвуют в персистентности и рефлексии. Именно из-за наличия механизма свойств не нужно где-то дополнительно описывать работу с редактором, сохранение, позднее связывание.
                Flex Ferrum
                А что-нибудь такое? :)
                ExpandedWrap disabled
                      TRectangle = class
                        private
                          FCoordinates: array[0..3] of Longint;
                          function GetCoordinate(Index: Integer): Longint;
                          procedure SetCoordinate(Index: Integer; Value: Longint);
                        public
                          property Left: Longint index 0   read GetCoordinate write SetCoordinate;
                          property Top: Longint index 1    read GetCoordinate write SetCoordinate;
                          property Right: Longint index 2  read GetCoordinate write SetCoordinate;
                          property Bottom: Longint index 3 read GetCoordinate write SetCoordinate;
                          property Coordinates[Index: Integer]: Longint read GetCoordinate write SetCoordinate;
                      end;


                Добавлено
                Цитата Romkin @
                Если просто свойства как обертка над геттером и сеттером, то понятно правила хорошего тона.

                fixed ;)
                  Цитата DesweR @
                  "Свойства" обеспечивают управление доступом к внутреннему состоянию объекта и тривиальной связкой методов "читать/писать", как ты полагаешь, они не ограничиваются.

                  да не нужен никакой "доступ к внутреннему состоянию", на то оно и внутреннее

                  Цитата DesweR @

                  ExpandedWrap disabled
                      TAncestor = class
                      private
                        FCaption: string;
                        FLength: Integer;
                      protected
                        property Caption: string read FCaption;
                        property Length: Integer read FLength;
                      end;
                     
                      TDerived1 = class(TAncestor)
                      public
                        property Caption;
                        property Length;
                      end;

                  здорово, вот так взяли и изменили область видимости свойств базового класса.
                    Цитата DesweR @
                    Flex Ferrum
                    А что-нибудь такое? :)

                    Ну, шарп (ЕМНИП) такого не поддерживает. Моя реализация свойств - могёт. А что-нибуть такое:

                    ExpandedWrap disabled
                      class IUnit
                      {
                      public:
                         PROPERTIES(IUnit, // В интерфейсе объявляем набор RO-свойств
                            ABSTRACT_RO_PROPERTY(IWizard*, Owner)
                            ABSTRACT_RO_PROPERTY(IRace*, Race)
                            ABSTRACT_RO_PROPERTY(StatsTuple&, Stats)
                         );
                      };
                       
                      class Unit : public IUnit
                      {
                      public:
                         PROPERTIES(Unit, // Имплементируем их как R/W-свойства
                            IMPLEMENT_PROPERTY(IUnit, PROPERTY(IWizard*, Owner))
                            IMPLEMENT_PROPERTY(IUnit, PROPERTY(IRace*, Race))
                            IMPLEMENT_PROPERTY(IUnit, PROPERTY(StatsTuple&, Stats))
                         );
                      };


                    Таким образом получаем, что внешние клиенты системы работают с ReadOnly-свойствами. А внутри системы требования менее жёсткие, и те же самые свойства можно ещё и писать.
                    Интерфейс непрозрачен. Т. е. перейти от него к реализации - нельзя...
                    Сообщение отредактировано: Flex Ferrum -
                      Цитата korvin @
                      здорово, вот так взяли и изменили область видимости свойств базового класса.

                      И что, это ужас-ужас? А что, методы в потомках в паблик не перемещают?
                        Цитата DesweR @
                        ExpandedWrap disabled
                            TDerived4 = class(TDerived3)
                            private
                              procedure SetLength(const ALength: Integer);
                            public
                              property Caption write FCaption;
                              property Length write SetLength;
                            end;

                        доступ к приватному полю базового класса тоже доставляет, да...
                          Цитата korvin @
                          доступ к приватному полю базового класса тоже доставляет, да...

                          Доступ через метод. Какие проблемы-то собственно?
                          Ну да, я понимаю, приватные поля вообще не должны никак изменяться снаружи, ни методами ни опосредованно. Ибо приват :)
                          Сообщение отредактировано: Romkin -
                            Цитата korvin @
                            доступ к приватному полю базового класса тоже доставляет, да...

                            Вот, кстати, доступ к свой базовой части, в принципе, нормален. К другом объекту, через интерфейс базового - нет.

                            Добавлено
                            Сейчас меня, наверно, четвертуют :)
                              Цитата D_KEY @
                              Сейчас меня, наверно, четвертуют :)

                              А потом повесят, расстреляют, а остатки - сожгут на костре. :)
                              Сообщение отредактировано: Flex Ferrum -
                                Цитата D_KEY @
                                Вот, кстати, доступ к свой базовой части, в принципе, нормален. К другом объекту, через интерфейс базового - нет.

                                Хе. А нафига тебе приватные поля, к которым нет доступа вообще?

                                Добавлено
                                Цитата korvin @
                                Цитата (DesweR @ Сегодня, 08:39)

                                TDerived4 = class(TDerived3)
                                private
                                procedure SetLength(const ALength: Integer);
                                public
                                property Caption write FCaption;
                                property Length write SetLength;
                                end;

                                доступ к приватному полю базового класса тоже доставляет, да...

                                Кстати, доступа тут нет.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 295 296 [297] 298 299 ...  494 495


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