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

    Извини, но вы в очередной раз увиливаете ;)

    От чего? Все подробно вам объясняем. Ждем от вас того же, не всегда дожидаемся. Shaggy вот большое спасибо, за некоторые разъяснения.

    Цитата
    Цитата D_KEY @
    Причем тут какая-то технология?

    Почитай "Сущность технологии СОМ" (Дональд Бокс), там подробно рассматриваются данные аспекты и мотивы их решений.

    Какое отношение имеет эта отдельно взятая технология к языковым механизмам?

    Добавлено
    Цитата DesweR @
    Почитай "Сущность технологии СОМ" (Дональд Бокс), там подробно рассматриваются данные аспекты и мотивы их решений.

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

      в идеале -- это чтоб можно было сказать либо "весь-интерфейс", либо список методов

      Добавлено
      Цитата Мяут-Настоящий @
      А кто определяет, к каким методам x обратиться можно, а к каким нельзя?
      И потом, если C должен иметь подможество интерфейса x, не проще ли унаследоваться от x и не заморачиваться?

      C и определяет. Естественно он может выбирать только из публичных.

      ещё раз: как ты предлагаешь наследоваться от Int, в случае когда в C необходимо иметь несколько объектов класса Int?

      Добавлено
      хотя возможно лучше без выбора: либо все публичные, либо никаких. Частичное сокрытие интерфейса внутреннего объекта может нарушить логику его поведения
        Цитата D_KEY @
        От чего? Все подробно вам объясняем. Ждем от вас того же, не всегда дожидаемся.

        Ну ну, лукавить только не надо :yes:

        korvin
        Так что ли?
        ExpandedWrap disabled
            IInt = interface
              function GetX: Integer;
              procedure SetX(const AX: Integer);
              property X: Integer read GetX write SetX;
            end;
           
            TInt = class(TInterfacedObject, IInt)
            strict private
              FX: Integer;
              function GetX: Integer;
              procedure SetX(const AX: Integer);
            end;
           
          ...
           
          var
            Int: IInt;
          begin
            Int := TInt.Create;
            Int.X ...
          end;


        Цитата D_KEY @
        Какое отношение имеет эта отдельно взятая технология к языковым механизмам?

        Это не просто технология - это стиль компонентно‑ориентированного программирования.

        Цитата D_KEY @
        Можно поконкретнее(раздел,глава), то что непосредственно относится к нашему обсуждению.

        Во первых: я уже точно не помню, там ещё манера изложения материала - по спирали, т.е. как минимум нужно по диагонали пробежаться;
        Во вторых: мне некогда и лень сейчас искать/качать книгу;
        В третьих: если действительно интересно - найдешь без труда, содержание там есть.
        Ну и в четвёртых: о С++ там тоже идёт речь ;)

        Добавлено
        Цитата korvin @
        хотя возможно лучше без выбора: либо все публичные, либо никаких.

        Кажется понял, ты хочешь чтобы "автоматом" получались все методы?
        Сообщение отредактировано: DesweR -
          Цитата DesweR @
          Во первых: я уже точно не помню, там ещё манера изложения материала - по спирали, т.е. как минимум нужно по диагонали пробежаться;
          Во вторых: мне некогда и лень сейчас искать/качать книгу;
          В третьих: если действительно интересно - найдешь без труда, содержание там есть.
          "Пойди туда, сам знаешь куда, принести то, сам знаешь что" :D
            Цитата DesweR @
            Цитата D_KEY @
            Какое отношение имеет эта отдельно взятая технология к языковым механизмам?

            Это не просто технология - это стиль компонентно‑ориентированного программирования.

            http://en.wikipedia.org/wiki/Component_Object_Model

            Цитата
            Ну и в четвёртых: о С++ там тоже идёт речь ;)
            В основном сомнительной достоверности :'(
              Цитата DesweR @
              Кажется понял, ты хочешь чтобы "автоматом" получались все методы?

              по-моему это не то, что я хочу
                ?
                ExpandedWrap disabled
                    IInt = interface
                      function  GetX: Integer;
                      procedure SetX(const AX: Integer);
                    end;
                    
                    TInt = class(TInterfacedObject, IInt)
                    strict private
                      FX: Integer;
                    strict protected
                      function  GetX: Integer;
                      procedure SetX(const AX: Integer);
                    end;
                    
                   
                    TC = class
                    strict private
                      FInts: TList<IInt>; //всё в списке, для удобства
                      function GetInt(const AIndex: Integer): IInt;
                    public
                      constructor Create(const AIntsCount: Integer);
                      destructor  Destroy; override;
                      property    Ints[const Index: Integer]: IInt read GetInt; //получаем интерфейс, а не сам объект
                    end;
                   
                   
                  function TInt.GetX: Integer;
                  begin
                    Result := FX;
                  end;
                   
                  procedure TInt.SetX(const AX: Integer);
                  begin
                    FX := AX;
                  end;
                   
                   
                  constructor TC.Create(const AIntsCount: Integer);
                  var
                    i: Integer;
                  begin
                    FInts := TList<IInt>.Create;
                    
                    FInts.Capacity := AIntsCount;
                    for i := 0 to AIntsCount - 1 do
                      FInts.Add(TInt.Create);    
                  end;
                   
                  destructor TC.Destroy;
                  begin
                    FreeAndNil(FInts);
                  end;
                   
                  function TC.GetInt(const AIndex: Integer): IInt;
                  begin
                    Result := FInts[AIndex];
                  end;
                   
                  ...
                   
                  var
                    C: TC;
                  begin
                    C := TC.Create(3);
                   
                    C.Ints[0].SetX(111);
                    C.Ints[1].SetX(222);
                    C.Ints[2].SetX(333);
                      
                    Writeln(C.Ints[0].GetX);
                    Writeln(C.Ints[1].GetX);
                    Writeln(C.Ints[2].GetX);
                    
                    C.Free;
                  end;
                  зачем ты усложняешь?
                    Цитата korvin @
                    зачем ты усложняешь?

                    Ну а как? :)

                    Добавлено
                    ExpandedWrap disabled
                        TC = class
                        strict private
                          FInts1: IInt;
                          FInts2: IInt;
                          FInts3: IInt;
                        public
                          constructor Create;
                          property    Int1: IInt read FInts1;
                          property    Int2: IInt read FInts2;
                          property    Int3: IInt read FInts3;
                        end;
                      вот пример, как это могло бы быть на Java (интерфейс Show здесь не важен, просто для App.println):
                      ExpandedWrap disabled
                        package example;
                         
                        interface Show {
                            public String show ();
                        }
                         
                        class Point implements Show {
                            private int x = 1;
                            private int y = 2;
                         
                            public int getX () { return x; }
                            public int getY () { return y; }
                         
                            public void setX (int x) { this.x = x; }
                            public void setY (int y) { this.y = y; }
                         
                            public String show () {
                                return String.format( "(%d, %d)", x, y );
                            }
                        }
                         
                        class Line implements Show {
                            /*спецификатор*/ Point A = new Point();
                            /*спецификатор*/ Point B = new Point();
                         
                            public String show () {
                                return String.format( "[%s - %s]", A.show(), B.show() );
                            }
                        }
                         
                        public class App {
                            static void println (Show s) {
                                System.out.println( s.show() );
                            }
                            public static void main (String[] args) {
                                Line L = new Line();
                                L.A.setX(8); // OK
                                L.A.setY(9); // OK
                         
                                println(L);
                                println(L.A); // ошибка компиляции
                            }
                        }


                      Добавлено
                      Цитата DesweR @
                      Цитата korvin @
                      зачем ты усложняешь?

                      Ну а как? :)

                      Добавлено
                      ExpandedWrap disabled
                          TC = class
                          strict private
                            FInts1: IInt;
                            FInts2: IInt;
                            FInts3: IInt;
                          public
                            constructor Create;
                            property    Int1: IInt read FInts1;
                            property    Int2: IInt read FInts2;
                            property    Int3: IInt read FInts3;
                          end;

                      а что будет, если
                      ExpandedWrap disabled
                        var
                          A : TC;
                          B : IInt;
                         
                        ...
                         
                        B := A.Int1;

                      ?
                        korvin, еще раз, в чем разница между предоставлением доступа к методам get/set и доступом "к самому объекту", если ты с объектом все-равно ничего сделать не сможешь, кроме get и set?
                        Сообщение отредактировано: D_KEY -
                          Цитата korvin @
                          а что будет, если

                          Ну разве что объявить интерфейс и реализующий его класс внутри класса С.
                          ExpandedWrap disabled
                              TC = class
                              strict private
                              type
                                IInt = interface
                                  function  GetX: Integer;
                                  procedure SetX(const AX: Integer);
                                end;
                             
                                TInt = class(TInterfacedObject, IInt)
                                strict private
                                  FX: Integer;
                                strict protected
                                  function  GetX: Integer;
                                  procedure SetX(const AX: Integer);
                                end;
                             
                              strict private
                                FInts: TList<IInt>;
                                function GetInt(const AIndex: Integer): IInt;
                              public
                                constructor Create(const AIntsCount: Integer);
                                destructor  Destroy; override;
                                property    Ints[const Index: Integer]: IInt read GetInt;
                              end;

                          ExpandedWrap disabled
                            var
                              C: TC;
                              B: IInt;//ошибка, необъявленный идентификатор
                              B: TC.IInt;//Cannot access private symbol TC.IInt
                            begin
                              C := TC.Create(3);
                              B := C.Ints[0];


                          Добавлено
                          Собственно тогда и интерфейс не нужен...
                          Сообщение отредактировано: DesweR -
                            Цитата D_KEY @
                            korvin, еще раз, в чем разница между предоставлением доступа к методам get/set и доступом "к самому объекту", если ты с объектом все-равно ничего сделать не сможешь, кроме get и set?

                            get/set -- это условно, мне лень было придумывать кучу методов. разница в невозможности изменить часть объекта независимо от объекта, т.е. взять "адрес" на внутренний объект, передать куда-то и где-то там менять.
                              korvin, как я понимаю нужно что-то вроде:
                              ExpandedWrap disabled
                                class button
                                {
                                public:
                                 
                                    boost::function<void()> onClick;
                                };
                                 
                                class player
                                {
                                public:
                                 
                                    void play();
                                    void stop();
                                };
                                 
                                button playButton, stopButton;
                                player thePlayer;
                                 
                                void connect()
                                {
                                    playButton.onClick = boost::bind(&player::play, &thePlayer);
                                    stopButton.onClick = boost::bind(&player::stop, &thePlayer);
                                }

                              (пример кстати взят из документации по boost)

                              Для класса button в данном случае сокрыты не нужные методы player.
                              Сообщение отредактировано: Мяут-Настоящий -
                                Ну или так.
                                ExpandedWrap disabled
                                    TInt = class
                                    strict private
                                      FX: Integer;
                                    public
                                      function  GetX: Integer;
                                      procedure SetX(const AX: Integer);
                                    end;
                                   
                                   
                                    TC = class
                                    strict private
                                    type
                                      TTCInt = class(TInt)
                                      end;
                                    strict private
                                      FInts: TList<TTCInt>;
                                      function GetInt(const AIndex: Integer): TTCInt;
                                    public
                                      constructor Create(const AIntsCount: Integer);
                                      destructor  Destroy; override;
                                      property    Ints[const Index: Integer]: TTCInt read GetInt;
                                    end;

                                ExpandedWrap disabled
                                  var
                                    C: TC;
                                    //B: TTCInt; так не сработает
                                    B: TInt; //а так можно обойти, если догадаешься
                                  begin
                                    C := TC.Create(3);
                                    B := C.Ints[0];


                                Добавлено
                                Цитата Мяут-Настоящий @
                                korvin, как я понимаю нужно что-то вроде:

                                Ты вручную делегируешь методы, а Корвину это не нравится :angry:
                                Сообщение отредактировано: DesweR -
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 144 145 [146] 147 148 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.2811 ]   [ 14 queries used ]   [ Generated: 31.07.26, 06:46 GMT ]