Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.84/197: Рейтинг темы: голосов - 197, средняя оценка - 4.84
Автор FAQ
 Аватар для RNT
3150 / 370 / 3
Регистрация: 08.08.2009
Сообщений: 1,126

Что такое композиция ?

15.09.2010, 21:28. Показов 42395. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Читаю учебник Р.Лафоре "Объектно-ориентированное программирование в C++". На странице 403 пишется про композицию. Пример не приводится. Непонятно, чем композиция отличается от включения. Поясню терминологию: включение - это использование в классе объекта другого класса.

C++
1
2
3
4
5
6
7
class A 
{ };
 
class В 
{ 
    A objA; 
};
Объясните, пожалуйста, на примере, что такое композиция.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.09.2010, 21:28
Ответы с готовыми решениями:

Что такое композиция?
Добрый день. Тут читаю книгу и в ней приводится длинющий и непонятный пример композиции. Попросил бы Вас привести простенький пример...

Что такое композиция?(Определение)
Подскажите, пожалуйста, что такое композиция??? Мне само определение...

Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?

31
 Аватар для stawerfar
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
17.01.2012, 14:31
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от silent_1991 Посмотреть сообщение
stawerfar, нет. Пока двигатель не поместили в автомобиль, он на заводе вот именно такой - голый, нерабочий. Короче, двухсоткилограммовый кусок железа. Наш код - завод. Класс "двигатель" - чертежи. А вот экземпляр класса, включённый в другой класс - это уже сам двигатель. Реальный, осязаемый, рабочий.
В большинстве люди спорят друг с другом из за того что говорят совершенно о разных вещях. Так вот и в нашем с Вами случае то же самое. Вы просто не "слышите" что я Вам говорю. Перечитайте моё объяснение (которое чуть выше) ещё раз и может тогда вы наконец поймёте о чём я Вам говорил.
Вдумайтесь ещё раз. Я говорил что двигатель ни кто не будет создавать лишь для того что бы он просто был. Его обязательно делают для чего-то после чего он становиться не отъемлемой частью конструкции.
То о чём говорите Вы это сборка отдельной части механизма. Но в будущем каждая часть механизма станет неотъемлемой частью. Т.е. автомобиль не поедет без двигателя , самолет не полетит без крыльев , лодка не поплывет без лопастей
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
17.01.2012, 14:37
Цитата Сообщение от stawerfar Посмотреть сообщение
автомобиль не поедет без двигателя
Вот поэтому двигатель включается в автомобиль. Однако двигатель также может включаться в моторную лодку, самолёт, трактор, каток. Одна и та же деталь может использоваться в различных конструкциях. Вот поэтому Двигатель и следовало бы описать отдельно от автомобиля, а в автомобиль включить экземпляр двигателя. Потому что сегодня класс "двигатель" нужен только в автомобиле, а завтра он понадобится в лодке. И что? Рефакторинг? Или пихать в лодку класс Auto::Engine? Но чем автомобиль отличается от лодки, чтобы в автомобиле двигатель был неотъемлемой частью, а в лодку засовывали ошмёток автомобиля?
0
 Аватар для stawerfar
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
17.01.2012, 14:46
Он отличается тем что для лодки и для автомобиля нужны разные по своей конструкции и показателям двигатели, и общего от двигатель автомобиля и двигатель лодки осталось только "слово".
Даже для разных автомобилей разные двигатели, по креплению и другим характеристикам...
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
17.01.2012, 14:53
stawerfar, если настолько углубляться, то термин "повторное использование кода" надо устранить за ненадобностью. Смотря на каком уровне абстракции создаётся этот двигатель. Вы от программирования плавно перешли к вопросам крепления и механизму двигателя. Возможно, где-то понадобятся такие подробности. Но возьмём такую задачу: создаётся аркадная гонка, в которой участвуют автомобили и мотоциклы. От двигателя требуется знать только его мощность и объём. Чем тогда двигатель для автомобиля будет отличаться от двигателя для мотоцикла, если мощность и объём - поля класса?
0
 Аватар для stawerfar
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
17.01.2012, 15:02
Уважаемый мой собеседник silent_1991 Вы абсолютно правы , более того я согласен с каждым "сказанным" Вами словом. Мы говорим с Вами об одном и том же только каждый объясняет с той стороны с которой о это видит. Ведь все люди индивидуальны, и это естественно. Просто я считаю это упущение со стороны автора (Лафоре) , сказал "А" говори и "Б", а то мол есть композиция - объяснил не пойми как , ни примеров ни чего толком наводящего. А мы теперь сиди и гадай.

