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

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

КОМЕНТАРІ • 145

  • @JoseEnriqueVelasques
    @JoseEnriqueVelasques 6 років тому +104

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

    • @SimpleCodeIT
      @SimpleCodeIT  6 років тому +10

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

    • @llllNEOllllchannel
      @llllNEOllllchannel 6 років тому +18

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

    • @ДмитрийАнтонов-т7ь
      @ДмитрийАнтонов-т7ь 5 років тому +20

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

    • @Ouroboros2291
      @Ouroboros2291 4 роки тому +12

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

    • @ДГаусс
      @ДГаусс 4 роки тому

      @@Ouroboros2291 ГЫ

  • @drewdzzz
    @drewdzzz 6 років тому +139

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

  • @sanya8028
    @sanya8028 Рік тому +3

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

  • @Arobinek
    @Arobinek 6 років тому +57

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

  • @ГлебДомрачев-ь7э
    @ГлебДомрачев-ь7э 4 роки тому +9

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

  • @SimpleCodeIT
    @SimpleCodeIT  7 років тому +22

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

  • @ВсеволодЗорин-л6н
    @ВсеволодЗорин-л6н 6 років тому +42

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

  • @СахарСоль-ь2ч
    @СахарСоль-ь2ч 3 роки тому +5

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

  • @andrewbistroff1199
    @andrewbistroff1199 6 років тому +22

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

  • @ДмитрийРоманчук-д2н

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

  • @neverhoodJK
    @neverhoodJK 6 років тому +16

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

  • @NanNan-nb4qf
    @NanNan-nb4qf 5 років тому +6

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

  • @ДианаАимбетова-и6м
    @ДианаАимбетова-и6м 9 місяців тому

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

  • @BrownAleks
    @BrownAleks 4 роки тому +27

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

    • @naotomo2160
      @naotomo2160 2 роки тому +2

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

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

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

    • @naotomo2160
      @naotomo2160 2 роки тому +3

      @@BrownAleks так куда?

    • @Никамма
      @Никамма 2 роки тому +3

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

  • @Ланс-м1в
    @Ланс-м1в 7 років тому +6

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

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

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

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

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

  • @Ermine882
    @Ermine882 7 років тому +19

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

  • @НикитаКоваль-ф5т
    @НикитаКоваль-ф5т 7 років тому +8

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

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

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

  • @АртёмРудницкий-д5ъ
    @АртёмРудницкий-д5ъ 3 роки тому +2

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

  • @vladalu9794
    @vladalu9794 6 років тому +8

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

  • @СтарыйВаленок-к4л
    @СтарыйВаленок-к4л 3 роки тому

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

  • @pavlotrotsiuk6179
    @pavlotrotsiuk6179 5 років тому +75

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

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

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

    • @TheLDMgaming
      @TheLDMgaming 3 роки тому +7

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

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

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

    • @rezvanovtv7254
      @rezvanovtv7254 3 роки тому +2

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

    • @Никита-с9г
      @Никита-с9г 6 місяців тому

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

  • @АндрейМиненко-ц3з
    @АндрейМиненко-ц3з 6 років тому +6

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

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

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

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

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

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

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

  • @ИванКозловский-ш9н

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

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

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

  • @ДмитроГуща-п1й
    @ДмитроГуща-п1й 4 роки тому +17

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

  • @крутоклассно-щ1ф
    @крутоклассно-щ1ф 3 роки тому

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

  • @vladimirdiadichev6140
    @vladimirdiadichev6140 7 років тому +10

    Спасибо

  • @flepjack
    @flepjack 3 роки тому +1

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

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

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

  • @wasony.126
    @wasony.126 4 роки тому

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

  • @threedking
    @threedking 6 років тому +21

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

    • @dirakon8819
      @dirakon8819 6 років тому +7

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

    • @Barsikspit
      @Barsikspit 4 роки тому +8

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

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

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

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

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

  • @Ланс-м1в
    @Ланс-м1в 6 років тому +4

    Спасибо.

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

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

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

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

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

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

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

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

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

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

  • @КлешОфКланс-я3в
    @КлешОфКланс-я3в 4 роки тому +1

    Спасибо!!!

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

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

  • @ГусейнСалахов
    @ГусейнСалахов 4 роки тому +1

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

  • @experienced-user
    @experienced-user 4 роки тому +5

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

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

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

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

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

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

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

  • @ИльяСоседский-л6о

    ЛУЧШИЙ

  • @archi6200
    @archi6200 6 років тому +2

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

  • @micekmk
    @micekmk 6 років тому +3

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

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

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

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

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

  • @АндрейЕремеев-п8ь
    @АндрейЕремеев-п8ь 5 років тому +1

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

  • @fitwist
    @fitwist 4 роки тому +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т 3 роки тому

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

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

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

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

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

  • @РюриковГеоргий
    @РюриковГеоргий 4 роки тому

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

  • @sleepyNovember_project
    @sleepyNovember_project 10 місяців тому

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

  • @rezvanovtv7254
    @rezvanovtv7254 3 роки тому +4

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

  • @АнтонК-м8о
    @АнтонК-м8о 6 років тому

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

  • @Ютуб-ш9о
    @Ютуб-ш9о Місяць тому

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

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

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

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

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

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

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

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

    Гуд!

  • @РюриковГеоргий
    @РюриковГеоргий 4 роки тому

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

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

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

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

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

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

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

  • @The-Digital-Mind
    @The-Digital-Mind 6 років тому

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

  • @СердарХаитмурадов

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

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

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

  • @СахарСоль-ь2ч
    @СахарСоль-ь2ч 3 роки тому

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

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

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

    • @theflameflare
      @theflameflare Рік тому +1

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

  • @uporka6924
    @uporka6924 5 років тому +2

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

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

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

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

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

  • @wasony.126
    @wasony.126 4 роки тому

    Красавела

  • @ДГаусс
    @ДГаусс 4 роки тому

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

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

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

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

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

  • @ВладиславСолопов-ш8д
    @ВладиславСолопов-ш8д 6 років тому +5

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

  • @МішаКратюк
    @МішаКратюк 5 років тому +2

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

  • @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

  • @Tolyan991
    @Tolyan991 7 років тому +2

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

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

    Сложно**

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

    up

  • @ТимерланБатаев
    @ТимерланБатаев 2 роки тому +1

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

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

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

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

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

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

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

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

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

  • @pavelios3577
    @pavelios3577 6 років тому +16

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

  • @Antonov_Ivan.
    @Antonov_Ivan. Рік тому

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

  • @ЯрославГоловко-ф6и
    @ЯрославГоловко-ф6и 4 роки тому +1

    спасибо

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

    Спасибо