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

    Цитата
    Each unit should have only limited knowledge about other units: only units "closely" related to the current unit.

    дык я это и предлагаю, вместо того, чтобы делать конкретные обертки (т.е. классу-контейнеру уже нужно знать, какие методы есть у внутреннего класса), просто разрешить доступ к интерфейсу объекта, но не позволяем внешнему коду работать с этим внутренним объектом "за спиной" у контейнера =)

    :wacko:
    "Класс-контейнер"(с чего, кстати, он контейнер в твоем примере?), реализовывая обертки, избавляет клиента от необходимости знать о классах, которые использует "класс-контейнер".

    Цитата
    Цитата D_KEY @
    Ты описываешь классы, как контейнеры с кучей полей... Это как-то больше напоминает Сишные структуры, чем классы...

    блин, я не говорю, что нужно пихать кучу таких полей в классах, но бывает удобно. считай это просто еще одним видом наследования, только не на уровне классов, а на уровне объектов

    Хм... Я подумаю, но пока преимуществ не вижу. А для такого рода рутины есть шаблоны в IDE и текстовых редакторах, да и кодогенерацию никто не отменял(мне кажется, что подобные "классы-наборы полей" как-раз можно вообще генерировать из каких-то внешних метаданных).
    Сообщение отредактировано: D_KEY -
      Цитата Qraizer @
      Не буду делать много экземпляров, функций, реализаций итп, идея должна быть ясна и так. Я могу переписать с агрегацией, если это больше подходит по дизайну:
      ExpandedWrap disabled
        class ISome1 {/* ... */};
        class ISome2 {/* ... */};
        class Some1 : public ISome1 {/* ... */};
        class Some2 : public ISome2 {/* ... */};
         
        void f(ISome1&);
         
        class SuperSome
        {
          Some1 s1;                              // "реализация" первого
          Some2 s2;                              // "реализация" второго
        /* ... */
        };
         
        int main()
        {
          SuperSome object;
         
          f(object);   // Опа-на, fail.
        }

      ExpandedWrap disabled
          f(object.s1);   // Опа-на, win.
        Цитата korvin @
        ExpandedWrap disabled
            f(object.s1);   // Опа-на, win.

        Он как-бы private :)
          Цитата Qraizer @
          Та скажи ж ты им, наконец, как ты хочешь "два(или больше) объекта A" отличать друг от друга. Синтаксически. Вон, DesweR "догадался" нумеровать. Мне тоже более изящного решения в голову не приходит.

          в смысле? по имени
          ExpandedWrap disabled
            class B {
                A x; // x -- это имя.
                A y; // y -- это имя.
            }
             
            B b = new B();
            b.x.foo(); // x
            b.y.foo(); // y

          что непонятного?
            Цитата korvin @
            что непонятного?

            Зачем :D ?
            В частности, зачем клиенту B знать о A, если он его никак не использует, кроме как через B?
              Цитата D_KEY @
              :wacko:
              "Класс-контейнер"(с чего, кстати, он контейнер в твоем примере?), реализовывая обертки, избавляет клиента от необходимости знать о классах, которые использует "класс-контейнер".

              а с чего он не контейнер? по отношению к своим полям он их контейнер.
              а им и в моем случае не обязательно знать классы внутренних объектов, зачем? только методы.
              что
              ExpandedWrap disabled
                C.x.foo();
                C.x.bar();
                C.y.foo();
                C.y.bar();

              что
              ExpandedWrap disabled
                C.x_foo();
                C.x_bar();
                C.y_foo();
                C.y_bar();

              в данном случае монопенисуально, только в моем случае не нужно самостоятельно писать эти обертки

              Добавлено
              Цитата D_KEY @
              В частности, зачем клиенту B знать о A, если он его никак не использует, кроме как через B?

              а ему и не надо знать, с чего ты взял, что надо?

              Добавлено
              Цитата D_KEY @
              Цитата korvin @
              ExpandedWrap disabled
                  f(object.s1);   // Опа-на, win.

              Он как-бы private :)

              он как бы read-only свойство (в нормальных языках =) ) или пишите обертки =)))
                Цитата korvin @
                Цитата D_KEY @
                :wacko:
                "Класс-контейнер"(с чего, кстати, он контейнер в твоем примере?), реализовывая обертки, избавляет клиента от необходимости знать о классах, которые использует "класс-контейнер".

                а с чего он не контейнер? по отношению к своим полям он их контейнер.

                Нет. В этом случае, это просто структура, кортеж с именованными полями, если угодно.
                Поля же объекта - это атрибуты объекта.

                Цитата
                что
                ExpandedWrap disabled
                  C.x.foo();
                  C.x.bar();
                  C.y.foo();
                  C.y.bar();

                что
                ExpandedWrap disabled
                  C.x_foo();
                  C.x_bar();
                  C.y_foo();
                  C.y_bar();

                в данном случае монопенисуально, только в моем случае не нужно самостоятельно писать эти обертки
                Если ты их так назовешь и будешь к ним так относится, то да.
                Но не забывай, что те классы(и их интерфейс), которые рассматриваемый класс использует, могут и изменится. И это не должно затрагивать клиентов, если контракт, фактически, не изменился.

                Цитата
                Цитата D_KEY @
                В частности, зачем клиенту B знать о A, если он его никак не использует, кроме как через B?

                а ему и не надо знать, с чего ты взял, что надо?
                Как он узнает, какие методы он может вызывать?

                Добавлено
                Цитата korvin @
                read-only свойство (в нормальных языках =) )

                Синтаксический сахар, не более :)
                  Цитата D_KEY @
                  Нет. В этом случае, это просто структура, кортеж с именованными полями, если угодно.
                  Поля же объекта - это атрибуты объекта.

                  а, прости, ты слово "контейнер" понимаешь только как какой-то абстрактный шаблонный класс AContainer<T>? представляющий некую коллекцию объектов?

                  Добавлено
                  Цитата D_KEY @
                  Как он узнает, какие методы он может вызывать?

                  так же как и всегда -- из интерфейса (неявного в данном случае)

                  Добавлено
                  Цитата D_KEY @
                  Нет. В этом случае, это просто структура, кортеж с именованными полями, если угодно.
                  Поля же объекта - это атрибуты объекта.

                  да ну? кто сказал, что у контейнерного класса при этом нет каких-то своих приватных полей и публичных методов?
                    Цитата korvin @
                    Цитата D_KEY @
                    Нет. В этом случае, это просто структура, кортеж с именованными полями, если угодно.
                    Поля же объекта - это атрибуты объекта.

                    а, прости, ты слово "контейнер" понимаешь только как какой-то абстрактный шаблонный класс AContainer<T>? представляющий некую коллекцию объектов?

                    http://en.wikipedia.org/wiki/Container_(data_structure)

                    Цитата
                    Цитата D_KEY @
                    Как он узнает, какие методы он может вызывать?

                    так же как и всегда -- из интерфейса (неявного в данном случае)

                    Как это неявного?
                    Как можно что-то узнать от неявного интерфейса? Что это вообще означает?

                    Цитата
                    Цитата D_KEY @
                    Нет. В этом случае, это просто структура, кортеж с именованными полями, если угодно.
                    Поля же объекта - это атрибуты объекта.

                    да ну? кто сказал, что у контейнерного класса при этом нет каких-то своих приватных полей и публичных методов?

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

                      изменение интерфейса в любом случае кого-то затронет. но я же и не призываю бездумно использовать чужие классы. если тебе нужен класс с устойчивым интерфейсом, то таким его и делай, если нужно, чтобы интерфейсы этих полей менялись с изменениями их классов -- то почему бы и нет? опять же, если и внутренние и внешние классы -- твои, то почему бы не иметь такую возможность? да может не суперполезна, но мне иногда хотелось, чтоб была.
                        korvin, ты можешь сформулировать свою идеи и нормально оформить, желательно с примерами на каком-то языке(реальном или гипотетическом, главное - полный пример синтаксиса с описанием семантики)?

                          ну и чем это определение противоречит классу Point { int x, y, z } как множеству трех целых чисел?
                            Цитата korvin @
                            то почему бы и нет?

                            Потому, что это нарушает такое простое понятие, как инкапсуляция. Но тебе никто не мешает(если это действительно необходимо) сделать методы get и set, работающие именно с объектами данных классов. Ты же хочешь чего-то среднего...

                            Добавлено
                            Цитата korvin @

                            ну и чем это определение противоречит классу Point { int x, y, z } как множеству трех целых чисел?

                            Ничем. Только это не класс. Это структура. Интерфейсом, фактически, тут являются сами данные.
                              Цитата D_KEY @
                              Как это неявного?
                              Как можно что-то узнать от неявного интерфейса? Что это вообще означает?

                              это значит не объявленного явно.
                              класс
                              ExpandedWrap disabled
                                class A {
                                    private int x;
                                    public  int getX() { return x; }
                                }

                              неявно реализует интерфейс
                              ExpandedWrap disabled
                                interface {
                                    int getX();
                                }


                              Добавлено
                              Цитата D_KEY @
                              Могут быть. Только как это связано с тем, что говорил я?

                              так, что это не кортеж
                                Цитата korvin @
                                Цитата D_KEY @
                                Как это неявного?
                                Как можно что-то узнать от неявного интерфейса? Что это вообще означает?

                                это значит не объявленного явно.
                                класс
                                ExpandedWrap disabled
                                  class A {
                                      private int x;
                                      public  int getX() { return x; }
                                  }

                                неявно реализует интерфейс
                                ExpandedWrap disabled
                                  interface {
                                      int getX();
                                  }

                                Цитата
                                - Ты знал, что Тоха - амбидекстер?
                                - Кто?
                                - Тоха.


                                Это все понятно...
                                Ты мне скажи, как клиент узнает интерфейс того поля, к которому будет обращаться, если не будет знать его класса?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 146 147 [148] 149 150 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.8043 ]   [ 15 queries used ]   [ Generated: 31.07.26, 07:36 GMT ]