几种典型的面向对象开发方法
几种典型的面向对象开发方法
摘 要
自 80 年代后期以来,相继出现了多种面向对象开发方法,文章主要介绍了其中六种典型的面向对象开发方法,并对它们进行了比较。 UML 的出现意味着开发方法统一化、标准化的新发展,标志着软件自动化的进程又迈进了一步。
关键字
面向对象开发方法 典型 比较
一、引言
随着计算机科学的发展和应用领域的不断扩大,对计算机技术的要求越来越高。特别是当计算机硬件有了飞速发展之后,各种应用领域对软件提出了更高的要求。结构化程序设计语言和结构化分析与设计已无法满足用户需求的变化。发展软件质量,缩短软件开发周期,发展软件可靠性、可扩充性和可重用性迫使软件界人士不断研究新方法、新技术,探索新途径。
面向对象的方法是一种分析方法、设计方法和思维方法。面向对象方法学的出发点和所追求的基本目标是使人们分析、设计与实现一个系统的方法尽可能接近人们认识一个系统的方法。也就是使描述问题的问题空间和解决问题的方法空间在结构上尽可能一致。其基本思想是:对问题空间进行自然分割,以更接近人类思维的方式建立问题域模型,以便对客观实体进行结构模拟和行为模拟,从而使设计出的软件尽可能直接地描述现实世界,构造出模块化的、可重用的、维护性好的软件,同时限制软件的复杂性和降低开发维护费用。
面向对象程序设计方法起源于六十年代末期的语言 SIMULA’67 ,到了七十年代末期,软件行业正受到软件危机的困扰,结构化的开发方法不能够很好地解决软件危机。面向对象语言 Smalltalk 的出现,进一步发展和完善了面向对象的程序设计语言,从此面向对象也和开发方法开始结合,出现了面向对象的开发方法。自 80 年代后期以来,相继出现了多种面向对象开发方法,现将其中几种典型的方法作一个简介和比较。
二、六种典型的面向对象开发方法
1 、 OMT/Rumbaugh
OMT[1]
( Object Modeling Technique )方法最早是由 Loomis , Shan 和 Rumbaugh 在 1987 年提出的,曾扩展应用于关系数据库设计。 Jim Rumbaugh 在 1991 年正式把 OMT 应用于面向对象的分析和设计。这个方法是在实体关系模型上扩展了类、继承和行为而得到的。
OMT
覆盖了分析、设计和实现三个阶段,它包括一组相互关联的概念:类( class )、对象( object )、一般化( generalization )、继承( inheritance )、链( link )、链属性( link attribute )、聚合( aggregation )、操作( operation )、事件( event )、场景( scene )、属性( attribute )、子系统( subsystem )、模块( module )等。
OMT
方法包含分析、系统设计、对象设计和实现四个步骤,它定义了三种模型,这些模型贯穿于每个步骤,在每个步骤中被不断地精化和扩充。这三种模型是:
·
对象模型:用类和关系来刻画系统的静态结构;
·
动态模型:用事件和对象状态来刻画系统的动态特性;
·
功能模型:按照对象的操作来描述如何从输入给出输出结果。
分析的目的是建立可理解的现实世界模型。系统设计确定高层次的开发策略。对象设计的目的是确定对象的细节,包括定义对象的界面、算法和操作。实现对象则在良好的面向对象编程风格的编码原则指导下进行。
2 、 OOD/Booch
OOD[3]
( Object Oriented Design )方法是 Grady Booch 从 1983 年开始研究, 1991 年后走向成熟的一种方法。
OOD
主要包括下述概念:类( class )、对象( object )、使用( uses )、实例化( instantiates )、继承( inherits )、元类( meta class )、类范畴( class category )、消息( message )、域( field )、操作( operation )、机制( mechanism )、模块( module )、子系统( subsystem )、过程( process )等。其中,使用及实例化是类间的静态关系,而动态对象之间仅有消息传递的连接。元类是类的类。类范畴是一组类,它们在一定抽象意义上是类同的。物理的一组类用模块来表达。机制是完成一个需求任务的一组类构成的结构。
Booch
方法在面向对象的设计中主要强调多次重复和开发者的创造性。方法本身是一组启发性的过程式建议。 OOD 的一般过程如下:
( 1 )在一定抽象层次上标识类与对象;
( 2 )标识类与对象的语义;
( 3 )标识类与对象之间的关系(如继承、实例化、使用等);
( 4 )实现类与对象。
3 、 RDD/Wirfs-Brock
RDD[2]
( Responsibility-Driven Design )方法是 Wirfs-Brock 在 1990 年提出的。这是一个按照类、责任以及合作关系对应用进行建模的方法。首先定义系统的类与对象,然后确定系统的责任并划分给类,最后确定对象类之间的合作来完成类的责任。这些设计将进一步按照类层次、子系统和协议来完善。
RDD
方法主要包含以下概念:类( class )、继承( inheritance )、责任( responsibility )、合作( collaboration )、合同( contract )、子系统( subsystem )。对每个类都有不同的责任或角色以及动作。合作是为完成责任而需要与之通信的对象集合。责任进一步精化并被分组为合同。合同又进一步按操作精化为协议。子系统是为简化设计而引入的,是一组类和低级子系统,也包含由子系统中的类及子系统支持的合同。
RDD
分为探索阶段和精化阶段:
( 1 )探索阶段:确定类、每个类的责任以及类间的合作;
( 2 )精化阶段:精化类继承层次、确定子系统、确定协议。
RDD
按照类层次图、合作图、类规范、子系统规范、合同规范等设计规范来完成实现。
4 、 OOAD/Coad-Yourdon
OOAD[3]
( Object-Oriented Analysis and Design )方法是由 Peter Coad 和 Edward Yourdon 在 1991 年提出的。这是一种逐步进阶的面向对象建模方法。
在 OOA 中,分析模型用来描述系统的功能,主要包括以下概念:类( class )、对象( object )、属性( attribute )、服务( service )、消息( message )、主题( subject )、一般 / 特殊结构( Gen-Spec-Structure )、全局 / 部份结构( Whole-Part-Structure )、实例连接( instance connection )和消息连接( message connection )等。其中,主题是指一组特定的类与对象。
OOA
使用了基本的结构化原则,并把它们同面向对象的观点结合起来。
OOA
完成系统分析,包括以下五个步骤:确定类与对象、标识结构、定义主题、定义属性和定义服务。 OOA 本质上是一种面向对象的方法,适用于小型系统的开发。
OOD
负责系统设计,包括以下四个步骤:
( 1 )设计问题域(细化分析结果);
( 2 )设计人机交互部分(设计用户界面);
( 3 )设计任务管理部分(确定系统资源的分配);
( 4 )设计数据管理部分(确定持久对象的存储)。
5 、 OOSE/Jacobson
OOSE[3]
( Object-Oriented Software Engineering )是 Ivar Jacobson 在 1992 年提出的一种使用事例驱动的面向对象开发方法。
OOSE
主要包括下列概念:类( class )、对象( object )、继承( inherits )、相识( acquaintance )、通信( communication )、激励( stimuli )、操作( operation )、属性( attribute )、参与者( actor )、使用事例( use case )、子系统( subsystem )、服务包( service package )、块( block )、对象模块( object module )。相识表示静态的关联关系,包括聚合关系。激励是通信传送的消息。参与者是与系统交互的事物,它表示所有与系统有信息交换的系统之外的事务,因此不关心它的细节。参与者与用户不同,参与者是用户所充当的角色。参与者的一个实例对系统做一组不同的操作。当用户使用系统时,会执行一个行为相关的事物系列,这个系列是在与系统的会话中完成的,这个特殊的系列称为使用事例,每个使用事例都是使用系统的一条途径。使用事例的一个执行过程可以看作是使用事例的实例。当用户发出一个激励之后,使用事例的实例开始执行,并按照使用事例开始事物。事务包括许多动作,事务在收到用户结束激励后被终止。在这个意义上,使用事例可以被看作是对象类,而使用事例的实例可以被看作是对象。
OOSE
开发过程中有以下五种模型,这些模型是自然过渡和紧密耦合的:
·
需求模型包括由领域对象模型和界面描述支持的参与者和使用事例。对象模型是系统的概念化的、容易理解的描述。界面描述刻画了系统界面的细节。需求模型从用户的观点上完整地刻画了系统的功能需求,因此按这个模型与最终用户交流比较容易。
·
分析模型是在需求模型的基础上建立的。主要目的是要建立在系统生命期中可维护、有逻辑性、健壮的结构。模型中有三种对象。界面对象刻画系统界面。实体对象刻画系统要长期管理的信息和信息上的行为。实体对象生存在一个特别的使用事例中。第三种是按特定的使用事例作面向事务的建模的对象。这三种对象使得需求的改变总是局限于其中一种。
·
设计模型进一步精化分析模型并考虑了当前的实现环境。块描述了实现的意图。分析模型通常要根据实现作相应的变化。但分析模型中基本结构要尽可能保留。在设计模型中,块进一步用使用事例模型来阐述界面和块间的通信。
·
实现模型主要包括实现块的代码。 OOSE 并不要求用面向对象语言来完成实现。
·
测试模型包括不同程度的保证。这种保证从低层的单元测试延伸到高层的系统测试。
6 、 VMT/IBM
VMT[1]
( Visual Modeling Technique )方法是 IBM 公司于 1996 年公布的。 VMT 方法结合了 OMT 、 OOSE 、 RDD 等方法的优点,并且结合了可视化编程和原型技术。 VMT 方法选择 OMT 方法作为整个方法的框架,并且在表示上也采用了 OMT 方法的表示。 VMT 方法用 RDD 方法中的 CRC ( Class-Responsibility-Collaboration )卡片来定义各个对象的责任(操作)以及对象间的合作(关系)。此外, VMT 方法引入了 OOSE 方法中的使用事例概念,用以描述用户与系统之间的相互作用,确定系统为用户提供的服务,从而得到准确的需求模型。
VMT
方法的开发过程分为三个阶段:分析、设计和实现。分析阶段的主要任务是建立分析模型。设计阶段包括系统设计、对象设计和永久性对象设计。实现阶段就是用某一种环境来实现系统。
7 、六种方法的比较
·OMT
方法覆盖了应用开发的全过程,是一种比较成熟的方法,用几种不同的观念来适应不同的建模场合,它在许多重要观念上受到关系数据库设计的影响,适合于数据密集型的信息系统的开发,是一种比较完善和有效的分析与设计方法。
·Booch
方法并不是一个开发过程,只是在开发面向对象系统时应遵循的一些技术和 原则。 Booch 方法是从外部开始,逐步求精每个类直到系统被实现。因此,它是一种分治法,支持循环开发,它的缺点在于不能有效地找出每个对象和类的操作。
·RDD
是一种用非形式的技术和指导原则开发合适的设计方案的设计技术。它用交互 填写 CRC 卡片的方法完成设计,对大型系统设计不太适用。 RDD 采用传统的方法确定对象类,有一定的局限性。另外,均匀地把行为分配给类也十分困难。
·
在 OOAD 方法中, OOA 把系统横向划分为五个层次, OOD 把系统纵向划分为四个部分,从而形成一个清晰的系统模型。 OOAD 适用于小型系统的开发。
·OOSE
能够较好地描述系统的需求,是一种实用的面向对象的系统开发方法,适合于商务处理方面的应用开发。
·VMT
基于现有面向对象方法中的成熟技术,采用这些方法中最好的思想、特色、观点以及技术,并把它们融合成一个完整的开发过程。因此 VMT 是一种扬长避短的方法,它提供了一种实用的能够处理复杂问题的建模方法和技术。
三、建模语言 UML
建模语言 UML[4] 最初仅仅是 OMT 方法、 Booch 方法的统一。 1995 年 10 月, Grady Booch 和 Jim Rumbaugh 联合推出了 Unified Method 0.8 版本。这个方法力图实现 OMT 方法和 Booch 方法的统一。同年秋天, Ivar Jacobson 加入了 Booch 和 Rumbaugh 所在的 Rational 软件公司,于是 OOSE 方法也加入了统一的过程中。 1997 年 9 月 1 日产生了 UML 1.1 ,并被提交到了 OMG ( Object Management Group ),同年 11 月被 OMG 采纳。
按照 UML 文件的说法: UML 是一种用于软件系统制品制约的、可视化的构造及建档语言,也可用于业务建模以及其它非软件系统。
从系统模型这一级别上看, UML 表示法由 9 种图构成,它们是:静态结构图( Static Structure Diagram ),其中包括类图( Class Diagram )和对象图( Object Diagram );使用事例图( Use Case Diagram );顺序图( Sequence Diagram );协作图( Collaboration );状态图( Statechart Diagram );活动图( Activity Diagram );实现图( Implementation Diagram ),其中包括成分图( Component Diagram )和展开图( Deployment Diagram )。 UML 的通用表示还有:串( String )、名字( Name )、标签( Label )、关键字( Keyword )、表达式( Expression )、注释( Note )等。
UML
作为一种建模语言,具有以下特点:
·UML
结合了 Booch 方法、 OMT 方法和 OOSE 方法的概念,是一个单一的通用的建模语言;
·UML
的建模能力比其他面向对象方法更强,不仅适合于一般系统的开发,更擅长于并行、分布式系统的建模;
·UML
是一种标准的建模语言,而不是一个标准的开发过程,它完全独立于开发过程。
四、结束语
要想实现软件生产自动化,实现开发方法的统一化、标准化是基本的一条。实现面向对象开发方法的标准化以后,就可以避免不同方法的差异,提高软件重用效率。此外,统一面向对象开发方法,也就是综合每个面向对象方法的优点,最大限度地发挥各种方法的长处。
UML
是一种表达能力丰富的建模语言,而不是一种方法,因此,目前它还不能取代现有的各种面向对象的分析与设计方法。但是,随着 UML 工作的进一步展开,必将有助于实现软件自动化。