Спасибо за интеллектуальную беседу, было очень приятно с Вами обсудить эту тему.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
17.01.2012, 15:12
Цитата Сообщение от stawerfar Посмотреть сообщение
объяснил не пойми как , ни примеров ни чего толком наводящего
Выход здесь простой: если ответ не найден в одном источнике - стоит поискать другие. Наверняка в одном из них материал будет предоставлен более полно. Все источники, что попадались мне, говорили одно: композиция и включение - синонимы. Например, в математике есть такой термин - композиция функций. Так вот, можно так же сказать "суперпозиция функций", и это будет то же самое. Так что продолжаю считать, что композиция и включение - одно и то же. А описывать ли класс двигателя в классе автомобиля или отдельно от него - зависит от задачи и идеологических предпочтений. Однако не стоит забывать о повторном использовании кода.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
17.01.2012, 15:36
Вообще-то у Гради Буча, язык которого является одним из предшественников UML, включение по значению обозначается закрашенным квадратиком, а включение по ссылке – пустым.
Также для композиции Лафоре описывает следующие свойства:
• часть может принадлежать только одному целому;
• время жизни части то же, что и целого.
Очевидно, что эти свойства выполняются при включении по значению и не выполняются при включении по ссылке.
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
17.01.2012, 16:10
Mr.X, это же просто агрегация
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
17.01.2012, 16:26
Цитата Сообщение от alex_x_x Посмотреть сообщение
Mr.X, это же просто агрегация
Да-да, и включение, и композиция - это просто виды агрегации, разницу между которыми мы тут и обсуждаем.
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
17.01.2012, 17:13
Цитата Сообщение от ForEveR Посмотреть сообщение
9. Что такое композиция? Тип отношения между объектами, когда один является частью другого (его членом).
Это агрегация, а композиция есть такая агрегация, при которой часть не может существовать отдельно от целого.
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
17.01.2012, 17:46
Двигатель без автомобиля существовать может, хоть и входит в его состав: его и завести можно не только в автомобиле, но и на стенде, и переставить из одного автомобиля в другой. А обведённая на рисунке кнопка без окна существовать не может: её нельзя ни переставить в другое окно, ни запустить на на столе.
Миниатюры
Что такое композиция ?  
0
0 / 0 / 0
Регистрация: 05.09.2012
Сообщений: 2
05.09.2012, 15:05
Товарищи, читаю книгу Эккеля, его советы по программированию в приложении Б, совет 26:
"Иногда приходится наследовать для обращения к защищенным членам базового класса. На первый взгляд может показаться, что ситуация требует множественного наследования. Если вы не собираетесь выполнять повышающее приведение типа, сначала создайте новый производный класс для обращения к защищенным членам. Затем ВКЛЮЧИТЕ объект этого класса в другой класс, который должен его использовать (т.е. примените композицию вместо наследования)" - это пример композиции, как я понял. так что теперь становится ясно что является Включением (методом от противного)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.09.2012, 15:05

Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?
Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?

Что такое хэндлер файла? Что такое файловый указатель?
Что такое хэндлер файла? Что такое файловый указатель?

Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них
Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них пожалуйста.

Выяснить, что представляют из себя отношения Ф композиция Ф и Ф композиция Ф^{-1}
Добрый день. До этого у меня было такое задание: Выяснить, какими из свойств: рефлексивность, антирефлексивность, симметричность,...

Что такое IIS и что такое PWS? Почему одно без другого не работает?
вот уже второй день пытаюсь немного разобраться в АСП. накидал небольшую тестовую страничку. но с серверами я ничего не понимаю! что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru