比较四种典型面向对象方法的异同.docx
《比较四种典型面向对象方法的异同.docx》由会员分享,可在线阅读,更多相关《比较四种典型面向对象方法的异同.docx(9页珍藏版)》请在冰豆网上搜索。
比较四种典型面向对象方法的异同
普
通
本
科
毕
业
小
论
文
题目:
比较四种典型面向对象法的异同
学院软件与通信工程学院
学生姓名伟聪学号0123992
专业软件工程届别125
指导教师廖汉成
二O一四年九月二十七日
一、引言
随着计算机科学的发展和应用领域的不断扩大,对计算机技术的要求越来越高。
特别是当计算机硬件有了飞速发展之后,各种应用领域对软件提出了更高的要求。
结构化程序设计语言和结构化分析与设计已无法满足用户需求的变化。
发展软件质量,缩短软件开发期,发展软件可靠性、可扩充性和可重用性迫使软件界人士不断研究新法、新技术,探索新途径。
面向对象的法是一种分析法、设计法和思维法。
面向对象法学的出发点和所追求的基本目标是使人们分析、设计与实现一个系统的法尽可能接近人们认识一个系统的法。
也就是使描述问题的问题空间和解决问题的法空间在结构上尽可能一致。
其基本思想是:
对问题空间进行自然分割,以更接近人类思维的式建立问题域模型,以便对客观实体进行结构模拟和行为模拟,从而使设计出的软件尽可能直接地描述现实世界,构造出模块化的、可重用的、维护性好的软件,同时限制软件的复杂性和降低开发维护费用。
面向对象程序设计法起源于六十年代末期的语言SIMULA’67,到了七十年代末期,软件行业正受到软件危机的困扰,结构化的开发法不能够很好地解决软件危机。
面向对象语言Smalltalk的出现,进一步发展和完善了面向对象的程序设计语言,从此面向对象也和开发法开始结合,出现了面向对象的开发法。
自80年代后期以来,相继出现了多种面向对象开发法,现将其中四种典型的法作一个简介和比较。
面向对象法都支持三种基本的活动:
识别对象和类,描述对象和类之间的关系,以及通过描述每个类的功能定义对象的行为。
一.Booch法
Booch是面向对象法最早的倡导者之一,他提出了面向对象软件工程的概念。
1991年,他将以前面向Ada的工作扩展到整个面向对象设计领域。
Booch法的开发模型包括静态模型和动态模型,静态模型分为逻辑模型和物理模型,描述了系统的构成和结构,动态模型分为状态图和时序图。
该法对每一步都作了详细的描述,描述手段丰富、灵活。
不仅建立了开发法,还提出了设计人员的技术要求,不同开发阶段的资源人力配制。
OOD[3](ObjectOrientedDesign)法是GradyBooch从1983年开始研究,1991年后走向成熟的一种法。
OOD主要包括下述概念:
类(class)、对象(object)、使用(uses)、实例化(instantiates)、继承(inherits)、元类(metaclass)、类畴(classcategory)、消息(message)、域(field)、操作(operation)、机制(mechanism)、模块(module)、子系统(subsystem)、过程(process)等。
其中,使用及实例化是类间的静态关系,而动态对象之间仅有消息传递的连接。
元类是类的类。
类畴是一组类,它们在一定抽象意义上是类同的。
物理的一组类用模块来表达。
机制是完成一个需求任务的一组类构成的结构。
Booch法的过程包括以下步骤:
(1)在给定的抽象层次上识别类和对象;
(2)识别这些对象和类的语义;
(3)识别这些类和对象之间的关系;
(4)实现类和对象;
这四种活动不仅仅是一个简单的步骤序列,而是对系统的逻辑和物理视图不断细化的迭代和渐增的开发过程。
类和对象的识别包括找出问题空间中关键的抽象和产生动态行为的重要机制。
开发人员可以通过研究问题域的术语发现关键的抽象。
语义的识别主要是建立前一阶段识别出的类和对象的含义。
开发人员确定类的行为(即法)和类及对象之间的互相作用(即行为的规描述)。
该阶段利用状态转移图描述对象的状态的模型,利用时态图(系统中的时态约束)和对象图(对象之间的互相作用)描述行为模型。
在关系识别阶段描述静态和动态关系模型。
这些关系包括使用、实例化、继承、关联和聚集等。
类和对象之间的可见性也在此时确定。
在类和对象的实现阶段要考虑如用选定的编程语言实现,如将类和对象组织成模块。
在面向对象的设计法中,Booch强调基于类和对象的系统逻辑视图与基于模块和进程的系统物理视图之间的区别。
他还区别了系统的静态和动态模型。
然而,他的法偏向于系统的静态描述,对动态描述支持较少。
Booch法的力量在于其丰富的符号体系,包括:
.类图(类结构-静态视图)
.对象图(对象结构-静态视图)
.状态转移图(类结构-动态视图)
.时态图(对象结构-动态视图)
.模块图(模块体系结构)
.进程图(进程体系结构)
用于类和对象建模的符号体系使用注释和不同的图符(如不同的箭头)表达详细的信息。
Booch建议在设计的初期可以用符号体系的一个子集,随后不断添加细节。
对每一个符号体系还有一个文本的形式,由每一个主要结构的描述模板组成。
符号体系由大量的图符定义,但是,其语法和语义并没有格地定义。
二.OMT法
Rumbaugh等人提出了面向对象的建模技术—OMT(ObjectModellingTechnique)法,采用了面向对象的概念,并引入各种独立于语言的表示符。
OMT法讨论的核心就是建立三类模型:
对象模型、动态模型、功能模型。
对象模型描述了由对象和相应实体构成的系统静态结构,描述了系统中对象的标识,属性、操作及对象的相互关系,该模型使用了对象图来描述,它是分析阶段3个模型的核心,提供了其它两类模型都适用的框架。
主要的概念包括:
a.类;b.属性;c.操作;d.继承;e.关联(即关系);f.聚集。
动态模型根据事件和状态描述了系统的控制结构,系统中与时间和操作顺序有关的容。
如:
标记变化的事件,事件的顺序,定义事件背景的状态等。
其主要概念有:
a.状态;b.子状态和超状态;c.事件;d.行为;e.活动。
功能模型着重描述系统中与值的转换有关的问题,如函数、映射、约束和功能作用等。
其主要概念有:
a.加工;b.数据存储;c.数据流;d.控制流;e.角色。
三类模型描述的角度不同,却又相互联系。
OMT法将开发过程分为四个阶段:
1.分析
基于问题和用户需求的描述,建立现实世界的模型。
分析阶段的产物有:
.问题描述
.对象模型=对象图+数据词典
.动态模型=状态图+全局事件流图
.功能模型=数据流图+约束
2.系统设计
结合问题域的知识和目标系统的体系结构(求解域),将目标系统分解为子系统。
3.对象设计
基于分析模型和求解域中的体系结构等添加的实现细节,完成系统设计。
主要产物包括:
.细化的对象模型
.细化的动态模型
.细化的功能模型
4.实现
将设计转换为特定的编程语言或硬件,同时保持可追踪性、灵活性和可扩展性。
OMT的特点有以下几点:
(1)自底向上的归纳
OMT的第一步是从问题的述入手,构造系统模型。
从真实系统导出类的体系,即对象模型包括类的属性,与子类、父类的继承关系,以及类之间的关联。
类是具有相似属性和行为的一组具体实例(客观对象)的抽象,父类是若干子类的归纳。
因此这是一种自底向上的归纳过程。
在自底向上的归纳过程中,为使子类能更合理地继承父类的属性和行为,可能需要自顶向下的修改,从而使整个类体系更加合理。
由于这种类体系的构造是从具体到抽象,再从抽象到具体,符合人类的思维规律,因此能更快、更便地完成任务。
这与自顶向下的Yourdon法构成鲜明的对照。
在Yourdon法中构造系统模型是最困难的一步,因为自顶向下的"顶"是一个空中楼阁,缺乏坚实的基础,而且功能分解有相当大的任意性,因此需要开发人员有丰富的软件开发经验。
而在OMT中这一工作可由一般开发人员较快地完成。
在对象模型建立后,很容易在这一基础上再导出动态模型和功能模型。
这三个模型一起构成要求解的系统模型。
(2)自顶向下的分解
系统模型建立后的工作就是分解。
与Yourdon法按功能分解不同,在OMT常按服务(Service)来分解。
服务是具有共同目标的相关功能的集合,如I/O处理、图形处理等。
这一步的分解通常很明确,而这些子系统的进一步分解因有较具体的系统模型为依据,也相对容易。
所以OMT也具有自顶向下法的优点,即能有效地控制模块的复杂性,同时避免了Yourdon法中功能分解的困难和不确定性。
(3)OMT的基础是对象模型
每个对象类由数据结构(属性)和操作(行为)组成,有关的所有数据结构(包括输入、输出数据结构)都成了软件开发的依据。
因此Jackson法和PAM中输入、输出数据结构与整个系统之间的鸿沟在OMT中不再存在。
OMT不仅具有Jackson法和PAM的优点,而且可以应用于大型系统。
更重要的是,在Jackson法和PAM法中,当它们的出发点———输入、输出数据结构(即系统的边界)发生变化时,整个软件必须推倒重来。
但在OMT中系统边界的改变只是增加或减少一些对象而已,整个系统改动极小。
(4)需求分析彻底
需求分析不彻底是软件失败的主要原因之一。
OMT彻底解决了这一问题。
因为需求分析过程已与系统模型的形成过程一致,开发人员与用户的讨论是从用户熟悉的具体实例(实体)开始的。
开发人员必须搞清现实系统才能导出系统模型,这就使用户与开发人员之间有了共同的语言,避免了传统需求分析中可能产生的种种问题。
(5)更重要的是OMT彻底解决了软件的可维护性
在OMT之前的软件开发法都是基于功能分解的。
尽管软件工程学在可维护面作出了极大的努力,使软件的可维护性有较大的改进。
但从本质上讲,基于功能分解的软件是不易维护的。
因为功能一旦有变化都会使开发的软件系统产生较大的变化,甚至推倒重来。
更重的是,在这种软件系统中,修改是困难的。
由于种种原因,即使是微小的修改也可能引入新的错误。
所以传统开发法很可能会引起软件成本增长失控、软件质量得不到保证等一系列重问题。
正是OMT才使软件的可维护性有了质的改善。
三.OOSE法
Jacobson于1994年提出了面向对象的软件工程——OOSE法,其最大特点是面向用例(Use-Case),并在用例的描述中引入了外部角色的概念。
usecase是指行为相关的事务(transaction)序列,该序列将由用户在与系统对话中执行。
因此,每一个usecase就是一个使用系统的式,当用户给定一个输入,就执行一个usecase的实例并引发执行属于该usecase的一个事务。
基于这种系统视图,Jacobson将usecase模型与其它五种系统模型关联:
.领域对象模型,即需求模型。
usecase模型根据领域来表示。
.分析模型。
usecase模型通过分析来构造。
.设计模型。
usecase模型通过设计来具体化。
.实现模型。
该模型依据具体化的设计来实现usecase模型。
.测试模型。
用来测试具体化的usecase模型。
OOSE对建立对象模型中对象和用例之间的关系提出了多有用的建议。
Jacobson等人用系统边界、控制和实体对象实现用例的法来建立分析模型,但是在分配系统行为和产生类(class)的过程,要求有一个附加的翻译过程。
OOSE法与上述三种法有所不同,它涉及到整个软件生命期,包括需求分析、设计、实现和测试等四个阶段。
需求分析和设计密切相关,需求分析阶段的活动包括定义潜在的角色(角色指使用系统的人和与系统互相作用的软、硬件环境),识别问题域中的对象和关系,基于需求规说明和角色的需要发现usecase,详细描述usecase。
设计阶段包括两个主要活动,从需求分析模型中发现设计对象,以及针对实现环境调整设计模型。
第一个活动包括从usecase的描述发现设计对象,并描述对象的属性、行为和关联,在这里还要把usecase的行为分派给对象;在需求分析阶段的识别领域对象和关系的活动中,开发人员识别类、属性和关系。
关系包括继承、熟悉(关联)、组成(聚集)和通信关联。
定义usecase的活动和识别设计对象的活动,两个活动共同完成行为的描述。
OOSE法还将对象区分为语义对象(领域对象)、界面对象(如用户界面对象)和控制对象(处理界面对象和领域对象之间的控制)。
Booch是面向对象法最早的倡导者之一,他提出了面向对象软件工程的概念。
1991年,他将以前面向Ada的工作扩展到整个面向对象设计领域。
OMT法用对象模型、动态模型、功能模型和用例模型,共同完成对整个系统的建模,所定义的概念和符号可用于软件开发的分析、设计和实现的全过程,软件开发人员不必在开发过程的不同阶段进行概念和符号的转换。
面向对象的软件工程(OOSE)对建立对象模型中对象和用例之间的关系提出了多有用的建议。
Jacobson等人用系统边界、控制和实体对象实现用例的法来建立分析模型,但是在分配系统行为和产生类(class)的过程,要求有一个附加的翻译过程。
综合分析Booch、OMT、OOSE三类面向对象法,可知Booch比较适合于系统的设计和构造,OMT特别适用于分析和描述以数据为中心的信息系统,OOSE比较适合支持商业工程和需求分析。
4.Coad/Yourdon法
格区分了面向对象分析OOA和面向对象设计OOD
OOA五个层次的活动
1.发现类及对象。
描述如发现类及对象。
从应用领域开始识别类及对象,形成整个应用的基础,然后,据此分析系统的责任。
2.识别结构。
该阶段分为两个步骤。
第一,识别一般-特殊结构,该结构捕获了识别出的类的层次结构;第二,识别整体-部分结构,该结构用来表示一个对象如成为另一个对象的一部分,以及多个对象如组装成更大的对象。
3.定义主题。
主题由一组类及对象组成,用于将类及对象模型划分为更大的单位,便于理解。
4.定义属性。
其中包括定义类的实例(对象)之间的实例连接。
5.定义服务。
其中包括定义对象之间的消息连接。
OOD模型四个部分
问题域部分(PDC)。
面向对象分析的结果直接放入该部分。
人机交互部分(HIC)。
这部分的活动包括对用户分类,描述人机交互的脚本,设计命令层次结构,设计详细的交互,生成用户界面的原型,定义HIC类。
任务管理部分(TMC)这部分的活动包括识别任务(进程)、任务所提供的服务、任务的优先级、进程是事件驱动还是时钟驱动、以及任务与其它进程和外界如通信。
数据管理部分(DMC)。
这一部分依赖于存储技术,是文件系统,还是关系数据库管理系统,还是面向对象数据库管理系统。
参考文献
[1]菁、元庆,2013-2015版,《UML建模设计与分析》,清华大学出版社。
[2]廖汉成,2014,面向对象ppt。