SlideShare a Scribd company logo
1 of 53
Учебный курс
Язык UML в анализе и проектировании
программных систем и бизнес-процессов
Лекция 3
Диаграмма классов языка UML 2
Автор:
Леоненков Александр Васильевич
кандидат технических наук,
старший научный сотрудник
Проблема: Как представить архитектуру
программной системы?
Графический
интерфейс
пользователя
Модели
бизнес
объектов
Базы данных
Архитектура программной системы в
нотации UML
Уровень
базы данных
Промежуточный
уровень
Уровень GUI
ServiceAgent
purchase(customer, product, items)
Customer
name : String
Address : String
save()
Customer
name : String
Address : String
save()
getName()
updateName()
Customer Order Line
**
Product
**
Order Line
items : Product
getName()
updateName()
Observer
update()
Order
date : Date
Product
name : String
price : Currency
getName()
updateName()
Sales
product : Product
Диаграмма классов — основная логическая
модель проектируемой системы
Диаграмма классов (class diagram) — диаграмма,
предназначенная для представления модели статической
структуры программной системы в терминологии классов
объектно-ориентированного программирования
Диаграмма классов представляет собой граф, вершинами
или узлами которого являются элементы типа
“классификатор”, которые связаны различными типами
структурных отношений
Классификатор (classifier) – специальное понятие,
предназначенное для классификации экземпляров, которые
имеют общие характеристики
Характеристики классификатора
Характеристика (feature) – понятие, предназначенное для
спецификации особенностей структуры и поведения
экземпляров классификаторов
Структурная характеристика (structural feature) является
типизированной характеристикой классификатора, которая
специфицирует структуру его экземпляров
Характеристика поведения (behavioral feature) является
характеристикой классификатора, которая специфицирует
некоторый аспект поведения его экземпляров
Класс (class) – элемент модели, который описывает
множество объектов, имеющих одинаковые спецификации
характеристик, ограничений и семантики
Основные обозначения на диаграмме
классов
М е с т о п о л о ж е н и е
1
О п е р а ц и и
К р а т н о с т ь
А с с о ц и а ц и я
и м я : S tr in g
ф а м и л и я : S tr in g
д о л ж н о с т ь : S tr in g
g e tP h o to ( p :P h o to )
g e tC o n ta c tIn f o r m ( )
g e tP e r s o n a lR e c o r d s ( )
С о т р у д н и к
А т р и б у т ы
К л а с с
З а в и с и м о с т ь
К о м п о з и ц и я
О г р а н и ч е н и е
И м я
а с с о ц и а ц и и
*
И н т е р ф е й с
IS e c u r e In fo r m a t io n
И м я к о н ц а
а с с о ц и а ц и и
О б о б щ е н и е
К о м п а н и я
а д р е с : S tr in g
т е л е ф о н :
N u m b e r
О ф и с
н а з в а н и е : S tr in g
О т д е л
{ s u b s e t}
*
* *
11 . . *
1 . . *1 . . **
0 . . 1
С о т р у д н и к М е н е д ж е р
Ш т а б -к в а р т и р а
а д р е с : S tr in g
т е л е ф о н :
N u m b e r
К о н т а к т н а я
И н ф о р м а ц и я
и с т о р и я Р а б о т ы : S tr in g
з а р п л а т а : C u r e n c y
П е р с о н а л ь н о е Д е л о
Варианты графического изображения
класса на диаграмме классов
И м я к л а с с а
И м я к л а с с а
а т р и б у т ы к л а с с а
о п е р а ц и и к л а с с а
И м я к л а с с а
о п е р а ц и и к л а с с а
И м я к л а с с а
О п е р а ц и и
+ o r ig in : P o in t
+ m o v e ( p :P o in t)
+ r e s iz e ( s :S c a le )
+ d is p ly ( )
# in v a lid a te R e g io n ( )
S h a p e
R e s p o n s ib ilitie s
- - m a n a g e s h a p e s ta te
- - h a n d le b a s ic s h a p e
tr a n s f o r m a tio n s
А т р и б у т ы
И м я к л а с с а
Д о п о л н и т е л ь н а я
с е к ц и я
В и д и м о с т ь
С и г н а т у р а
о п е р а ц и и
Разновидности классов
Абстрактный (abstract) класс не имеет экземпляров или
объектов, для обозначения его имени используется
наклонный шрифт (курсив)
Активный класс (active class) – класс, каждый экземпляр
которого имеет свою собственную нить управления
Пассивный класс (passive class) – класс, каждый экземпляр
которого выполняется в контексте некоторого другого
объекта
Квалифицированное имя (qualified name) используется для
того, чтобы явно указать, к какому пакету относится тот или
иной класс. Для этого применяется специальный символ в
качестве разделителя имени – двойное двоеточие “::”
Имя класса без символа разделителя называется простым
именем класса
И м я к л а с с а
Атрибут (attribute) класса
– служит для представления отдельной структурной
характеристики или свойства, которое является общим для
всех объектов данного класса
<атрибут>::= [<видимость>] [‘/’] <имя> [‘:’
<тип атрибута>] [‘[‘<кратность>‘]’]
[‘=’ <значение по умолчанию>] [‘{‘<модификатор
атрибута> [‘,’ <модификатор атрибута>]* ’}’]
Где:
<видимость>::= ‘+’ | ‘–‘ | ‘#’ | ‘~’.
видимость (visibility) может принимать одно из 4-х
возможных значений и отображаться либо посредством
специального символа, либо соответствующего ключевого
слова
Вид видимости
+ public (общедоступный). Общедоступный элемент является
видимым всеми элементами, который имеют доступ к
содержимому пространства имен, который им владеет.
- private (закрытый). Закрытый элемент является видимым
только внутри пространства имен, который им владеет.
# protected (защищенный). Защищенный элемент является
видимым для элементов, которые имеют отношение
обобщения с пространством имен, который им владеет.
~ package (пакет). Элемент, помеченный как имеющий
пакетную видимость, является видимым всеми элементами в
ближайшем охватывающем пакете в предположении. За
пределами ближайшего охватывающего пакета элемент,
помеченный как имеющий пакетную видимость, не является
видимым.
Проблема интерпретации видимости
в языка UML
«Ничто в языке UML не определяется так просто, и не
интерпретируется так сложно, как видимость» (Мартин Фаулер)
В С++ видимость «friend» (дружественная) обладает полным
доступом ко всем элементам класса
«…в С++ друзья прикасаются к закрытым частям друг друга»
В Java видимость «package» (пакетная) обладает полным доступом
ко всем классам данного пакета
В Java разрешается помечать классы как:
общедоступные – элементы общедоступного класса могут
использоваться любым классом, который импортирует пакет,
содержащий исходный класс
пакетные – элементы пакетного класса могут использоваться
только классами данного пакета
Элементы записи атрибута
“/” означает, что атрибут является производным (derive).
Значение производного атрибута может быть вычислено на
основе значений других атрибутов этого или других классов.
Поэтому данный атрибут называют иногда вычислимым. При
использовании производных атрибутов разработчик должен
явно указать процедуру или операцию для вычисления их
значений.
<имя> (name) представляет собой строку текста, которая
используется в качестве идентификатора соответствующего
атрибута и поэтому должна быть уникальной в пределах
данного класса. Имя атрибута является единственным
обязательным элементом в обозначении атрибута, должно
начинаться со срочной (малой) буквы и, как правило, не
должно содержать пробелов.
Элементы записи атрибута
<тип атрибута> (attribute type) есть имя классификатора,
который является типом данного атрибута. Тип атрибута
представляет собой имя некоторого типа данных, определенного
или в пакете Типу атрибута должно предшествовать двоеточие
<кратность> (multiplicity) атрибута характеризует общее
количество конкретных значений для атрибута, которые могут
быть заданы для объектов данного класса
<значение по умолчанию> (default) – некоторое выражение,
которое служит для задания начального значения или значений
данного атрибута в момент создания отдельного экземпляра
соответствующего класса. Конкретное значение по умолчанию
должно соответствовать типу данного атрибута. Если этот терм
не указан, то значение атрибута на момент создания нового
экземпляра класса не определено.
Модификатор атрибута
<модификатор атрибута> (attribute modifier)
представляет собой текстовое выражение, которое
придает дополнительную семантику данному атрибуту.
При этом набор возможных модификаторов атрибутов в
языке UML 2.х фиксирован и может быть представлен в
следующем виде (БНФ):
<модификатор атрибута>::= ‘readOnly’ | ‘union’ | ‘subsets‘
<имя атрибута> | ‘redefines’ <имя атрибута> | ‘ordered’ |
‘unique’ | <ограничение атрибута>.
Значения модификатора атрибута
readOnly – атрибут является только для чтения
union – атрибут является производным объединением его
подмножеств
subsets <имя атрибута> – атрибут является собственным
подмножеством атрибута с именем <имя атрибута>
redefines <имя атрибута> – атрибут переопределяет
некоторый наследуемый атрибут с именем <имя
атрибута>
Значения модификатора атрибута
ordered – значения атрибута являются упорядоченными. Этот
порядок означает, что существует отображение из множества
положительных целых чисел в элементы этой коллекции
значений. Если атрибут не является многозначным, то это
значение не имеет семантического эффекта. При отсутствии
этого модификатора атрибут специфицируется как
неупорядоченный.
unique – значения многозначного атрибута не могут иметь
дубликатов, т.е. повторяться. Предполагается, что кратность
соответствующего атрибута должна быть больше 1. Если
атрибут не является многозначным, то значение unique не
имеет семантического эффекта.
<ограничение атрибута> Выражение, которое
специфицирует некоторое ограничение, применяемое к
данному атрибуту
Кратность
Кратность (multiplicity) является спецификацией
допустимой мощности множества при инстанцировании
соответствующего элемента модели
Спецификация кратности в нотации БНФ имеет следующий
формат:
<кратность> ::= <диапазон-кратности> [ ‘{‘ <указатель-
упорядоченности> [‘,’ <указатель-уникальности>] ‘}’ ]
<диапазон-кратности> ::= [<нижняя-граница>‘..’ ] <верхняя-
граница>
<нижняя-граница> ::= <целое число> | <спецификация
значения>
<верхняя-граница> ::= ‘*’ | <спецификация значения>
<указатель-упорядоченности> ::= ‘ordered’ | ‘unordered’
<указатель-уникальности> ::= ‘unique’ | ‘nonunique’
Примеры записи атрибутов
+ имяСотрудника : String {readOnly}
~ датаРождения : Data {readOnly}
# /возрастСотрудника : Integer
+ номерТелефона : Integer [1..*] {unique}
– заработнаяПлата : Currency = 500.00
Операции класса
Операция (operation) класса служит для представления
отдельной характеристики поведения, которая является
общей для всех объектов данного класса
Общий формат записи отдельной операции класса
следующий (БНФ):
<операция>::=[<видимость>] <имя операции> ‘(‘ [<список
параметров>] ‘)’ [‘:’ [<тип возвращаемого результата>] ‘{‘
<свойство операции> [‘,’ <свойство операции>]* ‘}’]
Где:
<видимость> ::= ‘+’ | ‘-‘ | ‘#’ | ‘~’
<имя операции> (operation name) представляет собой строку
текста, которая используется в качестве идентификатора
соответствующей операции и поэтому должна быть
уникальной для каждой операции данного класса
Формат записи операции класса
<список параметров> (parameter list) представляет собой
перечень разделенных запятыми формальных параметров
операции и имеет следующий общий формат записи
(БНФ):
<список параметров>::= <параметр> [‘,’<параметр>]*.
<параметр>::= [<направление>] <имя параметра> ‘:’
<выражение типа> [‘[‘<кратность>’]’] [‘=’ <значение по
умолчанию>] [‘{‘ <свойство параметра > [‘,’ <свойство
параметра>]* ‘}’]
<тип возвращаемого результата> (return type)
специфицирует тип значения, возвращаемого данной
операцией
Параметры операции
Параметр (parameter) является спецификацией аргумента,
который используется при выполнении операции или при
вызове характеристики поведения
<направление>::= ‘in’ | ‘out’ | ‘inout’| ‘return‘. Если оно не
указано, то по умолчанию принимается значение “in”.
in – указывает на то, что значения этого параметра передаются в
операцию вызывающим объектом.
inout – указывает на то, что значения этого параметра
передаются в операцию вызывающим объектом и затем обратно
вызывающему объекту после окончания выполнения операции.
out – указывает на то, что значения этого параметра передаются
вызывающему объекту после окончания выполнения операции.
return – указывает на то, что значения этого параметра
передаются в качестве возвращаемых значений вызывающему
объекту после окончания выполнения операции.
Параметры операции
<имя параметра> (parameter name) представляет собой
идентификатор формального параметра, при записи
которого необходимо следовать правилам задания имен
атрибутов
<выражение типа> (type expression) является
спецификацией типа данных для возможных значений
соответствующего формального параметра. Этот терм
аналогичен рассмотренному выше терму <тип
атрибута>для атрибутов классов
Параметры операции
<кратность> (multiplicity) характеризует общее количество
конкретных параметров с данным именем, которые могут
принадлежать тому или иному объекту данного класса
<значение по умолчанию> (default) представляет собой
некоторое выражение, которое специфицирует конкретное
значение по умолчанию для данного формального
параметра.
<свойство параметра> (parameter property) указывает
дополнительные свойства значений данного формального
параметра. В качестве значений свойств параметра могут
быть использованы модификаторы атрибутов
Свойства операций
redefines <имя операции> – данная операция
переопределяет некоторую наследуемую операцию с
именем <имя операции>
query – данная операция не изменяет состояния
моделируемой системы и, соответственно, не имеет
побочного эффекта
ordered – значения возвращаемого параметра являются
упорядоченными Предполагается, что кратность данного
возвращаемого параметра должна быть больше 1
unique – значения возвращаемого параметра не могут
повторяться. Предполагается, что кратность данного
возвращаемого параметра должна быть больше 1.
<ограничение> – выражение, которое специфицирует
некоторое ограничение, применяемое к данной операции
Предусловие (precondition) операции
– определяет условие, которое должно быть истинным, когда
эта операция вызывается
Постусловие (postcondition) операции
– определяет условие, которое должно быть истинным, когда
вызов операции успешно завершился, в предположении, что
все предусловия были удовлетворены
Примеры записи операций:
+добавить(in номерТелефона : Integer [*] {unique})
–изменить(in заработнаяПлата : Currency)
+создать() : Boolean
toString(return : String)
toString( ) : String
Отношения на диаграмме классов
Ассоциация
Ассоциация (association) – произвольное отношение или
взаимосвязь между классами
Имя конца ассоциации специфицирует роль (role), которую играет
класс, расположенный на соответствующем конце рассматриваемой
ассоциации
Видимость конца ассоциации специфицирует возможность доступа
к соответствующему концу ассоциации с других ее концов
Кратность конца ассоциации специфицирует возможное
количество экземпляров соответствующего класса, которое может
соотноситься с одним экземпляром класса на другом конце этой
ассоциации
Символ наличия навигации (navigable) изображается с помощью
простой стрелки в форме буквы «V» на конце ассоциации
Символ отсутствия навигации (non navigable) изображается с
помощью буквы «X» на линии у конца ассоциации
Строка свойство (property string)
{subset <имя элемента>} – конец ассоциации представляет собой
некоторое подмножество <имя элемента>, в качестве которого
может выступать имя конца ассоциации или атрибута класса
Строка свойство (property string)
{redefined <имя конца ассоциации>} – конец ассоциации
переопределяет другой конец ассоциации с именем <имя конца
ассоциации>
{union} – конец ассоциации является производным и определяется
посредством объединения своих подмножеств
{ordered} – конец ассоциации представляет собой некоторое
упорядоченное множество
{bag} – конец ассоциации представляет собой мультимножество или
совокупность, в которой допускается представлять один и тот же
элемент более одного раза
{sequence} или {seq} – конец ассоциации представляет собой
некоторую последовательность или упорядоченное
мультимножество
Ассоциация с навигацией и эквивалентное
ему представление класса с атрибутом
М н о г о у г о л ь н и к Л и н и я
С о д е р ж и т
1 3 ..*
+ с т о р о н а
М н о г о у г о л ь н и к
+ с т о р о н а : Л и н и я [3 ..* ]
Варианты изображения навигации и
кратности у концов ассоциации
1 ..5
A B
C D
E F
G H
I J
2 ..3
1 ..5 2 ..3
1 ..5 2 ..3
1 ..5 2 ..3
1 ..5 2 ..3
a b
c d
e f
g h
i j
X X
X
Исключающая ассоциация между тремя
классами
С ч е т в б а н к е
Ю р и д и ч е с к о е
л и ц о
Ф и з и ч е с к о е
л и ц о
1 ..*
1
{ x o r }
1
И м е е т
И м е е т
1 ..*
{ o r d e r e d }
{ o r d e r e d }
Пример тернарной ассоциации
Пример 4-арной ассоциации
Г о д Д а т а
Ф у т б о л ь н а я
к о м а н д а
* *
+ с е з о н + в с т р е ч а
+ с о п е р н и к
{ o r d e r e d } { o r d e r e d }
И г р а
Ф у т б о л ь н а я
к о м а н д а
+ с о п е р н и к
1
1
Ассоциация класс (association class)
– элемент модели, который имеет свойства как ассоциации,
так и класса, и предназначенный для спецификации
дополнительных свойств ассоциации в форме атрибутов и,
возможно, операций класса.
Ф у т б о л ь н а я
к о м а н д а
+ с о п е р н и к - 2
Ф у т б о л ь н а я
к о м а н д а
+ с о п е р н и к - 1
11
+ в с т р е ч а : Д а т а
+ с е з о н : Г о д
+ м е с т о : S tr in g
+ р е з у л ь т а т : In te g e r [2 ] { o r d e r e d }
И г р а
Примеры ассоциации класса и
рефлексивной ассоциации
Обобщение (generalization)
– таксономическое отношение между более общим
классификатором (родителем или предком) и более
специальным классификатором (дочерним или потомком)
К л а с с - п р е д о к
К л а с с - п о т о м о к
+ id { r e d e f in e s и м я }
+ в ы с о т а = 7
/ш и р и н а
К в а д р а т
П р я м о у г о л ь н и к
+ и м я : S tr in g
+ ц в е т З а л и в к и : C o lo r
+ в ы с о т а : In te r g e r = 5
+ ш и р и н а : In te r g e r
/п л о щ а д ь : In te r g e r { r e a d O n ly }
( а ) ( б )
Примеры отношения обобщения
Геометрическая
фигура
Прямоугольник Окружность Треугольник
Геометрическая
фигура
Прямоугольник Окружность Треугольник
Множественное наследование – в языке
UML разрешено
Множество обобщения (generalization set)
– элемент модели, экземпляры которого определяют
коллекции подмножеств отношения обобщения
{complete, disjoint} — означает, что данное множество
обобщения является покрывающим и его специальные
классы не имеют общих экземпляров
{incomplete, disjoint} — означает, что данное множество
обобщения не является покрывающим и его специальные
классы не имеют общих экземпляров (предполагается по
умолчанию)
{complete, overlapping} — означает, что данное множество
обобщения является покрывающим и его специальные
классы имеют общие экземпляры
{incomplete, overlapping} — означает, что данное множество
обобщения не является покрывающим и его специальные
классы имеют общие экземпляры
По умолчанию - {incomplete, disjoint}
Примеры ограничений на множество
обобщения
Ч е л о в е к
П р о г р а м м и с т
М у ж ч и н а
Ж е н щ и н а
{ c o m p le te , d is jo in t} { in c o m p le te , o v e r la p p in g }
Р у к о в о д и т е л ь
П р о е к т а
Б и з н е с - а н а л и т и к
Агрегация (aggregation)
– направленное отношение между двумя классами,
предназначенное для представления ситуации, когда один из
классов представляет собой некоторую сущность, которая
включает в себя в качестве составных частей другие
сущности
Класс-частьКласс-контейнер
Пример отношения агрегации
Персональный
компьютер
Системный
блок
Монитор Клавиатура Мышь
Композиция (composition)
или композитная агрегация предназначена для
спецификации более сильной формы отношения "часть-
целое", при которой с уничтожением объекта класса-
контейнера уничтожаются и все объекты, являющимися его
составными частями.
Класс-частьКласс-композит
Пример отношения композиции
Заголовок
Полоса
прокрутки
Рабочая
область
Главное
меню
Окнопрограммы
1
1 111
1 12
Варианты обозначения композиции
Интерфейс (interface)
– вид класса, который представляет собой объявление
множества общедоступных характеристик и обязанностей.
Б е с к о н т а к т н ы й Д а т ч и к
IД а т ч и к
С и г н а л Т р е в о г и
п р е д о с т а в л я е м ы й
и н т е р ф е й с
т р е б у е м ы й
и н т е р ф е й с
С и г н а л Т р е в о г и Б е с к о н т а к т н ы й Д а т ч и к
< < in te r f a c e > >
IД а т ч и к
в к л ю ч и т ь ( )
п р о ч и т а т ь ( )
Управляющий класс отвечает за
координацию действий других
классов. Этому классу посылают
мало сообщений, а он рассылает
много сообщений
Граничный класс располагается
на границе системы с внешней
средой.
Класс-сущность содержит
информацию, которая хранится
постоянно и не уничтожается с
выключением системы
UML Profile for Software Development
Processes
Квалификатор (qualifier)
Квалификатор (qualifier) объявляет разбиение множества
ассоциированных экземпляров относительно экземпляра на
квалифицированном конце ассоциации
Б а н к
н о м е р С ч е т а
Ч е л о в е к
Ш а х м а т н а я д о с к а
г о р и з о н т а л ь : Г о р и з о н т а л ь
в е р т и к а л ь : В е р т и к а л ь
К в а д р а т
*
0 ..1
1
1
Шаблон (template)
– классификатор, который в своем описании имеет несколько
формальных параметров
( а ) ( б )
С п и с о к А д р е с о в
И м я ш а б л о н а
С п и с о к а т р и б у т о в
ш а б л о н а
С п и с о к о п е р а ц и й
ш а б л о н а
С п и с о к ф о р м а л ь н ы х
п а р а м е т р о в ш а б л о н а
С в я з н ы й С п и с о к
э л е м е н т : T [k ]
T : S tr in g
k : In te g e r = 2
< < b in d > >
< T - > А д р е с , k - > 4 >
Самостоятельное задание №2
Выполнить текущее тестирование: вопросы 12-18
Разработать диаграмму классов для ATM
Изобразить следующие классы: CardReader, Screen,
Keyboard, Printer, CashDispenser, ATMController,
BankController, Transaction, IATMBank.
Специфицировать для этих классов атрибуты и
операции
Изобразить отношения между классами

