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

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

      Т.е. даже мысли не возникает, что объект бывает в этом мире и не в куче... А потом ещё говорят, что я зашоренный плюсами...
        --Ins--, ты понимаешь это:

        ExpandedWrap disabled
          class Rect
          {
          public:
             //...
             void SetRect(const Rect &rect);
             const Rect & GetRect() const;
          };

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

          плох тот язык, который не может паттерн сделать частью себя =)
            Цитата MyNameIsIgor @
            что объект бывает в этом мире и не в куче...


            А у вас мысль возникает что объект всегда ссылочный тип? :) Только в с++ иначе :)
              Цитата korvin @
              ObjC

              :bad:
              Цитата korvin @
              но при чем тут инкапсуляция в том свете, в котором о ней говорит Повстанецъ, я не понимаю

              Тут сочетание непоследованности существования ссылочных типов и типов значений в одном языке и того факта, что свойства провоцируют на плохую инкапсуляцию.
                Цитата D_KEY @
                --Ins--, ты понимаешь это:


                И че? Где у меня SetRect (или SetPoint) дергается, ну-ка покажи? ;)
                  Цитата korvin @
                  Цитата MyNameIsIgor @
                  А вы уже не считаете, что свойства не к месту вообще? :)

                  отчего же? считаю. мне больше нравится чисто посылка сообщения, как в SmallTalk или ObjC хотя бы. но при чем тут инкапсуляция в том свете, в котором о ней говорит Повстанецъ, я не понимаю

                  А ты подумай, от чего зависит состояние Rect, от того, на какой объект ссылается закрытое поле Point или от того, какое состояние этот объект имеет? А тут ты напрямую меняешь состояние в обход всех выстроенных абстракций. Так понятно?
                    Цитата --Ins-- @
                    А у вас мысль возникает что объект всегда ссылочный тип?

                    Эээээ... Ещё раз, вы у программиста на шарпе об этом спрашиваете? Вы хорошо подумали, прежде чем задать вопрос?
                      Цитата korvin @
                      плох тот язык, который не может паттерн сделать частью себя =)

                      Что значит частью? Библиотекой? Да нет проблем - это очень даже широко используется, во всяком случае в С++, т.к. писать обобщенный код на нем можно, в отличии от делфи...
                        Цитата korvin @
                        Цитата D_KEY @
                        Не вижу практического применения, иначе давно бы сделал. Это все и так успешно делается на уровне проектных решений. Встраивать в язык фабрики, наблюдателей, адаптеры и т.п. - не вижу смысла.

                        плох тот язык, который не может паттерн сделать частью себя =)

                        В принципе, согласен ;) Ключевое слово "может". С++ тут, кстати, не так уж и плох. Есть правда некоторые проблемы, но все-таки.
                          Цитата D_KEY @
                          Встраивать в язык фабрики, наблюдателей, адаптеры и т.п. - не вижу смысла.


                          А итераторы? :D
                            Цитата korvin @
                            тебе дали инструмент -- инкапсуляция, скрой реализацию TRect, скрой его реализацию (TPoint), возвращай свойство Left (значение Point.X) и Top (значение Point.Y)
                            Ситуативнуе. Одноразовое. Контексто-зависимое решение. Вырвиглазное к тому же, спагетти-код, гарантия 100%.

                            Если это всё, на что способна столь удачная объектная система, то она явно не соответствует прозвучавшей тут рекламе.
                              а если так?
                              ExpandedWrap disabled
                                type
                                  TRect = class
                                  strict private type
                                    TContainedPoint = record
                                      private
                                        Ref:PPoint;
                                 
                                        function GetX:Integer;
                                        procedure SetX(Value:Integer);
                                        function GetY:Integer;
                                        procedure SetY(Value:Integer);
                                      public
                                        property X:Integer read GetX write SetX;
                                        property Y:Integer read GetY write SetY;
                                 
                                        class operator Implicit(Value:TPoint):TContainedPoint;
                                        class operator Implicit(Value:TContainedPoint):TPoint;
                                    end;
                                  strict private type
                                    TRectCoords = record
                                      case Integer of
                                        0: (Points: array[0..1] of TPoint);
                                        1: (Coords: array[0..3] of Integer);
                                      end;
                                  strict private
                                    FCoords: TRectCoords;
                                 
                                    function GetCoord(Index: Integer): Integer;
                                    procedure SetCoord(Index: Integer; Value: Integer);
                                    function GetPoint(Index: Integer): TContainedPoint;
                                    procedure SetPoint(Index: Integer; Value: TContainedPoint);
                                  public
                                    property Left: Integer index 0 read GetCoord write SetCoord;
                                    property Top: Integer index 1 read GetCoord write SetCoord;
                                    property Right: Integer index 2 read GetCoord write SetCoord;
                                    property Bottom: Integer index 3 read GetCoord write SetCoord;
                                    property LeftTop: TContainedPoint index 0 read GetPoint write SetPoint;
                                    property RightBottom: TContainedPoint index 1 read GetPoint write SetPoint;
                                    property Coords[Index: Integer]: Integer read GetCoord write SetCoord;
                                    property Points[Index: Integer]: TContainedPoint read GetPoint write SetPoint;
                                  end;
                                 
                                function TRect.GetCoord(Index: Integer): Integer;
                                begin
                                  Result := FCoords.Coords[Index];
                                end;
                                 
                                procedure TRect.SetCoord(Index: Integer; Value: Integer);
                                begin
                                  FCoords.Coords[Index] := Value;
                                end;
                                 
                                function TRect.GetPoint(Index: Integer): TContainedPoint;
                                begin
                                  Result.Ref := @FCoords.Points[Index];
                                end;
                                 
                                procedure TRect.SetPoint(Index: Integer; Value: TContainedPoint);
                                begin
                                  FCoords.Points[Index] := Value.Ref^;
                                end;
                                 
                                function TRect.TContainedPoint.GetX:Integer;
                                begin
                                  Result:=Ref.X;
                                end;
                                 
                                procedure TRect.TContainedPoint.SetX(Value:Integer);
                                begin
                                  Ref.X:=Value;
                                end;
                                 
                                function TRect.TContainedPoint.GetY:Integer;
                                begin
                                  Result:=Ref.Y;
                                end;
                                 
                                procedure TRect.TContainedPoint.SetY(Value:Integer);
                                begin
                                  Ref.Y:=Value;
                                end;
                                 
                                class operator TRect.TContainedPoint.Implicit(Value:TPoint):TContainedPoint;
                                begin
                                  Result.Ref:=@Value;
                                end;
                                 
                                class operator TRect.TContainedPoint.Implicit(Value:TContainedPoint):TPoint;
                                begin
                                  Result:=Value.Ref^;
                                end;
                                Цитата --Ins-- @
                                А итераторы?

                                А итераторы встроены в язык? Когда? Ещё сегодня утром они были в библиотеке.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 46 47 [48] 49 50 ...  494 495


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