Моделирование и проектирование программного обеспечения Лекция 7. Статическое моделирование

advertisement
Моделирование и проектирование
программного обеспечения
Лекция 7.
Статическое моделирование
Статическое моделирование
• Разработка ПО начинается с базовой (скелет) структуры
приложения, на которую будет навешиваться все
остальное.
• Предполагается, что данная структура будет
относительно стабильной в течении всего жизненного
цикла разрабатываемого приложения.
• Обычно данная структура называется статической
моделью приложения.
• При статическом моделировании выявляются базовые
элементы – объекты, с их свойствами и взаимосвязями
между ними.
• Такое абстрагирование объектов из проблемной области
потребителя гарантирует стабильную структуру ПО.
Понятие статической модели
• Статическая модель подсистемы описывает
внутренний скелет, так как разработчик представляет
структуру или каркас того содержания, на который
внутренне накладывается динамическая модель.
• Для выполнения правильной разработки требуется
понимание сути того, чем именно являются сущности
проблемной области.
• Абстракции классов, составляющие статическую
модель представляют собой как основу объектноориентированного подхода, так и основу содержания
проблемной области.
Диаграмма классов
• Диаграмма классов является основным
представлением статической модели для
конкретного содержания, в котором находятся
индивидуальные объекты.
• Диаграмма классов в действительности ничего не
делает она предназначена только для
выявления (идентификации):
– сущностей, которые в конечном счете будут что-то
делать (ответственности за поведение)
– сущностей, которые будут поддерживать какую-либо
их работу (ответственности за знания и взаимосвязи).
Элементы определяемые в
диаграммах классов
• В диаграмме классов описываются следующие
элементы:
– Классы
– Ответственности
– Взаимосвязи
– Обобщения
• Диаграмма классов выявляет элементы
проблемной области, из которых будут
собираться решения рассматриваемой
проблемы.
• Классы, ответственности и взаимосвязи
существуют в проблемном пространстве
независимо от какого-то конкретного
решения.
Мы просто привязываем их к решаемой
проблеме с помощью абстрагирования.
• ОО подход фундаментально отличается от других
подходов к разработке ПО тем, что
1. вначале выделяются строительные блоки,
абстрагируемые из проблемного пространства, а
2. затем разрабатывается поведенческое решение
конкретной проблемы (задачи), путем объединения
этих блоков.
Описание класса и объектов на
языке UML
Понятие объекта
• Объект это абстрактное представление
сущностей предметной области.
• Объект отвечает за данные (знание) и за
поведение.
• Ответственность объекта заключается в том, что
он содержит знания и поведение и
предоставляет к ним доступ.
• На языке UML
– Данное, за которые отвечает объекта называются
атрибутами.
– Поведение за которое отвечает объект называется
операцией.
• У объекта м.б. много атрибутов и операций.
Понятие класса
• Объекты имеющие одинаковый набор
атрибутов и операций объединяются в
классы.
• Класс это шаблон, в соответствии с которым
могут создаваться новые объекты.
• Операция – это описание части поведения
объекта или класса.
• Метод – это реализация операции.
– Реализация поведения называется методом
(method).
Поведение
• Поведение объекта – это то, «что он может
сделать для нас», т. е. его операции.
• Этот набор операций определяет поведение
объекта.
– Вызов некоторых из операций (deposit(),
withdraw(), setOwner()) может приводит к
изменению значений атрибута и может
генерировать переходы состояния.
– Операция getOwner() не меняет значения
атрибута и поэтому не приводит к переходу
состояния.
• Например, поведение принтера.
• Он может выполнять конкретные действия.
– Например:
•
•
•
•
•
•
switchOn() (включиться)
switchOff() (выключиться)
printDocument() (распечатать документ)
pageFeed() (заправить бумагу)
clearInkJetNozzles() (очистить форсунки)
changeInkCartridge() (заменить картридж)
Обозначение объектов в UML
• Символом объекта в UML является прямоугольник с двумя
разделами.
• В верхнем разделе размещается идентификатор объекта,
который всегда подчеркивается.
– Это важно, поскольку в UML обозначения классов и объектов
очень похожи.
• Язык UML очень гибок относительно представления
объектов на диаграммах объектов.
Значения атрибутов объектов
• Значение каждого атрибута записывается
следующим образом:
имя : тип = значение
• Можно отображать все, некоторые или
вообще не отображать значения атрибутов.
• Все зависит от назначения диаграммы.
• Чтобы сохранить простоту и ясность
диаграммы, можно опускать типы атрибутов,
поскольку они уже определены в классе
объекта.
Классы и объекты
• Между классом и объектами этого класса
устанавливается отношение «instantiate» (создать
экземпляр).
• Отношение это связь между элементами модели.
• В UML существует множество типов отношений.
• Отношение зависимости означает, что изменение
сущности-поставщика оказывает влияние на сущностьклиент.
Обозначение классов в UML
• Обязательной частью в визуальном синтаксисе
является только ячейка с именем класса.
• Все остальные ячейки и дополнения
необязательны.
UML изображение классов анализа
• В классах анализа обычно показывают только:
–
–
–
–
имя класса;
ключевые атрибуты;
ключевые операции;
стереотипы (если они нужны).
• В классах анализа обычно не показывают:
–
–
–
–
значения по умолчанию (помеченные значения);
параметры операций;
видимость;
исходные значения (если только они не значимы для
дела).
Тип атрибута
• Типом атрибута может быть другой класс или
примитивный тип.
• Спецификация UML определяет четыре
примитивных типа, используемых в самой
спецификации UML.
– Integer - Целое число.
– UnlimitedNatural - Целое число >= 0.
– Boolean – логическия тип, ожет принимать значения
true или false.
– String - последовательность символов.
• Их можно применять в моделях анализа, чтобы
сохранить платформо-независимость.
Многозначность
• Атрибуты могут иметь много значений.
• Многозначность позволяет моделировать
коллекции значений атрибута или
неопределенные значения.
• Коллекции – если выражение многозначности
определяет целое число больше нуля, значит,
задается коллекция типа.
– Например, выражение colors : Color[7] моделирует
атрибут, являющийся коллекцией из семи объектов
Color (цвет), которые можно использовать для
моделирования цветов радуги.
Многозначность (2)
• Смоделировать многозначность можно также с
помощью специального выражения [n..m].
• Например атрибут emailAddress
(электронныйАдрес):
– если значение атрибута – "" (пустая строка), то это
можно понять так, что адрес электронной почты был
запрошен, но не был предоставлен.
– если атрибут emailAddress указывает на null, можно
сказать, что адрес электронной почты еще не был
запрошен и, следовательно, его значение неизвестно.
• Если проводятся такие разграничения,
исключительно важно указывать в документации
emailAddress точную семантику "" и null.
Примеры описания многозначности
Начальные значения атрибутов
• Начальное значение позволяет задавать
значение атрибута в момент создания объекта.
• Начальное значение (initialValue) позволяет
задавать значение, принимаемое атрибутом при
создании экземпляра класса (т. е. объекта).
• Это значение называют начальным, потому что
оно присваивается атрибуту в момент создания
объекта.
• В анализе начальные значения используются
только тогда, когда они могут выразить или
обозначить важное бизнес-ограничение.
Операции
• Операции – это функции, закрепленные за
определенным классом:
– Имя
– список параметров
– возвращаемый тип
Сигнатура операции
• Сигнатура операции включает имя, тип всех
ее параметров и возвращаемый тип.
• Сигнатура каждой операции класса должна
быть уникальной, поскольку именно сигнатура
идентифицирует операцию.
Стереотипы классов
• Стереотипы это один из способов расширения
языка UML.
• Позволяют расширять словарь UML для
создания новых элементов моделирования,
получаемых из существующих, но имеющих
определенные свойства, которые подходят для
конкретной проблемы предметной области.
• Графически стереотип отображается, как имя,
заключенное в кавычки («», или, если такие
кавычки недопустимы, <<>>) и расположенного
над именем другого элемента.
Обозначение стереотипов класса
• В дополнение или в качестве альтернативы она
может быть обозначена соответствующей иконкой.
• Значок может даже заменить весь символ UML.
Например, стереотипы диаграммы классов могут
быть использованы для описания методов
поведения, таких как «конструктор» и «геттер».
Описание отношений между
классами
Понятие ассоциации
• Ассоциация это термин UML для обозначения
взаимосвязи между объектами классов.
– Связи это отношения между объектами
• К ассоциациям не относится отношение «быть
подклассом» (is-a) (обобщения).
• Ассоциация задает структуру концептуальных
связей между объектами, являющимися членами
разных классов.
• Существование ассоциации просто сообщает,
что индивидуальные члены двух классов
могут быть каким-то образом логически
связаны.
Понятие ассоциации (2)
• Аналогично связям, соединяющим объекты,
ассоциации соединяют классы.
• Для того чтобы между двумя объектами была
связь – между классами этих объектов должна
существовать ассоциация.
• Связь – это экземпляр ассоциации. Так же
как объект – экземпляр класса.
• Семантика ассоциации очень проста:
ассоциация между классами указывает на то,
что между объектами этих классов могут
устанавливаться связи.
• Существуют другие, более конкретные формы
ассоциаций (агрегация и композиция),
Понятие связи
• Чтобы создать объектно-ориентированную
программу, объекты должны общаться друг с
другом.
• Фактически, исполняющаяся ОО программа –
это организованное сообщество
взаимодействующих объектов.
• Объекты обмениваются сообщениями через
соединения, называемые связями.
• Связь – это семантическое соединение между
двумя объектами, которое обеспечивает им
возможность обмена сообщениями.
Синтаксис ассоциации
• Ассоциации описываются с помощью
следующих элементов:
– имя ассоциации
– имена ролей
– кратность
– возможность навигации
• Поскольку ассоциации обозначают действие,
производимое исходным объектом над целевым
объектом, в качестве их имен должны использоваться
глаголы.
• Перед именем или после него может применяться
маленькая черная стрелка, указывающая направление, в
котором должно читаться имя ассоциации.
• В данном примере ассоциация читается следующим
образом:
«Компания (Company) нанимает много Человек (Persons)».
• Имена ассоциаций – это глаголы,
указывающие на семантику ассоциации.
• Альтернативный вариант – классам на
обоих концах ассоциации могут быть
присвоены имена ролей (т.е. имя ассоциации
это роль, которую играет класс).
• Эти имена указывают на роли, исполняемые
объектами классов, когда они связаны
экземплярами данной ассоциации.
• На рисунке показано, если они объекты классов
связаны данной ассоциацией, то :
– объект Company играет роль employer (работодатель),
– объекты Person – роль employee (служащие),
• Имена ролей называют роль, которую могут
играть объекты, поэтому они должны быть
существительными или именными группами.
Типы ассоциаций
• Наиболее часто ассоциации являются
бинарными, т.е. представляют взаимосвязь
между двумя классами.
• Однако они также могут быть:
– одинарными (само-ассоциациями);
– тернарными;
– более высокого порядка.
Ассоциация один-к-одному
• На диаграммах классов, такая
ассоциация показывается в виде
дуги, соединяющей две
обозначения классов
(прямоугольник).
• Для указания направления
используется небольшая стрелка,
указывающая в каком
направлении нужно читать.
Ассоциация один-к-одному
• Если ассоциация один-к-одному, то она
является один-к-одному в обоих
направлениях.
• Т.о., объект любого из двух класса имеет связь
только с одним объектом другого класса.
– Например, в ассоциации «Компания Руководится
Директором», конкретная компания имеет только
одного Директора, и один Директор является
руководителем только одной компании.
Кратность ассоциации
• Кратность ограничивает число объектов класса,
которые могут участвовать в конкретном
отношении в любой момент времени.
• На данном примере можно увидеть, что в любой
момент времени объект Person нанят только
одним объектом Company.
Виды кратности ассоциаций
• Могут быть следующие виды кратности
ассоциаций:
– ассоциации один-ко-многим.
– ассоциации, описываемые численно.
– Не обязательные ассоциации .
– ассоциации многие-ко-многим.
Ассоциация один-ко-многим.
• В ассоциации один-ко-многим
существуют
– ассоциация один-ко-многим в одном
направлении между двумя классами;
– и ассоциация один-к-одному между
ними в обратном направлении.
• Например, ассоциация «Банк
Ведет Счет», конкретный банк
может вести много счетов, но
конкретный счет ведется только
одним банком.
• Ограничение связанности задает некоторые
бизнес-правила модели. Например:
– объекты Person в данный момент времени могут быть
наняты только одним объектом Company;
– объекты Person не могут быть безработными.
• Это не то что есть на самом деле, а именно то, что
описывает модель.
• Ограничения кратности имеют большое
значение, в них могут быть закодированы
ключевые бизнес-правила модели.
• Однако эти правила «скрыты» в деталях
модели.
• Кратность задается в виде разделенного
запятыми списка интервалов, в котором
каждый интервал представлен в форме:
мин..макс
– здесь мин и макс – целые числа или любое
выражение, возвращающее целое число.
• Если кратность не задана явно, значит,
решение о ней еще не принято.
• В UML нет «применяемой по умолчанию»
кратности.
• В моделировании широко распространена
ошибка, состоящая в том, что незаданная
кратность по умолчанию предполагается
равной 1.
• Кратность задает число объектов, которые могут
принимать участие в отношении в любой момент
времени.
• Примеры синтаксиса кратности:
№
Дополнение
Семантика
1
0..1
Нуль или 1
2
1
Ровно 1
3
0..*
Нуль или более
4
*
Нуль или более
5
1..*
1 или более
6
1..6
От 1 до 6
7
1..3, 7..10, 15, 19..*
От 1 до 3, или от 7 до 10, или ровно 15, или от 19 до
множества
Численно описываемые ассоциации
• Это ассоциация, которая
ссылается на специфическое
число.
– Например: в ассоциации
«Автомобиль Имеет Дверь» один
авто может иметь 2 или 4 двери.
• Ассоциация в обратном
направлении все равно один-кодному.
Не обязательные ассоциация
• В необязательных ассоциациях
может и не быть связи от
объекта одного класса к объекта
другого класса.
• Это можно показать используя
обозначение 0..1 с одной
стороны связи.
• Например, «Клиент Владеет
ДебетоваяКарта».
• Возможно иметь ассоциацию с
количеством объектов 0, 1 или
более.
• Например, в ассоциации «Клиент
Владеет КредитнойКартой» могут
быть ситуации:
– нет ни одной карты;
– есть одна карта;
– есть много карт.
Ассоциация многие-ко-многим
• Ассоциация многие-ко-многим
это связь между двумя
классами, когда в каждом
направлении есть ассоциация
один-ко-многим.
– Например, ассоциация между
Курсом и Студентом:
• Курс Посещается Студентом
• Студен ЗаписалсяНа Курс.
Пример задания асоциаций
• Кратность является мощным ограничением,
которое часто имеет огромное влияние на
бизнес-семантику модели.
Что видно из модели:
• у Company может быть ровно семь employee;
• Person может быть нанят только одной Company (т. е. в
данной модели Person не может одновременно иметь
больше одной должности);
• у BankAccount может быть только один owner (владелец);
• у BankAccount может быть один или много operator
(операторов);
• у Person может быть от нуля до множества BankAccount;
• Person может управлять от нуля до множества BankAccount.
• При чтении UML – модели важно понимать, что именно выражает
модель, а не прибегать к предположениям или догадкам.
• Например, рис. утверждает, что у Company может быть именно семь
employee, не больше и не меньше.
• Такое описание может показаться странным или даже неверным, но
именно так описывается в данной модели.
• Кратность описывает бизнес-правила, требования и ограничения и
может вскрыть необоснованные предположения относительно
предметной области.
• Очевидно, что такие предположения необходимо выявлять и
устранять как можно раньше. Т.е. показывать и в модели анализа.
Пример показа ассоциаций в
диаграмме классов
• Пример связей на диаграмме классов
Иерархии
• В процессе моделирования может оказаться, что часто
объекты организуются в иерархии или сети.
• Иерархия имеет один корневой объект.
• У каждого последующего узла иерархии только один
прямой предшественник.
– Например: деревья каталогов обычно формируют
иерархии.
– классификация в машиностроении и
– элементы XML и HTML документов.
• Иерархия – это очень упорядоченный,
структурированный и довольно негибкий способ
организации объектов.
• В иерархии объект может иметь один прямой объектпредок или не иметь ни одного.
Пример иерархии
Сети
• В сети обычно нет корневого объекта, хотя это не исключено.
• В сетях каждый объект может быть непосредственно соединен с многими
объектами.
• В сети нет строгого представления «над» или «под».
• Это намного более гибкая структура, в которой возможно равенство
между узлами.
– World Wide Web образует сложную сеть узлов, упрощенное представление
которой показано на рис.
• В сети объект может быть непосредственно соединен с многими
объектами или вообще не иметь соединения.
Пример сети
Навигация
• Возможность навигации (navigability)
указывает на возможность прохода от объекта
исходного класса к одному или более
объектам в зависимости от кратности
целевого класса.
• Смысл навигации в том, что «сообщения могут
посылаться только в направлении, в котором
указывает стрелка».
Возможность навигации
• Возможность навигации показывает, что объекты
исходного класса «знают об» объектах целевого
класса.
• Возможность навигации обозначается крестом или
стрелкой на концах отношения, как показано на рис.
• Например, объекты Order могут посылать сообщения
объектам Product, но не наоборот:
Рефлексивные (или унарные)
ассоциации
• Очень распространено явление, когда класс
имеет ассоциацию с самим собой.
• Это называется рефлексивной ассоциацией и
означает, что объекты данного класса имеют
связи с другими объектами этого же класса.
• Пример:
– «Человек Ребенок Человек»,
– «Человек Женат Человек»,
– «Человек Руководитель Человек»,
Пример рефлексивной ассоциации
– каждый объект Directory (каталог) может иметь связи с
объектами Directory, выступающими в роли subdirectory
(подкаталог),
– число таких объектов может меняться от нуля до
некоторой величины (0..*),
– у таких объектов может не быть (0) или может быть 1 (0..1)
объект Directory, выступающим в роли parent (родитель).
Ассоциирующие классы
• Ассоциирующий класс это класс, который
моделирует ассоциацию между двумя или
более классами.
• В сложных ассоциациях между двумя или
более классами, ассоциирующий класс может
иметь атрибуты.
• Наиболее часто это случается в ассоциацияъ
многие-ко-многим, где атрибуты не
принадлежат какому либо из классов, а
принадлежат данной ассоциации.
Пример ассоциирующего класса
• Проект может включать много сотрудников
(employees) и сотрудник одновременно работать
во многих проектах :
1.Project Is staffed by Employee
2.Employee Works on Project
Отношения композиции и агрегации
• Отношения композиции и агрегации задают
классы, состоящие из других классов.
• Композиция и агрегация это специальные
формы взаимосвязей, в которых классы
соединяются отношением «часть – целое».
• В обоих случаях, взаимоотношением между
Частями и Целым является отношение
«ЯвлятьсяЧастью» (Is part).
Отношение композиции
• Отношение композиция является более сильной
взаимосвязью, чем отношение агрегирования.
• А отношение агрегирования является более
сильной взаимосвязью, чем ассоциация между
классами.
• В частности, взаимосвязь композиция является
более строгой взаимосвязью между частями и
целым, взаимосвязь агрегация.
• Отношение композиция это также взаимосвязь
между экземплярами.
• Т.о., объекты, являющиеся частями, создаются,
живут и умирают вместе с объектом,
являющимся целым.
Пример отношения композиции
• Композитный класс часто состоит из физических
взаимосвязей между целым и его частями.
• Например, Банкомат является композитным классом,
который состоит из 4 частей:
–
–
–
–
Считыватель карт (Card Reader);
Раздатчик Денег (Cash Dispenser);
Принтер квитанций (Receipt Printer);
Клавиатура клиента (ATM Customer Keypad).
Отношение агрегации
• Отношение агрегации является более слабой
формой взаимосвязи целое/часть.
• В агрегации экземпляры объектов, являющихся
частями, могут добавляться в агрегированному
целому и удаляться из него.
• В связи с этим, агрегаты вероятнее всего
используются для моделирования
концептуальных классов, а не физических
классов.
• Кроме этого, объекты – части, могут
принадлежать более чем одной агрегации.
Пример иерархии агрегации
• Таким примером является Колледж в
Университете, который включает Админ Офис,
несколько Факультетов (Departments) и несколько
Исследовательских Центров (Research Centers).
Отношения
обобщения/специализации
• Некоторые классы являются похожими, но не
одинаковыми.
• У них некоторые атрибуты являются общими, а другие
атрибуты являются различными.
• В отношении обобщения/специализации общие
атрибуты абстрагируются в обобщенный класс,
который называется суперклассом (родительский или
предок).
• Разные атрибуты являются свойствами
специализированных классов, которые называются
подклассами (дочерний или наследник)
• Между подклассами и суперклассами задается
отношение «Являться» («Is a» ).
Создание аналитической модели в
первом приближении
• Чтобы создать аналитическую модель в
первом приближении, необходимо в
инструментальном средстве моделирования
объединить в одну UML-модель результаты
анализа
– существительное/глагол,
– CRC-анализа,
– изучения других источников классов (особенно
базовых шаблонов).
Процесс объединения классов
1. Сравниваются все источники классов.
2. Классы анализа, атрибуты и обязанности,
полученные из разных источников,
объединяются и вводятся в
инструментальное средство моделирования.
1.С помощью глоссария проекта выявляются
синонимы и омонимы.
2.Находятся различия в результатах трех методов.
Отличия указывают на неопределенности или
моменты, требующие более тщательной
проработки. Обработайте эти различия сейчас или
оставьте это на будущее.
3. Участники представляют отношения
между классами.
4. Корректируются имена классов, атрибутов
и обязанностей согласно какому-либо
стандартному соглашению о присваивании
имен, принятому в компании, или в
соответствии с простыми соглашениями.
+
• Результатом этой деятельности является набор
классов анализа, в котором у каждого класса
может быть несколько ключевых атрибутов и
должно быть от трех до пяти обязанностей.
• Это аналитическая модель в первом
приближении.
Download