Что такое агрегация и композиция. Отношения между классами и объектами. ООП. C++ Для начинающих #97

แชร์
ฝัง
  • เผยแพร่เมื่อ 27 ม.ค. 2025

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

  • @JoseEnriqueVelasques
    @JoseEnriqueVelasques 7 ปีที่แล้ว +106

    Учусь в престижном IT университете, но на лекциях фиг что поймешь по объяснениям преподов, только ты и выручаешь) Спасибо тебе огромное! Даешь больше знаний, чем универ)

    • @SimpleCodeIT
      @SimpleCodeIT  7 ปีที่แล้ว +10

      Пожалуйста! =)

    • @llllNEOllllchannel
      @llllNEOllllchannel 6 ปีที่แล้ว +18

      Ну и что ты забыл в престижном вузе если он тебе ничего не даёт?

    • @ДмитрийАнтонов-т7ь
      @ДмитрийАнтонов-т7ь 6 ปีที่แล้ว +20

      @@llllNEOllllchannel Наверное, дает только престиж. Ох уж эти ярлыки...

    • @Ouroboros2291
      @Ouroboros2291 4 ปีที่แล้ว +12

      @@llllNEOllllchannel а что делать? Бросать? Сам, блять, учишься в пту, небось?

    • @ДГаусс
      @ДГаусс 4 ปีที่แล้ว

      @@Ouroboros2291 ГЫ

  • @drewdzzz
    @drewdzzz 7 ปีที่แล้ว +141

    за мемчик можно и лукас)

  • @Arobinek
    @Arobinek 6 ปีที่แล้ว +57

    Мега классное объяснение!
    Спасибо Вам большое за урок!
    Лучшее объяснение композиции на русско- и англо- язычном TH-cam.

  • @SimpleCodeIT
    @SimpleCodeIT  7 ปีที่แล้ว +22

    #агрегация #композиция #ООП #SimpleCode #урокипрограммирования

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

    Лучшие уроки по C++, спасибо Вам!

  • @andrewbistroff1199
    @andrewbistroff1199 7 ปีที่แล้ว +22

    Урок ОГОНЬ спасибо Сергей!

  • @ВсеволодЗорин-л6н
    @ВсеволодЗорин-л6н 6 ปีที่แล้ว +42

    шаг за шагом мы всё ближе к цели) благодарю Вас, добрый человек)

  • @ГлебДомрачев-ь7э
    @ГлебДомрачев-ь7э 4 ปีที่แล้ว +9

    "Мозг инкапсулирован в человека":)))
    Чертовски понятный и забавный пример!

  • @neverhoodJK
    @neverhoodJK 7 ปีที่แล้ว +16

    Спасибо! На хорошем очень понятном примере все объяснил.

  • @СахарСоль-ь2ч
    @СахарСоль-ь2ч 3 ปีที่แล้ว +5

    Очень радует что все идет постепенно и подробно, не летит все аля потом расскажу, а все поэтапно. С П А С И Б О

  • @BrownAleks
    @BrownAleks 4 ปีที่แล้ว +26

    Классный урок! Для любителей Д/З: Напишите метод для класса Human. Суть которой заключается в том что бы дать команду для human, что бы он поменял кепку на кепку другого цвета... =)) Если покажется задание простым, то реализуйте метод что бы human взял кепку с манекена, а свою повесил на манекен.
    Сергей! давненько от вас не было Д/З. А ведь именно Д/З порождает дискуссию среди абитуриентов. Тем самым поднимая популярность канала. =)

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

      абитуриентов? мы куда-то поступаем?

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

      @@naotomo2160 на дату смотрите? Или нет? Уже все давно поступили.

    • @naotomo2160
      @naotomo2160 2 ปีที่แล้ว +3

      @@BrownAleks так куда?

    • @Никамма
      @Никамма 2 ปีที่แล้ว +3

      @@naotomo2160 военкомат

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

    Блестяще!!!! Сергей, у Вас дар объяснения!!!! )))))

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

      Как говорил мой преподаватель: "Ваша задача, как профессиональных специалистов, объяснить человеку простым языком, чтобы он понял как работают сложные механизмы."
      Вы с этим справляетесь на все 100% )))

  • @НикитаКоваль-ф5т
    @НикитаКоваль-ф5т 7 ปีที่แล้ว +8

    прекрасная реализация, а главное доходчиво, спасибо)

  • @АртёмРудницкий-д5ъ
    @АртёмРудницкий-д5ъ 4 ปีที่แล้ว +2

    Гениальные примеры! Большое спасибо за креативный подход к уроку, было реально интересно и полезно посмотреть =)
    Правда, просто гениально! (и главное, что понятно даже с первого раза)

  • @ДмитрийРоманчук-д2н
    @ДмитрийРоманчук-д2н 5 ปีที่แล้ว +1

    Очень классно подобранный пример с Человеком и мозгом, я за жизнь слышал очень много объяснений, твое лучшее

  • @Ланс-м1в
    @Ланс-м1в 7 ปีที่แล้ว +6

    Спасибо. Примеры легко доступны для понимания.

  • @Ermine882
    @Ermine882 7 ปีที่แล้ว +19

    Спасибо за урок.

  • @vladalu9794
    @vladalu9794 6 ปีที่แล้ว +8

    Отличный урок, с юмором, спасибо большое бро!)

  • @NanNan-nb4qf
    @NanNan-nb4qf 6 ปีที่แล้ว +6

    Урок супер-доходчивый до мозга человечьего. За что и Супермегаогромное Спасибо!

  • @avbdkfksncncbj
    @avbdkfksncncbj 11 หลายเดือนก่อน

    Просто лучшее объяснение! Спасибо за ваш труд!

  • @АндрейМиненко-ц3з
    @АндрейМиненко-ц3з 7 ปีที่แล้ว +6

    Спасибо за урок, как всегда очень интересно!

  • @pavlotrotsiuk6179
    @pavlotrotsiuk6179 6 ปีที่แล้ว +75

    Мозг жестко инкапсулирован в человека XDD

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

      И? Ебать, что каждое школоло считает нужнум постить любую хуйню? ПНаХ!

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

      Вся суть ООП в одной фразе xD

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

      @@yuriytheone где ты тут школоло нашёл, дятел?

    • @rezvanovtv7254
      @rezvanovtv7254 3 ปีที่แล้ว +2

      но не во всех людей )

    • @Никита-с9г
      @Никита-с9г 9 หลายเดือนก่อน

      Ты точно стал программистом, юмор у тебя ху.евый

  • @СтарыйВаленок-к4л
    @СтарыйВаленок-к4л 4 ปีที่แล้ว

    Лаконично, понятно и без лишней воды.

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

    Очень доходчивое объяснение. Спасибо.

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

    Благодарю за бесценную работу!

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

    Фантастика! Серёженька, Вы гений!!

  • @vladimirdiadichev6140
    @vladimirdiadichev6140 7 ปีที่แล้ว +10

    Спасибо

  • @aquinary.
    @aquinary. 8 หลายเดือนก่อน

    5:03
    Напомнило примечание из одной книге по ООП:
    Вы, возможно, решите, что имеет смысл присоединить класс Head к классу Mammal, а не
    к классу Dog, поскольку в реальной жизни у всех млекопитающих вроде бы имеется го-
    лова. В этой модели я использовал класс Dog как центральный элемент примера, в силу
    чего и прикрепил Head к Dog.
    Даже потешно стало немного)

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

    Спасибо вам Сергей!!!!!!!!!!!!

  • @крутоклассно-щ1ф
    @крутоклассно-щ1ф 3 ปีที่แล้ว

    Мы добавили человеку мозг . Спасибо большоеза ваши труды все предельно ясно

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

    Хочу выразить огромную признательность:)

  • @wasony.126
    @wasony.126 4 ปีที่แล้ว

    Грамотно объесняеш респект!!!

  • @threedking
    @threedking 7 ปีที่แล้ว +21

    "По сути мы используем объект класса кепка и в маникене, и в человеке" - ты используешь 2 разных объекта. И каждый из них не может существовать без объекта, в котором объявлен, т.е. если уничтожить манекен, то уничтожится и его кепка, а если уничтожить человека, то уничтожится кепка человека - это композиция.
    Если бы у манекена и у человека было по одному указателю на кепку, то после уничтожения манекена, кепка бы осталась и эту самую кепку можно было бы надеть на человека - это агрегация.

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

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

    • @Barsikspit
      @Barsikspit 5 ปีที่แล้ว +8

      @@dirakon8819 различие агрегации и композиции в том как созданные объекты соотносятся по времени жизни. Оба приведенных примеров являются примерами композиции.

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

      5 лет спустя, знаю.
      Разве суть не в том, что при уничтожении объекта человек, мы уничтожаем и класс который в нём описали (тобиж мозг), а класс кепки остался?

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

      @@KarKoun класс точно не уничтожает. Создаём и уничтожает только объекты

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

    Лукас Скайвокер тебе за старания.

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

    Спасибо! Очень доходчиво и понятно!

  • @Ланс-м1в
    @Ланс-м1в 6 ปีที่แล้ว +4

    Спасибо.

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

    Можно написать в классе cap friend Human. Тогда ты кепка подружилась с мозгом)
    А вообще Страуструп говорил, что нужно заводить, как можно меньше другой в программировании)
    Спасибо за уроки!)

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

    Мозг кайфует от такого урока :)

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

    объяснение огонь маникен и мозг.

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

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

  • @ДмитроГуща-п1й
    @ДмитроГуща-п1й 4 ปีที่แล้ว +17

    КОМПОЗИЦИЯ(агрегирование по значению) - более строгий вариант агрегирования, когда включаемый объект может существовать
    только как часть контейнера.Если контейнер будет уничтожен, то и включённый объект тоже будет уничтожен.
    class Human {
    public:
    void Think() {
    brainobject.Think();
    }
    private:
    class Brain {
    public:
    void Think() {
    std::cout

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

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

  • @ГусейнСалахов
    @ГусейнСалахов 4 ปีที่แล้ว +1

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

  • @КлешОфКланс-я3в
    @КлешОфКланс-я3в 4 ปีที่แล้ว +1

    Спасибо!!!

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

    Првосходный препод! Аналоги пока не встречались нигде.

  • @ИванКозловский-ш9н
    @ИванКозловский-ш9н 2 ปีที่แล้ว +1

    привет из 2023. Спасибо за уроки!

  • @archi6200
    @archi6200 6 ปีที่แล้ว +2

    прикольно даже звучит) хДД

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

    довольно иронично, что мне этот урок помог, хотя я вообще на питоне пишу

  • @ИльяСоседский-л6о
    @ИльяСоседский-л6о ปีที่แล้ว

    ЛУЧШИЙ

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

    Хотелось бы более практичный пример композиции потому что иначе как для наглядности композиция не особо нужна

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

    2:19 надо ещё создать класс человека, только без мозга, ибо не у всех он есть

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

    Лайк за мемасик

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

    Разве в случае с кепкой это не ассоциация??

  • @micekmk
    @micekmk 7 ปีที่แล้ว +3

    Подскажите, как называется ситуация, когда вложенный класс будет описан в public секции ?

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

      Пиздец...Иначе не скажешь

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

      Дам подсказку. Если класс описан в привате то это композиция. Ну дальше сам думай.

  • @АндрейЕремеев-п8ь
    @АндрейЕремеев-п8ь 5 ปีที่แล้ว +1

    Сергей, спасибо за Ваш труд! Есть один вопрос. Очень часто у вас названия пересекаются. В предыдущих роликах это было когда вы объясняли this->value= value. Тут тоже: Think - два разных класса. Почему нельзя сразу разделять названия например так "Think" и "Think _". В программе это работает. Это какое то правило/культура правильного писания кода, которое в поможет правильно понять другие темы? Мне например, проще разделять дополнительными знаками, что бы разделить переменные/методы/и т.д.

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

    Гуд!

  • @The-Digital-Mind
    @The-Digital-Mind 6 ปีที่แล้ว

    Сергей, 1:16 - определение Агрегация, так и не понял слово,
    "Агрегация позволяет использовать тот класс, который мы включаем в другой класс хххххххх и в других местах"
    Что за слово вместо хххххх ? Ошибка при монтаже или что это?

  • @КонстантинФерафонтов-д3п
    @КонстантинФерафонтов-д3п 4 ปีที่แล้ว

    👍

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

    Орнул чутка) спасиб) (шутка про мозг)

  • @wasony.126
    @wasony.126 4 ปีที่แล้ว

    Красавела

  • @АнтонК-м8о
    @АнтонК-м8о 6 ปีที่แล้ว

    А разве можно инициализировать поле color в его описании? Специально перепроверил- билдер выдаёт ошибку E2233 Cannot initialize a class member here.
    Ведь оно и понятно. Инициализация должна происходить в конструкторе. В чем тут нюанс? В msvs?

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

    Можно сделать чтобы human унаследовал кепку. Это всё что ему досталось в наследство, red кепка

  • @fitwist
    @fitwist 5 ปีที่แล้ว +7

    1. 'void function GetColor should not return a value" (стр. 391): пришлось сменить тип функции GetColor с void на string
    2. "Use of non-static data member 'cap' of 'Human' from nested type 'Brain' (стр. cout

    • @АндрейТараниченко-ы9т
      @АндрейТараниченко-ы9т 4 ปีที่แล้ว

      объясни пожалуйста,как повлияло static,а во вторых кепка никак не влияет на мозг,твой метод записан в классе Brain а не в классе Human

  • @РюриковГеоргий
    @РюриковГеоргий 4 ปีที่แล้ว

    То есть я понимаю что нужна проверка на то, вызвана эта функция или нет, как эту проверку сделать?

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

    Сидел...думал..думал и понял что моя кепка красного цвета!!

  • @РюриковГеоргий
    @РюриковГеоргий 4 ปีที่แล้ว

    Пример обалденный, но очень просится добавить одну вещь, реализацию которой никак не могу придумать. Суть такая, ведь по сути человек не может ничего сказать, пока не подумает, ну то есть он может сказать «я думаю», но метод с фразой типа «кепка на месте, она красного цвета» не должен вызываться, пока человек не скажет «я думаю», то есть пока не запустит свой мозг. Как это реализовать????? Подскажите кому не лень🙏🏻

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

    Так у тебя время жизни поля кепка всеравно зависит от времени жизни обекта Human -> композиция получается

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

      Когда время жизни объекта human закончится, то и кепка ему уже не понадобиться. А так... один и тот же класс кепка используется и на манекене и на человеке. (в виде двух экземплярах одного и того же класса) И это всё таки агрегация... =)

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

    То есть композиция подразумевает использования объектов только вложенного класса? Других случаев на эту тему нет?

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

    Раскручивай канал, рекламируй, ты хорошо преподаешь, людям понравится

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

    А если описать класс кепка внизу, то уже возникнет ошибка, и что делать?

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

      В таком случае нужно прописывать прототип функции. На этом канале есть материал на эту тему и ответ на вопрос.

  • @ДГаусс
    @ДГаусс 4 ปีที่แล้ว

    А кто-нибудь пробовал прописывать конструктор класса Cap и присваивать через этот конструктор цвет кепки?

  • @Ютуб-ш9о
    @Ютуб-ш9о 3 หลายเดือนก่อน

    И то и это композиция. При агрегации объект создаётся снаружи, а агрегирующий объект содержит указатель

  • @СердарХаитмурадов
    @СердарХаитмурадов 3 ปีที่แล้ว

    Агрегация это и есть включение?

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

    Пример с надеванием кепки на любимого кота явно не был случайным

  • @СахарСоль-ь2ч
    @СахарСоль-ь2ч 3 ปีที่แล้ว

    А ведь можно сделать из Think класс, и Human будет думать про кепку через think а не через "человека"

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

    нужно видео начинать типа "Если вы смотрите это видео, то рекомендую вам поставить сразу лайк, потому что из-за радости что вы все поняли можете забыть:)"

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

    Так получается Агрегация и композиция это не наследование)))

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

    Давайте человеку добавим мозг!!! Если б это было так просто:-)

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

    А почему он методы с великой буквы пишет? это так в с++ договорились?

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

    Подскажет кто? У меня 3 класса, 1 основной ,2-й внутри 1-го и 3-й во 2-м. В функциях ввожу числа, а на выводе получаю совсем другие.. По заданию нужно наследовать из 3-го класса во второй, ввод и вывод осуществляется только в последнем в 3 классе

  • @uporka6924
    @uporka6924 6 ปีที่แล้ว +2

    Не самые лучшие примеры. Примеры композиции в жизни:
    1.Машина содержит в себе двигатель. Взорвал машину- взорвал двигатель. (Композиция)
    2.Человек носит кепку. Порвал в мясо человека- кепка осталась. Взял надел ее на другого. (Агрегация)
    Если ты одним из полей класса делаешь объект другого класса, то при вызове деструктора уничтожается внутренний и внешний объекты.
    Если же ты одним из полей класса делаешь указатель на объект другого класса ,и при вызове деструктора объект хранящийся по этому указателю не уничтожается, то он внутренний объект(кепка) остается существовать в памяти после вызова деструктора внешнего (в мясо человека).

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

      не самые гуманные примеры=)

  • @ИНФОРМАЦИЯДЛЯУСПЕШНЫХ
    @ИНФОРМАЦИЯДЛЯУСПЕШНЫХ 5 ปีที่แล้ว

    Spsb

  • @МішаКратюк
    @МішаКратюк 6 ปีที่แล้ว +2

    Мозг инкапсулирован в человека xD

  • @ВладиславСолопов-ш8д
    @ВладиславСолопов-ш8д 6 ปีที่แล้ว +5

    Это как сложносочинённые и сложноподчинённые предложения в Русском языке:))

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

    Приклад цікавий, але може дещо заплутувати, особливо в тому, що стосується агрегації.
    1. Композиція НЕ вимагає, щоб один клас був інкапсульованим(внутрішнім) в інший клас, достатньо контролю над його об'єктом.
    Тобто, ми можемо знати, що в людини є мозок (що є такий клас; що людина має такий об'єкт), але доступ до нього контролює об'єкт людини.
    2. При композиції, життєвий цикл об'єкта-"частини" залежить від об'єкта-"цілого".
    Фактично, це те, що відбувається з об'єктом brain, що і є правильно сказано в відео.
    Але це також і відбувається з шапочкою, оскільки кожен новий об'єкт людини матиме свій власний об'єкт шапочки.
    Виходить, що приклад з шапочкою це також композиція. Просто можуть бути шапочки, які є частиною людини і ті, які не є частиною.
    Приклад(мінімалістичний), чому воно не працюватиме:
    //я зробив змінну cap публічною, щоб мати доступ до неї
    int main()
    {
    Human* h1 = new Human;
    Cap& cap = h1->cap;
    delete h1;
    std::cout cap = ∩
    delete h1;
    std::cout

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

    up

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

    Сложно**

  • @Tolyan991
    @Tolyan991 7 ปีที่แล้ว +2

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

  • @ТимерланБатаев
    @ТимерланБатаев 2 ปีที่แล้ว +1

    Унаследуем мозги другого класса человека xD

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

    так и не понял в чем суть урока

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

    Это что-то вроде дружественности, но через объекты.

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

    Композиция класс: "кароче сорян дорогуши я только с одной этой классоткой мучу"
    Агрегация класс: "кароче классотки я для всех свободен и мутить могу с вами всеми одинаково )"

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

    Лучше назвать функцию ConnectTheCap();

  • @pavelios3577
    @pavelios3577 7 ปีที่แล้ว +16

    Благодарю за урок.

  • @Antonov_Ivan.
    @Antonov_Ivan. ปีที่แล้ว

    Спасибо за урок!

  • @ЯрославГоловко-ф6и
    @ЯрославГоловко-ф6и 4 ปีที่แล้ว +1

    спасибо

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

    Спасибо