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

Поділитися
Вставка
  • Опубліковано 18 гру 2024

КОМЕНТАРІ • 110

  • @dimitrishat8659
    @dimitrishat8659 4 роки тому +109

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

  • @Alex-gn6xb
    @Alex-gn6xb 3 роки тому +109

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

    • @neu2229
      @neu2229 2 роки тому +12

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

    • @ShadySoul07
      @ShadySoul07 2 роки тому +8

      Лучший

    • @АлександрШейка-ц5ь
      @АлександрШейка-ц5ь Рік тому +4

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

    • @Alex-gn6xb
      @Alex-gn6xb Рік тому

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

    • @Уголок78
      @Уголок78 Рік тому +4

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

  • @danilmerkurev6248
    @danilmerkurev6248 Рік тому

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

  • @bedanatic
    @bedanatic 7 років тому +17

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

  • @helga_volt
    @helga_volt 6 місяців тому

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

  • @undersun6301
    @undersun6301 8 місяців тому

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

  • @fractonart7500
    @fractonart7500 Рік тому

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

  • @ТимофейКарлин-е8с
    @ТимофейКарлин-е8с 2 роки тому +9

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

  • @TheDavBag
    @TheDavBag 3 роки тому

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

  • @МихаилКатков-м8х
    @МихаилКатков-м8х 3 роки тому +2

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

  • @wttbttm
    @wttbttm 5 років тому +6

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

  • @CosmJJ
    @CosmJJ 4 роки тому +1

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

  • @qellzxan155
    @qellzxan155 5 років тому +1

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

  • @TarikBat
    @TarikBat 2 роки тому

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

  • @Alexander-is1eq
    @Alexander-is1eq 2 роки тому

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

  • @артёмтема-с3ъ
    @артёмтема-с3ъ 5 років тому +1

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

  • @kirillnorkin8283
    @kirillnorkin8283 4 роки тому +1

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

  • @stanislavmachel5361
    @stanislavmachel5361 6 років тому +1

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

  • @malerx
    @malerx 4 роки тому +5

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

  • @andreyxa1434
    @andreyxa1434 6 років тому

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

  • @arcsin4083
    @arcsin4083 6 років тому

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

  • @volselongames4505
    @volselongames4505 2 роки тому

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

  • @elailft6923
    @elailft6923 7 років тому

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

  • @yuri-s-08
    @yuri-s-08 7 років тому +1

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

  • @romanyarovyi1118
    @romanyarovyi1118 7 років тому

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

  • @ЕкатеринаХромова-д3ф

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

  • @itforrest2990
    @itforrest2990 2 роки тому

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

  • @ГордумаЧелябинск
    @ГордумаЧелябинск 5 років тому +5

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

  • @aleksandraSwedenVlog
    @aleksandraSwedenVlog 4 роки тому

    spasibo vam ogromnoe!!!

  • @ilovewindowsmobile
    @ilovewindowsmobile 9 років тому

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

  • @timetoplay2927
    @timetoplay2927 6 років тому

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

  • @webmaster3984
    @webmaster3984 Рік тому

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

  • @МихаилМорозов-ц1г
    @МихаилМорозов-ц1г 6 років тому

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

  • @evgeniydubovik3559
    @evgeniydubovik3559 5 років тому +6

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

  • @TheXbxeh
    @TheXbxeh 7 років тому

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

  • @renakdup
    @renakdup 3 роки тому

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

  • @pavelbushmakin8126
    @pavelbushmakin8126 9 років тому

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

    • @javadeveloper51
      @javadeveloper51 9 років тому

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

    • @justkrybik
      @justkrybik 7 років тому +4

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

  • @АндрейЛисецкий-ч1д

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

  • @ІгорРадецький-к4г
    @ІгорРадецький-к4г 4 роки тому +1

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

    • @sharker1969
      @sharker1969 4 роки тому

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

  • @OlegMatiyuk
    @OlegMatiyuk 9 років тому

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

    • @VladimirMozhenkov
      @VladimirMozhenkov  9 років тому +1

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

    • @OlegMatiyuk
      @OlegMatiyuk 9 років тому

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

  • @MrSergeyUSA
    @MrSergeyUSA 8 років тому

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

    • @VladimirMozhenkov
      @VladimirMozhenkov  8 років тому +4

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

  • @nlookorg
    @nlookorg 7 років тому +4

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

  • @YGNETATEL_3000
    @YGNETATEL_3000 Рік тому

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

  • @MrRomanvideo
    @MrRomanvideo 5 років тому +1

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

    • @RushFuture
      @RushFuture 4 роки тому +2

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

  • @Mura905
    @Mura905 Рік тому

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

  • @augustine582
    @augustine582 6 років тому

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

  • @protiv_bio
    @protiv_bio 3 роки тому

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

    • @protiv_bio
      @protiv_bio 3 роки тому

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

  • @maxgoncharenko558
    @maxgoncharenko558 9 років тому

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

    • @VladimirMozhenkov
      @VladimirMozhenkov  9 років тому +3

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

    • @maxgoncharenko558
      @maxgoncharenko558 9 років тому

      +Vladimir Mozhenkov, спасибо

  • @troublemakergirl7493
    @troublemakergirl7493 5 років тому

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

  • @WTFax
    @WTFax 9 років тому

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

    • @VladimirMozhenkov
      @VladimirMozhenkov  9 років тому

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

    • @WTFax
      @WTFax 9 років тому

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

    • @736939
      @736939 8 років тому

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

  • @nikolayg.5319
    @nikolayg.5319 7 років тому +8

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

    • @aptv8942
      @aptv8942 4 роки тому

      уже есть

    • @aptv8942
      @aptv8942 4 роки тому

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

    • @TeppopucT
      @TeppopucT 4 роки тому

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

    • @TeppopucT
      @TeppopucT 4 роки тому +1

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

  • @andreyandrey1004
    @andreyandrey1004 4 роки тому

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

  • @никитазигунов-д4п
    @никитазигунов-д4п 2 роки тому

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

  • @dmitrikonnov922
    @dmitrikonnov922 3 роки тому

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

  • @Frost9531
    @Frost9531 7 років тому +1

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

    • @pluto2656
      @pluto2656 7 років тому +4

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

  • @fulcrum013
    @fulcrum013 5 років тому +1

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

  • @ІгорРадецький-к4г
    @ІгорРадецький-к4г 4 роки тому

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

  • @doszh9899
    @doszh9899 8 років тому +1

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

    • @Дмитрийсергеевич-о9п
      @Дмитрийсергеевич-о9п 7 років тому +1

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

    • @jaimeasm5527
      @jaimeasm5527 4 роки тому

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

  • @maksengineer6313
    @maksengineer6313 11 місяців тому

    По-приколу накалякал:
    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);
    }

  • @MarvinMatters
    @MarvinMatters 8 років тому

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

  • @АндрейВарин-р4г
    @АндрейВарин-р4г 2 роки тому +1

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

  • @HellfireRampage
    @HellfireRampage 4 роки тому

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

  • @Tyn4tyk
    @Tyn4tyk 3 роки тому

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

  • @Nikikwiki
    @Nikikwiki 4 роки тому

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

    • @mashamanina6106
      @mashamanina6106 4 роки тому

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

  • @yarobest9594
    @yarobest9594 4 роки тому

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

  • @yarobest9594
    @yarobest9594 4 роки тому +2

    6:47 майданы

  • @VladyslavHorbachov
    @VladyslavHorbachov 5 років тому +3

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

    • @Alex-gn6xb
      @Alex-gn6xb 3 роки тому

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

  • @current1710
    @current1710 5 років тому

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

  • @ilyas48973
    @ilyas48973 7 років тому +5

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

    • @404Negative
      @404Negative 3 роки тому

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

  • @АлександрШейка-ц5ь

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

  • @Science-Reality
    @Science-Reality 6 років тому

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

  • @Niakita
    @Niakita 6 років тому

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

  • @AlexErmashev
    @AlexErmashev 8 років тому +1

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

  • @Дмитрийсергеевич-о9п

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

  • @ViktorIvanov-z9s
    @ViktorIvanov-z9s 5 років тому

    Исус

  • @PavelOmelchenko
    @PavelOmelchenko 5 років тому

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