короче, композиция : создаем внутри нашего класса новый инстанс другого класса. агрегация : нашему классу в конструктор передали уже существующий инстанс другого класса.
Немного добавлю от себя. композиция : 1 класс управляет жизненным циклом другого класса. Если класс 1 уничтожается, то уничтожается и объект класса 2. агрегация : 1 класс не управляет жизненным циклом (связь слабее), ему передают уже созданный экземпляр. Если класс 1 уничтожается, то объект класса 2 не уничтожается (если конечно на него есть ссылки извне, а не только в классе 1)
Очень подробно и доходчиво. Когда я впервые узнал об этих понятиях я запоминал так: агрегация от слова агрегат (напр. Двигатель в автомобиле), который я могу использовать отдельно от основного объекта. А композиция у меня ассоциируется с картиной, из которой нельзя взять и убрать фрагмент. Так и запомнил: один мы создаём и подключаем снаружи, а другой создаём прямо внутри основного объекта
Воу-воу, в программировании бесконечности быть не может, не может быть неможет. Надо чтоб стены могли двигаться, с учётом, что за стенами XYZ бесконечностей, во времени. А так круто, прям благодарю)))
На 5:30 можно было остановиться, было все понятно, потом все запутали обратно. Ну и пример с аэропортом тоже не то, вот объект (человек) и его объект (мозг) - композиция, а его объект (штаны) - агрегация.
Как это выглядит в других языках? Да и в тех же плюсах по синтаксису и способам обяъявления? Пока что я понял что такая фишка работает ввиду свойства деструктора и модификатора unic для доступа к указателям. Может есть какой языковый синтаксический сахар, который явно говорит - вот тут композиция, а вот тут агрегация?
Ты сказал что в программировании бесконечности быть не может, а как же бесконечность на основе ленивости. В Haskell могут быть бесконечные списки, когда следующий элемент вычисляется по требованию. В других ЯП также существуют реализации ленивости. Благодарю за уроки, Володя!
Владимир, а разве хранение в объекте класса Room вектора указателей shared_ptr на класс Furniture не приведет к удалению объектов Furniture при уничтожении объекта Room? То есть не является ли описываемая Вами модель агрегации (Room-Furniture) на самом деле моделью композиции?
Oleg Matiyuk Если вы в конструкторе создаёте эти объекты, и потом нигде их не передаёте, то да. Но если вы используете shared_ptr по назночению, и эти объекты используются другими указателями, то они не будут удалены при уничтожении объекта Room.
Vladimir Mozhenkov , так как написали на доске, то время жизни объектов Furniture прямо зависит от времени жизни объекта Room и А1 на временной шкале заканчивается там же, где заканчивается и А2. Но в принципе, смысл ясен. Спасибо.
+Сергей Ющенко Смотря что вы делаете. Если смотреть с точки зрения Файловой Системы, то директория - это файл, и в директории есть файлы. Значит Файл - это суперкласс Директории и также в директории через агрегацию подключены другие файлы.
Не очень понял, в случае композиции зачем нужен объект, который только существует внутри другого объекта и нам наружу никаких плюшек не дает? Типа какой-то служебный класс? Но тогда зачем мы им управляем и передаем что-то в конструктор?
А, понял в последних минутах. Если перевести на джаву (и пишем правильно без всяких инит-методов), то композиция - это не static, но final поля, которые устанавливаются где-то в конструкторе/блоке/при объявлениии, а агрегация - поля, которые принципиально устанавливаем через сеттеры. Но в реальной жизни я такой код в последнее время не помню, чтобы писал, когда используешь сеттеры, это обычно когда нет ломбока и лень билдер писать, а так в основном вроде композицию используют, а если надо что-то сделать, то стейтлесс-методы (статические утильные) с передачей параметров в помощь, не? Че-то слабо представляю кейс, когда сеттер реально нужен не как костыль, или я туплю вечером?
+Max Goncharenko unique_ptr удаляет объект сразу, и является самым "лёгким" изо всех умных указателей. shared_ptr ещё и отслеживает сколько указателей ссылаются на объект и удаляет только в самом конце (когда счётчик будет равен 0). ua-cam.com/video/o4nUrXR-1MM/v-deo.html
+WTF! Что вы имеете ввиду "выразить"? Диаграмно или в коде? Если на диаграмме, то просто рисуете простую линию от одного к другому. А если в коде, то тут уже надо смотреть на то, как он его использует. Из-за этого иногда в диаграммах на этой линии пишут глагол означающий что за связь. Например [Преподаватель] ---------принимает экзамен у------- [Студент]
Батенька да у вас ошибка с композицией однако. Композиция никак не препятствует уничтожению композированного объекта. Т.е. стена не может прожить дольше чем комната. Но нигде не сказано что она не может быть разрушена раньше комнаты так же как и создана позже.
Потому что всё смешалось в доме обломских. Потому что материал подаётся так как его преподают преподы глупые в универах... да-да, и не надо мне сказки рассказывать что преподы по программированию типа очень мудрые )) глупы и ограничены... и именно в таком глупом порядке материал и подаётся. Почему? - потому что ОПЫТА НЕТ. Нет понимания что такое программирование )) отсюда и подача материала о КОДИНГЕ а не программировании. лекция по КОДИРОВАНИЮ а не программированию... вот потому вам и не понятно куда пропал полиморфизм.. вроде же три кита должны быть в одном месте.. а один кит исчез )) а вот тут автор правильно сделал если третьего кита оставил напоследок. Хотя при правильной подаче материала, да наверно три кита в самом начале должны были идти и к тому моменту когда вас начали бы учить КОДИНГУ то в программировании вы бы уже степень доктора имели бы ))
отстаньте от него, когда идут с тунелями в ушах и на заднице, то вы не возмущаетесь, а тут чел естественный и надо прикопаться, ты сам то себя идеальным считаешь?
Иисус, ты шикарен.
короче,
композиция : создаем внутри нашего класса новый инстанс другого класса.
агрегация : нашему классу в конструктор передали уже существующий инстанс другого класса.
храни тебя господь за этот коментарий
Лучший
Ну, и кто будет смотреть видео после этого коммента?
Спасибо за лайки:)
Немного добавлю от себя.
композиция : 1 класс управляет жизненным циклом другого класса. Если класс 1 уничтожается, то уничтожается и объект класса 2.
агрегация : 1 класс не управляет жизненным циклом (связь слабее), ему передают уже созданный экземпляр. Если класс 1 уничтожается, то объект класса 2 не уничтожается (если конечно на него есть ссылки извне, а не только в классе 1)
Это самый доходчивый пример на ютубе! За 5 минут я понял всю разницу. Другие видео на ютубе скорее запутывают
Шикарный канал, что бы я ни искал, часто натыкаюсь именно на Ваш канал
Очень интересно слушать! Спасибо за уроки.
Очень подробно и доходчиво. Когда я впервые узнал об этих понятиях я запоминал так: агрегация от слова агрегат (напр. Двигатель в автомобиле), который я могу использовать отдельно от основного объекта. А композиция у меня ассоциируется с картиной, из которой нельзя взять и убрать фрагмент. Так и запомнил: один мы создаём и подключаем снаружи, а другой создаём прямо внутри основного объекта
Ты лучший! Для не опытных разработчиков доступно
Отличное видео!
Спасибо Иисусу за пояснение, очень понятно и качественно объяснил все моменты
Володя, спасибо!
Отличное объяснение - все понятно ! Спасибо вам большое
Реально классно объяснили, спасибо!
Лучшее объяснение! Спасибо)
Спасибо за проделанный труд.
Хорошо рассказываешь!
Лучшее объяснение на ютюбе. Спасибо большое!
Хорошо объяснил про агрегацию и композицию!
Воу-воу, в программировании бесконечности быть не может, не может быть неможет. Надо чтоб стены могли двигаться, с учётом, что за стенами XYZ бесконечностей, во времени.
А так круто, прям благодарю)))
Хороший пример и хорошие объяснение
При композиции объекты создаются в базовом объекте, при агрегации объекты передаются в базовый объект.
Толковое объяснение. Спасибо!
Большое спасибо за ваш труд!
Чувак ты очень хорошо объясняешь спасибо
Спасибо, Владимир.
Большое спасибо автору видео!!! Просто и понятно)
Очень доступно, спасибо Владимир!
Спасибо за разъяснение!
Заместо, я скучал по тебе)
На 5:30 можно было остановиться, было все понятно, потом все запутали обратно. Ну и пример с аэропортом тоже не то, вот объект (человек) и его объект (мозг) - композиция, а его объект (штаны) - агрегация.
spasibo vam ogromnoe!!!
Отличное видео! Все стало понятно
Большое Спасибо!
2:45
наверно в комнате от трех стен и больше, иначе если она стена или две стены, то трудно себе представить что это за комната
Как это выглядит в других языках? Да и в тех же плюсах по синтаксису и способам обяъявления? Пока что я понял что такая фишка работает ввиду свойства деструктора и модификатора unic для доступа к указателям. Может есть какой языковый синтаксический сахар, который явно говорит - вот тут композиция, а вот тут агрегация?
спасибо Иисус
Что именно в коде делает связь типа агрегации или композиции, наличие пресловутых указателей shared_ptr либо unique_ptr?
Неподскажите, а DI чем от агрегации отличается?
Ты сказал что в программировании бесконечности быть не может, а как же бесконечность на основе ленивости. В Haskell могут быть бесконечные списки, когда следующий элемент вычисляется по требованию. В других ЯП также существуют реализации ленивости.
Благодарю за уроки, Володя!
он просто не хотел неофитам забивать голову
А объем оперативки у Вас бесконечен?
понятно , спасибо.
Почему не может выйти за рамки, если эта же стена может быть смежной с другой комнатой?
а ведь внатуре...
хотя, наверное, она тогда будет принадлежать только этим двум комнатам, и не сможет выйти за ИХ рамки... хотя хз...
Владимир, а разве хранение в объекте класса Room вектора указателей shared_ptr на класс Furniture не приведет к удалению объектов Furniture при уничтожении объекта Room? То есть не является ли описываемая Вами модель агрегации (Room-Furniture) на самом деле моделью композиции?
Oleg Matiyuk Если вы в конструкторе создаёте эти объекты, и потом нигде их не передаёте, то да. Но если вы используете shared_ptr по назночению, и эти объекты используются другими указателями, то они не будут удалены при уничтожении объекта Room.
Vladimir Mozhenkov , так как написали на доске, то время жизни объектов Furniture прямо зависит от времени жизни объекта Room и А1 на временной шкале заканчивается там же, где заканчивается и А2.
Но в принципе, смысл ясен. Спасибо.
Володя, спасибо большое.
Как вы считаете связь между классами Директория и Файл какая?
+Сергей Ющенко Смотря что вы делаете.
Если смотреть с точки зрения Файловой Системы, то директория - это файл, и в директории есть файлы. Значит Файл - это суперкласс Директории и также в директории через агрегацию подключены другие файлы.
Писать код на доске, такого я давно не видел)
Все очень понятно. Спасибо.
Не знал что Паук ведет курс по ООП. Удивительное рядом.
Чем это отличается от глобальных и локальных переменных?
Примерно тем же, чем отличается квадратное от холодного.
А если одна стена принадлежит двум комнатам или более?
круто, спасибо
Не очень понял, в случае композиции зачем нужен объект, который только существует внутри другого объекта и нам наружу никаких плюшек не дает? Типа какой-то служебный класс? Но тогда зачем мы им управляем и передаем что-то в конструктор?
А, понял в последних минутах. Если перевести на джаву (и пишем правильно без всяких инит-методов), то композиция - это не static, но final поля, которые устанавливаются где-то в конструкторе/блоке/при объявлениии, а агрегация - поля, которые принципиально устанавливаем через сеттеры. Но в реальной жизни я такой код в последнее время не помню, чтобы писал, когда используешь сеттеры, это обычно когда нет ломбока и лень билдер писать, а так в основном вроде композицию используют, а если надо что-то сделать, то стейтлесс-методы (статические утильные) с передачей параметров в помощь, не? Че-то слабо представляю кейс, когда сеттер реально нужен не как костыль, или я туплю вечером?
А какая принципиальная разница между uniqe_ptr и shared_ptr? Типа объекты других классов могут или не могут с ними взаимодействовать?
+Max Goncharenko
unique_ptr удаляет объект сразу, и является самым "лёгким" изо всех умных указателей.
shared_ptr ещё и отслеживает сколько указателей ссылаются на объект и удаляет только в самом конце (когда счётчик будет равен 0).
ua-cam.com/video/o4nUrXR-1MM/v-deo.html
+Vladimir Mozhenkov, спасибо
"Да?") Спасибо за урок)
Как выразить обычную ассоциацию, когда объект только использует некий объект?
+WTF! Что вы имеете ввиду "выразить"? Диаграмно или в коде?
Если на диаграмме, то просто рисуете простую линию от одного к другому. А если в коде, то тут уже надо смотреть на то, как он его использует. Из-за этого иногда в диаграммах на этой линии пишут глагол означающий что за связь. Например
[Преподаватель] ---------принимает экзамен у------- [Студент]
в коде, например компьютер использует базу данных.
Tree *Forrest ; // association List Forrest; // aggregation Tree Forrest = new Tree(); // composition
про Полиморфизм бы послушал...жаль нет
уже есть
да и за 3 года вы, наверное, уже сами испытали это на реальном примере)
@@aptv8942 зачем полиморфизм, если есть агрегация и композиция?
Ладно, я херню написал. Это скорее к наследованию, чем к полиморфизму
подписон. доступненько донес
спасибо, не знал что Исус та хорошо может объяснить темы из программирования
Объясняет как БОЖЕНЬКА!!! ++++++++++++++++++++++++++++++
А как насчет того, что может быть 2 комнаты, находящиеся рядом, с 1 общей стеной ? Спасибо за доступный и понятный материал.
shared_ptr, общая стена уничтожится, когда уничтожатся все объекты ссылающиеся на нее. Выходит, что в таком случае это ассоциация
Батенька да у вас ошибка с композицией однако. Композиция никак не препятствует уничтожению композированного объекта. Т.е. стена не может прожить дольше чем комната. Но нигде не сказано что она не может быть разрушена раньше комнаты так же как и создана позже.
Почему не может быть бесконечности?
почему у вас нет лекция про Полиморфизм ?
Потому что всё смешалось в доме обломских.
Потому что материал подаётся так как его преподают преподы глупые в универах... да-да, и не надо мне сказки рассказывать что преподы по программированию типа очень мудрые )) глупы и ограничены... и именно в таком глупом порядке материал и подаётся. Почему? - потому что ОПЫТА НЕТ. Нет понимания что такое программирование )) отсюда и подача материала о КОДИНГЕ а не программировании.
лекция по КОДИРОВАНИЮ а не программированию... вот потому вам и не понятно куда пропал полиморфизм.. вроде же три кита должны быть в одном месте.. а один кит исчез )) а вот тут автор правильно сделал если третьего кита оставил напоследок. Хотя при правильной подаче материала, да наверно три кита в самом начале должны были идти и к тому моменту когда вас начали бы учить КОДИНГУ то в программировании вы бы уже степень доктора имели бы ))
Полиморфизм в ООП реализуется через Интерфейс/Наследование. Про оба механизма Володя уже рассказал.
По-приколу накалякал:
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);
}
Какой это язык
С++
Но, стена может являться стеной для 2ух комнат в реальности. :)
Спасибо Иисус =)
Like♥
Здарова Болодя
Володя, очевидно, по вечерам играет паган металл.
отстаньте от него, когда идут с тунелями в ушах и на заднице, то вы не возмущаетесь, а тут чел естественный и надо прикопаться, ты сам то себя идеальным считаешь?
Тор учит меня программированию
6:47 майданы
Если честно - ужастный пример. Если бы у меня не было опыта программирования, то я бы вообще ничего не понял.
тоже поймал себя на мысли, что сложновато))
И маркер не скрипит )
Ну вот, до этого так складно говорил про концептуальность, а тут скатился в реализацию :(
где вы реализацию увидели ? и реализацию чего ?
Володя - инстанс класса Иисус.
Даввй полиморфизм...!?
Так и не понял - что такое агрегация
Сложновато как то, можно было бы полегче объяснить
блин как на столмана то похож .. жуть аж
Исус
Диз за «времени суток». За остальное спасибо