ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 9) онлайн

Включение: классы в классах

Мы обсудим здесь включение, потому что, хотя оно и не имеет прямого отноше- ния к наследованию, механизм включения и наследование являются формами взаимоотношений между классами. Поэтому будет полезно сравнить их.

Если класс В является производным класса A, то мы говорим, что класс В яв- ляется отчасти классом A, так как класс В имеет все характеристики класса A и, кроме того, свои собственные. Точно также мы можем сказать, что скворец это птица, так как он имеет признаки, характерные для птиц (крылья, перья и т. д.), но при этом имеет свои собственные отличительные признаки (такие, как тем- ное переливающееся оперение). Поэтому часто наследование называют взаимо- отношением.

Включение называют взаимоотношением типа «имеет». Мы говорим, что библиотека имеет книги (в библиотеке есть книги) или накладная имеет строки (в накладной есть строки). Включение также называют взаимоотношением типа «часть целого»: книга является частью библиотеки.

В ООП включение появляется, когда один объект является атрибутом дру- гого объекта. Рассмотрим случай, когда объект класса A является атрибутом класса B:

class A { };

class В {

  A objA;

};

В диаграммах UML включение считается специальным видом объединения.

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

Включение в диаграммах UML показывается так же, как объединение, за ис- ключением того, что включение имеет стрелку в виде ромба. На рис. 9.11 пока- зано, как это выглядит.

Рис. 9.11. Включение на диаграммах классов UML

 

36