Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 163, средняя оценка - 4.64
RNT
Автор FAQ
 Аватар для RNT
3131 / 351 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
15.09.2010, 21:28     Что такое композиция ? #1
Читаю учебник Р.Лафоре "Объектно-ориентированное программирование в C++". На странице 403 пишется про композицию. Пример не приводится. Непонятно, чем композиция отличается от включения. Поясню терминологию: включение - это использование в классе объекта другого класса.

C++
1
2
3
4
5
6
7
class A 
{ };
 
class В 
{ 
    A objA; 
};
Объясните, пожалуйста, на примере, что такое композиция.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
17.01.2012, 14:31     Что такое композиция ? #21
Цитата Сообщение от silent_1991 Посмотреть сообщение
stawerfar, нет. Пока двигатель не поместили в автомобиль, он на заводе вот именно такой - голый, нерабочий. Короче, двухсоткилограммовый кусок железа. Наш код - завод. Класс "двигатель" - чертежи. А вот экземпляр класса, включённый в другой класс - это уже сам двигатель. Реальный, осязаемый, рабочий.
В большинстве люди спорят друг с другом из за того что говорят совершенно о разных вещях. Так вот и в нашем с Вами случае то же самое. Вы просто не "слышите" что я Вам говорю. Перечитайте моё объяснение (которое чуть выше) ещё раз и может тогда вы наконец поймёте о чём я Вам говорил.
Вдумайтесь ещё раз. Я говорил что двигатель ни кто не будет создавать лишь для того что бы он просто был. Его обязательно делают для чего-то после чего он становиться не отъемлемой частью конструкции.
То о чём говорите Вы это сборка отдельной части механизма. Но в будущем каждая часть механизма станет неотъемлемой частью. Т.е. автомобиль не поедет без двигателя , самолет не полетит без крыльев , лодка не поплывет без лопастей
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.01.2012, 14:37     Что такое композиция ? #22
Цитата Сообщение от stawerfar Посмотреть сообщение
автомобиль не поедет без двигателя
Вот поэтому двигатель включается в автомобиль. Однако двигатель также может включаться в моторную лодку, самолёт, трактор, каток. Одна и та же деталь может использоваться в различных конструкциях. Вот поэтому Двигатель и следовало бы описать отдельно от автомобиля, а в автомобиль включить экземпляр двигателя. Потому что сегодня класс "двигатель" нужен только в автомобиле, а завтра он понадобится в лодке. И что? Рефакторинг? Или пихать в лодку класс Auto::Engine? Но чем автомобиль отличается от лодки, чтобы в автомобиле двигатель был неотъемлемой частью, а в лодку засовывали ошмёток автомобиля?
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
17.01.2012, 14:46     Что такое композиция ? #23
Он отличается тем что для лодки и для автомобиля нужны разные по своей конструкции и показателям двигатели, и общего от двигатель автомобиля и двигатель лодки осталось только "слово".
Даже для разных автомобилей разные двигатели, по креплению и другим характеристикам...
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.01.2012, 14:53     Что такое композиция ? #24
stawerfar, если настолько углубляться, то термин "повторное использование кода" надо устранить за ненадобностью. Смотря на каком уровне абстракции создаётся этот двигатель. Вы от программирования плавно перешли к вопросам крепления и механизму двигателя. Возможно, где-то понадобятся такие подробности. Но возьмём такую задачу: создаётся аркадная гонка, в которой участвуют автомобили и мотоциклы. От двигателя требуется знать только его мощность и объём. Чем тогда двигатель для автомобиля будет отличаться от двигателя для мотоцикла, если мощность и объём - поля класса?
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
17.01.2012, 15:02     Что такое композиция ? #25
Уважаемый мой собеседник silent_1991 Вы абсолютно правы , более того я согласен с каждым "сказанным" Вами словом. Мы говорим с Вами об одном и том же только каждый объясняет с той стороны с которой о это видит. Ведь все люди индивидуальны, и это естественно. Просто я считаю это упущение со стороны автора (Лафоре) , сказал "А" говори и "Б", а то мол есть композиция - объяснил не пойми как , ни примеров ни чего толком наводящего. А мы теперь сиди и гадай.

Спасибо за интеллектуальную беседу, было очень приятно с Вами обсудить эту тему.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.01.2012, 15:12     Что такое композиция ? #26
Цитата Сообщение от stawerfar Посмотреть сообщение
объяснил не пойми как , ни примеров ни чего толком наводящего
Выход здесь простой: если ответ не найден в одном источнике - стоит поискать другие. Наверняка в одном из них материал будет предоставлен более полно. Все источники, что попадались мне, говорили одно: композиция и включение - синонимы. Например, в математике есть такой термин - композиция функций. Так вот, можно так же сказать "суперпозиция функций", и это будет то же самое. Так что продолжаю считать, что композиция и включение - одно и то же. А описывать ли класс двигателя в классе автомобиля или отдельно от него - зависит от задачи и идеологических предпочтений. Однако не стоит забывать о повторном использовании кода.
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,667
17.01.2012, 15:36     Что такое композиция ? #27
Вообще-то у Гради Буча, язык которого является одним из предшественников UML, включение по значению обозначается закрашенным квадратиком, а включение по ссылке – пустым.
Также для композиции Лафоре описывает следующие свойства:
• часть может принадлежать только одному целому;
• время жизни части то же, что и целого.
Очевидно, что эти свойства выполняются при включении по значению и не выполняются при включении по ссылке.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.01.2012, 16:10     Что такое композиция ? #28
Mr.X, это же просто агрегация
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,667
17.01.2012, 16:26     Что такое композиция ? #29
Цитата Сообщение от alex_x_x Посмотреть сообщение
Mr.X, это же просто агрегация
Да-да, и включение, и композиция - это просто виды агрегации, разницу между которыми мы тут и обсуждаем.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.01.2012, 17:13     Что такое композиция ? #30
Цитата Сообщение от ForEveR Посмотреть сообщение
9. Что такое композиция? Тип отношения между объектами, когда один является частью другого (его членом).
Это агрегация, а композиция есть такая агрегация, при которой часть не может существовать отдельно от целого.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.01.2012, 17:46     Что такое композиция ? #31
Двигатель без автомобиля существовать может, хоть и входит в его состав: его и завести можно не только в автомобиле, но и на стенде, и переставить из одного автомобиля в другой. А обведённая на рисунке кнопка без окна существовать не может: её нельзя ни переставить в другое окно, ни запустить на на столе.
Миниатюры
Что такое композиция ?  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2012, 15:05     Что такое композиция ?
Еще ссылки по теме:

В этой части кода происходит объявление функций? Что такое void? Что в скобках? C++
C++ Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?
Кто-нибудь может подробно объяснить, что такое allocators, зачем это и что с ними делать? Нигде не нашёл инфы C++

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

Или воспользуйтесь поиском по форуму:
beaRTS
0 / 0 / 0
Регистрация: 05.09.2012
Сообщений: 2
05.09.2012, 15:05     Что такое композиция ? #32
Товарищи, читаю книгу Эккеля, его советы по программированию в приложении Б, совет 26:
"Иногда приходится наследовать для обращения к защищенным членам базового класса. На первый взгляд может показаться, что ситуация требует множественного наследования. Если вы не собираетесь выполнять повышающее приведение типа, сначала создайте новый производный класс для обращения к защищенным членам. Затем ВКЛЮЧИТЕ объект этого класса в другой класс, который должен его использовать (т.е. примените композицию вместо наследования)" - это пример композиции, как я понял. так что теперь становится ясно что является Включением (методом от противного)
Yandex
Объявления
05.09.2012, 15:05     Что такое композиция ?
Ответ Создать тему
Опции темы

Текущее время: 15:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru