普通本科毕业小论文题目:比较四种典型面向对象方法的异同学院软件与通信工程学院学生姓名张伟聪学号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年,他将以前面向Ad