Агрегация и Композиция

แชร์
ฝัง
  • เผยแพร่เมื่อ 21 ก.ค. 2015
  • Агрегация и Композиция - это два понятия, которые описывают связь между классами в объектно-ориентированных приложениях, но про которые мало кто говорит.

ความคิดเห็น • 110

  • @dimitrishat8659
    @dimitrishat8659 3 ปีที่แล้ว +107

    Иисус, ты шикарен.

  • @Alex-gn6xb
    @Alex-gn6xb 2 ปีที่แล้ว +107

    короче,
    композиция : создаем внутри нашего класса новый инстанс другого класса.
    агрегация : нашему классу в конструктор передали уже существующий инстанс другого класса.

    • @neu2229
      @neu2229 2 ปีที่แล้ว +12

      храни тебя господь за этот коментарий

    • @ShadySoul07
      @ShadySoul07 2 ปีที่แล้ว +8

      Лучший

    • @user-qs8vf5dm3c
      @user-qs8vf5dm3c 10 หลายเดือนก่อน +4

      Ну, и кто будет смотреть видео после этого коммента?

    • @Alex-gn6xb
      @Alex-gn6xb 10 หลายเดือนก่อน

      Спасибо за лайки:)

    • @user-vf1rw2rt5f
      @user-vf1rw2rt5f 9 หลายเดือนก่อน +4

      Немного добавлю от себя.
      композиция : 1 класс управляет жизненным циклом другого класса. Если класс 1 уничтожается, то уничтожается и объект класса 2.
      агрегация : 1 класс не управляет жизненным циклом (связь слабее), ему передают уже созданный экземпляр. Если класс 1 уничтожается, то объект класса 2 не уничтожается (если конечно на него есть ссылки извне, а не только в классе 1)

  • @undersun6301
    @undersun6301 2 หลายเดือนก่อน

    Очень подробно и доходчиво. Когда я впервые узнал об этих понятиях я запоминал так: агрегация от слова агрегат (напр. Двигатель в автомобиле), который я могу использовать отдельно от основного объекта. А композиция у меня ассоциируется с картиной, из которой нельзя взять и убрать фрагмент. Так и запомнил: один мы создаём и подключаем снаружи, а другой создаём прямо внутри основного объекта

  • @helga_volt
    @helga_volt วันที่ผ่านมา

    Очень интересно слушать! Спасибо за уроки.

  • @bedanatic
    @bedanatic 7 ปีที่แล้ว +17

    Шикарный канал, что бы я ни искал, часто натыкаюсь именно на Ваш канал

  • @danilmerkurev6248
    @danilmerkurev6248 9 หลายเดือนก่อน

    Это самый доходчивый пример на ютубе! За 5 минут я понял всю разницу. Другие видео на ютубе скорее запутывают

  • @user-ur1ee5qx5x
    @user-ur1ee5qx5x 2 ปีที่แล้ว +9

    Отличное видео!
    Спасибо Иисусу за пояснение, очень понятно и качественно объяснил все моменты

  • @fractonart7500
    @fractonart7500 ปีที่แล้ว

    Ты лучший! Для не опытных разработчиков доступно

  • @romanyarovyi1118
    @romanyarovyi1118 6 ปีที่แล้ว

    Очень доступно, спасибо Владимир!

  • @user-yb3tn1mr1o
    @user-yb3tn1mr1o 3 ปีที่แล้ว +2

    Отличное объяснение - все понятно ! Спасибо вам большое

  • @malerx
    @malerx 3 ปีที่แล้ว +5

    При композиции объекты создаются в базовом объекте, при агрегации объекты передаются в базовый объект.

  • @qellzxan155
    @qellzxan155 4 ปีที่แล้ว +1

    Спасибо за проделанный труд.

  • @arcsin4083
    @arcsin4083 5 ปีที่แล้ว

    Большое спасибо за ваш труд!

  • @yuri-s-08
    @yuri-s-08 7 ปีที่แล้ว +1

    Большое спасибо автору видео!!! Просто и понятно)

  • @andreyxa1434
    @andreyxa1434 6 ปีที่แล้ว

    Толковое объяснение. Спасибо!

  • @user-ec6ot3zk1p
    @user-ec6ot3zk1p 5 ปีที่แล้ว +1

    Хорошо объяснил про агрегацию и композицию!

  • @TheDavBag
    @TheDavBag 2 ปีที่แล้ว

    Володя, спасибо!

  • @n6mq97
    @n6mq97 4 ปีที่แล้ว +6

    Реально классно объяснили, спасибо!

  • @elailft6923
    @elailft6923 7 ปีที่แล้ว

    Спасибо, Владимир.

  • @kirillnorkin8283
    @kirillnorkin8283 4 ปีที่แล้ว +1

    Воу-воу, в программировании бесконечности быть не может, не может быть неможет. Надо чтоб стены могли двигаться, с учётом, что за стенами XYZ бесконечностей, во времени.
    А так круто, прям благодарю)))

  • @CosmJJ
    @CosmJJ 3 ปีที่แล้ว +1

    Лучшее объяснение! Спасибо)

  • @Alexander-is1eq
    @Alexander-is1eq 2 ปีที่แล้ว

    Лучшее объяснение на ютюбе. Спасибо большое!

  • @user-oo6th2pm2v
    @user-oo6th2pm2v 4 ปีที่แล้ว

    Спасибо за разъяснение!

  • @TarikBat
    @TarikBat ปีที่แล้ว

    Хорошо рассказываешь!

  • @stanislavmachel5361
    @stanislavmachel5361 6 ปีที่แล้ว +1

    Хороший пример и хорошие объяснение

  • @ilovewindowsmobile
    @ilovewindowsmobile 9 ปีที่แล้ว

    Отличное видео! Все стало понятно

  • @timetoplay2927
    @timetoplay2927 6 ปีที่แล้ว

    Большое Спасибо!

  • @aleksandraSwedenVlog
    @aleksandraSwedenVlog 4 ปีที่แล้ว

    spasibo vam ogromnoe!!!

  • @volselongames4505
    @volselongames4505 2 ปีที่แล้ว

    Чувак ты очень хорошо объясняешь спасибо

  • @pavelbushmakin8126
    @pavelbushmakin8126 8 ปีที่แล้ว

    Ты сказал что в программировании бесконечности быть не может, а как же бесконечность на основе ленивости. В Haskell могут быть бесконечные списки, когда следующий элемент вычисляется по требованию. В других ЯП также существуют реализации ленивости.
    Благодарю за уроки, Володя!

    • @javadeveloper51
      @javadeveloper51 8 ปีที่แล้ว

      он просто не хотел неофитам забивать голову

    • @justkrybik
      @justkrybik 7 ปีที่แล้ว +4

      А объем оперативки у Вас бесконечен?

  • @troublemakergirl7493
    @troublemakergirl7493 5 ปีที่แล้ว

    "Да?") Спасибо за урок)

  • @itforrest2990
    @itforrest2990 2 ปีที่แล้ว

    Заместо, я скучал по тебе)

  • @augustine582
    @augustine582 5 ปีที่แล้ว

    круто, спасибо

  • @nlookorg
    @nlookorg 7 ปีที่แล้ว +4

    Писать код на доске, такого я давно не видел)
    Все очень понятно. Спасибо.

  • @MrSergeyUSA
    @MrSergeyUSA 8 ปีที่แล้ว

    Володя, спасибо большое.
    Как вы считаете связь между классами Директория и Файл какая?

    • @VladimirMozhenkov
      @VladimirMozhenkov  8 ปีที่แล้ว +4

      +Сергей Ющенко Смотря что вы делаете.
      Если смотреть с точки зрения Файловой Системы, то директория - это файл, и в директории есть файлы. Значит Файл - это суперкласс Директории и также в директории через агрегацию подключены другие файлы.

  • @user-tg1ge6oi2v
    @user-tg1ge6oi2v 4 ปีที่แล้ว

    понятно , спасибо.

  • @YGNETATEL_3000
    @YGNETATEL_3000 ปีที่แล้ว

    Не знал что Паук ведет курс по ООП. Удивительное рядом.

  • @TheXbxeh
    @TheXbxeh 7 ปีที่แล้ว

    Что именно в коде делает связь типа агрегации или композиции, наличие пресловутых указателей shared_ptr либо unique_ptr?

  • @user-lr8hd5qi6n
    @user-lr8hd5qi6n 5 ปีที่แล้ว

    Как это выглядит в других языках? Да и в тех же плюсах по синтаксису и способам обяъявления? Пока что я понял что такая фишка работает ввиду свойства деструктора и модификатора unic для доступа к указателям. Может есть какой языковый синтаксический сахар, который явно говорит - вот тут композиция, а вот тут агрегация?

  • @user-pm2gy3oc5f
    @user-pm2gy3oc5f 4 ปีที่แล้ว +5

    На 5:30 можно было остановиться, было все понятно, потом все запутали обратно. Ну и пример с аэропортом тоже не то, вот объект (человек) и его объект (мозг) - композиция, а его объект (штаны) - агрегация.

  • @OlegMatiyuk
    @OlegMatiyuk 8 ปีที่แล้ว

    Владимир, а разве хранение в объекте класса Room вектора указателей shared_ptr на класс Furniture не приведет к удалению объектов Furniture при уничтожении объекта Room? То есть не является ли описываемая Вами модель агрегации (Room-Furniture) на самом деле моделью композиции?

    • @VladimirMozhenkov
      @VladimirMozhenkov  8 ปีที่แล้ว +1

      Oleg Matiyuk Если вы в конструкторе создаёте эти объекты, и потом нигде их не передаёте, то да. Но если вы используете shared_ptr по назночению, и эти объекты используются другими указателями, то они не будут удалены при уничтожении объекта Room.

    • @OlegMatiyuk
      @OlegMatiyuk 8 ปีที่แล้ว

      Vladimir Mozhenkov , так как написали на доске, то время жизни объектов Furniture прямо зависит от времени жизни объекта Room и А1 на временной шкале заканчивается там же, где заканчивается и А2.
      Но в принципе, смысл ясен. Спасибо.

  • @user-du5jm8zf7q
    @user-du5jm8zf7q 2 ปีที่แล้ว

    спасибо, не знал что Исус та хорошо может объяснить темы из программирования

  • @nikolayg.5319
    @nikolayg.5319 7 ปีที่แล้ว +8

    про Полиморфизм бы послушал...жаль нет

    • @aptv8942
      @aptv8942 4 ปีที่แล้ว

      уже есть

    • @aptv8942
      @aptv8942 4 ปีที่แล้ว +1

      да и за 3 года вы, наверное, уже сами испытали это на реальном примере)

    • @TeppopucT
      @TeppopucT 3 ปีที่แล้ว

      @@aptv8942 зачем полиморфизм, если есть агрегация и композиция?

    • @TeppopucT
      @TeppopucT 3 ปีที่แล้ว +1

      Ладно, я херню написал. Это скорее к наследованию, чем к полиморфизму

  • @user-ru9jy4hq6d
    @user-ru9jy4hq6d 3 ปีที่แล้ว +1

    Почему не может выйти за рамки, если эта же стена может быть смежной с другой комнатой?

    • @sharker1969
      @sharker1969 3 ปีที่แล้ว

      а ведь внатуре...
      хотя, наверное, она тогда будет принадлежать только этим двум комнатам, и не сможет выйти за ИХ рамки... хотя хз...

  • @andreyandrey1004
    @andreyandrey1004 3 ปีที่แล้ว

    подписон. доступненько донес

  • @maxgoncharenko558
    @maxgoncharenko558 8 ปีที่แล้ว

    А какая принципиальная разница между uniqe_ptr и shared_ptr? Типа объекты других классов могут или не могут с ними взаимодействовать?

    • @VladimirMozhenkov
      @VladimirMozhenkov  8 ปีที่แล้ว +3

      +Max Goncharenko
      unique_ptr удаляет объект сразу, и является самым "лёгким" изо всех умных указателей.
      shared_ptr ещё и отслеживает сколько указателей ссылаются на объект и удаляет только в самом конце (когда счётчик будет равен 0).
      th-cam.com/video/o4nUrXR-1MM/w-d-xo.html

    • @maxgoncharenko558
      @maxgoncharenko558 8 ปีที่แล้ว

      +Vladimir Mozhenkov, спасибо

  • @renakdup
    @renakdup 3 ปีที่แล้ว

    Неподскажите, а DI чем от агрегации отличается?

  • @evgeniydubovik3559
    @evgeniydubovik3559 4 ปีที่แล้ว +6

    спасибо Иисус

  • @webmaster3984
    @webmaster3984 ปีที่แล้ว

    2:45
    наверно в комнате от трех стен и больше, иначе если она стена или две стены, то трудно себе представить что это за комната

  • @michaelivashchenkov3647
    @michaelivashchenkov3647 6 ปีที่แล้ว +1

    А как насчет того, что может быть 2 комнаты, находящиеся рядом, с 1 общей стеной ? Спасибо за доступный и понятный материал.

    • @pluto2656
      @pluto2656 6 ปีที่แล้ว +4

      shared_ptr, общая стена уничтожится, когда уничтожатся все объекты ссылающиеся на нее. Выходит, что в таком случае это ассоциация

  • @MrRomanvideo
    @MrRomanvideo 4 ปีที่แล้ว +1

    Чем это отличается от глобальных и локальных переменных?

    • @RushFuture
      @RushFuture 4 ปีที่แล้ว +2

      Примерно тем же, чем отличается квадратное от холодного.

  • @dmitrikonnov922
    @dmitrikonnov922 2 ปีที่แล้ว

    Объясняет как БОЖЕНЬКА!!! ++++++++++++++++++++++++++++++

  • @WTFax
    @WTFax 8 ปีที่แล้ว

    Как выразить обычную ассоциацию, когда объект только использует некий объект?

    • @VladimirMozhenkov
      @VladimirMozhenkov  8 ปีที่แล้ว

      +WTF! Что вы имеете ввиду "выразить"? Диаграмно или в коде?
      Если на диаграмме, то просто рисуете простую линию от одного к другому. А если в коде, то тут уже надо смотреть на то, как он его использует. Из-за этого иногда в диаграммах на этой линии пишут глагол означающий что за связь. Например
      [Преподаватель] ---------принимает экзамен у------- [Студент]

    • @WTFax
      @WTFax 8 ปีที่แล้ว

      в коде, например компьютер использует базу данных.

    • @736939
      @736939 8 ปีที่แล้ว

      Tree *Forrest ; // association List Forrest; // aggregation Tree Forrest = new Tree(); // composition

  • @Mura905
    @Mura905 ปีที่แล้ว

    А если одна стена принадлежит двум комнатам или более?

  • @maksengineer6313
    @maksengineer6313 5 หลายเดือนก่อน

    По-приколу накалякал:
    class Person
    {
    public:
    Person(string name, int age)
    {
    this->name = name;
    this->age = age;
    }
    string name;
    int age;
    };
    class Wall
    {
    int length{ 0 },
    width{ 0 },
    heigth{ 0 };
    };
    class Room
    {
    private:
    Person* person;
    Wall* walls;
    public:
    Room(Person* shared_persons, int walls_count)
    {
    this->person = shared_persons; //agr
    this->walls = new Wall[walls_count]; //comp
    }
    };
    int main()
    {
    Person* people = new Person[3]
    {
    Person("gena", 13),
    Person("pena", 17),
    Person("jena", 31)
    };
    Room room = Room(people, 5);
    }

  • @protiv_bio
    @protiv_bio 3 ปีที่แล้ว

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

    • @protiv_bio
      @protiv_bio 3 ปีที่แล้ว

      А, понял в последних минутах. Если перевести на джаву (и пишем правильно без всяких инит-методов), то композиция - это не static, но final поля, которые устанавливаются где-то в конструкторе/блоке/при объявлениии, а агрегация - поля, которые принципиально устанавливаем через сеттеры. Но в реальной жизни я такой код в последнее время не помню, чтобы писал, когда используешь сеттеры, это обычно когда нет ломбока и лень билдер писать, а так в основном вроде композицию используют, а если надо что-то сделать, то стейтлесс-методы (статические утильные) с передачей параметров в помощь, не? Че-то слабо представляю кейс, когда сеттер реально нужен не как костыль, или я туплю вечером?

  • @fulcrum013
    @fulcrum013 5 ปีที่แล้ว +1

    Батенька да у вас ошибка с композицией однако. Композиция никак не препятствует уничтожению композированного объекта. Т.е. стена не может прожить дольше чем комната. Но нигде не сказано что она не может быть разрушена раньше комнаты так же как и создана позже.

  • @user-ru9jy4hq6d
    @user-ru9jy4hq6d 3 ปีที่แล้ว

    Почему не может быть бесконечности?

  • @doszh9899
    @doszh9899 7 ปีที่แล้ว +1

    почему у вас нет лекция про Полиморфизм ?

    • @user-kg9qk8rt1e
      @user-kg9qk8rt1e 7 ปีที่แล้ว +1

      Потому что всё смешалось в доме обломских.
      Потому что материал подаётся так как его преподают преподы глупые в универах... да-да, и не надо мне сказки рассказывать что преподы по программированию типа очень мудрые )) глупы и ограничены... и именно в таком глупом порядке материал и подаётся. Почему? - потому что ОПЫТА НЕТ. Нет понимания что такое программирование )) отсюда и подача материала о КОДИНГЕ а не программировании.
      лекция по КОДИРОВАНИЮ а не программированию... вот потому вам и не понятно куда пропал полиморфизм.. вроде же три кита должны быть в одном месте.. а один кит исчез )) а вот тут автор правильно сделал если третьего кита оставил напоследок. Хотя при правильной подаче материала, да наверно три кита в самом начале должны были идти и к тому моменту когда вас начали бы учить КОДИНГУ то в программировании вы бы уже степень доктора имели бы ))

    • @jaimeasm5527
      @jaimeasm5527 4 ปีที่แล้ว

      Полиморфизм в ООП реализуется через Интерфейс/Наследование. Про оба механизма Володя уже рассказал.

  • @user-dv1nc2xo2w
    @user-dv1nc2xo2w 2 ปีที่แล้ว +1

    Но, стена может являться стеной для 2ух комнат в реальности. :)

  • @ilyas48973
    @ilyas48973 7 ปีที่แล้ว +6

    Ну вот, до этого так складно говорил про концептуальность, а тут скатился в реализацию :(

    • @404Negative
      @404Negative 2 ปีที่แล้ว

      где вы реализацию увидели ? и реализацию чего ?

  • @yarobest9594
    @yarobest9594 4 ปีที่แล้ว

    Тор учит меня программированию

  • @Tyn4tyk
    @Tyn4tyk 3 ปีที่แล้ว

    Здарова Болодя

  • @Nikikwiki
    @Nikikwiki 4 ปีที่แล้ว

    Володя, очевидно, по вечерам играет паган металл.

    • @mashamanina6106
      @mashamanina6106 3 ปีที่แล้ว

      отстаньте от него, когда идут с тунелями в ушах и на заднице, то вы не возмущаетесь, а тут чел естественный и надо прикопаться, ты сам то себя идеальным считаешь?

  • @current1710
    @current1710 5 ปีที่แล้ว

    И маркер не скрипит )

  • @VladyslavHorbachov
    @VladyslavHorbachov 4 ปีที่แล้ว +3

    Если честно - ужастный пример. Если бы у меня не было опыта программирования, то я бы вообще ничего не понял.

    • @Alex-gn6xb
      @Alex-gn6xb 2 ปีที่แล้ว

      тоже поймал себя на мысли, что сложновато))

  • @MarvinMatters
    @MarvinMatters 7 ปีที่แล้ว

    Какой это язык

    • @rtm8718
      @rtm8718 7 ปีที่แล้ว +1

      С++

  • @HellfireRampage
    @HellfireRampage 3 ปีที่แล้ว

    Спасибо Иисус =)
    Like♥

  • @yarobest9594
    @yarobest9594 4 ปีที่แล้ว +2

    6:47 майданы

  • @user-qs8vf5dm3c
    @user-qs8vf5dm3c 10 หลายเดือนก่อน

    Володя - инстанс класса Иисус.

  • @Science-Reality
    @Science-Reality 6 ปีที่แล้ว

    Даввй полиморфизм...!?

  • @user-vk3ur7xz7d
    @user-vk3ur7xz7d 5 ปีที่แล้ว

    Исус

  • @AlexErmashev
    @AlexErmashev 8 ปีที่แล้ว +1

    Сложновато как то, можно было бы полегче объяснить

  • @user-kg9qk8rt1e
    @user-kg9qk8rt1e 7 ปีที่แล้ว

    блин как на столмана то похож .. жуть аж

  • @Niakita
    @Niakita 6 ปีที่แล้ว

    Так и не понял - что такое агрегация

  • @PavelOmelchenko
    @PavelOmelchenko 4 ปีที่แล้ว

    Диз за «времени суток». За остальное спасибо