Главная страница

UML2 и унифицированный процесс. Джим арлоуайла нейштадтпрактический объектно ориентированныйанализ и проектированиеu


Скачать 6.08 Mb.
НазваниеДжим арлоуайла нейштадтпрактический объектно ориентированныйанализ и проектированиеu
АнкорUML2 и унифицированный процесс.pdf
Дата08.04.2018
Размер6.08 Mb.
Формат файлаpdf
Имя файлаUML2 и унифицированный процесс.pdf
ТипДокументы
#17801
страница47 из 62
1   ...   43   44   45   46   47   48   49   50   ...   62

Временнаяй диаграмма имеет три отделения, по одному для каж дой линии жизни.
sd IntruderThenFire
Sounding
Intruder
Alarm
:S
iren
{t <= 15}
Off
Resting
Sounding
Intruder
Alarm
Sounding fire
Alarm
{t = 10}
состояние или условие
{t > 30}
все промежутки времени в минутах
Off
Рис. 20.15. Компактная форма временной диаграммы с рис. 20.14

20.7. Временные диаграммы
463

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

При вызове датчики обоих типов переходят в состояние
Triggered
(инициирован), а затем в течение 1 секунды возвращаются в состоя ние
NotTriggered (не инициирован). Это значит, что у обоих датчиков короткое время повторной готовности – важнейшая характеристика.

:Siren отвечает на события вторжения только в состоянии Off. В со стоянии
Resting он игнорирует эти события. Это обусловлено мест ными правилами, согласно которым сигнал тревоги вторжения должен подаваться только в течение 15 минут, а затем выключать ся, по крайней мере, на полчаса.
sd SirenBehavior
SoundingIntruderAlarm
Off
:S
iren
{t <= 15}
T riggered
NotT riggered
:Int ru de rS
enso rMo nit or
{t <= 15}
{t = 30}
{t <= 0.016}
все промежутки времени в минутах
Resting
T riggered
NotT riggered
:F
ireS
enso rMo nit or
{t <= 0.016}
SoundingFireAlarm cообщения soundFireAlarm()
soundIntruderAlarm()
soundIntruderAlarm()
soundIntruderAlarm()
soundIntruderAlarm()
Рис. 20.16. Временная диаграмма иллюстрирует временные ограничения,
накладываемые на взаимодействия между линиями жизни

464
Глава 20. Реализация прецедента на этапе проектирования

:Siren всегда отвечает на события пожара, даже если находится в со стоянии
Resting, потому что пожарная сигнализация должна вклю чаться как можно скорее после возникновения события пожара.
Как видите, временные диаграммы являются удобным способом мо делирования временных ограничений, накладываемых на взаимодей ствия.
20.8. Пример реализации прецедента
на этапе проектирования
В данном разделе рассматривается реальный пример проектирования реализации прецедента. Обсуждаемый пример – это простой редактор прецедентов, ориентированный на схемы. Это часть системы SUMR,
которая описывается в приложении B. Ознакомьтесь с этим приложе нием, прежде чем читать дальше.
Как сказано в приложении B, приложение, которое мы собираемся рас смотреть, является простым редактором прецедентов с синтаксической подсветкой имен актеров, имен прецедентов, включений и расшире ний. Модель прецедентов для системы
UseCaseEditor (редактор прецеден тов) показана на рис. 20.17. Она была разработана с помощью инстру
UseCaseEngineer
UseCaseEditor
CreateUseCaseSpecificationFromSchema
EditUseCaseSpecification
SyntaxHilightUseCaseSpecification
GenerateXMLUseCaseSpecification
AutoNumberUseCaseSpecification
CreateActorSpecificationFromSchema
EditActorSpecification
SyntaxHilightActorSpecification
GenerateXMLActorSpecification
Рис. 20.17. Модель прецедентов для системы UseCaseEditor

20.8. Пример реализации прецедента на этапе проектирования
465
ментального средства моделирования UML MagicDraw (www.magic
draw.com
), поэтому иллюстрации немного отличаются от всех осталь ных иллюстраций этой книги.
Основным прецедентом этой системы, вероятно, является
CreateUseCase
SpecificationFromSchema (создать спецификацию прецедента по схеме).
Он отражает назначение системы – предоставление возможности соз дания (и редактирования) описаний прецедентов на основании заранее существующей схемы. Прецедент
CreateUseCaseSpecificationFromSchema представлен на рис. 20.18.
Поскольку система очень проста, аналитическая модель не уточнялась до очень глубокого уровня, и мы смогли быстро перейти к проектиро ванию. Аналитическая диаграмма классов показана на рис. 20.19. Она отражает наши исходные идеи о том, какие классы будут нужны.
Как часть реализации прецедента на этапе анализа была создана ана литическая диаграмма последовательностей (рис. 20.20). Она иллюст рирует наше предположение о том, как система создает файл нового прецедента из существующего файла схемы.
Проектная модель классов представлена на рис. 20.21. Как видите,
аналитическая диаграмма классов сильно отличается от проектной.
Как упоминалось, это настолько простая система, что мы очень быстро перешли к проектированию, и основная работа по исследованию была проведена в этом рабочем потоке. Если бы система была более сложной,
на определение требований и анализ понадобилось бы больше времени.
ID: 1
Главные актеры:
UseCaseEngineer
Предусловия:
1. Существует схема прецедента.
Основной поток:
1. Прецедент начинается, когда UseCaseEngineer выбирает «create new use case».
2. Система запрашивает имя прецедента.
3. UseCaseEngineer вводит имя прецедента.
4. Система создает новый прецедент из схемы прецедента.
5. Система представляет новый прецедент для редактирования.
Постусловия:
1. Система создала новый прецедент.
Прецедент: CreateUseCaseSpecificationFromSchema
Краткое описание:
Система создает спецификацию нового прецедента из схемы прецедента.
Альтернативные потоки:
UseCaseAlreadyExists
UseCaseEngineerCancels
Второстепенные актеры:
Нет.
Рис. 20.18. Описание прецедента CreateUseCaseSpecificationFromSchema

466
Глава 20. Реализация прецедента на этапе проектирования
Редактор прецедентов был исследовательским проектом, и мы не по нимали по настоящему, чем он мог быть полезен, пока не провели не сколько итераций и не получили некоторые предварительные испол няемые базовые версии архитектуры, с которыми можно было экспе риментировать. Также мы не пытались предугадывать самые эффек тивные центральные механизмы для файлов SUMR – мы установили их, когда создали первую итерацию системы.
Приложение редактора прецедентов разрабатывалось на языке про граммирования Python, и все классы, имена которых начинаются с букв wx, являются классами библиотеки GUI wxPython (www.wxpython.org).
createUseCaseFromSchema()
editUseCase()
createActorFromSchema()
editActor()
syntaxHilight()
autoNumber()
1..*
0..*
0..1
schema
1..*
actors
UseCaseEditor
SUMRFile
useCases useCaseModelDirectory : String
ActorFile
UseCaseFile
SchemaFile
fileName : String schemaFileName : String loadUseCaseFile()
loadSchemaFile()
saveUseCaseFile()
1 1
renderUseCaseToXML()
renderActorToXML()
XMLRenderer
Рис. 20.19. Аналитическая диаграмма классов
:UseCaseEngineer
:UseCaseEditor
:SchemaFile newUseCase( name )
sd CreateUseCaseFromSchema load()
edit()
name:UseCaseFile
«create»
save()
Рис. 20.20. Аналитическая диаграмма последовательностей

