面向对象分析与设计
上QQ阅读APP看书,第一时间看更新

1.2.4 典型的面向对象的开发方法

面向对象方法的产生和发展同样也经历了一个比较漫长的过程。首先出现的是面向对象程序设计语言和面向对象程序设计方法(Object Oriented Programming,OOP),然后是面向对象系统设计(Object Oriented Design,OOD),最后形成的是面向对象分析(Object Oriented Analysis,OOA),随后逐渐出现了面向对象测试(Object Oriented Testing,OOT)、面向对象度量(Object Oriented Software Measurement,OOS)和面向对象管理(Object Oriented Management,OOM)等面向对象开发方法和技术。

典型的面向对象方法包括Coad-Yourdon方法、Rumbaugh方法、Booch方法、Wirfs-Brock方法、Jacobson方法和VMT(Visual Modeling Technique)方法。这些方法既有联系又相互区别,所有这些方法相互补充、相互融合,构成了现代的面向对象开发方法。

1.Coad-Yourdon方法

Coad-Yourdon方法是由Peter Coad和Edward Yourdon在1991年提出的,是一种渐进的面向对象分析与设计方法。

Coad-Yourdon方法将整个开发过程划分为分析(OOA)和设计(OOD)两个阶段。在分析阶段,主要利用定义主题、发现和标识对象、标识服务、标识结构和标识属性五个层次的活动来定义和描述系统的结构和行为。在设计阶段中,在将系统划分为问题论域、用户界面、任务管理和数据管理四个组成部分的基础上,持续和细化这五个层次的活动,完成整个系统的设计。

Coad-Yourdon方法中涉及的主要概念如下。

(1)主题层

主题是对目标系统的结构和行为的一种较高层次的抽象,可以看成是一组关系密切的类组成的集合。将一个系统划分成若干个主题,可以看成是对系统结构进行的一个划分,不同的类(或对象)组合构成不同的主题,所有主题构成了系统的主题层。

主题层的主要工作就是通过定义目标系统的主题实现对系统结构的划分,给出系统的整体框架,从而建立系统结构的概念模型。

(2)对象层

对象层的主要工作是发现和描述对象和类,这可以从应用领域开始,逐步发现和识别基础类和对象,以确定形成整个应用的基础。这个层次的活动要通过分析问题域中目标系统的责任、环境以及系统与环境之间的关系,从而确定对系统有用的类、对象及其责任。

(3)服务层

一个对象对外提供的服务是指对象收到消息后所执行的操作,它描述了系统需要执行的功能和处理。定义服务的目的在于定义对象的行为之间的消息链接。其具体步骤包括标识对象状态、标识必要的服务、标识消息链接和对服务的描述。

(4)结构层

面向对象系统的结构通常表现为层次结构。典型的层次结构包括一般与特殊的类层次结构和整体与部分之间的对象层次结构。一般与特殊之间的类层次结构也就是所谓的继承结构。整体与部分之间的层次结构通常表现为组合、聚合、关联,甚至是依赖等关系。这种结构通常被用来表示一个对象如何成为另一个对象的一部分,以及如何将多个对象组装成更大的对象。结构层活动的主要工作内容就是对这两种结构进行识别和标识。

(5)属性层

属性所描述的主要是对象的状态信息,在任何对象中,属性值表示了该对象的状态信息。属性层的活动中,需要为每个对象找出其在目标系统中所需要的属性,而后将属性安排到适当的位置,找出实例链接,最后进行检查对每个属性应该给出描述,并确定其属性的名字和属性的描述存在哪些特殊的限制(如只读、属性值限定于某个范围之内等)。

Coad-Yourdon方法将系统设计的任务划分为数据管理、任务管理、问题域和人机交互四个子系统的设计。

(1)数据管理子系统

数据管理子系统是指系统中专门用于实现数据管理功能的子系统。其主要功能就是实现系统的数据存储:一方面,规范数据的存储和操作方式,提高数据访问的通用性;另一方面,保证数据存储的安全性、访问的并发性、较好的可维护性。

数据管理部分的设计包括操作设计和数据存储设计两部分。数据存储设计要根据所使用的数据存储管理模式来确定。

(2)任务管理子系统

任务也称为进程,就是执行一系列活动的一段程序,当系统中有许多并发任务时,需要依照各个行为的协调关系进行任务划分,所以,任务管理主要是对系统各种任务进行选择和调整的过程。采用面向对象程序设计方式,每一个对象都是一个独立实体,因此,从概念上讲,不同对象是可以并发工作的,但在实际系统中,许多对象之间往往存在相互依赖关系,而且多个对象可能是由一个处理器处理的。所以,设计任务管理工作时,主要是确定对象之间的关系,包括选择必须同时动作的对象,以及对相互排斥的对象的处理进行调整。根据对象完成的任务及对象之间的关系,进一步设计任务管理子系统。

(3)问题域子系统

问题域子系统设计的主要工作则是对在分析阶段获得的需求模型进行进一步的细化。

在分析阶段,通过详细分析,已获得了问题域的概念模型。进入设计阶段后,则要根据所选择的开发环境和系统的运行环境以及其他技术和管理约束等因素,对分析模型进行细化和完善。

(4)人机交互子系统

人机交互子系统的设计主要是根据在分析阶段获得的需求模型,设计人机交互的实现细节。其基本的设计方法仍然使用面向对象的设计方法,不同的是人机交互子系统的设计还包括了人机界面的结构、界面元素以及界面元素的风格等要素的设计,还涉及与之相关的命令结构等内容的设计。设计过程中,不仅需要关注系统性能方面的质量属性,还需要关注设计的用户界面是否美观,以及是否对用户具有足够的亲和力。

Coad-Yourdon方法将设计任务划分成这四个部分的主要作用在于保证系统的各个部分之间功能的独立。用户界面部分是在分析应用的基础上,确定人机交互的细节;任务管理部分明确任务的类型并设计处理过程;数据管理部分主要是对系统中的数据进行独立的管理,以便系统保证数据的安全性等;人机交互部分实现人机交互的细节,体现为用户界面。这四个部分之间既相互联系又相互独立,以便使任何一个部分的变更都不会影响到系统的其他部分。

2.OMT方法

OMT(Object-Modeling Technique)是一个由Rumbaugh、Blaha、Premerlani、Eddy和Lorensen于1991年提出的用于软件建模和设计的对象建模方法,专门用于开发面向的系统并可用于支持面向对象程序设计。OMT方法描述了系统的对象模型或静态结构。

OMT方法的目的包括:在构建物理实体前就进行测试;与客户通信;可视化(信息的替代表示);降低复杂性。

OMT提出了对象模型、动态模型和功能模型三种主要的模型类型。

对象模型(Object Model):对象模型用于表示建模领域中静态和最稳定的现象。主要概念包括带有属性(Attributes)和操作(Operations)的类和关联(Associations)。聚合(Aggregation)和泛化(Generalization)(含多继承)是预定义的关系。

动态模型(Dynamic Model):动态模型表示了模型的状态/迁移视图,主要概念包括状态(States)、状态之间的迁移(Transitions)、触发迁移的事件(Events)。动作(Actions)可以建模状态内部发生的事件所触发的行为。泛化(Generalization)和聚合(Aggregation)(并发)则是预定义的关系。

功能模型(Functional Model):功能模型讨论模型的处理过程,大致上对应于数据流图(DFD)。主要概念包括过程(Process)、数据存储(Data Store)、数据流(Data Flow)和参与者(Actors)。

OMT是统一建模语言(UML)的前身(Predecessor),许多OMT建模元素都是与UML共有的。简单地说,在数据流图的帮助下,OMT中的功能模型定义了模型中整个内部处理流程的功能。它详细介绍了功能的独立执行过程。

3.Booch方法

Booch方法是一种面向对象软件设计方法,它由对象建模语言、迭代的面向对象开发过程和一组推荐的实践活动组成。

该方法是由GradyBooch在Rational(现属IBM)公司工作期间编写的,发表于1992年,并于1994年进行了修订。该方法被广泛地应用于软件工程领域中的面向对象分析与设计,并受益于丰富的文档和支持工具。

Booch方法的核心概念包括类(Class)、对象(Object)、使用(Uses)、实例化(Instantiates)、继承(Inherits)、元类(Meta Class)、类范畴(Class Category)、消息(Message)、域(Field)、操作(Operation)、机制(Mechanism)、模块(Module)、子系统(Subsystem)和过程(Process)等。其中,使用和实例化是类之间的静态关系;消息是动态对象之间仅有的用于传递消息的连接关系;元类是用于描述类的类;类范畴则是在一定抽象意义上类同的一组类;一组物理的类用可用模块概念来表达;机制则是指完成一个需求任务所需的一组类构成的一个结构。

Booch方法在面向对象设计中主要强调迭代和发挥开发者的创造性。方法本身包含了一组启发式的过程建议。其一般过程如下。

1)在一定抽象层次上标识类与对象。

2)标识类与对象的语义。

3)标识类与对象之间的关系(如继承、实例化、使用等)。

4)实现类与对象。

4.Wirfs-Brock方法

Wirfs-Brock方法也称为责任驱动设计方法(Responsibility-Driven Design,RDD),是Wirfs-Brock在1990年提出的。这是一个按照类、责任以及合作关系对应用进行建模的方法。

该方法首先定义系统的类与对象,然后确定系统的责任并划分给类(对象),最后确定对象(类)之间的合作来履行类的责任。得到的设计还需要进一步按类的层次、子系统和协议来加以完善。

Wirfs-Brock方法的主要概念包括类(Class)、继承(Inheritance)、责任(Responsibility)、协作(Collaboration)、合同(Contract)和子系统(Subsystem)。

每个类都有不同的责任或角色以及动作,协作则是指某个对象为了完成某个责任而需要与之通信的对象集合。责任可进一步精化并被分组为合同。合同又进一步按操作精化为协议。子系统是为简化设计而引入的,是一组类和低级子系统,也包含由子系统中的类及子系统支持的合同。

Wirfs-Brock方法分为探索和精化两个阶段。

1)探索阶段:确定类、每个类的责任以及类之间的合作。

2)精化阶段:精化类继承层次、确定子系统、确定协议。

Wirfs-Brock方法按类层次图、合作图、类规范、子系统规范、合同规范等设计规范来完成系统的设计。

5.Jacobson方法

Jacobson方法也称为OOSE(Object-Oriented Software Engineering)方法,是Ivar Jacobson在1992年提出的一种使用事例驱动的面向对象开发方法。

OOSE方法主要使用了类(Class)、对象(Object)、继承(Inherits)、相识(Acquaintance)、通信(Communication)、激励(Stimulator)、操作(Operation)、属性(Attribute)、参与者(Actor)、用例(Use Case)、子系统(Subsystem)、服务包(Service Package)、块(Block)和对象模块(Object Module)等概念。

相识(Acquaintance)表示静态的关联关系,包括聚合和组合关系。激励(Stimulator)是通信传送的消息。参与者(Actor)是与系统交互的事物,它表示所有与系统有信息交换的系统之外的事物,因此不用关心它的细节。在这个方法中,参与者与用户不同,参与者是用户所充当的角色,二者是不同的两个概念。参与者的一个实例对系统做一组不同的操作,当用户使用系统时,会执行一个行为相关的动作系列,这个系列是在与系统的会话中完成的,这个特殊的系列称为使用事例,每个使用事例都是使用系统的一条途径。使用事例的一个执行过程可以看作是使用事例的实例(Use Case)。当用户发出一个激励(Stimulator)之后,使用事例的实例开始执行,并按照使用事例开始事务。事务包括许多动作,事务在收到用户结束激励后被终止。在这个意义上,使用事例可以被看作是对象类,而使用事例的实例可以被看作是对象。

OOSE开发过程中使用需求、分析、设计、实现和测试五种模型,这些模型之间是自然过渡的,同时也是紧密耦合的。

需求模型则是由领域对象模型以及由参与者和事例组成的描述界面的用例模型组成。其中,对象模型是系统概念化的、容易理解的描述。用例模型则描述了系统界面的交互细节。需求模型从用户的观点上完整地刻画了系统的功能需求,因此按这个模型与最终用户交流比较容易。

分析模型是在需求模型的基础上建立的,主要目的是要在系统生命周期中建立可维护、有逻辑性、健壮的结构。模型中有三种对象:界面对象刻画系统界面,实体对象刻画系统要长期管理的信息和信息上的行为,实体对象生存在一个特别的使用事例中,是按特定的使用事例面向事务建模的对象。这三种对象使得需求的改变总是局限于其中一种。

设计模型进一步精化分析模型并考虑了当前的实现环境。分析模型通常要根据实现做相应的变化。但分析模型中基本结构要尽可能保留。在设计模型中,还需要进一步使用事例模型来阐述界面和块间的通信。

实现模型主要包括实现块的程序代码。OOSE方法并不要求必须使用面向对象语言来完成系统的实现。

测试模型包括了不同程度的保证。这种保证从低层的单元测试延伸到高层的系统测试。

6.VMT/IBM

VMT(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方法是从外部开始,逐步求精每个类直到系统被实现。因此,它是一种分治法,支持循环开发,缺点在于不能有效地找出每个对象和类的操作。

Wirfs-Brock方法(RDD)是一种用非形式的技术和指导原则开发合适的设计方案的设计技术。它用交互填写CRC卡片的方法完成设计,对大型系统设计不太适用。RDD采用传统的方法确定对象类,有一定的局限性。另外,均匀地把行为分配给类也十分困难。

在Coad-Yourdon方法中,OOA把系统横向划分为五个层次,OOD把系统纵向划分为四个部分,从而形成一个清晰的系统模型。OOAD适用于小型系统的开发。

Jacobson方法(OOSE)能够较好地描述系统的需求,是一种实用的面向对象的系统开发方法,适合于商务处理方面的应用开发。

VMT基于现有面向对象方法中的成熟技术,采用这些方法中最好的思想、特色、观点以及技术,并把它们融合成一个完整的开发过程。因此VMT是一种扬长避短的方法,它提供了一种实用的能够处理复杂问题的建模方法和技术。