三个著名的面向对象开发方法摘要主要介绍了3种典型的面向对象开发方法,并对它们进行了比较。
面向对象的方法是一种分析方法、设计方法和思维方法。
面向对象方法学的出发点和所追求的基本目标是使人们分析、设计与实现一个系统的方法尽可能接近人们认识一个系统的方法。
关键字:面向对象;开发方法;OMT;BOOCH;JACOBSON;1.引言面向对象的方法是一种分析方法、设计方法和思维方法。
面向对象方法学的出发点和所追求的基本目标是使人们分析、设计与实现一个系统的方法尽可能接近人们认识一个系统的方法。
也就是使描述问题的问题空间和解决问题的方法空间在结构上尽可能一致。
其基本思想是:对问题空间进行自然分割,以更接近人类思维的方式建立问题域模型,以便对客观实体进行结构模拟和行为模拟,从而使设计出的软件尽可能直接地描述现实世界,构造出模块化的、可重用的、维护性好的软件,同时限制软件的复杂性和降低开发维护费用。
面向对象程序设计方法起源于六十年代末期的simnia语言.Smalltalk语言的出现,进一步发展和完善了面向对象的程序设计语言,从此面向对象与开发方法开始结合,出现了面向对象的开发方法.自80年代后期以来,相继出现了多种面向对象开发方法,现将其中几种典型的方法作一比较分析.2.三种典型的面向对象开发方法2.1 OMT/RumbaughOMT(Object Modeling Technique)方法提出于1987年,曾扩展应用于关系数据库设计.1991年Jim Rumbaugh正式把OMT应用于面向对象的分析和设计.这种方法是在实体关系模型上扩展了类、继承和行为而得到的.OMT覆盖了分析、设计和实现3个阶段,包括一组相互关联的类(class )、对象(object)、一般化(generalization)、继承(inheritance)、链(link)、链属性(link attribute)、聚合(aggregation)、操作(operation)、事件(event)、场景(scene)、属性(attribute)、子系统(subsystem)、模块(module)等概念.OMT方法把分析时收集的信息构造在3种模型中,这些模型贯穿于每个步骤,在每个步骤中被不断地精化和扩充.对象模型用ER图描述问题域中的列象及其相互关系,用类和关系来刻画系统的静态结构,包括系统中的对象、对象之间的关系、类的属性和操作等特征.动态模型用事件和对象状态来刻画系统的动态特性,包括系统对象的事件序列、状态和操作.功能模型按照对象的操作来描述如何从输入给出输出的结果,描述动态模型的动作所定义对象操作的意义。
OMT方法包含分析、系统设计、对象设计和实现4个步骤,它定义了3种模型,这些模型贯穿于每个步骤,在每个步骤中被不断地精化和扩充。
这3种模型是:对象模型,用类和关系来刻画系统的静态结构;动态膜型,用事件和对象状态来刻画系统的动态特性;功能模型,按照对象的操作来描述如何从输人给出输出结果。
分析的目的是建立可理解的现实世界模型。
系统设计确定高层次的开发策略。
对象设计的目的是确定对象的细节,包括定义对象的界面、算法和操作。
实现对象则在良好的面向对象编程风格的编码原则指导下进行。
开发的四个阶段如下:(1)分析。
基于问题和用户需求的描述,建立现实世界的模型。
分析阶段的产物有:●问题描述●对象模型=对象图+数据词典●动态模型=状态图+全局事件流图●功能模型=数据流图+约束(2)系统设计。
结合问题域的知识和目标系统的系统结构(求解域),将目标系统分解为子系统。
(3)对象设计。
基于分析模型和求解域中的体系结构等添加的实现细节,完成系统设计。
主要产物包括:●细化的对象模型●细化的动态模型●细化的功能模型(4)实现。
将设计转换为特定的编程语言或硬件,同时保持可追踪性、灵活性和可扩展性。
OMT方法的一般过程包括分析建立可理解的现实世界模型、系统设计(确定高层次的开发策略和划分子系统)、对象设计(确定对象细节并引入新的中间结果)和实现对象4个步骤.OMT强调对“现实” 的模型化.这里的“现实”是指所面对的实际应用问题,即分析模型是对实际问题的抽象.分析模型中对象之间的关系反映了实际问题中对象之间的关系.2.2 OOD/BoochOOD(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的一般过程:在一定抽象层次上标识类与对象;标识类与对象的语义;标识类与对象之间的关系(如继承、实例化、使用等);实现类与对象。
Booch方法的过程包括以下步骤:(1)在给定的抽象层次上识别类和对象。
(2)识别这些对象和类的语义。
(3)识别这些类和对象之间的关系。
(4)实现类和对象。
这四种活动不仅仅是一个简单的步骤序列,而是对系统的逻辑和物理视图不断细化的迭代和渐增的开发过程。
类和对象的识别包括找出问题空间中关键的抽象和产生动态行为的重要机制。
开发人员可以通过研究问题域的术语发现关键的抽象。
语义的识别主要是建立前一阶段识别出的类和对象的含义。
开发人员确定类的行为和类及对象之间的互相作用。
该阶段利用状态转移图描述对象的状态的模型,利用时态图和对象图描述行为模型。
在关系识别阶段描述静态和动态关系模型。
这些关系包括使用,实例化,继承,关联和聚集等。
类和对象之间的可见性也在此时确定。
在类和对象的实现阶段要考虑如何用选定的编程语言实现,如何将类和对象组织成模块。
在面向对象的设计方法中,Booch强调基于类和对象的系统逻辑视图与基于模块和进程的系统物理视图之间的区别。
还区别了系统的静态和动态模型。
然而,他的方法偏向于系统的静态描述,对动态描述支持较少。
Booch方法的力量在于其丰富的符号体系,包括:●类图(类结构:静态视图)●对象图(对象结构:静态视图)●状态转移图(类结构:动态视图)●时态图(对象结构:动态视图)●模块图(模块体系结构)●进程图(进程体系结构)用于类和对象建模的符号体系使用注释和不同的图符表达详细的信息。
Booch建议在设计的初期可以用符号体系的一个子集,随后不断添加细节。
对每一个符号体系还有一个文本的形式,由每一个主要结构的描述模版组成。
符号体系由大量的图符定义,但是,其语法和语义并没有被严格地定义。
2.3OOSE/JacobsonOOSE (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开发过程中有以下5种模型,这些模型是自然过渡和紧密耦合的:①需求模型包括由领域对象模型和界面描述支持的参与者和使用事例。
对象模型是系统的概念化的、容易理解的描述。
界面描述刻画了系统界面的细节。
需求模型从用户的观点上完整地刻画了系统的功能需求,因此按这个模型与最终用户交流比较容易。
.②分析模型是在需求模型的基础上建立的。
主要目的是要建立在系统生命期中可维护、有逻辑性、健壮的结构。
模型中有3种对象。
界面对象刻画系统界面。
实体对象刻画系统要长期管理的信息和信息上的行为。
实体对象生存在一个特别的使用事例中。
第三种是按特定的使用事例作面向事务的建模的对象。
这3种对象使得需求的改变总是局限于其中一种。
③设计模型进一步精化分析模型并考虑了当前的实现环境。
块描述了实现的意图,分析模型通常要根据实现作相应的变化,但分析模型中基本结构要尽可能保留。
在设计模型中,块进一步用使用事例模型来阐述界面和块间的通信。
④实现模型主要包括实现块的代码。
OOSE并不要求用面向对象语言来完成实现。
⑤测试模型包括不同程度的保证。
这种保证从低层的单元测试延伸到高层的系统测试。
3.三种方法的比较OMT方法覆盖了应用开发的全过程,是一种比较成熟的方法,用几种不同的观念来适应不同的建模场合,它在许多重要观念上受到关系数据库设计的影响,适合于数据密集型的信息系统的开发,是一种比较完善和有效的分析与设计方法。
Booch方法并不是一个开发过程,只是在开发面向对象系统时应遵循的一些技术和原则。
Booch方法是从外部开始,逐步求精每个类直到系统被实现。
因此,它是一种分治法,支持循环开发,它的缺点在于不能有效地找出每个对象和类的操作。
OOSE能够较好地描述系统的需求,是一种实用的面向对象的系统开发方法,适合于商务处理方面的应用开发。