20.8. Пример реализации прецедента на этапе проектирования
467
Рис. 20.21.
Проектная модель классов
+__init__(parent : wxPySimpleApp, id : String, title : String, size : Point, style : int)
#makeToolBar()
#makeMenu()
#connectEvents()
#enableButtonsAndMenus( enabled : Boolean )
#updateView()
#update( event : wxEvent)
#newActor( event : wxEvent)
#newUseCase( event : wxEvent)
#newUseCaseFromSchema( schemaName : String )
#newAlternativeFlow( event : wxEvent)
#newExtensionUseCase( event : wxEvent)
#generateXML( event : wxEvent)
#itemSelected( event : wxEvent)
#openUseCaseModel( event : wxEvent)
#save( event : wxEvent)
#setFont( event : wxEvent)
#getNewName( message : String, caption : String ) : String
#autoNumber()
#autoNumberSelected( event : wxEvent)
#syntaxHilight()
#hilightSelected( event : wxEvent)
#findAIIAndHilight( regularExpression : String, hilight : wxTextAttr)
#saveFile()
#loadFile()
UseCaseEditor
hilights : Dictionary actorList : wxListCtrl useCaseList : wxListCtrl textControl : wxTextCtrl
wxFrame
{dictionary}
actors
1
fileName : String buffer : String[]
root : String
SUMRToXMLRenderer
+render( fileName : String )
+saveAs( fileName : String )
+save()
+printOut()
clean( line : String )
+autoNumber( lines : String[] )
+autoDeNumber( lines : String[] )
removeNumbers( line : String )
getlndent( line : String )
+__init__()
AutoNumber
includedUseCases : String[]
extensionPoints : String[]
SUMRUseCaseParser
+__init__( fileName : String )
+getName(): String
+getlD(): String
+autoNumber()
+deNumber()
useCasePath : String useCaseFileNames : Dictionary actorFileNames : Dictionary actorExtension : String = ".ac"
useCaseExtension : String = ".uc"
UseCaseModel
+__init__()
+setUseCasePath( useCasePath : String )
+load()
+getModelElement( name : String ) : SUMRUseCaseParser
+getUseCaseNames() : String[]
+getUseCaseFileName( name : String ) : String
+getNewUseCaseFileName( name : String ) : String
+getUseCase( name : String ) : SUMRUseCaseParser
+newUseCaseFromSchema( schemaName : String,
useCaseName : String ) : SUMRUseCaseParser
+useCaseNameExists( name : String ) : Boolean
+getActorNames() : String[]
+getActorFileName( name : String ) : String
+getNewActorFileName( name : String ) : String
+getActor( name : String ) : SUMRUseCaseParser
+newActorFromSchema( schemaName : String,
actorName : String ) : SUMRUseCaseParser
+namelsValid( name : String ) : Boolean
+nameExists( name : String ) : Boolean
+actorNameExists( name : String ) : Boolean
1
useCaseModel
1 1
+__init__(fileName : String )
+refresh()
+saveAs( fileName : String )
+save()
+search( pattern : String )
+getTagMultiplicity( tagName : String )
+isTag() : Boolean
SUMRFileParser
fileName : String filePath : String lines : String[]
tags : String[]
elements : Dictionary schemaName : String legalTags : Dictionary illegalTags : Dictionary
+__init__( fileName : String )
+getMissingTags() : String[]
+getExtraTags() : String[]
SUMRValidRleParser
0..*
{dictionary}
useCases
0..*
0..1
schema
1
Уровень
GUI
Уровень приложе ния

468
Глава 20. Реализация прецедента на этапе проектирования
Это мощная межплатформенная библиотека GUI, основанная на wx
Widgets (www.wxwidgets.org). Эти классы придерживаются другого стандарта присваивания имен: начинаются с маленькой буквы, а не как обычно с большой. Разные стандарты наименования в разработке программного обеспечения сложились исторически.
И наконец, давайте посмотрим на диаграмму последовательностей для
C
reateUseCaseSpecificationFromSchema уровня проектирования (рис. 20.22).
Эта диаграмма используется для иллюстрации центральных механиз мов создания файла нового прецедента из существующего файла схе мы. Эта диаграмма имеет важное значение, потому что данный меха низм должен использоваться неизменно во всей системе. Можно убе диться в работоспособности нашего проекта – имеются все необходи мые классы и операции для выполнения поставленных задач.
Хотя в этом примере мы представили артефакты определения требова ний, анализа и проектирования последовательно, необходимо помнить,
что UP является итеративным процессом и что наборы этих артефактов на самом деле создаются параллельно. В частности, работа над моделью прецедентов, аналитической диаграммой классов и аналитическими диаграммами взаимодействий будет проводиться одновременно. То же самое относится к проектной диаграмме классов и проектным диаграм мам взаимодействий. Обновление артефактов, созданных в предыду щих итерациях, является обычным делом. Помните, что в каждой ите рации есть элемент каждого рабочего потока – Определения требова ний, Анализа, Проектирования, Реализации и Тестирования.
20.9. Что мы узнали
Реализация прецедента на этапе проектирования – это на самом деле расширение реализации прецедента, созданной при анализе. Мы узна ли следующее:

Деятельность UP
Проектирование прецедента заключается в выявле нии проектных классов, интерфейсов и компонентов, взаимодейст вие которых обеспечивает поведение, описанное прецедентом.

Проектные реализации прецедентов – это взаимодействия проект ных объектов и классов, направленные на реализацию прецедента.
Они включают:

проектные диаграммы взаимодействий – уточненные аналити ческие диаграммы взаимодействий;

проектные диаграммы классов – уточненные аналитические диаграммы классов.

Диаграммы взаимодействий могут использоваться в проектирова нии для моделирования центральных механизмов, таких как со хранение объектов; эти механизмы могут охватывать многие пре цеденты.

