企业信息化速度不断加快,业务发展也越来越快,更加要求企业在市场中具有竞争力和维持力。“传统”的系统开发方法已经力不从心。速度的加快也要求有更加灵活的系统。
UML(统一建模语言,Unified Modeling Language)是最广泛使用的面向对象系统的标准建模方法。本文将从以下几个方面介绍UML技术:
了解面向对象方法
UML的发展历史
基于UML的面向对象建模
UML的应用
一.面向对象方法
“对象”(object)有几千年的历史, “面向对象”(object-oriented)的使用不过短短的20年,从上个世纪80年代以来在计算机学科得到广泛使用。这也是计算机科学快速发展的需要。
面向对象方法(Object-Oriented Method)是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观的实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而继承性是对具有层次关系的类的属性和操作进行共享的一种方式。面向对象技术的特点:模块性、封装性、代码共享、灵活性、易维护性、增量性设计、局部存储与分布处理性。
1.面向对象的原则(广义):
一切事物都是对象
任何系统(也是对象)均由对象构成
系统的发展和进化由系统的内外部的对象相互作用完成
2.面向对象方法的具体步骤如下:
面向对象分析:分析和构造问题域的对象模型,区分类和对象,整体和部分关
系;定义属性、服务,确定约束。明确地抽象系统必须做的事,而不是如何做;
面向对象设计:根据面向对象分析,设计交互过程和用户接口,设计任务管理,
全局资源,确定边界条件,子系统以及子系统的软、硬件分配;
面向对象实现:使用面向对象语言实现面向对象设计。
传统的面向功能的方法学中,强调的是确定和分解系统功能,这种做法虽然是目标的最直接的实现方式,但是由于功能是软件系统中最不稳定、最容易变化的方面,因而使系统难以维护和扩展。面向对象设计首先强调来自域的对象,然后围绕对象设置属性和操作。其结构源于客观世界稳定的对象结构。
面向对象方法运用对象、类、继承、封装、聚合、消息传递、多态性等概念来构造系统,明显提高了软件的生产率,可靠性,易重用性、易维护性等方面的应用。在计算机科学与技术中成为一种好方法,并在计算机领域内广泛应用。
二.UML的发展历史
可视化建模的一个重要问题是用哪种图形标注方法表示系统的各个方面。随着面向对象技术的发展,出现了几十种面向对象的软件开发方法。其中,Booch、OMT、和OOSE以及较早的Coad/Yourdon(OOA/OOD)方法在面向对象软件开发界得到了广泛的认可。前三种方法也是UML的直接来源,它们各有特点,适合于不同的领域。尽管UML统一了面向对象方法的图形标注体系,但是这些方法仍然具有重要的指导作用,在实际开发过程中我们可以综合考虑这几种方法来进行建模。下面将分别介绍这几种方法的主要思想:
2.4.1 Booch方法
Booch方法是Grady Booch从1983年开始研究,1991年后走向成熟的一种方法。Booch方法区分系统的逻辑和物理结构并描述这两种结构的静态和动态语义。Booch方法被区分为微观和宏观的过程。[3]
微观开发过程代表开发者或开发小组的日常活动,包含以下任务:
在一定抽象层次上表示类和对象,发现问题域中的类和对象,确定对象需要哪些行为来完成某些功能。
标识类与对象的语义,目标是建立前一阶段抽取出来的类的状态和行为。
标识类与对象的联系,确定每一个类对象的边界,区分相互协作的类对象,主要用类图来表达。
实现类与对象,选择算法和数据结构实现对象的语义。
宏观开发过程是微观开发过程的控制框架,这个更广的过程确定一些相应的成果和活动,以帮助开发小组进行有效的风险评价以及早对开发过程进行修改。宏观过程侧重风险和结构方面,对日程、结构和完整性最为重要,它包含以下阶段:
概念化,建立需求。概念化试图建立系统得核心需求,这是一个非常具有创造性的过程,所以没有严格的开发规则可循。原型是这项活动的基本产品。
分析,开发所需要行为的模型:分析的目的是通过区分类和对象为现实世界建模,而这些类和对象来自于问题域的词汇。这个阶段强调系统的行为,通过关注系统的行为,可以区分出系统的功能点,并以此来标识系统外不可见的和可测试的行为。
设计,开发系统的体系结构:将产生一个用于将来实现的体系结构。
演化,精化设计阶段的实现:演化的目的是不断增加和改变实现,直到系统作为一个产品问世。
维护,进行交付使用后的改进:这个过程主要是演化阶段的继续,但现在很多对系统的改变是作为新的需求备加进来以及修正系统中的Bug。
Booch方法是UML的主要来源,其面向对象的概念十分丰富。主要概念有:类、对象、继承、元类、消息、域、操作、机制、模块、子系统、进程等;其模型主要包括:逻辑静态视图(类图、对象图),逻辑动态视图(顺序图、状态图),物理静态视图(模块图、进程图)以及物理动态视图。
Booch方法的优点在它在项目的设计和构造阶段的表达能力特别强,其迭代和增量的思想也是大型软件开发中的重要思想。这种方法比较适合系统设计和构造。
2.4.2 OMT方法
OMT(Object Modeling Technique)方法最早是由Loomis,Shan和Rumbaugh在1987年提出的,曾扩展应用于关系数据库设计。Rumbaugh在1991年正式把OMT应用于面向对象的分析和设计。这个方法是在实体—关系模型上扩展了类、继承和行为而得到的。
OMT方法从三个视角描述系统,相应地提供了三种模型:
对象模型:描述对象的静态结构和它们之间的关系,主要的概念包括:类、属性、操作、继承、关联、聚集;
动态模型:描述系统那些随时间变化的方面,其主要概念有:状态、子状态和超状态、事件、行为、活动;
功能模型:描述系统内部数据值的转换,其主要概念有:加工、数据存储、数据流、控制流、角色。
该方法将开发过程分为四个阶段:分析、系统设计、对象设计、实现。
OMT的来源也决定了它在分析数据密集型信息系统时具有很大优势,是MIS系统建模常用的方法之一。
2.4.3 OOSE方法
OOSE(Object-Oriented Software Engineering)是Ivar Jacobson在1992年提出的一种面向对象开发方法,以其“用例”驱动(Use Case Driven)的思想而著称。
OOSE方法与上述两种方法有所不同,它涉及到整个软件生命周期,包括需求分析、设计、实现和测试四个阶段。
该方法中的一个关键概念就是“用例”。用例是指行为相关的事物序列,该序列将由用户在与系统对话中执行。因此,每一个用例就是一个外界使用系统的方式,当用户给定一个输入,就执行一个用例的实例并引发执行属于该用例的一个事务。基于这种系统视图,Jacobson将用例模型与其它五种系统模型相关联:需求模型、分析模型、设计模型、实现模型、测试模型。
OOSE对以用例作为一种途径来驱动需求捕获、分析和高层设计提供了极好的支持。使用用例捕获需求是OOSE对传统面向对象建模方法的很好的补充。这种方法比较适合商业工程和需求分析。
2.4.4 Coad | Yourdon方法
Peter Coad 和Edward Yourdon的方法严格区分了面向对象分析(OOA)和面向对象设计(OOD)。
在分析阶段,该方法用五个层次及相关活动定义并记录系统行为,以及系统的输入和输出。这五个层次及活动如表 所示:
表1-1 Coad/Yourdon方法中的OOA层次模型
经过五个层次的活动后,分析结果是一个分成五个层次的问题域模型,包括主题、类及对象、结构、属性和服务五个层次,由类及对象图表示。五个层次活动的顺序并不重要。 在设计阶段,OOD模型是OOA模型的扩展。OOD模型同样包括OOA模型的五个层次,但同时又引进了四个部分: 问题域部分(PDC):面向对象分析的结果直接放入该部分。 人机交互部分(HIC):包括对用户分类、描述人机交互的脚本、设计命令层次结构、设计详细的交互、生成用户界面的原型、定义HIC类等。 任务管理部分(TMC):识别任务(进程)、任务所提供的服务、任务的优先级、进程的驱动模式,以及任务与其它进程和外界如何通信等。 数据管理部分(DMC):确定数据存储模式,如使用文件系统、关系数据库管理系统还是面向对象数据库管理系统等。 Coad/Yourdon方法强调技术独立性,从而实现了包括OOA/OOD本身在内的可复用性。例如,当一个给定的应用系统从图形用户界面(GUI)升级到声音响应接口时,只需替换其中的人机交互部分,其他部分均无需改动,因为用户界面技术的改变对系统的其他部分是透明的。
该方法简单、易学,适合于面向对象技术的初学者使用,但由于该方法在处理能力方面的局限,目前已很少使用。
概括起来,首先,面对众多的建模语言,用户由于没有能力区别不同语言之间的差别,因此很难找到一种比较适合其应用特点的语言;其次众多的建模语言实际上各有千秋;第三,虽然不同的建模语言大多数雷同,但仍有细微差别,极大地妨碍了用户之间的交流。因此,统一建模语言势在必行。
统一建模语言UML 是由Rational 公司的知名专家GradyBooch、JimRumbaugh 和IvarJacobson 三人联合开发的第三代面向对象的建模语言。 UML 采纳和扩展了Booch 标记法、OMT标记法和OOSE 标记法,并包容了其他学者和软件厂商的建议,适用于上述三种面向对象方法或其他用法的用户。对象管理组织(OMG) 采纳UML 作为基于面向对象技术的标准建模语言.
2.4.5 UML方法
UML 是一种定义良好、易于表达、功能强大且普遍适用的建模语言。 它融入了软件工程领域的新思想、新方法和新技术。UML包括概念的语义,表示法和说明,提供了静态、动态、系统环境及组织结构的模型。它可被交互的可视化建模工具所支持,这些工具提供了代码生成器和报表生成器。以将UML模型转换为多种程序设计语言代码,如:可生成XML DTD代码,JAVA代码等,或使用反向生成器工具将程序源代码转换为UML。它是为支持大部分现存的面向对象开发过程而设计的。总之,UML 是一种总结了以往建模技术的经验并吸收当今优秀成果的标准建模方法。
任何建模语言都以静态建模机制为基础,UML也不例外。UML 采用用例图、类图、包图、对象图、构件图和配置图来建立系统的静态模型,属于静态建模机制;状态图、活动图、顺序图和协作图被用来建立系统的动态模型,属于动态建模机制。在论文中主要采用类图、活动图、顺序图相结合建立对象模型。类图用于表示系统中的类与类之间的联系,活动图描述领域业务流程,顺序图描述对象间交互动作的时序特性。
可视化建模将模型中的信息用标准图形元素直观地表示。可视化建模的一个重要问题是用哪种图形标注方法表示系统的各个方面。最常用的方法有Booch,对象建模技术(OMT)和统一建模语言(UML)。
Booch方法是按其发明者Grady Booch命名的,他是Rational软件公司的首席科学家。他开发了表示模型各个细节的图注方法。
OMT(对象建模技术)图注方法来自James Rumbaugh博士,OMT使用比Booch更简单的图形表示系统。
UML由面向对象方法领域的三位著名学者James Rumbaugh、Grady Booch和Ivar Jacobson提出, 总结了以往建模技术的经验并吸收当今优秀成果,并结合其他众多的优秀的软件方法和思想演变而成。UML于1997年被国际对象管理组织(Object Management Group,OMG)接受,发布了UML的标准版。如今,UML已经成为公认的最好的分析和设计面向对象软件的标准建模语言。
几年来,UML不断演变,加进了基于Web的系统、数据模型等新思想。
三.基于UML的面向对象建模
UML包括概念的语义,表示法和说明,提供了静态、动态、系统环境及组织结构的模型。它可被交互的可视化建模工具所支持,这些工具提供了代码生成器和报表生成器。它是为支持大部分现存的面向对象开发过程而设计的。
UML描述了一个系统的静态结构和动态行为。UML将系统描述为一些离散的相互作用的对象并最终为外部用户提供一定的功能的模型结构。静态结构定义了系统中的重要对象的属性和操作以及这些对象之间的相互关系。动态行为定义了对象的时间特性和对象为完成目标而相互进行通信的机制。从不同但相互联系的角度对系统建立的模型可用于不同的目的。
利用UML可以开发几种不同的可视框图,表示系统的不同方面。
Business Use Case框图
Business Use Case框图表示整个机构提供的功能。显示业务用例与业务角色之间的交互。业务用例表示公司执行的过程,而业务角色表示业务要交互的角色。也就是说业务角色表示公司外与公司交互的任何人,而不表示公司内的角色或人员。公司内的角色或人员表示为业务工人。
Use Case框图:
Use Case框图显示用例与角色间的交互。用例表示从用户角度对系统的要求,因此表示系统功能。角色是系统的主体,表示提供或接收系统信息的人或系统。Use Case框图可以演示系统的需求。如图为一个客户关系管理系统的一个用例图,它描述了系统的整体功能:
Active框图
Active框图演示了系统中的功能刘,可以在业务模型中显示业务工作流;可以在收集需求时显示一个用例中的事件流。这些框图定义工作流从那里开始到哪里结束,工作流中发生哪些活动,这些活动按什么顺序发生。活动是工作流其间完成的任务。如图表示客户关系管理系统中服务管理的活动图:
Sequence框图
Sequence框图显示用例中的功能流程,显示了对象间的交互关系。其中最重要的是显示了对象间消息传递的时间顺序。用户可以从这个框图看到业务过程的细节。分析人员可以从Sequence框图可以看到处理流程。开发人员看到需要开发的对象和这些对象的操作。质量保证工程师可以看到过程的细节,并根据这个过程开发测试用例。总之,Sequence框图对项目的所有人都有用。如图显示某系统中对应一个用例的一个顺序图。
Collaboration框图
Collaboration框图显示的信息与Sequence框图相同,但是Collaboration框图具有不同的作用:质量保证工程师和系统架构师用Collaboration框图显示对象间处理过程的分布。
Class框图
Class框图显示系统中类与类之间的交互。类是对象的蓝图,Class框图中的类是对Sequence框图或Collaboration框图中每种对象创建的。它可以显示每个用例中类的相互作用,也可以显示整个系统或子系统。
开发人员用Class框图开发类。分析人员用Class框图显示系统细节。架构师可以从这这个Class框图中看出问题并将功能划分到多个类中。如图显示某系统接口类的类图:
Statechart框图
Statechart框图提供了建模对象各种状态的方式,可以建模系统的动态功能,可以生成实际系统的全部代码。Statechart框图显示对象的功能。它只用于对复杂的类创建状态图。许多项目根本不需要这种框图。
Component框图
Component框图显示模型的物理视图,也显示系统中的软件组件及其相互关系。框图中有两种组件:执行组件和代码库。在Rose中,模型中的每个类映射到源代码组件,一旦创建组件,就加进Component框图中,然后标出组件间的相关性。相关性包括编译相关性和运行相关性。
编译系统的人员要使用Component框图。Component框图显示组件应以什么顺序编译,框图还显示编译时会创建哪些运行组件。Component框图显示类与实现组件之间的映射。这些框图还启动代码生成。
Deployment框图
Deployment框图显示网络的物理布局和各种组件的位置。
四.UML的应用
可视化建模的主要目的就是用户、开发人员、分析人员、测试人员、管理人员和其他设计项目的人员之间的通信。建立模型后,可以向所有感兴趣的部门显示这个模型,让他们对模型中的重要信息一目了然。例如:
用户可以通过模型直观地看到用户与系统间的交互;
分析人员可以看到模型对象间的交互;
开发人员可以看到要开发的对象和每个对象的任务;
测试人员可以看到对象间的交互并根据这些交互准备测试案例;
项目管理人员可以看到整个系统及各部分的交互;
信息总管可以看看高层模型,看看公司的各个系统如何相互交互。
总之,可视化建模提供了向各有关部门显示系统计划的强大工具。
具体的说,UML有如下应用:
1.为软件系统的产出建立可视化模型
UML符号具有良好的语义,不会引起歧义;基于UML的可视化模型,使系统结构直观、易于理解;使用UML作为软件系统建立的模型不但有利于交流,还有利于软件维护。
模型是系统的蓝图,蓝图可以对你的规划进行补充,模型可以帮你规划要建的系统。这就可以保证系统设计良好,要求得到满足,系统能在需求改变时站得住脚。对于一个软件系统,模型就是开发人员为系统设计的一组视图。这组视图不仅描述了用户需要的功能,还描述了怎样去实现这些功能。
2.规约软件系统的产出
UML定义了在开发软件系统过程中需要作的所有重要的分析、设计和实现决策的规格说明,使建立的模型准确、无歧异并且完整。
3.构造软件系统的产出
UML不是可视化的编程语言,但它的模型可以直接对应到各种各样的编程语言。例如:它可以使用代码生成器工具将UML模型转换为多种程序设计语言代码,如:可生成C++、XML DTD、JAVA、Visual Basic等语言的代码,或使用反向生成器工具将程序源代码转换为UML;甚至还可以生成关系数据库中的表。
4.为软件系统的产出建立文档
UML可以为系统的体系结构及其所有细节建立文档。