Объясните значение терминов
От: universal178 Марс  
Дата: 25.07.12 06:57
Оценка:
Первый термин, который я не пойму в контексте ООП и паттернов программирования — это композиция. Что это такое?
Re: Объясните значение терминов
От: lazymf Россия  
Дата: 25.07.12 07:19
Оценка: +1
Здравствуйте, universal178, Вы писали:

U>Первый термин, который я не пойму в контексте ООП и паттернов программирования — это композиция. Что это такое?


Ну например:

Композиция — это более сложная форма объединения. Она обладает всеми его свойствами, но имеет еще и такие, как:
— часть может принадлежать только одному целому;
— время жизни части то же, что и целого.
Машина имеет двери (помимо других деталей). Двери не могут принадлежать другой машине, они являются ее неотъемлемой частью. В комнате есть пол, потолок и стены. Если включение — это взаимоотношение типа «имеет», то композиция — это взаимоотношение типа «состоит из».

Р. Лафоре, "Объектно-ориентированное программирование в С++".
Re[2]: Объясните значение терминов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 25.07.12 07:56
Оценка:
Здравствуйте, lazymf, Вы писали:

L>

L>Композиция — это более сложная форма объединения. Она обладает всеми его свойствами, но имеет еще и такие, как:
L>- часть может принадлежать только одному целому;
L>- время жизни части то же, что и целого.
L>Машина имеет двери (помимо других деталей). Двери не могут принадлежать другой машине, они являются ее неотъемлемой частью. В комнате есть пол, потолок и стены. Если включение — это взаимоотношение типа «имеет», то композиция — это взаимоотношение типа «состоит из».

L>Р. Лафоре, "Объектно-ориентированное программирование в С++".

По поводу того что двери — неотъемлемая часть машины с идентичным временем жизни — я бы поспорил. Вообще все зависит от конкретного контекста. В каких-то контекстах отношение двери и машины можно считать композицией, в каких-то контекстах рассмотрение введение двери как самостоятельной сущности не требуется, а в общем случае я бы отнес двери машины к примеру агрегации. Вопрос принадлежности дверей кому-либо отдельный вопрос, т.к. двери без машины или машина без дверей — вполне обыденные явления.
Re[2]: Объясните значение терминов
От: Щъмых Марс  
Дата: 25.07.12 08:15
Оценка:
Здравствуйте, lazymf, Вы писали:

L>Здравствуйте, universal178, Вы писали:


U>>Первый термин, который я не пойму в контексте ООП и паттернов программирования — это композиция. Что это такое?


L>Ну например:

L>

L>Композиция — это более сложная форма объединения. Она обладает всеми его свойствами, но имеет еще и такие, как:
L>- часть может принадлежать только одному целому;
L>- время жизни части то же, что и целого.
L>Машина имеет двери (помимо других деталей). Двери не могут принадлежать другой машине, они являются ее неотъемлемой частью. В комнате есть пол, потолок и стены. Если включение — это взаимоотношение типа «имеет», то композиция — это взаимоотношение типа «состоит из».

L>Р. Лафоре, "Объектно-ориентированное программирование в С++".

А если на примере?
Re[3]: Объясните значение терминов
От: vpchelko  
Дата: 25.07.12 08:19
Оценка:
Например форма, есть композиция.
Сало Украине, Героям Сала
Re[3]: Объясните значение терминов
От: lazymf Россия  
Дата: 25.07.12 08:21
Оценка:
Здравствуйте, samius, Вы писали:

S>По поводу того что двери — неотъемлемая часть машины с идентичным временем жизни — я бы поспорил.


Ну, насколько я понимаю, в данном случае пример автомобиль-двери был использован автором исключительно для того, чтобы проиллюстрировать положение "часть может принадлежать только одному целому". Я когда давал цитату в общем-то не рассчитывал, что ее будут воспринимать как исчерпывающее определение термина, а хотел намекнуть что в книжках тема раскрыта, потому и написал "ну например".
Re: Объясните значение терминов
От: Eye of Hell  
Дата: 25.07.12 23:33
Оценка: 4 (2) +1
U>Первый термин, который я не пойму в контексте ООП и паттернов программирования — это композиция. Что это такое?

В контексте паттернов не помню, а вообще в ООП "композиция" — это как составной объект собирается из других объектов. Декомпозиция — как он, соответственно, разбирается. Контрастирует с наследованием и subtyping (не помню как по русски), когда объект не собирается из других, а является ими с добавлением улучшений .

Как правило, композиция используется чтобы ответить на вопросы сложности "почему в этом классе двадцать тысячь строк кода и пять сотен методов?" и "почему весь код сдублирован двадцать раз с минорными изминениями?".

Самая распространенная и простая композиция — когда составной объект описан как класс, у которого другие объекты являются полями. Но есть и более сложные решения — объекту можно передать указатели / ссылки на другие объекты, использовать метопрограммирование для сборки составного объекта из фрагментов кода, использовать технологию mixin'ов (тоже не помню как по русски). Разные типы композиции борются со сложностью разными способами.

Пример из реальной жизни. Объект "список пользователей" сделан с помощью композиции из объекта "контейнер типа список", объекта "ссылка на текущего пользователя" и объекта "контейнер типа строка — откуда брать и куда сохранять".
Re: Объясните значение терминов
От: LaptevVV Россия  
Дата: 26.07.12 17:28
Оценка:
Здравствуйте, universal178, Вы писали:

U>Первый термин, который я не пойму в контексте ООП и паттернов программирования — это композиция. Что это такое?

Объявление в качестве поля класса объекта другого класса.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.