ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА UML

Категории классов

 

Когда система разрастается до десятка классов, можно заметить груп­пы классов, связанные внутри и слабо зацепляющиеся с другими. Такие группы классов образуют категории.

Категория классов – это агрегат, состоящий из классов и других катего­рий классов.

Категория классов не имеет операций или состояний в явном виде, они содержатся в ней не­явно в описаниях агрегированных классов.

Некоторые классы в категории могут быть открытыми, то есть экспортиро­ваться для использования за пределы категории. Остальные классы могут быть частью реализации, то есть не использоваться никакими классами, внешними к этой категории.

Между категориями и классами может существовать отношение использования. Категория может использовать невложенные категории и классы. С другой стороны, и классы могут использовать категории.

В C++ категории классов реализуются с помощью введения пространств имен – namespace. Однако пространство имен позволяет реализовать более широкое понятие. Оно может включать в себя классы, другие пространства имен, свободные подпрограммы и глобальные (внутри пространства имен) данные.

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

Пример. Объединим все классы, разработанные для использования в графической системе, в одну категорию. Предоставим пользователю описания в файле GraphSys.h:

 

namespace GraphSys{

class Point{ ... };

class Color{ ... };

class Shape {... };

class Circle: public Shape{... };

class SolidCircle: public Circle {... };

. . .

}

 

Реализация указанных классов находится в файле GraphSys.срр:

 

# include "GraphSys.h"

namespace GraphSys{

Circle :: draw( ){...}

SolidCircle :: draw( ){...}

. . .

}

 

Обращение к членам пространства имен осуществляется с использованием явной квалификации:

 

GraphSys :: Circle C;

GraphSys :: SolidCircle SC;

 

С другой стороны, описание using в пользовательском коде позволяет не использовать все время явную квалификацию:

 

# include "GraphSys.h"

using namespace GraphSys;

void user_func( ){

Circle C;

. . .

C.draw( );

}

 

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