Дж. Арлоу, А. Нейштадт - UML 2 и Унифицированный процесс - Практический объектно-ориентированный анализ и проектирование, страница 85
Описание файла
PDF-файл из архива "Дж. Арлоу, А. Нейштадт - UML 2 и Унифицированный процесс - Практический объектно-ориентированный анализ и проектирование", который расположен в категории "". Всё это находится в предмете "объектно-ориентированный анализ и проектирование" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 85 страницы из PDF
20.17. Она была разработана с помощью инструUseCaseEditorCreateUseCaseSpecificationFromSchemaEditUseCaseSpecificationSyntaxHilightUseCaseSpecificationGenerateXMLUseCaseSpecificationAutoNumberUseCaseSpecificationUseCaseEngineerCreateActorSpecificationFromSchemaEditActorSpecificationSyntaxHilightActorSpecificationGenerateXMLActorSpecificationРис. 20.17. Модель прецедентов для системы UseCaseEditor20.8.
Пример реализации прецедента на этапе проектирования465Прецедент: CreateUseCaseSpecificationFromSchemaID: 1Краткое описание:Система создает спецификацию нового прецедента из схемы прецедента.Главные актеры:UseCaseEngineerВторостепенные актеры:Нет.Предусловия:1.
Существует схема прецедента.Основной поток:1. Прецедент начинается, когда UseCaseEngineer выбирает «create new use case».2. Система запрашивает имя прецедента.3. UseCaseEngineer вводит имя прецедента.4. Система создает новый прецедент из схемы прецедента.5. Система представляет новый прецедент для редактирования.Постусловия:1. Система создала новый прецедент.Альтернативные потоки:UseCaseAlreadyExistsUseCaseEngineerCancelsРис. 20.18. Описание прецедента CreateUseCaseSpecificationFromSchemaментального средства моделирования UML MagicDraw (www.magic+draw.com), поэтому иллюстрации немного отличаются от всех остальных иллюстраций этой книги.Основным прецедентом этой системы, вероятно, является CreateUseCaseSpecificationFromSchema (создать спецификацию прецедента по схеме).Он отражает назначение системы – предоставление возможности создания (и редактирования) описаний прецедентов на основании заранеесуществующей схемы.
Прецедент CreateUseCaseSpecificationFromSchemaпредставлен на рис. 20.18.Поскольку система очень проста, аналитическая модель не уточняласьдо очень глубокого уровня, и мы смогли быстро перейти к проектированию. Аналитическая диаграмма классов показана на рис. 20.19. Онаотражает наши исходные идеи о том, какие классы будут нужны.Как часть реализации прецедента на этапе анализа была создана аналитическая диаграмма последовательностей (рис. 20.20). Она иллюстрирует наше предположение о том, как система создает файл новогопрецедента из существующего файла схемы.Проектная модель классов представлена на рис. 20.21. Как видите,аналитическая диаграмма классов сильно отличается от проектной.Как упоминалось, это настолько простая система, что мы очень быстроперешли к проектированию, и основная работа по исследованию былапроведена в этом рабочем потоке.
Если бы система была более сложной,на определение требований и анализ понадобилось бы больше времени.466Глава 20. Реализация прецедента на этапе проектированияUseCaseEditor1useCases1..*useCaseModelDirectory : StringcreateUseCaseFromSchema()editUseCase()createActorFromSchema()editActor()syntaxHilight()autoNumber()1actors1..*ActorFileSUMRFileschema0..1fileName : StringschemaFileName : String0..*loadUseCaseFile()loadSchemaFile()saveUseCaseFile()UseCaseFileSchemaFileXMLRendererrenderUseCaseToXML()renderActorToXML()Рис. 20.19.
Аналитическая диаграмма классовРедактор прецедентов был исследовательским проектом, и мы не понимали понастоящему, чем он мог быть полезен, пока не провели несколько итераций и не получили некоторые предварительные исполняемые базовые версии архитектуры, с которыми можно было экспериментировать. Также мы не пытались предугадывать самые эффективные центральные механизмы для файлов SUMR – мы установилиих, когда создали первую итерацию системы.Приложение редактора прецедентов разрабатывалось на языке программирования Python, и все классы, имена которых начинаются с буквwx, являются классами библиотеки GUI wxPython (www.wxpython.org).sd CreateUseCaseFromSchema:UseCaseEditor:SchemaFile:UseCaseEngineernewUseCase( name )load()«create»save()edit()Рис.
20.20. Аналитическая диаграмма последовательностейname:UseCaseFile46720.8. Пример реализации прецедента на этапе проектированияwxFrameУровеньGUIUseCaseEditor!hilights : Dictionary!actorList : wxListCtrl!useCaseList : wxListCtrl!textControl : wxTextCtrl+__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()1!useCaseModelУровеньприложе!ния1UseCaseModel!useCasePath : String!useCaseFileNames : Dictionary!actorFileNames : Dictionary!actorExtension : String = ".ac"!useCaseExtension : String = ".uc"+__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 ) : BooleanSUMRToXMLRenderer!fileName : String!buffer : String[]!root : String+render( fileName : String )+saveAs( fileName : String )+save()+printOut()!clean( line : String )Рис.
20.21. Проектная модель классов1{dictionary}!actors0..*1SUMRUseCaseParser!includedUseCases : String[]!extensionPoints : String[]{dictionary}!useCases0..*+__init__( fileName : String )+getName(): String+getlD(): String+autoNumber()+deNumber()SUMRValidRleParser!schemaName : String!legalTags : Dictionary!illegalTags : Dictionary+__init__( fileName : String )+getMissingTags() : String[]+getExtraTags() : String[]AutoNumber+autoNumber( lines : String[] )+autoDeNumber( lines : String[] )!removeNumbers( line : String )!getlndent( line : String )+__init__()0..1!schema1SUMRFileParser!fileName : String!filePath : String!lines : String[]!tags : String[]!elements : Dictionary+__init__(fileName : String )+refresh()+saveAs( fileName : String )+save()+search( pattern : String )+getTagMultiplicity( tagName : String )+isTag() : Boolean468Глава 20.
Реализация прецедента на этапе проектированияЭто мощная межплатформенная библиотека GUI, основанная на wxWidgets (www.wxwidgets.org). Эти классы придерживаются другогостандарта присваивания имен: начинаются с маленькой буквы, а некак обычно с большой. Разные стандарты наименования в разработкепрограммного обеспечения сложились исторически.И наконец, давайте посмотрим на диаграмму последовательностей дляCreateUseCaseSpecificationFromSchema уровня проектирования (рис. 20.22).Эта диаграмма используется для иллюстрации центральных механизмов создания файла нового прецедента из существующего файла схемы. Эта диаграмма имеет важное значение, потому что данный механизм должен использоваться неизменно во всей системе. Можно убедиться в работоспособности нашего проекта – имеются все необходимые классы и операции для выполнения поставленных задач.Хотя в этом примере мы представили артефакты определения требований, анализа и проектирования последовательно, необходимо помнить,что UP является итеративным процессом и что наборы этих артефактовна самом деле создаются параллельно.
В частности, работа над модельюпрецедентов, аналитической диаграммой классов и аналитическимидиаграммами взаимодействий будет проводиться одновременно. То жесамое относится к проектной диаграмме классов и проектным диаграммам взаимодействий. Обновление артефактов, созданных в предыдущих итерациях, является обычным делом. Помните, что в каждой итерации есть элемент каждого рабочего потока – Определения требований, Анализа, Проектирования, Реализации и Тестирования.20.9.
Что мы узналиРеализация прецедента на этапе проектирования – это на самом делерасширение реализации прецедента, созданной при анализе. Мы узнали следующее:• Деятельность UP Проектирование прецедента заключается в выявлении проектных классов, интерфейсов и компонентов, взаимодействие которых обеспечивает поведение, описанное прецедентом.• Проектные реализации прецедентов – это взаимодействия проектных объектов и классов, направленные на реализацию прецедента.Они включают:• проектные диаграммы взаимодействий – уточненные аналитические диаграммы взаимодействий;• проектные диаграммы классов – уточненные аналитическиедиаграммы классов.• Диаграммы взаимодействий могут использоваться в проектировании для моделирования центральных механизмов, таких как сохранение объектов; эти механизмы могут охватывать многие прецеденты.load()Рис. 20.22. Диаграмма последовательностей уровня проектированияобновить модель из фай!лов прецедентов на дискесохранить файлпрецедента на дискесоздать новыйпрецедентполучить имя файладля нового прецедентаsaveAs( newUseCaseFileName)setUseCaseName( newUseCaseName)SUMRFileParser(schemaFileName ):SUMRFileParsernewUseCaseFileName = getNewUseCaseFileName( newUseCaseName )newUseCaseFromSchema( schemaName, newUseCaseName )создать новыйпрецедент в моделиnewUseCaseFromSchema( "UseCase.sss" ):UseCaseModelnewllseCaseName = getNewName( "Enter use case name", "New use case name")newUseCase( event ):UseCaseEditorполучить имяпрецедентанажать кнопку“New use case”:UseCaseEngineer20.9.
Что мы узнали469470Глава 20. Реализация прецедента на этапе проектирования•••Моделирование параллелизма.• Используются активные классы и объекты.• Диаграммы последовательностей:• par – все операнды выполняются параллельно;• critical – операнд выполняется автоматически без прерываний.• Коммуникационные диаграммы:• порядковый номер дополняется меткой для обозначения потока управления.• Диаграммы деятельности:• ветвления;• объединения.Диаграммы взаимодействий подсистем показывают взаимодействия между разными частями системы на высоком уровне абстракции:• в них могут входить актеры, подсистемы, компоненты и классы;• части подсистем (например, предоставляемые интерфейсы) могутотображаться в прямоугольниках, примыкающих снизу к пиктограмме подсистемы.Временные диаграммы – моделируют временные ограничения:• очень полезны для моделирования аппаратных систем реального времени и встроенных систем;• время увеличивается вдоль горизонтальной оси слева направо;• линии жизни, состояния и условия располагаются по вертикали;• переходы между состояниями или условиями изображаются в виде графика;• можно показать временные ограничения и события;• компактная форма временной диаграммы делает акцент на относительном времени.21Конечные автоматы21.1.
План главыВ этой главе обсуждаются конечные автоматы – важное средство моделирования динамического поведения классификаторов.Глава начинается с введения в конечные автоматы (раздел 21.2), затемобсуждаются два типа конечных автоматов (раздел 21.2.1), автоматыи классы (раздел 21.2.2) и синтаксис конечных автоматов (раздел 21.4).Далее основное внимание уделяется базовым компонентам автоматов:состояниям (раздел 21.5), переходам (раздел 21.6) и событиям (раздел21.7).21.2.