Укажите возможные значения видимости свойства класса

Укажите возможные значения видимости свойства класса

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

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

Рис. 5.18. Изображение класса в UML

Из рис. 5.18 видно, что класс изображается в UiML в виде прямоугольника, состоящего из трех разделов. Верхний раздел содержит название класса, средний — атрибуты класса, а нижний — варианты поведения класса.

Классы могут быть отображены по-разному (рис. 5.19): не обязательно отображать блок «Поведение класса», если таковой отсутствует. Также существуют классы без атрибутов. Для упрощения в ряде случаев допускается отображать только название класса.

Рис. 5.19. Варианты отображения классов в диаграмме классов

Важно помнить, что класс может содержать и атрибуты, и поведение, даже если они не визуализируются в каком-либо конкретном случае.

Атрибуты и варианты поведения. Атрибуты используются, чтобы описать свойства для каждого объекта из данного класса. В каком-то смысле атрибут — это именованное свойство класса, которое задает множество допустимых значений этого свойства. Формат описания атрибута таков:

[ Visibility][/Name [.Type] [Multiplicity] [=DefaultValue],

  • Visibility — видимость класса, которая отражает доступность атрибута одного класса для другого класса;
  • Name — имя атрибута;
  • Туре — тип атрибута (например, String, Integer и т.п.);
  • Multiplicity — множественность;
  • DefaultName — текущее значение атрибута в конкретный момент времени.

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

  • MethodName — имя поведения класса;
  • ReturnType — тип возвращаемой переменной.

UML использует четыре варианта видимости для атрибутов и поведения классов (рис. 5.20):

  • • + — открытый (Public), атрибут «виден» любому другому классу;
  • • # — защищенный (Protected), атрибут «виден» только потомкам класса;
  • • —закрытый (Private), атрибут «не виден» ни одному внешнему

• —пакетный (Package), атрибут «виден» любому классу из данного

Рис. 520. Пример обозначения видимости на диаграмме классов

Данные варианты видимости используются и в других диаграммах UML. Их применение не ограничивается классами. Видимыми или невидимыми могут быть и другие элементы диаграмм.

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

Типы отношений элементов диаграммы классов приведены в табл. 5.8.

Атрибуты класса или свойства записываются во второй сверху секции прямоугольника класса. В языке UML каждому атрибуту класса соответствует отдельная строка текста, которая состоит из квантора видимости атрибута, имени атрибута, его кратности, типа значений атрибута и, возможно, его исходного значения:

[кратность]:

Квантор видимости может принимать одно из трех возможных значений и отображается при помощи соответствующих специальных символов:

Символ "+" обозначает атрибут с областью видимости типа общедоступный (public). Атрибут с этой областью видимости доступен или виден из любого другого класса пакета, в котором определена диаграмма.

Символ "#" обозначает атрибут с областью видимости типа защищенный (protected). Атрибут с этой областью видимости недоступен или невиден для всех классов, за исключением подклассов данного класса.

Символ "-" обозначает атрибут с областью видимости типа закрытый (private). Атрибут с этой областью видимости недоступен или невиден для всех классов без исключения.

Квантор видимости может быть опущен. В этом случае его отсутствие просто означает, что видимость атрибута не указывается. Эта ситуация отличается от принятых по умолчанию соглашений в традиционных языках программирования, когда отсутствие квантора видимости трактуется как public или private. Однако вместо условных графических обозначений можно записывать соответствующее ключевое слово: public, protected, private.

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

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

[нижняя_граница1 .. верхняя_граница1, нижняя_граница2.. верхняя_граница2, . нuжняя_гpaнuцak .. верхняя_границаk],

где «нижняя_граница» и «верхняя_граница» являются положительными целыми числами, каждая пара которых служит для обозначения отдельного замкнутого интервала целых чисел.

Читайте также:  Маршрутизатор asus rt ac86u

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

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

Строка-свойство служит для указания значений атрибута, которые не могут быть изменены в программе при работе с данным типом объектов. */

Что понимается под понятием «операция или метод класса»?

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

(список параметров):

Квантор видимости, как и в случае атрибутов класса, может принимать одно из трех возможных значений и, соответственно, отображается при помощи специального символа. Символ "+" обозначает операцию с областью видимости типа общедоступный (public). Символ "#" обозначает операцию с областью видимости типа защищенный (protected). И, наконец, символ "-" используется для обозначения операции с областью видимости типа закрытый (private).

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

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

Для чего необходим выбор контекста модели при составлении описания?

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

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

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

Команды, с помощью которых люди создают и редактируют модели, не являются частью языка моделирования. Точно так же команды текстового редактора или браузера не являются частью языка программирования. Элементы модели не имеют значений по умолчанию: в каждой конкретной модели у них есть свои конкретные значения. Однако в процессе разработки людям нужно создавать и изменять модели, не излагая детально все подробности о системе. Значения по умолчанию находятся на границе между языком моделирования и инструментом редактирования, который этот язык поддерживает. В действительности эти значения по умолчанию относятся к командам, с помощью которых создается модель.

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

Последнее изменение этой страницы: 2016-08-26; Нарушение авторского права страницы

Во второй сверху секции прямоугольника класса записываются его атрибуты (attributes) или свойства. В языке UML принята определенная стандартизация записи атрибутов класса, которая подчиняется некоторым синтаксическим правилам. Каждому атрибуту класса соответствует отдельная строка текста, которая состоит из квантора видимости атрибута, имени атрибута, его кратности, типа значений атрибута и, возможно, его исходного значения:

Читайте также:  Мегафон вип номер телефона

Квантор видимости может принимать одно из трех возможных значений и, соответственно, отображается при помощи специальных символов:

• Символ "+" обозначает атрибут с областью видимости типа общедоступный (public). Атрибут с этой областью видимости доступен или виден из любого другого класса пакета, в котором определена диаграмма.

• Символ "#" обозначает атрибут с областью видимости типа защищенный (protected). Атрибут с этой областью видимости недоступен или невиден для всех классов, за исключением подклассов данного класса.

• И, наконец, знак "-" обозначает атрибут с областью видимости типа закрытый (private). Атрибут с этой областью видимости недоступен или невиден для всех классов без исключения.

Квантор видимости может быть опущен. В этом случае его отсутствие просто означает, что видимость атрибута не указывается. Эта ситуация отличается от принятых по умолчанию соглашений в традиционных языках программирования, когда отсутствие квантора видимости трактуется как public или private. Однако вместо условных графических обозначений можно записывать соответствующее ключевое слово: public, protected, private.

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

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

[нижняя_граница1 .. верхняя_граница1, нижняя_граница2.. верхняя_грашца2, . нuжняя_гpaнuцak .. верхняя_границаk],

где нижняя_граница и верхняя_граница являются положительными целыми числами, каждая пара которых служит для обозначения отдельного замкнутого интервала целых чисел, у которого нижняя (верхняя) граница равна значению нижняя_граница (верхняя_граница). В целом данное условное обозначение кратности соответствует теоретико-множественному объединению соответствующих интервалов. В качестве верхней_границы может использоваться специальный символ "*", который означает произвольное положительное целое число. Другими словами, это означает неограниченное сверху значение кратности соответствующего атрибута.

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

В качестве примера рассмотрим следующие варианты задания кратности атрибутов.

[0..1] означает, что кратность атрибута может принимать значение О или 1. При этом 0 означает отсутствие значения для данного атрибута.

[0..*] означает, что кратность атрибута может принимать любое положительное целое значение большее или равное 0. Эта кратность может быть записана короче в виде простого символа – [*].

[1.:*] означает, что кратность атрибута может принимать любое положительное целое значение большее или равное 1.

[1..5] означает, что кратность атрибута может принимать любое значение из чисел: 1, 2, 3, 4, 5.

[1..3,5,7] означает, что кратность атрибута может принимать любое значение из чисел: 1, 2, 3, 5, 7.

[1..3,7.. 10] означает, что кратность атрибута может принимать любое значение из чисел: 1, 2, 3, 7, 8, 9, 10.

[1..3,7..*] означает, что кратность атрибута может принимать любое значение из чисел: 1, 2, 3, а также любое положительное целое значение большее или равное 7.

Если кратность атрибута не указана, то по умолчанию принимается ее значение равное 1..1, т. е. в точности 1.

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

Можно привести следующие примеры задания имен и типов атрибутов классов:

• цвет: Соlоr – здесь цвет является именем атрибута, Color – именем типа данного атрибута. Указанная запись может определять традиционно используемую RGB-модель (красный, зеленый, синий) для представления цвета. В этом случае имя типа Color как раз и характеризует семантическую конструкцию, которая применяется в большинстве языков программирования для представления цвета.

• имя_сотрудника [1..2] : String – здесь имя_сотрудника является именем атрибута, который служит для представления информации об имени, а возможно, и отчестве конкретного сотрудника. Тип атрибута String (Строка) как раз и указывает на тот факт, что отдельное значение имени представляет собой строку текста из одного или двух слов (например, «Кирилл» или «Дмитрий Иванович»). Поскольку во многих языках программирования существует тип данных String, использование соответствующего англоязычного термина не вызывает недоразумения у большинства программистов. Однако, хотя в языке UML все термины даются в англоязычном представлении, использование в качестве типа атрибута Строка в данной ситуации не исключается и определяется только соображениями удобства.

Читайте также:  Найдите индуктивность катушки сопротивлением 20

• видимость:Boolean – здесь видимость есть имя абстрактного атрибута (курсив здесь не случаен), который может характеризовать наличие визуального представления соответствующего класса на экране монитора. В этом случае тип Boolean означает, что возможными значениями данного атрибута является одно из двух логических значений: истина (true) или ложь (false). При этом значение истина может соответствовать наличию графического изображения на экране монитора, а значение ложь – его отсутствию, о чем дополнительно указывается в пояснительном тексте. Поскольку кратность атрибута видимость не указана, она принимает значение 1 по умолчанию. В этой ситуации англоязычное имя типа атрибута вполне оправдано наличием соответствующего базового типа в языках программирования. Абстрактный характер данного атрибута обозначается курсивным текстом в записи данного атрибута.

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

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

В качестве примеров исходных значений атрибутов можно привести следующие дополненные выше варианты задания атрибутов:

• цвет:Соlоr = (255, 0, 0) – в RGB-модели цвета это соответствует чистому красному цвету в качестве исходного значения для данного атрибута.

• имя_сотрудника[1..2]:String = Иван Иванович – возможно, это нетипичный случай, который, скорее, соответствует ситуации имя_руководителя[2]:81пп§ = Иван Иванович.

• видимость:Вооlеаn = истина – может соответствовать ситуации, когда в момент создания экземпляра класса создается видимое на экране монитора окно, соответствующее данному объекту.

• форма:Многоугольник = прямоугольник – вряд ли требует комментариев, поскольку здесь речь идет о геометрической форме создаваемого объекта.

При задании атрибутов могут быть использованы две дополнительные синтаксические конструкции – это подчеркивание строки атрибута и пояснительный текст в фигурных скобках.

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

Например, если некоторый атрибут задан в виде форма: Прямоугольник. то это будет означать, что все объекты данного класса могут иметь несколько различных форм, каждая из которых является прямоугольником. Другим примером может служить задание атрибута в виде номер_счета:Integer. что может означать для объекта Сотрудник наличие некоторого подмножества счетов, общее количество которых заранее не фиксируется.

Строка-свойство служит для указания значений атрибута, которые не могут быть изменены в программе при работе с данным типом объектов. Фигурные скобки как раз и обозначают фиксированное значение соответствующего атрибута для класса в целом, которое должны принимать все вновь создаваемые экземпляры класса без исключения. Это значение принимается за исходное значение атрибута, которое не может быть переопределено в последующем. Отсутствие строки-свойства по умолчанию трактуется так, что значение соответствующего атрибута может быть изменено в программе. Например, строка-свойство в записи атрибута заработная_плата:Currency = = <$500>может служить для обозначения фиксированной заработной платы для каждого объекта класса «Сотрудник» определенной должности в некоторой организации. С другой стороны, запись данного атрибута в виде зара-ботная_плата: Currency = $500 означает уже нечто иное, а именно – при создании нового экземпляра Сотрудник (аналогия – прием на работу нового сотрудника) для него устанавливается по умолчанию заработная плата в $500. Однако для отдельных сотрудников могут быть сделаны исключения как в большую, так и в меньшую сторону, о чем необходимо позаботиться дополнительно в программе.

Данный текст является ознакомительным фрагментом.

Ссылка на основную публикацию
Adblock detector