从UML类图到Java代码自动生成技术研究
http://www.paper.edu.cn - 1 -从UML类图到Java代码自动生成技术研究 张中宝1,韩同欣2,刘西洋1 1西安电子科技大学软件工程研究所,陕西西安(710071) 2北京航天航空大学计算机学院, 北京(100083) E-mail:zhongbaoz@gmail.com 摘 要:本文描述了基于UML CASE平台的代码生成器的设计与实现。从可执行UML到高级语言的代码生成技术已经在实践中得到实现,本文描述的代码生成器采用了一种全新的面向对象的脚本语言Ruby和基于Ruby的XML接口REXML,处理生成自UML类图的XMI 文档。通过从XMI DOM树中提取建模系统模型元素的相关信息,之后构造合适的容器类存储提取的数据,并访问这些数据进行ERb模板匹配,最后生成了可执行的Java代码框架。整个开发过程遵循模型驱动的软件开发方法,以更灵活的脚本语言和模板机制实现了模型驱动架构MDA从平台无关模型到平台相关模型的转化。 关键词:模型,代码生成,MDA(模型驱动架构) 中图分类号:TP312
1. 引言 模型是应用程序或系统的某些部分的简单抽象表示。用户可以以任意的复杂程度构建模型:从在白板上手绘的方框图,到使用建模工具生成的复杂的UML图。然而,实际开发却经常脱离模型,模型只作为一个系统的蓝图,开发者仍然要手工编写所有的实现代码。随着应用程序的进展和规模的扩大,开发者经常发现坚持使用模型所带来的约束要远远大于其用途,维护模型变成繁琐的工作而不会产生帮助。设计阶段产生的UML模型和代码之间的同步变得越来越困难——代码为了应付新增加需求和新产生的想法而不断变化,模型却一直停留在原地不动,这使得模型在一段时间以后失去了它的价值。模型驱动开发是一种能够将模型与实现更紧密地联系在一起的开发方法。使用MDD,模型不仅能用来封装应用程序的设计,还可以用来生成实现代码。它是模型驱动架构[1](Model Driven Architecture, MDA)的一
部分,MDA 表示了一种模型驱动开发方法的概念框架。 代码生成是一个专注于解放编码生产力,用程序来编程的研究方向。它是MDA思想的一个重要的技术基础。MDA的基本思想是在软件开发中以模型为驱动,由模型来生成或编译成程序代码,实现软件需求。只有在代码生成技术获得充分发展的基础上,模型驱动架构的思想才能得以实现。 在软件项目中运用代码生成技术可带来以下几大好处: 1) 高效率。代码生成的工作主要是建立和维护输入模型,而这些输入模型基本上或全部都能从设计模型转化过来,工作量很少,因而软件生成率得到成倍提高。 2) 高质量。代码生成技术使用代码模板来生成代码,模板越完善,生成的代码就越好。模板改善后,所有生成的代码质量都能提高,并且代码的命名和风格都能保持一致。因而采用代码生成技术能获得更高质量的代码。 3) 更易维护。当需求改变时,大多数的代码生成器都能在输入模型的基础上,重新生成满足新需求的代码,这能有效地降低软件需求变更带来的风险。 4) 促进团队的分工和发展。由于编码工作量少,程序员的工作得到解放,项目团队有更多时间来进行设计和架构优化,以及设计更好的代码生成工具。 目前,代码生成技术的发展还处于初期阶段,代码生成工具主要是用数据库模型来生成基于数据库的程序代码。代码生成技术较多的应用在集成开发环境和专业的代码生成工具http://www.paper.edu.cn - 2 -中。已公开的相关的研究成果比较少[2][3],商用工具有Rhapsody、Rose RT等等,它们实现了简单类图和状态图的代码生成。 本项目的研究涉及到模型驱动的构架思想,模型驱动的开发方法以及代码生成技术。项目将要完成的任务是在模型驱动构架的思想下,采用模型驱动的开发方法,设计一个代码生成器,实现从UML[4]类图到Java语言的代码生成。项目的实现为模型驱动架构思想的实现
提供了技术支持。
2. 代码自动生成器的设计 可执行UML中以类图来建模系统的结构,描述了对象的类型和对象间的各种静态关系。在模型-代码的映射关系中,结构对应代码的框架部分。这里给出结构实现的总体方案,其中的策略和技术同样适用于约束和行为。
2.1功能需求描述 为了实现从平台无关的UML类图模型到平台相关的代码框架,项目开发的生成器必需实现以下的功能: 1) 读取由UML模型转化来的XMI[5]文件;
2) 准确地将类图模型描述的现实系统生成Java语言框架。代码生成器的主要功能需求用例图如图1所示。
Java语言模板代码生成使用者选择XMI文件
图1 代码生成器主要功能需求用例图 2.2代码生成器系统框架 基于MDA思想的软件开发过程应实现平台无关模型到平台相关模型的转换,最终生成可执行的代码。以代码生成器开发为例,完全符合MDA思想的代码生成器必需包括模型检查子系统、代码生成属性设置子系统和代码生成子系统等三部分。模型检查子系统主要在生成可执行代码前进行相应的模型一致性检查, 将有助于发现模型中的问题和不一致性, 避免生成错误代码或无效代码,确保平台无关的模型的一致性和准确性。代码生成属性设置子系统主要完成代码模板的语言属性检查。代码生成子系统是最核心的部分,实现代码生成,将平台无关的模型映射为具体的Java代码框架,做到模型的平台相关(一段源代码框架也是模型)。 本项目只开发代码生成子系统。因为实现的是从类图到代码的生成,所以可以不考虑不同模型的一致性问题。代码生成属性设置体现在模型到代码的映射规则和Java模板中。生成器的前端输入是由UML类图模型转换而来的XMI文件,由Rational Rose2003的XMI导出工具导出生成。 http://www.paper.edu.cn - 3 -2.3 代码生成建模 2.3.1 模型驱动开发过程 本项目采用的是一种模型驱动的开发方法。模型驱动开发的主要过程是: 分析与设计:基于开发系统的需求分析,系统设计人员进行分析和设计。这一步的工件是与具体平台无关的模型。 设计确认:由于在第一步构建的设计模型是可执行的,因此模型可以被确认其正确性。传统的确认方法,比如模仿执行的testing方法,对于可执行的PIM语言的集成开发环境都给予了支持。然而这些确认方法都是低效的,主要是因为测试案例覆盖的范围限制。在一个复杂的设计模型中,一般很难覆盖所有的测试案例。 代码生成: 一旦设计模型被完全确认,那么传统的编程语言,例如C/C++和Java就能够从确认的模型中产生出来。代码产生主要基于一组预定义的模板,该模板详细说明设计模型中的语义实体怎样被编译成代码。 下图给出了模型驱动的主要开发流程。
图2 模型驱动开发流程图 2.3.2 代码自动生成机制 模型驱动软件开发的最终目标是产生可执行代码,即把为系统建立的各级分析、设计模型转换成特定语言的代码。代码自动生成的原理是根据建模平台的目标系统模型,以及对类和对象的详细设计中的规范说明信息,由代码生成器自动生成可执行的代码。具体地说,生成代码的信息来源有两个:代码生成属性(控制代码生成方式) 和模型元素规范(控制代码生成内容) 。代码自动生成过程是以数据容器为基础,将系统详细设计阶段得到的模型信息保存在数据容器中,在代码生成前,针对特定语言设定的代码生成属性也保存在数据容器中。在生成代码时,从基本数据容器中提取描述系统的信息, 从数据容器中提取特定语言的代码生成属性值,依据系统对映射关系的描述,通过代码模板实现从目标模型到特定语言的可执行代码的转换。代码模板是代码生成器的关键,模板是在对特定语言(如C+ + ,JAVA ,
需求 分析 和设计
可执行的
设计模型
预定义模板
代码 (Java/C++) 代码 生成
设计确认 确认后可执行的设计 http://www.paper.edu.cn
- 4 -VB 等) 代码体系结构和组成的分析、提炼的基础上,建立设计模型与语言的映射关系。本项目中的代码生成机制描述如图3所示。
图3 代码生成机制 3. 代码生成器的实现 本节首先讲述了代码生成器的实现机制,之后描述了生成器生成代码的具体实现步骤及核心算法,最后给出了生成器的性能测试。
3.1 代码生成器的实现 前面介绍了代码生成器的实现原理。下面将从代码生成的四个阶段:存储模型、提取类图信息、构造存储信息的容器类、ERb模板匹配生成代码来描述代码生成的实现。
3.1.1 存储模型元素信息 本项目代码生成的目标模型是在Rational Rose2003建模平台上设计构造的,为将设计的模型直接生成程序代码,需要将模型系统的数据信息保存起来,以便生成器提取相应的模型元素。例如,在一个学校信息系统中(如图4所示),为了生成该系统的程序语言代码,必需把各个类,如学校、学生、部门等,及类与类之间的关系存储起来。项目采用Rose1.XML1.3.6Tools工具,将在Rational Rose2003平台上设计的系统模型导出为XMI1.1格式,利用XMI的元数据交换机制,存储模型元素信息,并应用于生成器的下一步解析、提取信息步骤。
图4 学校信息系统类图 3.1.2 信息提取 按照3.1.1节的设计,模型元素信息已经保存在XMI文件中,接下来就要从XMI文件中提取相应的模型信息。利用REXML接口,将由模型导出的XMI文件导入内存中,形成内存树。之后遍历DOM树。
逻辑架构与UML包图详解
层是对类、包或子系统的甚为粗粒度的分组,具有对系统主要方面加以内聚的职责。 层按照“较高”层(例如UI层)可以调用“较低”层的服务 OO系统中通常包括的层有: 用户界面 应用逻辑和领域对象 技术服务(例如数据库接口或错误日志)独立于应用的,也可在多个系统中复用的服务。
在严格的分层架构中,层只能调用与其相邻的下层的服务。这种设计在网络协议栈中比较常见,而在信息系统中不太常见。在信息系统中通常使用宽松的分层架构,其中较高层可以调用其下任何层的服务
协作和耦合是从较高层到较低层进行的,要避免从较低层到较高层的耦合。
使用层时:
准则:使用层进行设计
STEP1
STEP2
STEP3
STEP4
源码的变更波及整个系统-大部分系统是高度耦合的。
应用逻辑与用户界面交织在一起,因此无法复用于其他不同界面或分布到其他处理节点之上
潜在的一般性技术服务或业务逻辑与更特定于应用的逻辑交织在一起,因此无法被复用、分布到其他节点或方便地使用不同实现替换
模型-视图分离原则
支持内聚的模型定义,这些定义只关注领域过程,而不是用户界面。
1
允许对模型和用户界面层分别进行开发。
2
使界面的需求变更对领域层的影响最小化。
3
允许新视图能够被方便地连接到现有的领域层之上,而不会对领域层产生影响。
4
允许对同一模型对象同时使用多个视图,例如销售信息同时具有表格和业务图表视图。
01
02
将代码组织映射为层和UML包
//---UI包 //---领域层 //---特定于NextGen项目的包 com.mycompany.nextgen..domain.payments //---技术服务层 //---我们自己的持久(数据库)访问层 //第三方 //---基础层 //---我们小组自己创建的基础包
案例一基于UML和Java的图书管理系统
案例一:基于UML和Java的图书管理系统一、引言统一建模语言(Unified Modeling Language,简写为UML)是一种通用的模拟语言,它可以用于确定、展示和记录软件系统的设计过程。
统一建模语言中的图形标记,尤其是用于面向对象的软件设计。
它有两大优点:(1)UML是国际软件工业界广泛认可的标准,它统一了对象模拟的标记和含义,使软件设计工具能发挥更大的功用,同时,现有的对象设计也能更容易地被重新使用。
(2)UML博采众长,设当地平衡了简洁性和具体化两个总之,UML已经成为一种单独的系统来演化,不像以前的多种标准的体系引起的问题。
所以,作为软件开发者,完全有必要学习、了解UML。
本文就提供了一个案例研究,想利用这个案例研究给大家一个对UML的感性认识,了解在现实世界中如何使用UML来编写应用程序。
所以找了一个相对比较复杂的案例,发现图书馆中处理借出以及预借书籍和杂志的应用程序是相当大的例子,足以说明UML如何在现实世界中使用。
只是利用用例(use case)和讨论域分析来分析描述一个分析模型中的应用,把它扩展成一个设计模型,用来描述技术解决方案的一个代表部分,最后,再用Java语言进行编码。
但请记住,给出的只是一种可能的解决方案,还有许多其他的解决方案需要您用聪明的头脑去发掘,而且这世界上也没有适合所有的情况的解决方案。
当然,某些解决方案会比其他的要好,但那只有有了足够的经验和遇到的许多困难的事并解决之后才会积累下来知识。
二、要求一般情况下,是使用系统的最终用户的代表人来书写要求规范,对于图书馆应用程序,要求规范应该如下:1)、图书馆应用程序应当是图书馆的支持系统。
2)、图书馆把书籍和杂志借给借书者(读者)的条件当然是读者应当在该系统中注册过,同样书籍和杂志也应当在系统中注册过。
3)、图书馆处理购买新书或杂志的操作,畅销书或杂志应当多购几本,旧的书籍和杂志当它过时或残破时就应适当把它从书架上请下来。
StarUML指导手册
StarUML指导手册<!--相关信息-->来源:作者:Stephen Wong,翻译:火猴时间:2009-08-01Tag:StarUML指导手册点击:<scriptsrc="/plus/count.php?aid=1138&mid=&view=yes"></script>1070 <!--资讯正文-->1.综述:StarUML是一种生成类图和其他类型的统一建模语言(UML)图表的工具。
这是一个用Java语言描述的创建类图的简明手册。
StarUML(简称SU),是一种创建UML类图,并能够自动生成Java的“stub code”的工具。
SU也可以做JAVA逆向工程,以产生相应的UML图表。
在本教程中,我们将使用SU设计一个pizza饼。
执行下列步骤,可以创建如下面所示的UML图。
SU可以生成反映类结构的代码,而不是任何对象的具体行动。
因此,在使用SU创建图表后,你会为此stub code添加剩余的功能性代码,填写每种方法本来应该做的事。
2.安装:首先,我们必须先安装将要使用的软件。
StarUML,是一个开放源码软件,遵循GPL协议许可(GNU公共许可证),并免费提供下载。
3.启动安装以后就可以启动该程序。
4.添加新工程然后,一个名叫:New Project By Approach的对话框会弹出。
选择“Empty Project”并且按下"确定"。
这里建议你不要勾选"设置为默认的做法"复选框。
5.选择模块在右边的“Model Explorer”框中选定“Untitled”模块。
6.添加模块通过“Model”主菜单,或右击选定的模型,可以"Add/Design Model"7.添加类图通过“Model”主菜单,或右击选定模型,可以“Add Diagram/Class Diagram”:8.设置profile通过“Model/Profile...”菜单去设置工程所需的profile。
软件工程 第5章--UML
UML的定义
UML定义有两个主要组成部分:语义和表示法。 语义用自然语言描述,表示法定义了UML的可 视化标准表示符号,这决定了UML是一种可视 化的建模语言。 在语义上,模型是元模型的实例。UML定义给 出了语法结构的精确定义。 使用UML时,要从不同的角度观察系统,为此 定义了概念“视图(View)‖。视图是对系统的模 型在某方面的投影,注重于系统的某个方面。
独立于过程
系统建模语言,独立于开发过程。
9
容易掌握使用 概念明确,建模表示法简洁明了,图形结 构清晰,容易掌握使用。 着重学习三个方面的主要内容: (1) UML的基本模型元素 (2) 组织模型元素的规则 (3) UML语言的公共机制 与程序设计语言的关系 用Java,C++ 等编程语言可实现一个系统。 一些CASE工具可以根据 UML所建立的系 统模型来产生Java、C++ 等代码框架。
31
UML事物 — 注释事物
11) Note(注释)
依附于一个元素或一组元素之上,对其进
行约束或解释的简单符号。没有语义影响。
See policy8-5-96.doc for details about these algorithms.
CashAccount presentValue()
32
15
UML定义 9 种图,表达UML中的 5 种视图,各 视图在静态和动态方面表示系统模型。
结构 视图 静态 方面
动态 方面
行为 视图 同左
实现 视图 构件图
环境 视图 部署图
同左
用例 视图 用例图
同左
类图 对象图
顺序图 同左 顺序图 合作图 (注重 合作图 状态图 进程、 状态图 活动图 线程) 活动图
UML类图及类与类之间的关系
UML类图及类与类之间的关系原⽂地址:类图⽤于描述系统中所包含的类以及它们之间的相互关系,帮助⼈们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。
1. 类类(Class)封装了数据和⾏为,是⾯向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。
在系统中,每个类都具有⼀定的职责,职责指的是类要完成什么样的功能,要承担什么样的义务。
⼀个类可以有多种职责,设计得好的类⼀般只有⼀种职责。
在定义类的时候,将类的职责分解成为类的属性和操作(即⽅法)。
类的属性即类的数据职责,类的操作即类的⾏为职责。
设计类是⾯向对象设计中最重要的组成部分,也是最复杂和最耗时的部分。
在软件系统运⾏时,类将被实例化成对象(Object),对象对应于某个具体的事物,是类的实例(Instance)。
类图(Class Diagram)使⽤出现在系统中的不同类来描述系统的静态结构,它⽤来描述不同的类以及它们之间的关系。
在系统分析与设计阶段,类通常可以分为三种,分别是实体类(Entity Class)、控制类(Control Class)和边界类(Boundary Class),下⾯对这三种类加以简要说明:(1) 实体类:实体类对应系统需求中的每个实体,它们通常需要保存在永久存储体中,⼀般使⽤数据库表或⽂件来记录,实体类既包括存储和传递数据的类,还包括操作数据的类。
实体类来源于需求说明中的名词,如学⽣、商品等。
(2) 控制类:控制类⽤于体现应⽤程序的执⾏逻辑,提供相应的业务操作,将控制类抽象出来可以降低界⾯和数据库之间的耦合度。
控制类⼀般是由动宾结构的短语(动词+名词)转化来的名词,如增加商品对应有⼀个商品增加类,注册对应有⼀个⽤户注册类等(3) 边界类:边界类⽤于对外部⽤户与系统之间的交互对象进⾏抽象,主要包括界⾯类,如对话框、窗⼝、菜单等。
在⾯向对象分析和设计的初级阶段,通常⾸先识别出实体类,绘制初始类图,此时的类图也可称为领域模型,包括实体类及其它们之间的相互关系。
StarUML使用说明-指导手册
StarUML使用说明-指导手册原著:Stephen Wong 翻译:火猴1.综述StarUML是一种生成类图和其他类型的统一建模语言(UML)图表的工具。
这是一个用Java语言描述的创建类图的简明手册。
StarUML(简称SU),是一种创建UML类图,并能够自动生成Java的“stub code”的工具。
SU也可以做JAVA逆向工程,以产生相应的UML图表。
在本教程中,我们将使用SU设计一个pizza饼。
执行下列步骤,可以创建如下面所示的UML图。
SU可以生成反映类结构的代码,而不是任何对象的具体行动。
因此,在使用SU创建图表后,你会为此stub code添加剩余的功能性代码,填写每种方法本来应该做的事。
2.安装首先,我们必须先安装将要使用的软件。
StarUML ,是一个开放源码软件,遵循GPL协议许可(GNU公共许可证),并免费提供下载。
3.启动安装以后就可以启动该程序。
4.添加新工程然后,一个名叫:New Project By Approach的对话框会弹出。
选择“Empty Project”并且按下"确定"。
这里建议你不要勾选"设置为默认的做法" 复选框。
5.选择模块在右边的“Model Explorer”框中选定“Untitled”模块。
6.添加模块通过“Model”主菜单,或右击选定的模型,可以" Add/Design Model "7.添加类图通过“Model”主菜单,或右击选定模型,可以“Add Diagram/Class Diagram”:8.设置profile通过“Model/Profile...”菜单去设置工程所需的profile。
这决定了工程所使用的规则和约定。
一定要包含"JAVA Porfile"这一项目。
9.保存工程立即就保存工程,这样在出现问题的时候,您就不会丢失信息。
从“File ”菜单,选择“Save”,并选择一个地方以保存工程。
UML建模工具软件StarUML从入门到精通——应用StarUML实现正反向工程的应用示例
2、添加Java扩展插件
在StarUML工具软件中需要添加相关语言的插件才能进行正 反向工程的操作。 (1)启动Extension Manager子菜单
(2)选择Java扩展插件
3、开始安装Java扩展插件
(1)点击Install按钮安装Java扩展插件
(2)显示安装成功的提示信息
4、为什么要安装Java扩展插件
(2)启动Reverse Engineer功能菜单 在主菜单栏中选择“Tools — Java — Reverse Code”子 菜单项目,可以将现有的代码逆向工程。
(3)定位到目标程序代码所在的目录
(4)创建出对应的类图
然后在此类图的基础上对类图进行完2)设置导出的程序风格选项 在菜单中依次选择“Tools — Java — Configure”子菜 单项目。
(3)在设置对话框中根据应用的需要选择对应的项目
比如,可以选中“Generate the Documentation by JavaDoc”等选项,从而可以在创建的Java程序代码中自动地添 加文档说明信息。
22然后再点击ok按钮33选择一个有效的输出目录66查看导出的结果java程序类的程序代码11导出的各个相关的程序类22导出所创建的compute类的程序代码示例77添加实现代码11由于staruml只是生成反映类结构的程序代码而不是任何对象的具体功能实现的程序代码
应用StarUML实现 正反向工程的应用示例
(4)启动导出子菜单 在菜单中依次选择“Tools — Java — Generate Code” 子菜单项目。
(5)选择待导出的模块(Model) 1)从对话框中选择待导出的模块内的类图,本示例为 “Design Model”节点。
类图及绘制工具StarUML
类图及绘制工具StarUMLUnified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。
面向对象的分析与设计(OOA&D,OOAD)方法的发展在80年代末至90年代中出现了一个高潮,而UML就是这个高潮的产物。
OMG:对象管理组织(Object Management Group)UML由3个要素构成:UML的基本构造块、支配这些构造块如何放置在一起的规则和运用于整个语言的公用机制。
UML有3种基本的构造块:事物、关系和图。
事物是对模型中最具有代表性的成分的抽象,包括结构事物,如:类(Class)、接口(Interface)、协作(Collaboration)、用例(UseCase)、主动类(ActiveClass)、组件(Component)和节点(Node);行为事物,如交互(Interaction)、态机(Statemachine)、分组事物(包,Package)、注释事物(注解,Note)。
关系用来把事物结合在一起,包括:依赖、关联、泛化和实现关系。
UML中有九种建模的图标,即:用例图、类图、对象图、顺序图、协作图、状态图、活动图、组件图、配置图用例图Use case diagrams描述了作为一个外部的观察者的视角对系统的印象。
强调这个系统是什么而不是这个系统怎么工作。
用例图与情节紧紧相关的。
情节scenario是指当某个人与系统进行互动时发生的情况。
用例图在三个领域很有作用:1.决定特征(需求)。
当系统已经分析好并且设计成型时,新的用例产生新的需求;2.客户通讯。
使用用例图很容易表示开发者与客户之间的联系;3.产生测试用例。
一个用例的情节可能产生这些情节的一批测试用例。
类图Class diagram通过显示出系统的类以及这些类之间的关系来表示系统。
基于形式化的功能代码自动生成
实例 化为对 相应 对象 的具体 操 作 , Ad AO , e) 可 以转 换 为 Ad C ,tm) 其 中 , O 、tm 如 d( S R c就 d( OS Ie , C SI e
( ) 择结 构 2选
选 择 结构 P Ulf — Q—U2表示 多个 行 为是 并 列 的 , 们 仅有 一 个 行 为能 够 触发 , { 它 即如 果 当前 状 态 P 为 真时 , 为 U1 被激 活 ; 行 将 如果 Q为 真时 , 为 U2 被激 活 。 行 将
一 一
第 2期
徐 英 娟 , 金 奎 : 于 形 式 化 的 功 能 代 码 自动 生 成 侯 基
例 如 : 为 F的功能 是将 当前 记 录 Re 添加 到表 T1中 , 在此 之前 需 要 先检 查 当前 表 中是 否存 在 相 行 c 但 同记 录 , 果存 在则返 回提示信 息 , 则执行 添加 操作 , F可 以表示 为 F={ ( Q}其 中 : 如 否 则 : P}) = P{ ,
fr S eic dl P M)P M 是 为某 种特 定技 术 量 身定 制 的 。开发 的最 后一 步 是 把 每个 P M 变 换 om pc iMo e, S ,S f S
成 目标 平 台的代码 。 3 UML类图行 为描 述方 法
为实现 高层 软件模 型 中系统行 为 和功能 部分 的描述 , 首先 需要 定义 原子操 作集 合及 其 组合 逻辑 , 后 然 对 UMI类 图中 的操 作进 行形 式化描 述 和定 义 ; 进一 步 在平 台相 关模 型 ( S ) P M 中将 操 作 对象 和操 作 行 为 实例化 ; 后将实 例化 的形 式化定 义描 述用 具体代 码表 示 出来 , 到可执 行 的行 为代 码 。 最 得 3 1 类 中操作 的形式 化定 义 。 . UMI类 图 中的操作 , 以由单个 的原 子操 作实 现也 可 以由多个原 子操作 经过 一个 或者 多个组 合结 构 可 构成 。本 文 中 , 一个形 式化 的操作 定 义为 F { OP{ , 中 P和 Q 是 条件 , 别 表示 行 为 的前 置 条件 : P) Q}其 分 和后 置条 件 , P和 Q 取值 为真 或假 ; P是 操作 的形式 化组 合 。 O
UML用例图说明
UML⽤例图说明前些时间参加了潘加宇⽼师的技术讲座,UML建模技术受益匪浅。
我也把平时的⼀些积累和上次的收获总结在这篇⽂章中,主要讲解⽤例图相关的知识。
⽤例图是软件需求分析到最终实现的第⼀步,它描述⽤户如何使⽤系统及使⽤系统什么样的功能。
⽤例图从业务⾓度上体现谁来使⽤系统、⽤户希望系统提供什么样的服务,以及⽤户需要为系统提供的服务,也便于软件开发⼈员最终实现这些功能。
⽤例图在开发中被⼴泛的应⽤,但是它最常⽤来描述系统提供了什么样的功能给什么样的⽤户使⽤。
在官⽅⽂档中⽤例图包含六个元素,分别是:执⾏者(Actor)、⽤例(Use Case)、关联关系(Association)、包含关系(Include)、扩展关系(Extend)以及泛化关系(Generalization)。
但是有些UML的绘图⼯具多提供了⼀种直接关联关系(DirectedAssociation)。
⽤例图可⼀个包含注释和约束,还可⼀个包含包,⽤于将模型中的元素组合成更⼤的模块。
有时,可以将⽤例的实例引⼊到图中。
⽤例图模型如下所⽰,执⾏者⽤⼈形图标来标识,⽤例⽤椭圆来表⽰,连线表⽰它们之间的关系。
⼀、执⾏者(Actor)1、执⾏者概念是指⽤户在系统中扮演的⾓⾊。
如图1-1是⼀个⽤户管理的⽤例图,图中的⽤户、管理员就是⽤例的执⾏者。
图1-12、从业务中找出执⾏者获取系统⽤例⾸先要找出系统的执⾏者。
我们可以通过⽤户回答⼀些问题的答案来识别执⾏者。
可以参考以下问题:1. 谁使⽤系统的主要功能(主要使⽤者)?2. 谁需要系统⽀持他们⽇常⼯作?3. 谁来维护、管理系统使其正常⼯作(辅助使⽤者)?4. 系统需要控制哪些硬件?5. 系统需要其他哪些系统交互?这⾥包含其他计算机系统或者应⽤程序。
6. 对系统产⽣结果感兴趣的是哪些⼈和哪些事物?3、执⾏者之间关系因为执⾏者是类,所以多个执⾏者之间可以具有与类相同的关系。
在⽤例图中,使⽤了泛化关系来描述多个执⾏者之间的公共⾏为。