20.9. Что мы узнали
469
newllseCaseName = getNewName( "Enter use case name", "New use case name")
saveAs( newUseCaseFileName)
SUMRFileParser(schemaFileName )
setUseCaseName( newUseCaseName)
:SUMRFileParser
обновить модель из фай лов прецедентов на диске нажать кнопку
“New use case”
получить имя прецедента создать новый прецедент в модели получить имя файла для нового прецедента создать новый прецедент сохранить файл прецедента на диске newUseCaseFileName = getNewUseCaseFileName( newUseCaseName )
newUseCaseFromSchema( schemaName, newUseCaseName )
newUseCase( event )
newUseCaseFromSchema( "UseCase.sss" )
:UseCaseEditor
:UseCaseEngineer
:UseCaseModel
load()
Рис.
20.22
.
Д
и
аг
р
а
м
м
а по
с
л
едо
в
а
т
е
л
ь
но
ст
ей уро
в
ня про
е
ктиро
в
ания

470
Глава 20. Реализация прецедента на этапе проектирования

Моделирование параллелизма.

Используются активные классы и объекты.

Диаграммы последовательностей:

par – все операнды выполняются параллельно;

critical – операнд выполняется автоматически без прерыва ний.

Коммуникационные диаграммы:

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

Диаграммы деятельности:

ветвления;

объединения.

Диаграммы взаимодействий подсистем показывают взаимодейст вия между разными частями системы на высоком уровне абстрак ции:

в них могут входить актеры, подсистемы, компоненты и классы;

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

Временные диаграммы – моделируют временные ограничения:

очень полезны для моделирования аппаратных систем реально го времени и встроенных систем;

время увеличивается вдоль горизонтальной оси слева направо;

линии жизни, состояния и условия располагаются по вертикали;

переходы между состояниями или условиями изображаются в ви де графика;

можно показать временные ограничения и события;

компактная форма временной диаграммы делает акцент на отно сительном времени.

21
Конечные автоматы
21.1. План главы
В этой главе обсуждаются конечные автоматы – важное средство моде лирования динамического поведения классификаторов.
Глава начинается с введения в конечные автоматы (раздел 21.2), затем обсуждаются два типа конечных автоматов (раздел 21.2.1), автоматы и классы (раздел 21.2.2) и синтаксис конечных автоматов (раздел 21.4).
Далее основное внимание уделяется базовым компонентам автоматов:
состояниям (раздел 21.5), переходам (раздел 21.6) и событиям (раздел
21.7).
21.2. Конечные автоматы
Конечный автомат моделирует динамическое поведение реактивного объекта.
И диаграммы деятельности, и диаграммы состояний моделируют ас пекты динамического поведения системы, но их семантика и назначе ние в моделировании сильно различаются. Диаграммы деятельности базируются на технологии сетей Петри (глава 14) и обычно использу ются для моделирования бизнес процессов, в которых принимают уча стие несколько объектов. В основе конечных автоматов UML лежит работа Харела (Harel) [Harel 1]. С их помощью обычно моделируется предыстория жизненного цикла одного реактивного объекта. Она представляется в виде конечного автомата – автомата, который может существовать в конечном числе состояний. В ответ на события конеч ный автомат четко осуществляет переходы между этими состояниями.

472
Глава 21. Конечные автоматы
21.2. Конечные автоматы
21.2.1. Поведенческие и протокольные автоматы
21.2.2. Конечные автоматы и классы
21.3. Конечные автоматы и UP
21.4. Диаграммы состояний
21.5. Состояния
21.6. Переходы
21.6.1. Соединение переходов – переходное псевдосостояние
21.6.2. Ветвление переходов – псевдосостояние выбора
21.7. События
21.7.1. События вызова
21.7.2. Сигналы
21.7.3. События изменения
21.7.4. События времени
21.8. Что мы узнали
изучаем состояния изучаем переходы изучаем события
21.5.1. Синтаксис состояния
Ри
с
.
2
1
.1
.
Пл
ан гл
ав
ы

21.2. Конечные автоматы
473
Три основных элемента автоматов – состояния, события и переходы:

состояние (state) – «условие или ситуация в жизни объекта, при ко торых он удовлетворяет некоторому условию, осуществляет некото рую деятельность или ожидает некоторого события» [Rumbaugh 1];
1   ...   43   44   45   46   47   48   49   50   ...   62


написать администратору сайта