More Related Content

What's hot

Component diagram
Component diagramComponent diagram
Component diagramaepetelin
 
Лекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеЛекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеmetaform
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Java. Generic - шаблонные типы.
Java.  Generic - шаблонные типы.Java.  Generic - шаблонные типы.
Java. Generic - шаблонные типы.Unguryan Vitaliy
 
Collaboration diagram
Collaboration diagramCollaboration diagram
Collaboration diagramaepetelin
 
C++ осень 2013 лекция 5
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5Technopark
 
Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...metaform
 
Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Unguryan Vitaliy
 
C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3Technopark
 
раздел 4 проектирование и использование баз данных
раздел 4  проектирование и использование баз данныхраздел 4  проектирование и использование баз данных
раздел 4 проектирование и использование баз данныхtatianabtt
 
Activity diagram
Activity diagramActivity diagram
Activity diagramaepetelin
 
Базы данных лекция №5
Базы данных лекция №5Базы данных лекция №5
Базы данных лекция №5Vitaliy Pak
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2Technopark
 
C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8Technopark
 
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документированиеСтажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование7bits
 
Шаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингШаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингSergey Nemchinsky
 

What's hot (18)

Component diagram
Component diagramComponent diagram
Component diagram
 
Лекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеЛекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследование
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Java. Generic - шаблонные типы.
Java.  Generic - шаблонные типы.Java.  Generic - шаблонные типы.
Java. Generic - шаблонные типы.
 
