На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (8) [1] 2 3 ...  7 8 все  ( Перейти к последнему сообщению )  
> Инкапсуляция vs Агрегирование , размышления в различных реализациях (языках программирования)
   
Что считаете лучшим?
Гости не могут просматривать результаты голосования.
Гости не могут голосовать 
    Дабы привнести нечто техническое давайте обсудим сабж?
      Фигня. Предлагаю опрос - что лучше, танк или вертолёт :yes:

      Добавлено
      К тому же причём вообще инкапсуляция? Обычно агрегированию противопоставляют наследование.
        Цитата OpenGL @
        К тому же причём вообще инкапсуляция? Обычно агрегированию противопоставляют наследование.

        WTF? Инкапсуляция предполагает объединение данных, ровно и как агрегирование. Хочется тему за наследование (полагаю про виртуализацию, сиречь полиморфизм) - делай тему! Тут только про данные.
          JoeUser,
          Цитата
          В первом сообщении - список параметров, по которым идет сравнение.

          Ну и было бы неплохо, если бы ты дал определения :)
            +1. У тебя, очевидно, какое-то своё понимание инкапсуляции. Озвучь его тогда.
              Цитата JoeUser @
              Инкапсуляция предполагает объединение данных, ровно и как агрегирование.

              Ничего подобного. Инкапсуляция означает снижения ссылок.
              А агрегирование это техника сокрытия связей в приватных полях и методах.
              Так что противопоставлять их можно. Но по сути то и то является техниками сокрытия информации.

              Что касается что лучше? Я бы в 4 из 5 случаев предпочел бы инкапсуляцию. Потому что агрегирование это все-равно что прятать проблему под ковёр. Вроде не видно но все равно воняет.
                Цитата Pavia @
                ичего подобного. Инкапсуляция означает снижения ссылок.
                А агрегирование это техника сокрытия связей в приватных полях и методах.
                Так что противопоставлять их можно. Но по сути то и то является техниками сокрытия информации.

                Что касается что лучше? Я бы в 4 из 5 случаев предпочел бы инкапсуляцию. Потому что агрегирование это все-равно что прятать проблему под ковёр. Вроде не видно но все равно воняет.

                Это троллинг такой?
                Можно пожалуйста пример агрегирования в приватных методах привести? Я ненароком думал, что агрегирование, как и композиция определяют отношение A has B. А инкапсуляция это типа сокрытие информации.

                Цитата Pavia @
                Потому что агрегирование это все-равно что прятать проблему под ковёр. Вроде не видно но все равно воняет.

                Из этого вывод, что всякие явошарпы с С++сами по сути используют проблемную идиому "прятать под ковер" и все написанное ПО, на этих языках, с использованием классов "воняет"?
                А можно пример, как надо, чтоб не воняло? :huh:
                  :wacko:
                    Инкапсуляция подразумевает объединение данных и методик их обработки в единой неделимой сущности. Сокрытие тут как приятный бонус, способствующий охране инвариантов этой сущности, и которое в общем-то важнее инкапсуляции как таковой. Агрегирование представляет собой рассмотрение готовой сущности как части другой. Несложно представить некую систему, где сокрытие её агрегатов (возможно, только лишь некоторых) нафик не упёрлось и потому к применению не обязательно. Важно, что агрегирование предоставляет лёгкое повторное использование существующего в контексте другой, более ёмкой, задачи.
                    В общем-то я тоже не вполне понимаю, как их сравнивать.

                    Добавлено
                    Не, ну можно, конечно, вспомнить всякое там PImpl и вынести все данные в агрегат. Тогда противопоставить одно другому можно. Но это ведь по-любому будет лишь частный случай использования того и другого. В общем же случае критериев сравнения у них как бы и нет, задачи-то они призваны решать разные.
                      Цитата Qraizer @
                      Агрегирование представляет собой рассмотрение готовой сущности как части другой.

                      Согласно учебнику банды 4.
                      Цитата
                      Агрегирование подразумевает, что один объект владеет другим или несет за него ответственность. В общем случае мы говорим, что объект содержит другой объект или является его
                      частью. Агрегирование означает, что агрегат и его составляющие имеют одинаковое время жизни.

                      А гарантировать такое можно при сокрытие одного класса внутри другого.

                      Цитата Qraizer @
                      Несложно представить некую систему, где сокрытие её агрегатов (возможно, только лишь некоторых) нафик не упёрлось и потому к применению не обязательно.

                      Несложно, очень просто. Но это как раз таки верёвка что-бы выстрелить себе в ногу.

                      Если у вас есть публичная ссылка кто-то захочет её использовать и тогда вы уже не сможете контролировать этот объект. Да конечно разработана теория мягких ссылок и жёстких. Но это всё равно нарушает потокобезапасность.
                              Цитата D_KEY @
                              Ну и было бы неплохо, если бы ты дал определения

                              Цитата OpenGL @
                              +1. У тебя, очевидно, какое-то своё понимание инкапсуляции. Озвучь его тогда.

                              Цитата JoeUser @
                              Инкапсуляция предполагает объединение данных, ровно и как агрегирование.

                              Немного ошибся, но не много! :) Инкапсуляция - это объединение данных и обработчиков (методов), а агрегирование - грубо говоря, помещение "поглощаемого объекта в поглощающий". Во втором случае могут быть и отдельные экземпляры классов, а могут быть и указатели на обработчики (методы и отдельные функции). А вопрос у меня возник на фоне идей Раста, где от наследования отказались, и от инкапсуляции (формально, вынесли в реализацию отдельно).
                                Цитата JoeUser @
                                Немного ошибся, но не много! Инкапсуляция - это объединение данных и обработчиков (методов), а агрегирование - грубо говоря, помещение "поглощаемого объекта в поглощающий". Во втором случае могут быть и отдельные экземпляры классов, а могут быть и указатели на обработчики (методы и отдельные функции). А вопрос у меня возник на фоне идей Раста, где от наследования отказались, и от инкапсуляции (формально, вынесли в реализацию отдельно).

                                Агрегирование это по сути внедрение зависимостей. Инкапсуляция - скрытие деталей реализации под капотом(ну грубо говоря). Это вроде как ортогональные вещи, как их сравнивать :-?
                                Допустим передача параметра в конструктор - агрегация, а реализация интерфейса в классе - инкапсуляция.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (8) [1] 2 3 ...  7 8 все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0571 ]   [ 18 queries used ]   [ Generated: 28.03.24, 12:50 GMT ]