Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Оля2.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
234 Кб
Скачать
☆

2.1.1 Спецификация uml

Четкие указания для UML содержатся, разумеется, в его спецификации. UML развивался с середины 1990-х годов и к настоящему времени (2011) последняя стабильная версия – 2.3. Спецификация разрабатывается и стандартизируется консорциумом OMG, также содержится в директиве ISO/IEC 19501 (в версии 1.4). Она описывает, как язык может применяться, указывая, какие компоненты языка могут сочетаться для создания достоверного описания. Она разделена на 4 части:

Инфраструктура UML: сам UML описан с использованием специфичных элементов, описанных в инфраструктуре UML. Такой подход к созданию модели, описывающей UML, называется мета-моделированием. Спецификация инфраструктуры определяет конечное множество элементов, с помощью которых могут быть построены другие элементы, в том числе и такие как сверхструктура UML. Она включает в себя, например, основные типы, абстракции и конструкции.

Суперструктура UML: формализованное описание того, как устроен UML, дается в его суперструктуре. Это описание состоит из элементов инфраструктуры UML. Документ, описывающий суперструктуру, содержит наиболее полную информацию о языке и является, наверное, самым важным ее источником для всех пользователей UML.

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

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

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

2.1.2 Диаграммы классов uml

Диаграммы классов – один из самых простых и распространённых типов диаграмм, существующих в UML. Они описывают классы и их взаимосвязи, что довольно похоже на большинство объектно-ориентированных языков программирования и человеческое восприятие вещей, так что их довольно легко воспринять чисто интуитивно. Адаптивность диаграмм классов позволяет использовать их для различных целей. Тем не менее, необходимо знать несколько вещей об элементах, используемых в диаграммах классов. Как даёт понять название, наиболее важные элементы – это классы, которые мы и рассмотрим подробнее первыми.

2.1.2.1 Классы

Класс – это абстракция, описывающая, согласно [96], «набор объектов, которые подходят под одну и ту же спецификацию общих особенностей, ограничений и семантик». Это означает, что объекты – это экземпляр классов, и соответствующий им класс определяет их структуру и поведение.

Классы изображаются прямоугольниками, которые разделены горизонтальными линиями на ячейки. Каждая из – трёх по умолчанию – ячеек содержит определённую информацию о классе. Первая предназначена для имени, вторая содержит атрибуты класса и третья – его операции (смотри разделы «Атрибуты» и «Операции»). Ячейки могут быть скрыты (например, если они не важны для конкретного аспекта), чтобы сделать диаграмму более удобочитаемой. Хотя с другой стороны, нельзя делать вывод, что если какой-то скрытой информации не видно, то она не указана вовсе. Часто, особенно на ранних этапах концептуальной разработки, классы часто определены только их названием. Их обычно обозначают существительным в единственном числе, и пишут с большой буквы. Образец простого класса можно увидеть на рисунке 2.1.

Рис. 2.1. Образец UML класса с названием «WindEnergyPlant» и его экземпляр (Объект)

Объект

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

В предыдущем примере (смотри рисунок 2.1) принадлежность конкретного экземпляра классу WindEnergyPlant определяется по WEPBorkum1 : WindEnergyPlant; она могла бы быть определена по :WindEnergyPlant даже если бы экземпляр не имел имени.

Абстрактные классы

В предыдущем параграфе не говорилось, что от каждого класса можно создать экземпляр, говорилось только, что каждый объект является экземпляром класса. В большинстве случаев, создать экземпляр можно от большинства классов, кроме одного исключения: абстрактных классов. Эти классы обычно используются для того, чтобы логически сгруппировать функциональные возможности и часто сознательно создаются неполными. Для того, чтобы создать от них экземпляр, их нужно дополнить другим классом (этот процесс будет описан в разделе 2.1.3). Абстрактные классы можно определить по курсивному шрифту, которым написано их название.

Атрибуты

Атрибуты задают характеристики, описывающие состояние класса более подробно. Они задаются как минимум именем и могут иметь тип, отделённый двоеточием, который описывает/ограничивает возможные значения для экземпляров этого класса. Это могут быть как основные типы – обычно встроенные типы языка реализации – например, целые числа или строки, так и комплексные типы. Класс сам по себе является таким сложным типом, и может использоваться как тип для атрибутов. При этом также возможно указать перечисления, которые являются специально выделенным классом (смотри раздел 2.1.5), который позволяет указать ограниченный набор значений данных (так называемые перечисляемые константы).

Имена атрибутов, как правило, (и согласно спецификации UML [95]), пишут с маленькой буквы. Атрибуты также могут иметь значение по умолчанию, для указания которого после типа атрибута надо поставить знак равенства и написать значение в кавычках.

Рисунок 2.2 подробно показывает класс WindEnergyPlant с его атрибутами accessDoor, power, manufacturer и rotors.

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

Рис. 2.2 UML класс WindEnergyPlant с атрибутами

Видимость

Как видно из рисунка 2.2, предшествующие атрибуту символы могут использоваться для отображения видимости этого атрибута. Здесь символы ‘+’, ‘-’, ‘#’ и ‘~’ являются общепринятыми сокращениями для «общедоступная видимость», «закрытая видимость», «защищённая видимость» или «видимость внутри пакета», соответственно. Во всей CIM используются в основном общедоступные атрибуты, которые доступны из других классов.

Кратность

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

Кратность задаётся значениями нижней и верхней границ, которые описывают, сколько экземпляров должно существовать, и сколько могут существовать, соответственно. Это означает, что возможны значения от 0 до бесконечности (изображается символом *). Значения границ указываются в квадратных скобках, начиная со значения нижней границы, затем идёт «..» и значение верхней границы. Это означает, что в примере на рисунке 2.2 ветрогенератор должен иметь как минимум 2 ротора, но может, как в этом примере, также иметь любое число генераторов свыше двух вплоть до бесконечного.

Чтобы облегчить задание атрибутов и кратности, существуют некоторые условные обозначения. Так, неизменная кратность, скажем, равная 5 – имеется в виду [5..5] – может быть указана как [5]. В случае, когда кратность не указана, предполагается, что кратность равна 1 – [1]. Если указывается только кратность ‘*’, это означает, что величина нижней границы равна 0.

Помимо вышеупомянутых, есть и другие особенности указания атрибутов, о которых можно рассказать. Но так как это не является темой книги, более подробную информацию при необходимости ищите в спецификациях [95], [96] или в технической литературе наподобие [99].

Операции

Помимо состояния классов, описываемого атрибутами, существуют операции, которые описывают, как поведёт себя класс, когда к нему обратятся. Операции не находятся в центре внимания CIM, но так как они являются базовыми элементами классов, они будут коротко описаны, потому что это может помочь в понимании базовых концепций.

Операции задаются именем, параметрами и типом возвращаемого значения. Имя операции должно начинаться, как и имя атрибута, с маленькой буквы. После имени операции идут скобки, в которых указываются значения параметра. Параметры могут задаваться аналогично атрибутам, с помощью имени, типа и значения по умолчанию. Наконец, тип возвращаемого значения и его кратность пишутся после разделяющего двоеточия. Как и с атрибутами, символы ‘+’, ‘-’, ‘#’ и ‘~’ перед объявлением операции отражают ее видимость. Образец того, как выглядит класс с указанными операциями, показан на рисунке 2.3. На этом рисунке закрытая операция getWindspeed задана возвращать целое число и не имеет параметров. Видимость операции задана как «закрытая», поэтому операция может быть доступна только для других операций этого же класса. Другая операция turnRotor, заданная в этом классе, принимает один целочисленный параметр (который должен указывать угол) – и не возвращает ничего.

Рис. 2.3. UML класс с операциями.

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