Состав объекта


В компьютерных науках композиция объектов и агрегация объектов — это тесно связанные способы объединения объектов или типов данных в более сложные. В разговоре различие между композицией и агрегацией часто игнорируется. [1] Распространенными видами композиций являются объекты , используемые в объектно-ориентированном программировании , тэговые объединения , наборы , последовательности и различные структуры графов . Композиции объектов относятся к структурам данных, но не совпадают с ними.

Композиция объекта относится к логической или концептуальной структуре информации, а не к реализации или физической структуре данных, используемой для ее представления . Например, последовательность отличается от набора тем, что (среди прочего) порядок составленных элементов имеет значение для первого, но не для второго. Структуры данных, такие как массивы , связанные списки , хэш-таблицы и многие другие, могут использоваться для реализации любой из них. Возможно, сбивает с толку то, что некоторые из одних и тех же терминов используются как для структур данных, так и для композитов. Например, " бинарное дерево" может относиться к любому из них: как структура данных, это средство доступа к линейной последовательности элементов, и фактическое положение элементов в дереве не имеет значения (дерево может быть внутренне перестроено, как угодно, без изменения его значения). Однако, как объектная композиция, позиции имеют значение, и их изменение изменило бы значение (как, например, в кладограммах ) [ нужна цитата ] .

Объектно-ориентированное программирование основано на объектах для инкапсуляции данных и поведения. Он использует два основных метода сборки и объединения функциональности в более сложные: подтипы и композицию объектов. [2] Композиция объектов — это объединение объектов внутри составных объектов и в то же время обеспечение инкапсуляции каждого объекта за счет использования их четко определенного интерфейса без видимости их внутренних компонентов. В этом отношении композиция объектов отличается от структур данных, которые не требуют инкапсуляции.

Композиция объекта также может быть связана с группой из нескольких связанных объектов, таких как набор или последовательность объектов. Делегирование может обогатить композицию, перенаправляя запросы или вызовы, сделанные вложенному составному объекту, в один из его внутренних компонентов. [3]

В языках программирования, основанных на классах и типизированных , типы можно разделить на составные и несоставные, а композицию можно рассматривать как отношение между типами: объект составного типа (например , автомобиль ) « имеет » объекты других типов ( например колесо ). Когда составной объект содержит несколько подобъектов одного типа, им могут быть назначены определенные роли , часто отличающиеся именами или номерами. Например, объект Point может содержать 3 числа, каждое из которых представляет расстояние по разным осям, например «x», «y» и «z». Изучение отношений часть-целое в целом и есть мереология .

Композицию следует отличать от создания подтипов , который представляет собой процесс добавления деталей к общему типу данных для создания более конкретного типа данных. Например, автомобили могут быть транспортным средством определенного типа: автомобиль — это транспортное средство . Подтипирование не описывает отношения между различными объектами, а вместо этого говорит, что объекты одного типа одновременно являются объектами другого типа. Изучением таких отношений является онтология .


Класс велосипеда, представленный в UML, с тремя свойствами: седло, колеса и части, причем два последних имеют множественность, указывающую на несколько объектов.
Композиция объектов с использованием свойств UML для составления объектов
Объединение нескольких велосипедов, у каждого из которых один владелец; Состав велосипеда с частями рамы, из которых состоит велосипед; и совокупность велосипеда с его колесами, которые существуют без велосипеда
Нотация UML для ассоциации, композиции и агрегации
Агрегация в COM