Collaboration diagram
Collaboration diagramCollaboration diagram
Collaboration diagram
 
C++ осень 2013 лекция 5
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5
 
Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...
 
Uml
UmlUml
Uml
 
Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.
 
C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3
 
раздел 4 проектирование и использование баз данных
раздел 4  проектирование и использование баз данныхраздел 4  проектирование и использование баз данных
раздел 4 проектирование и использование баз данных
 
Activity diagram
Activity diagramActivity diagram
Activity diagram
 
Базы данных лекция №5
Базы данных лекция №5Базы данных лекция №5
Базы данных лекция №5
 
С учебы
С учебыС учебы
С учебы
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2
 
C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8
 
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документированиеСтажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование
 
Шаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингШаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. Рефакторинг
 

Similar to Диаграмма классов

C++ весна 2014 лекция 5
C++ весна 2014 лекция 5C++ весна 2014 лекция 5
C++ весна 2014 лекция 5Technopark
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Sergey Nemchinsky
 
Погружение в Dart
Погружение в DartПогружение в Dart
Погружение в DartSergey Penkovsky
 
C++ осень 2012 лекция 2
C++ осень 2012 лекция 2C++ осень 2012 лекция 2
C++ осень 2012 лекция 2Technopark
 
презентация 4. введение в css
презентация 4. введение в cssпрезентация 4. введение в css
презентация 4. введение в cssRusov1
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013ScalaNsk
 
Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)Alex Ott
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9Technopark
 
углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]Technopark
 
C++ осень 2012 лекция 3
C++ осень 2012 лекция 3C++ осень 2012 лекция 3
C++ осень 2012 лекция 3Technopark
 
Типы данных
Типы данныхТипы данных
Типы данныхMonsterXX
 
ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...
ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...
ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...ITMO University
 
Zyabrev -
Zyabrev - Zyabrev -
Zyabrev - Anna
 
введение
введениевведение
введениеanxesenpa
 

Similar to Диаграмма классов (20)

Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
C++ весна 2014 лекция 5
C++ весна 2014 лекция 5C++ весна 2014 лекция 5
C++ весна 2014 лекция 5
 
Классы и объекты С#
Классы и объекты С#Классы и объекты С#
Классы и объекты С#
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"
 
Погружение в Dart
Погружение в DartПогружение в Dart
Погружение в Dart
 
C++ осень 2012 лекция 2
C++ осень 2012 лекция 2C++ осень 2012 лекция 2
C++ осень 2012 лекция 2
 
презентация 4. введение в css
презентация 4. введение в cssпрезентация 4. введение в css
презентация 4. введение в css
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
Uml Glossary
Uml GlossaryUml Glossary
Uml Glossary
 
Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9
 
Лекция 2. UML (static logical model)
Лекция 2. UML (static logical model)Лекция 2. UML (static logical model)
Лекция 2. UML (static logical model)
 
углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]
 
C++ осень 2012 лекция 3
C++ осень 2012 лекция 3C++ осень 2012 лекция 3
C++ осень 2012 лекция 3
 
лек5 6
лек5 6лек5 6
лек5 6
 
Типы данных
Типы данныхТипы данных
Типы данных
 
ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...
ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...
ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...
 
Zyabrev -
Zyabrev - Zyabrev -
Zyabrev -
 
введение
введениевведение
введение
 

More from DEVTYPE

Рукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреРукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреDEVTYPE
 
1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойстваDEVTYPE
 
1.3 Описательная статистика
1.3 Описательная статистика1.3 Описательная статистика
1.3 Описательная статистикаDEVTYPE
 
1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространствоDEVTYPE
 
Continuity and Uniform Continuity
Continuity and Uniform ContinuityContinuity and Uniform Continuity
Continuity and Uniform ContinuityDEVTYPE
 
Coin Change Problem
Coin Change ProblemCoin Change Problem
Coin Change ProblemDEVTYPE
 
Recurrences
RecurrencesRecurrences
RecurrencesDEVTYPE
 
D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применениеDEVTYPE
 
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыДиаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыDEVTYPE
 
ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ DEVTYPE
 
Скорость роста функций
Скорость роста функцийСкорость роста функций
Скорость роста функцийDEVTYPE
 
Asymptotic Growth of Functions
Asymptotic Growth of FunctionsAsymptotic Growth of Functions
Asymptotic Growth of FunctionsDEVTYPE
 
Кучи
КучиКучи
КучиDEVTYPE
 
Кодирование Хаффмана
Кодирование ХаффманаКодирование Хаффмана
Кодирование ХаффманаDEVTYPE
 
Жадные алгоритмы: введение
Жадные алгоритмы: введениеЖадные алгоритмы: введение
Жадные алгоритмы: введениеDEVTYPE
 
Разбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиРазбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиDEVTYPE
 
Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"DEVTYPE
 
Наибольший общий делитель
Наибольший общий делительНаибольший общий делитель
Наибольший общий делительDEVTYPE
 
Числа Фибоначчи
Числа ФибоначчиЧисла Фибоначчи
Числа ФибоначчиDEVTYPE
 
О-символика
О-символикаО-символика
О-символикаDEVTYPE
 

More from DEVTYPE (20)

Рукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреРукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебре
 
1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства
 
1.3 Описательная статистика
1.3 Описательная статистика1.3 Описательная статистика
1.3 Описательная статистика
 
1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство
 
Continuity and Uniform Continuity
Continuity and Uniform ContinuityContinuity and Uniform Continuity
Continuity and Uniform Continuity
 
Coin Change Problem
Coin Change ProblemCoin Change Problem
Coin Change Problem
 
Recurrences
RecurrencesRecurrences
Recurrences
 
D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применение
 
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыДиаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
 
ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ
 
Скорость роста функций
Скорость роста функцийСкорость роста функций
Скорость роста функций
 
Asymptotic Growth of Functions
Asymptotic Growth of FunctionsAsymptotic Growth of Functions
Asymptotic Growth of Functions
 
Кучи
КучиКучи
Кучи
 
Кодирование Хаффмана
Кодирование ХаффманаКодирование Хаффмана
Кодирование Хаффмана
 
Жадные алгоритмы: введение
Жадные алгоритмы: введениеЖадные алгоритмы: введение
Жадные алгоритмы: введение
 
Разбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиРазбор задач по дискретной вероятности
Разбор задач по дискретной вероятности
 
Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"
 
Наибольший общий делитель
Наибольший общий делительНаибольший общий делитель
Наибольший общий делитель
 
Числа Фибоначчи
Числа ФибоначчиЧисла Фибоначчи
Числа Фибоначчи
 
О-символика
О-символикаО-символика
О-символика
 

