Джим Арлоу, Айла Нейштадт - UML 2 и Унифицированный процесс. Практический объектно-ориентированный анализ и проектирование (1037782), страница 31
Текст из файла (страница 31)
Однако необходимо помнить, что полное имя, если оно делает модель более понятной, все равно предпочтительнее.Классы представляют «сущности», поэтому их имена должны быть существительными или именной группой, например Person (человек),Money (деньги), BankAccount (банковский счет).7.5.2.
Ячейка атрибутовЕдинственной обязательной частью UMLсинтаксиса для атрибутов(рис. 7.8) является имя атрибута. Имена атрибутов записываются в стиле lowerCamelCase, т. е. начинаются со строчной буквы, а далее большиеи малые буквы пишутся вперемежку. Обычно в качестве имен атрибутов используются имена существительные или именные группы, потому что атрибуты указывают на некоторую «сущность», например баланс счета. Необходимо избегать специальных символов и сокращений.видимость имя : тип [множественность] = начальноеЗначениеобязателенРис. 7.8.
UML+синтаксис для атрибутов1617.5. Нотация классов в UMLНеобязательные части синтаксиса атрибутов рассматриваются в следующих нескольких разделах.7.5.2.1. ВидимостьВидимость контролирует доступ к свойствам класса.Дополнение видимости (visibility) (табл. 7.3) применяется к атрибутам и операциям класса. Оно также может применяться к именам ролей в отношениях (глава 9). При анализе диаграммы обычно не загромождают видимостями, поскольку, по сути, это дополнение дает описание того «как», а не «что».Таблица 7.3Дополнение ВидимостьСемантика+Public (Открытый)Любой элемент, который имеет доступ к классу, имеет доступ к любойиз его возможностей, видимость которой public.–Private (Закрытый)Только операции класса имеют доступ к возможностям, имеющим видимость private.#Protected (Защищенный)Только операции класса или потомкакласса имеют доступ к возможностям, имеющим видимость protected.~Package (Пакетный)Любой элемент, находящийся в одном пакете с классом или во вложенном подпакете, имеет доступ ко всемего возможностям, видимость которых package.Языки реализации могут поразному интерпретировать все типы видимости UML, кроме public (открытый).
Это важно. Фактически языки программирования могут определять дополнительные типы видимости, которые UML не поддерживает по умолчанию. Обычно это непроблема. Самые распространенные ОО языки программирования, такие как С++ и Java, и даже популярные полуОО языки, например Visual Basic, замечательно справляются с видимостями public, private(закрытый), protected (защищенный) и package (пакетный), по крайней мере, в первом приближении.Давайте более подробно рассмотрим два ОО языка. В табл. 7.4 проводится сравнение семантики видимости UML и языков программирования Java и C#.Видимость зависит от языка реализации и может стать очень сложной.
Какой именно тип видимости используется, является конкрет162Глава 7. Объекты и классыным решением реализации, которое обычно принимается программистом, а не аналитиком/проектировщиком. Для общего моделированиястандартных UMLопределений public, private, protected и packageвполне достаточно. Рекомендуем ограничиться ими.Таблица 7.4ВидимостьСемантика UMLpublicЛюбойэлемент, Аналогично UML.который имеет доступ к классу, имеетдоступ к любой изего возможностей,видимостькоторой public.Семантика JavaАналогичноUML.Семантика C#privateТолько операции Аналогично UML.класса имеют доступ к возможностям, имеющим видимость private.АналогичноUML.protectedТолько операциикласса или потомкакласса имеют доступ к возможностям, имеющим видимость protected.Аналогично UML, но Аналогичнодоступ также имеют UML.все классы, находящиеся в том же пакете Java, что и определяющий класс.packageЛюбойэлемент,находящийся в одном пакете с классом или во вложенномподпакете,имеет доступ ковсем его возможностям,видимостькоторых package.Применяемаяпо –умолчаниювидимость в Java: вложенным классам вложенных подпакетов доступ к элементам родительского пакетаавтоматическинепредоставляется.private protected–(закрытый защищенный)Аналогично protect –ed в UML.internal(внутренний)––Доступны любому элементу тойже программы.protected internal(защищенныйвнутренний)––Сочетает семантику protectedи internal, применимо толькок атрибутам.1637.5.
Нотация классов в UML7.5.2.2. ТипТипом атрибута может быть другой класс или примитивный тип.Типом атрибута может быть другой класс или примитивный тип.Спецификация UML определяет четыре примитивных типа, используемых в самой спецификации UML. Их можно применять в аналитических моделях, если необходимо сохранить платформонезависимость.Эти типы приведены в табл.
7.5.Таблица 7.5UMLOCLПростой типСемантикаIntegerЦелое число.UnlimitedNaturalЦелое число >= 0.Бесконечность обозначается как *.BooleanМожет принимать значения true или false.StringПоследовательность символов.Строковые литералы заключаются в кавычки,например "Джим".RealЧисло с плавающей точкой.Объектный язык ограничений (Object Constraint Language, OCL) –формальный язык для выражения ограничений в UMLмоделях.
Подробно OCL обсуждается в главе 25. OCL определяет стандартные операции для простых типов UML (кроме UnlimitedNatural) и вводит новыйтип Real.Если модель ориентирована на определенный язык программирования, например Java или C#, можно использовать простые типы этогоязыка. Однако тогда модель будет привязана к этому конкретномуязыку программирования.Иногда необходимо ввести в UMLмодель ряд примитивных типов, используемых в остальных классах в качестве атрибутов и типов параметров операций. Добавить простой тип можно, создав класс с таким жеименем и стереотипом «primitive». У такого класса обычно нет атрибутовили операций, поскольку он просто выступает в роли структурного нуля для простого типа, добавляя его имя в пространство имен модели.7.5.2.3. КратностьКратность широко используется при проектировании.
Она также может быть полезной в аналитических моделях, поскольку с ее помощьюможно лаконично обозначить определенные бизнесограничения, касающиеся «количества сущностей», участвующих в отношении.164Глава 7. Объекты и классыPersonDetails–name : String [2..*]–address : String [3]–emailAddress : String [0..1]имя состоит из двух или более строкадрес состоит из трех строкemailAddress состоит из одной строки или имеет значение nullвыражение кратностиРис.
7.9. Примеры синтаксиса кратностиКратность позволяет моделировать коллекции сущностей или неопределенные значения.Применяя выражение кратности к атрибуту, можно моделировать двесовершенно разные сущности (рис. 7.9).• Коллекции – если выражение кратности определяет целое числобольше нуля, значит, задается коллекция типа.
Например, выражение colors : Color[7] моделирует атрибут, являющийся коллекциейиз семи объектов Color (цвет), которые можно использовать для моделирования цветов радуги.• Неопределенные значения – большинство языков различают атрибут, содержащий пустой, или неинициализированный, объект (например, пустая строка, ""), и атрибут, указывающий в «никуда»,т. е. ссылку на неопределенный (null) объект. Когда атрибут ссылается на null, это означает, что объект, на который он указывает, ещене был создан или уже прекратил существование. При детальномпроектировании иногда важно указать, что null является возможным значением атрибута.
Смоделировать это можно с помощьюспециального выражения кратности [0..1]. Рассмотрим пример атрибута emailAddress (электронныйАдрес) (рис. 7.9): если значение атрибута – "" (пустая строка), то это можно понять так, что адресэлектронной почты был запрошен, но не был предоставлен. С другой стороны, если атрибут emailAddress указывает на null, можно сказать, что адрес электронной почты еще не был запрошен и, следовательно, его значение неизвестно. Если проводятся такие разграничения, исключительно важно указывать в документации emailAddress точную семантику "" и null. Как видите, это довольно тонкиепроектные рассуждения, но они могут быть важны и полезны.На рис. 7.9 приведено несколько примеров синтаксиса кратности.7.5.2.4.
Начальное значениеНачальное значение позволяет задавать значение атрибута в моментсоздания объекта.1657.5. Нотация классов в UMLНачальное значение (initialValue) позволяет задавать значение, принимаемое атрибутом при создании экземпляра класса (т. е. объекта). Этозначение называют начальным, потому что оно присваивается атрибуту в момент создания объекта. Использование начальных значенийвезде, где есть возможность, является хорошим стилем программирования.
Это гарантирует, что состояние создаваемых объектов классавсегда действительное (valid) и они пригодны к использованию.В анализе начальные значения используются только тогда, когда онимогут выразить или обозначить важное бизнесограничение. Подобнаяситуация встречается довольно редко.7.5.2.5.