Дж. Арлоу, А. Нейштадт - UML 2 и Унифицированный процесс - Практический объектно-ориентированный анализ и проектирование, страница 32
Описание файла
PDF-файл из архива "Дж. Арлоу, А. Нейштадт - UML 2 и Унифицированный процесс - Практический объектно-ориентированный анализ и проектирование", который расположен в категории "". Всё это находится в предмете "объектно-ориентированный анализ и проектирование" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 32 страницы из PDF
В табл. 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.
Расширенный синтаксис атрибутаПодобно любому другому элементу моделирования UML, семантикуатрибутов можно расширять, указывая перед ними стереотипы илизадавая после них помеченные значения, например«стереотип» атрибут { метка1 = значение1, метка2 = значение2, … }В помеченных значениях можно хранить любую информацию. Например, иногда они используются для хранения информации о версии,как показано здесь:address { addedBy="Jim Arlow", dateAdded="20MAR2004" }В этом примере записано, что Джим Арлоу (Jim Arlow) добавил атрибут address (адрес) в некоторый класс 20 марта 2004 года.7.5.3.
Ячейка операцийОперации – это функции, закрепленные за определенным классом.По сути, они обладают всеми характеристиками функций:• имя• список параметров• возвращаемый типСигнатура операции включает имя, тип всех ее параметров и возвращаемый тип.Сочетание имени операции, типов всех ее параметров и возвращаемоготипа образует сигнатуру операции (рис.
7.10). Сигнатура каждой опесигнатура операциивидимость имя( направление имяПараметра : типПараметра = значениеПоУмолчанию, ... ) : возвращаемыйТипсписок параметровРис. 7.10. Сигнатура операции166Глава 7. Объекты и классырации класса должна быть уникальной, поскольку именно сигнатураидентифицирует операцию. Когда объект получает сообщение, его сигнатура сравнивается с сигнатурами операций, определенных в классеобъекта. Если обнаруживается соответствие, инициируется запрашиваемая операция объекта.Разные языки программирования немного поразному определяют,что должно составлять сигнатуру операции.
Например, в С++ и Javaвозвращаемый тип игнорируется. Это означает, что две операции класса, отличающиеся только возвращаемыми типами, будут рассматриваться как одна и та же операция и генерировать ошибку компилятора/интерпретатора. В Smalltalk, языке со слабым контролем типов,все параметры и возвращаемый тип имеют тип Object, и поэтому сигнатуру составляет только имя операции.Имена операций записываются в стиле lowerCamelCase.
В качествеимен используются глаголы или глагольные группы. Необходимо избегать применения в именах специальных символом и сокращений.Каждый параметр операции имеет форму, показанную на рис. 7.11.В операции может быть от нуля до нескольких параметров.направление имяПараметра : типПараметра = значениеПоУмолчаниюРис. 7.11. Синтаксис параметров операцииИмена параметров записываются в стиле lowerCamelCase и обычно являются именем существительным или именной группой, посколькуобозначают чтото, что передается в операцию. Каждый параметр имеет определенный тип, который является классом или примитивнымтипом.Направление и применяемое по умолчанию значение параметра рассматриваются в следующих двух разделах.7.5.3.1.
Направление параметраДля параметров операции может быть задано направление:операция( in p1:Integer, inout p2:Integer, out p3:Integer, return p4:Integer, returnp5:Integer )Если направление не указано, по умолчанию оно принимает значениеin (в). Семантика направления параметра приведена в табл. 7.6.Семантика значений in, inout (виз) и out (из) довольно проста, а вотreturn (возвратить) возможно потребует большего внимания.Обычно ожидается, что функция возвращает один объект, как показано ниже:maximumValue = max( a, b )minimumValue = min( a, b )1677.5. Нотация классов в UMLгде a, b, maximumValue (максимальное значение) и minimumValue (минимальное значение) – целые числа.
Обычный синтаксис операции поддерживает именно эту ситуацию: каждая операция обычно имееттолько одно возвращаемое значение. Как мы видели, в UML такие«обычные» операции можно смоделировать следующим образом:maximumValue( a:Integer, b:Integer ) : IntegerТаблица 7.6ПараметрСемантикаin p1:IntegerПрименяется по умолчанию.Операция использует p1 как входной параметр.Значение p1 какимто образом используется операцией.Операция не изменяет p1.inout p2:IntegerОперация принимает p2 как параметр ввода/вывода.Значение p2 какимто образом используется операцией.и принимает выходное значение операции.Операция может изменять p2.out p3:IntegerОперация использует p3 как выходной параметр.Параметр служит хранилищем для выходного значенияоперации.Операция может изменять p3.return p4:IntegerОперация использует p4 как возвращаемый параметр.Операция возвращает p4 как одно из своих возвращаемыхзначений.return p5:IntegerОперация использует p5 как возвращаемый параметр.Операция возвращает p5 как одно из своих возвращаемыхзначений.Однако в некоторых языках операции могут возвращать более одногозначения.