Диаграмма классов

  • 1. Учебный курс Язык UML в анализе и проектировании программных систем и бизнес-процессов Лекция 3 Диаграмма классов языка UML 2 Автор: Леоненков Александр Васильевич кандидат технических наук, старший научный сотрудник
  • 2. Проблема: Как представить архитектуру программной системы? Графический интерфейс пользователя Модели бизнес объектов Базы данных
  • 3. Архитектура программной системы в нотации UML Уровень базы данных Промежуточный уровень Уровень GUI ServiceAgent purchase(customer, product, items) Customer name : String Address : String save() Customer name : String Address : String save() getName() updateName() Customer Order Line ** Product ** Order Line items : Product getName() updateName() Observer update() Order date : Date Product name : String price : Currency getName() updateName() Sales product : Product
  • 4. Диаграмма классов — основная логическая модель проектируемой системы Диаграмма классов (class diagram) — диаграмма, предназначенная для представления модели статической структуры программной системы в терминологии классов объектно-ориентированного программирования Диаграмма классов представляет собой граф, вершинами или узлами которого являются элементы типа “классификатор”, которые связаны различными типами структурных отношений Классификатор (classifier) – специальное понятие, предназначенное для классификации экземпляров, которые имеют общие характеристики
  • 5. Характеристики классификатора Характеристика (feature) – понятие, предназначенное для спецификации особенностей структуры и поведения экземпляров классификаторов Структурная характеристика (structural feature) является типизированной характеристикой классификатора, которая специфицирует структуру его экземпляров Характеристика поведения (behavioral feature) является характеристикой классификатора, которая специфицирует некоторый аспект поведения его экземпляров Класс (class) – элемент модели, который описывает множество объектов, имеющих одинаковые спецификации характеристик, ограничений и семантики
  • 6. Основные обозначения на диаграмме классов М е с т о п о л о ж е н и е 1 О п е р а ц и и К р а т н о с т ь А с с о ц и а ц и я и м я : S tr in g ф а м и л и я : S tr in g д о л ж н о с т ь : S tr in g g e tP h o to ( p :P h o to ) g e tC o n ta c tIn f o r m ( ) g e tP e r s o n a lR e c o r d s ( ) С о т р у д н и к А т р и б у т ы К л а с с З а в и с и м о с т ь К о м п о з и ц и я О г р а н и ч е н и е И м я а с с о ц и а ц и и * И н т е р ф е й с IS e c u r e In fo r m a t io n И м я к о н ц а а с с о ц и а ц и и О б о б щ е н и е К о м п а н и я а д р е с : S tr in g т е л е ф о н : N u m b e r О ф и с н а з в а н и е : S tr in g О т д е л { s u b s e t} * * * 11 . . * 1 . . *1 . . ** 0 . . 1 С о т р у д н и к М е н е д ж е р Ш т а б -к в а р т и р а а д р е с : S tr in g т е л е ф о н : N u m b e r К о н т а к т н а я И н ф о р м а ц и я и с т о р и я Р а б о т ы : S tr in g з а р п л а т а : C u r e n c y П е р с о н а л ь н о е Д е л о
  • 7. Варианты графического изображения класса на диаграмме классов И м я к л а с с а И м я к л а с с а а т р и б у т ы к л а с с а о п е р а ц и и к л а с с а И м я к л а с с а о п е р а ц и и к л а с с а И м я к л а с с а О п е р а ц и и + o r ig in : P o in t + m o v e ( p :P o in t) + r e s iz e ( s :S c a le ) + d is p ly ( ) # in v a lid a te R e g io n ( ) S h a p e R e s p o n s ib ilitie s - - m a n a g e s h a p e s ta te - - h a n d le b a s ic s h a p e tr a n s f o r m a tio n s А т р и б у т ы И м я к л а с с а Д о п о л н и т е л ь н а я с е к ц и я В и д и м о с т ь С и г н а т у р а о п е р а ц и и
  • 8. Разновидности классов Абстрактный (abstract) класс не имеет экземпляров или объектов, для обозначения его имени используется наклонный шрифт (курсив) Активный класс (active class) – класс, каждый экземпляр которого имеет свою собственную нить управления Пассивный класс (passive class) – класс, каждый экземпляр которого выполняется в контексте некоторого другого объекта Квалифицированное имя (qualified name) используется для того, чтобы явно указать, к какому пакету относится тот или иной класс. Для этого применяется специальный символ в качестве разделителя имени – двойное двоеточие “::” Имя класса без символа разделителя называется простым именем класса И м я к л а с с а
  • 9. Атрибут (attribute) класса – служит для представления отдельной структурной характеристики или свойства, которое является общим для всех объектов данного класса <атрибут>::= [<видимость>] [‘/’] <имя> [‘:’ <тип атрибута>] [‘[‘<кратность>‘]’] [‘=’ <значение по умолчанию>] [‘{‘<модификатор атрибута> [‘,’ <модификатор атрибута>]* ’}’] Где: <видимость>::= ‘+’ | ‘–‘ | ‘#’ | ‘~’. видимость (visibility) может принимать одно из 4-х возможных значений и отображаться либо посредством специального символа, либо соответствующего ключевого слова
  • 10. Вид видимости + public (общедоступный). Общедоступный элемент является видимым всеми элементами, который имеют доступ к содержимому пространства имен, который им владеет. - private (закрытый). Закрытый элемент является видимым только внутри пространства имен, который им владеет. # protected (защищенный). Защищенный элемент является видимым для элементов, которые имеют отношение обобщения с пространством имен, который им владеет. ~ package (пакет). Элемент, помеченный как имеющий пакетную видимость, является видимым всеми элементами в ближайшем охватывающем пакете в предположении. За пределами ближайшего охватывающего пакета элемент, помеченный как имеющий пакетную видимость, не является видимым.
  • 11. Проблема интерпретации видимости в языка UML «Ничто в языке UML не определяется так просто, и не интерпретируется так сложно, как видимость» (Мартин Фаулер) В С++ видимость «friend» (дружественная) обладает полным доступом ко всем элементам класса «…в С++ друзья прикасаются к закрытым частям друг друга» В Java видимость «package» (пакетная) обладает полным доступом ко всем классам данного пакета В Java разрешается помечать классы как: общедоступные – элементы общедоступного класса могут использоваться любым классом, который импортирует пакет, содержащий исходный класс пакетные – элементы пакетного класса могут использоваться только классами данного пакета
  • 12. Элементы записи атрибута “/” означает, что атрибут является производным (derive). Значение производного атрибута может быть вычислено на основе значений других атрибутов этого или других классов. Поэтому данный атрибут называют иногда вычислимым. При использовании производных атрибутов разработчик должен явно указать процедуру или операцию для вычисления их значений. <имя> (name) представляет собой строку текста, которая используется в качестве идентификатора соответствующего атрибута и поэтому должна быть уникальной в пределах данного класса. Имя атрибута является единственным обязательным элементом в обозначении атрибута, должно начинаться со срочной (малой) буквы и, как правило, не должно содержать пробелов.
  • 13. Элементы записи атрибута <тип атрибута> (attribute type) есть имя классификатора, который является типом данного атрибута. Тип атрибута представляет собой имя некоторого типа данных, определенного или в пакете Типу атрибута должно предшествовать двоеточие <кратность> (multiplicity) атрибута характеризует общее количество конкретных значений для атрибута, которые могут быть заданы для объектов данного класса <значение по умолчанию> (default) – некоторое выражение, которое служит для задания начального значения или значений данного атрибута в момент создания отдельного экземпляра соответствующего класса. Конкретное значение по умолчанию должно соответствовать типу данного атрибута. Если этот терм не указан, то значение атрибута на момент создания нового экземпляра класса не определено.
  • 14. Модификатор атрибута <модификатор атрибута> (attribute modifier) представляет собой текстовое выражение, которое придает дополнительную семантику данному атрибуту. При этом набор возможных модификаторов атрибутов в языке UML 2.х фиксирован и может быть представлен в следующем виде (БНФ): <модификатор атрибута>::= ‘readOnly’ | ‘union’ | ‘subsets‘ <имя атрибута> | ‘redefines’ <имя атрибута> | ‘ordered’ | ‘unique’ | <ограничение атрибута>.
  • 15. Значения модификатора атрибута readOnly – атрибут является только для чтения union – атрибут является производным объединением его подмножеств subsets <имя атрибута> – атрибут является собственным подмножеством атрибута с именем <имя атрибута> redefines <имя атрибута> – атрибут переопределяет некоторый наследуемый атрибут с именем <имя атрибута>
  • 16. Значения модификатора атрибута ordered – значения атрибута являются упорядоченными. Этот порядок означает, что существует отображение из множества положительных целых чисел в элементы этой коллекции значений. Если атрибут не является многозначным, то это значение не имеет семантического эффекта. При отсутствии этого модификатора атрибут специфицируется как неупорядоченный. unique – значения многозначного атрибута не могут иметь дубликатов, т.е. повторяться. Предполагается, что кратность соответствующего атрибута должна быть больше 1. Если атрибут не является многозначным, то значение unique не имеет семантического эффекта. <ограничение атрибута> Выражение, которое специфицирует некоторое ограничение, применяемое к данному атрибуту
  • 17. Кратность Кратность (multiplicity) является спецификацией допустимой мощности множества при инстанцировании соответствующего элемента модели Спецификация кратности в нотации БНФ имеет следующий формат: <кратность> ::= <диапазон-кратности> [ ‘{‘ <указатель- упорядоченности> [‘,’ <указатель-уникальности>] ‘}’ ] <диапазон-кратности> ::= [<нижняя-граница>‘..’ ] <верхняя- граница> <нижняя-граница> ::= <целое число> | <спецификация значения> <верхняя-граница> ::= ‘*’ | <спецификация значения> <указатель-упорядоченности> ::= ‘ordered’ | ‘unordered’ <указатель-уникальности> ::= ‘unique’ | ‘nonunique’
  • 18. Примеры записи атрибутов + имяСотрудника : String {readOnly} ~ датаРождения : Data {readOnly} # /возрастСотрудника : Integer + номерТелефона : Integer [1..*] {unique} – заработнаяПлата : Currency = 500.00
  • 19. Операции класса Операция (operation) класса служит для представления отдельной характеристики поведения, которая является общей для всех объектов данного класса Общий формат записи отдельной операции класса следующий (БНФ): <операция>::=[<видимость>] <имя операции> ‘(‘ [<список параметров>] ‘)’ [‘:’ [<тип возвращаемого результата>] ‘{‘ <свойство операции> [‘,’ <свойство операции>]* ‘}’] Где: <видимость> ::= ‘+’ | ‘-‘ | ‘#’ | ‘~’ <имя операции> (operation name) представляет собой строку текста, которая используется в качестве идентификатора соответствующей операции и поэтому должна быть уникальной для каждой операции данного класса
  • 20. Формат записи операции класса <список параметров> (parameter list) представляет собой перечень разделенных запятыми формальных параметров операции и имеет следующий общий формат записи (БНФ): <список параметров>::= <параметр> [‘,’<параметр>]*. <параметр>::= [<направление>] <имя параметра> ‘:’ <выражение типа> [‘[‘<кратность>’]’] [‘=’ <значение по умолчанию>] [‘{‘ <свойство параметра > [‘,’ <свойство параметра>]* ‘}’] <тип возвращаемого результата> (return type) специфицирует тип значения, возвращаемого данной операцией
  • 21. Параметры операции Параметр (parameter) является спецификацией аргумента, который используется при выполнении операции или при вызове характеристики поведения <направление>::= ‘in’ | ‘out’ | ‘inout’| ‘return‘. Если оно не указано, то по умолчанию принимается значение “in”. in – указывает на то, что значения этого параметра передаются в операцию вызывающим объектом. inout – указывает на то, что значения этого параметра передаются в операцию вызывающим объектом и затем обратно вызывающему объекту после окончания выполнения операции. out – указывает на то, что значения этого параметра передаются вызывающему объекту после окончания выполнения операции. return – указывает на то, что значения этого параметра передаются в качестве возвращаемых значений вызывающему объекту после окончания выполнения операции.
  • 22. Параметры операции <имя параметра> (parameter name) представляет собой идентификатор формального параметра, при записи которого необходимо следовать правилам задания имен атрибутов <выражение типа> (type expression) является спецификацией типа данных для возможных значений соответствующего формального параметра. Этот терм аналогичен рассмотренному выше терму <тип атрибута>для атрибутов классов
  • 23. Параметры операции <кратность> (multiplicity) характеризует общее количество конкретных параметров с данным именем, которые могут принадлежать тому или иному объекту данного класса <значение по умолчанию> (default) представляет собой некоторое выражение, которое специфицирует конкретное значение по умолчанию для данного формального параметра. <свойство параметра> (parameter property) указывает дополнительные свойства значений данного формального параметра. В качестве значений свойств параметра могут быть использованы модификаторы атрибутов
  • 24. Свойства операций redefines <имя операции> – данная операция переопределяет некоторую наследуемую операцию с именем <имя операции> query – данная операция не изменяет состояния моделируемой системы и, соответственно, не имеет побочного эффекта ordered – значения возвращаемого параметра являются упорядоченными Предполагается, что кратность данного возвращаемого параметра должна быть больше 1 unique – значения возвращаемого параметра не могут повторяться. Предполагается, что кратность данного возвращаемого параметра должна быть больше 1. <ограничение> – выражение, которое специфицирует некоторое ограничение, применяемое к данной операции
  • 25. Предусловие (precondition) операции – определяет условие, которое должно быть истинным, когда эта операция вызывается
  • 26. Постусловие (postcondition) операции – определяет условие, которое должно быть истинным, когда вызов операции успешно завершился, в предположении, что все предусловия были удовлетворены
  • 27. Примеры записи операций: +добавить(in номерТелефона : Integer [*] {unique}) –изменить(in заработнаяПлата : Currency) +создать() : Boolean toString(return : String) toString( ) : String
  • 29. Ассоциация Ассоциация (association) – произвольное отношение или взаимосвязь между классами Имя конца ассоциации специфицирует роль (role), которую играет класс, расположенный на соответствующем конце рассматриваемой ассоциации Видимость конца ассоциации специфицирует возможность доступа к соответствующему концу ассоциации с других ее концов Кратность конца ассоциации специфицирует возможное количество экземпляров соответствующего класса, которое может соотноситься с одним экземпляром класса на другом конце этой ассоциации Символ наличия навигации (navigable) изображается с помощью простой стрелки в форме буквы «V» на конце ассоциации Символ отсутствия навигации (non navigable) изображается с помощью буквы «X» на линии у конца ассоциации
  • 30. Строка свойство (property string) {subset <имя элемента>} – конец ассоциации представляет собой некоторое подмножество <имя элемента>, в качестве которого может выступать имя конца ассоциации или атрибута класса
  • 31. Строка свойство (property string) {redefined <имя конца ассоциации>} – конец ассоциации переопределяет другой конец ассоциации с именем <имя конца ассоциации> {union} – конец ассоциации является производным и определяется посредством объединения своих подмножеств {ordered} – конец ассоциации представляет собой некоторое упорядоченное множество {bag} – конец ассоциации представляет собой мультимножество или совокупность, в которой допускается представлять один и тот же элемент более одного раза {sequence} или {seq} – конец ассоциации представляет собой некоторую последовательность или упорядоченное мультимножество
  • 32. Ассоциация с навигацией и эквивалентное ему представление класса с атрибутом М н о г о у г о л ь н и к Л и н и я С о д е р ж и т 1 3 ..* + с т о р о н а М н о г о у г о л ь н и к + с т о р о н а : Л и н и я [3 ..* ]
  • 33. Варианты изображения навигации и кратности у концов ассоциации 1 ..5 A B C D E F G H I J 2 ..3 1 ..5 2 ..3 1 ..5 2 ..3 1 ..5 2 ..3 1 ..5 2 ..3 a b c d e f g h i j X X X
  • 34. Исключающая ассоциация между тремя классами С ч е т в б а н к е Ю р и д и ч е с к о е л и ц о Ф и з и ч е с к о е л и ц о 1 ..* 1 { x o r } 1 И м е е т И м е е т 1 ..* { o r d e r e d } { o r d e r e d }
  • 36. Пример 4-арной ассоциации Г о д Д а т а Ф у т б о л ь н а я к о м а н д а * * + с е з о н + в с т р е ч а + с о п е р н и к { o r d e r e d } { o r d e r e d } И г р а Ф у т б о л ь н а я к о м а н д а + с о п е р н и к 1 1
  • 37. Ассоциация класс (association class) – элемент модели, который имеет свойства как ассоциации, так и класса, и предназначенный для спецификации дополнительных свойств ассоциации в форме атрибутов и, возможно, операций класса. Ф у т б о л ь н а я к о м а н д а + с о п е р н и к - 2 Ф у т б о л ь н а я к о м а н д а + с о п е р н и к - 1 11 + в с т р е ч а : Д а т а + с е з о н : Г о д + м е с т о : S tr in g + р е з у л ь т а т : In te g e r [2 ] { o r d e r e d } И г р а
  • 38. Примеры ассоциации класса и рефлексивной ассоциации
  • 39. Обобщение (generalization) – таксономическое отношение между более общим классификатором (родителем или предком) и более специальным классификатором (дочерним или потомком) К л а с с - п р е д о к К л а с с - п о т о м о к + id { r e d e f in e s и м я } + в ы с о т а = 7 /ш и р и н а К в а д р а т П р я м о у г о л ь н и к + и м я : S tr in g + ц в е т З а л и в к и : C o lo r + в ы с о т а : In te r g e r = 5 + ш и р и н а : In te r g e r /п л о щ а д ь : In te r g e r { r e a d O n ly } ( а ) ( б )
  • 40. Примеры отношения обобщения Геометрическая фигура Прямоугольник Окружность Треугольник Геометрическая фигура Прямоугольник Окружность Треугольник
  • 41. Множественное наследование – в языке UML разрешено
  • 42. Множество обобщения (generalization set) – элемент модели, экземпляры которого определяют коллекции подмножеств отношения обобщения {complete, disjoint} — означает, что данное множество обобщения является покрывающим и его специальные классы не имеют общих экземпляров {incomplete, disjoint} — означает, что данное множество обобщения не является покрывающим и его специальные классы не имеют общих экземпляров (предполагается по умолчанию) {complete, overlapping} — означает, что данное множество обобщения является покрывающим и его специальные классы имеют общие экземпляры {incomplete, overlapping} — означает, что данное множество обобщения не является покрывающим и его специальные классы имеют общие экземпляры По умолчанию - {incomplete, disjoint}
  • 43. Примеры ограничений на множество обобщения Ч е л о в е к П р о г р а м м и с т М у ж ч и н а Ж е н щ и н а { c o m p le te , d is jo in t} { in c o m p le te , o v e r la p p in g } Р у к о в о д и т е л ь П р о е к т а Б и з н е с - а н а л и т и к
  • 44. Агрегация (aggregation) – направленное отношение между двумя классами, предназначенное для представления ситуации, когда один из классов представляет собой некоторую сущность, которая включает в себя в качестве составных частей другие сущности Класс-частьКласс-контейнер
  • 46. Композиция (composition) или композитная агрегация предназначена для спецификации более сильной формы отношения "часть- целое", при которой с уничтожением объекта класса- контейнера уничтожаются и все объекты, являющимися его составными частями. Класс-частьКласс-композит
  • 49. Интерфейс (interface) – вид класса, который представляет собой объявление множества общедоступных характеристик и обязанностей. Б е с к о н т а к т н ы й Д а т ч и к IД а т ч и к С и г н а л Т р е в о г и п р е д о с т а в л я е м ы й и н т е р ф е й с т р е б у е м ы й и н т е р ф е й с С и г н а л Т р е в о г и Б е с к о н т а к т н ы й Д а т ч и к < < in te r f a c e > > IД а т ч и к в к л ю ч и т ь ( ) п р о ч и т а т ь ( )
  • 50. Управляющий класс отвечает за координацию действий других классов. Этому классу посылают мало сообщений, а он рассылает много сообщений Граничный класс располагается на границе системы с внешней средой. Класс-сущность содержит информацию, которая хранится постоянно и не уничтожается с выключением системы UML Profile for Software Development Processes
  • 51. Квалификатор (qualifier) Квалификатор (qualifier) объявляет разбиение множества ассоциированных экземпляров относительно экземпляра на квалифицированном конце ассоциации Б а н к н о м е р С ч е т а Ч е л о в е к Ш а х м а т н а я д о с к а г о р и з о н т а л ь : Г о р и з о н т а л ь в е р т и к а л ь : В е р т и к а л ь К в а д р а т * 0 ..1 1 1
  • 52. Шаблон (template) – классификатор, который в своем описании имеет несколько формальных параметров ( а ) ( б ) С п и с о к А д р е с о в И м я ш а б л о н а С п и с о к а т р и б у т о в ш а б л о н а С п и с о к о п е р а ц и й ш а б л о н а С п и с о к ф о р м а л ь н ы х п а р а м е т р о в ш а б л о н а С в я з н ы й С п и с о к э л е м е н т : T [k ] T : S tr in g k : In te g e r = 2 < < b in d > > < T - > А д р е с , k - > 4 >
  • 53. Самостоятельное задание №2 Выполнить текущее тестирование: вопросы 12-18 Разработать диаграмму классов для ATM Изобразить следующие классы: CardReader, Screen, Keyboard, Printer, CashDispenser, ATMController, BankController, Transaction, IATMBank. Специфицировать для этих классов атрибуты и операции Изобразить отношения между классами