Автор FAQ
 Аватар для RNT
3150 / 370 / 3
Регистрация: 08.08.2009
Сообщений: 1,126

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

15.09.2010, 21:28. Показов 42401. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru