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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 163, средняя оценка - 4.64
RNT
Автор FAQ
3134 / 354 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
#1

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

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

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

C++
1
2
3
4
5
6
7
class A 
{ };
 
class В 
{ 
    A objA; 
};
Объясните, пожалуйста, на примере, что такое композиция.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2010, 21:28     Что такое композиция ?
Посмотрите здесь:

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

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

Что такое чистый С++? - C++
Наткнулся в интернете на такую вот статью и задумался, а что же на самом деле чистый С++? Может быть автор статьи правильно объясняет...

что такое полиморфизм - C++
помогите понять, что такое полиморфизм , читаю книгу, не могу вникнуть, как я понялполиморфизм это перегрузка функций?? типа один интерфейс...

Что такое конструктор? - C++
Конструктор - это такие детали , как map , player, enemy.Я правильно понял?

Что такое NULL ? - C++
Обьясните, что значит NUL часто вижу его в условиях и операторах а что это значит точто не знаю!!!

Что такое указатели? - C++
Здравствуйте. Что такое указатели? Для чего они нужны? И когда их использовать? Объясните пожалуйста.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
17.01.2012, 13:43     Что такое композиция ? #16
stawerfar, а я думал это называется вложенный класс
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
17.01.2012, 13:56     Что такое композиция ? #17
Я знаю о существовании термина , но именно приведённый мною код отвечает требованиям, объяснениям в книге Лафоре т.е.:
часть может принадлежать только одному целому;
время жизни части то же, что и целого;
даже одиночный объект может относиться к классу как композиция. В машине только один двигатель.

Как я понял о подразумевает что двигатель не будет сам по себе использоваться или существовать (т.е. без механизмов для которых он нужен в данном случае это автомобиль), следовательно он является не отъемлеммой частью всего автомобиля.

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

Спасибо за интеллектуальную беседу, было очень приятно с Вами обсудить эту тему.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
17.01.2012, 15:12     Что такое композиция ? #26
Цитата Сообщение от stawerfar Посмотреть сообщение
объяснил не пойми как , ни примеров ни чего толком наводящего
Выход здесь простой: если ответ не найден в одном источнике - стоит поискать другие. Наверняка в одном из них материал будет предоставлен более полно. Все источники, что попадались мне, говорили одно: композиция и включение - синонимы. Например, в математике есть такой термин - композиция функций. Так вот, можно так же сказать "суперпозиция функций", и это будет то же самое. Так что продолжаю считать, что композиция и включение - одно и то же. А описывать ли класс двигателя в классе автомобиля или отдельно от него - зависит от задачи и идеологических предпочтений. Однако не стоит забывать о повторном использовании кода.
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
17.01.2012, 15:36     Что такое композиция ? #27
Вообще-то у Гради Буча, язык которого является одним из предшественников UML, включение по значению обозначается закрашенным квадратиком, а включение по ссылке – пустым.
Также для композиции Лафоре описывает следующие свойства:
• часть может принадлежать только одному целому;
• время жизни части то же, что и целого.
Очевидно, что эти свойства выполняются при включении по значению и не выполняются при включении по ссылке.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
17.01.2012, 16:10     Что такое композиция ? #28
Mr.X, это же просто агрегация
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
17.01.2012, 16:26     Что такое композиция ? #29
Цитата Сообщение от alex_x_x Посмотреть сообщение
Mr.X, это же просто агрегация
Да-да, и включение, и композиция - это просто виды агрегации, разницу между которыми мы тут и обсуждаем.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2012, 17:13     Что такое композиция ?
Еще ссылки по теме:

Что такое void? - C++
С++ 1).Что такое void ? 2).Что ткое void swap ? 3).Что такое temp ? 4).Что ткое fot ? заранее спс

Что такое магазин? - C++
Подскажите что такое магазин? Как я понял - это что-то типо стека?

Найти такое k, что (k-1)! < A < k! - C++
Дано положительное число А&gt;10. Найти такое k, что (k-1)!&lt;A&lt;k!

что такое extern? - C++
что будет если не написать extern,если можно с примерами

что такое std::out - C++
люди, в общем препод нам попался из разряда &quot;пришел унизился ушел&quot; ты ему слово, он тебе в ответ десять вопросов он задал мне банальый...


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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.01.2012, 17:13     Что такое композиция ? #30
Цитата Сообщение от ForEveR Посмотреть сообщение
9. Что такое композиция? Тип отношения между объектами, когда один является частью другого (его членом).
Это агрегация, а композиция есть такая агрегация, при которой часть не может существовать отдельно от целого.
Yandex
Объявления
17.01.2012, 17:13     Что такое композиция ?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru