面向对象设计(OOD)方法与步骤

   尽管对OOD的地位和作用已经有一定的知识,但目前还没有现成的,形式化的方法论。相应的工具也处于研究之中。下面简要介绍OOD的基本方法和步骤

    1.类的认定
    OOD中关于类的认定与OOA中关于对象的认定有着密切关系。但是OOD中对类的认定,不能像OOA中那样以准确反映问题空间为衡量准则,更多的要考虑通过对类以及类层次结构的认定,寻找解空间的基本结构,并为实现提供有效的支持。

    关于如何认定类现在还没有严格的准则,对于下面的经验准则,人们已经得到了共识。认为这些准则有助于认定、定义类与方法(这里方法与OOA中服务相对应)。

    (1)对于问题空间中自然出现的实体,用类进行模型化;
    (2)将方法设计成单用途的;
    (3)如果需要对已有方法进行扩展,就设计一个新的方法;
    (4)避免冗长的方法;
    (5)把那些为多个方法或某个子类所需要的数据,存贮存实例变量中;
    (6)为类库设计,不要只为你自己或者你目前的应用设计

    2.类的设计

    在任何的面向对象应用中,类实例是系统的主要部分,而且如果采用纯面向对象的方法,那么整个系统就是由类实例组成的。因此,每个独立的类的设计对整个应用系统都有影响。在进行类的设计时,应考虑下面一些因素:

    (1)类的公共接口的单独成员应该是类的操作符;
    (2)类A的实例不应该直接发送消息给类B的成分;
    (3)操作符是公共的当且仅当类实例的用户可用;
    (4)属于类的每个操作符要么访问要么修改类的某个数据;
    (5)类必须尽可能少地依赖其他类;
    (6)两个类之间的互相作用应该是显式的;
    (7)采用子类继承超类的公共接口,开发子类成员为超类的特化;
    (8)继承结构的根类应该是目标概念的抽象模型。

    3.类层次结构的组织

    OOD中类层次结构的组织与OOA采用的策略是相似的,但在涉及递增开发时将有不同。OOA基于分类的概念,利用现实世界中对事物分类来认定对象及其分类结构,再导出相应的类层次结构。但是如果考虑重用已有的类层次结构,就会出现问题。从设计和实现的角度来看,需要类层次结构中的非叶结构点,也可以有实例。在这一点上,需要设计人员有扎实的面向对象概念基础,有丰富的经验,因而是掌握OOD和OOA的难点之一。

    支持重用是OOD的主要任务,继承机制支持两种层次的重用。在高层设计阶段,继承性可用作泛化 特化关系的建模工具。使用继承机制促进开发出有意义的高级抽象,进而有助于重用。继承关系的重用性使得设计者能够在抽象中识别一般性,并从一般产生高级抽象。通过识别这种一般性,并把它从的较高的抽象中移出来,它就在当前或今后的设计中变成可重用。

    在详细设计阶段,继承性支持已有类作为新定义类的重用基础,可以把已有的部分代码复制到新子类中并修改,以适应其新的目的。继承性在已有类和新的类之间建立了一种依赖关系,子类的新代码不引起旧代码失效,继承的代码被自动地包含在新定义中,并作为新类的定义被编译。对已有的类的任何修改都被归并到下次编译的新类中。

  4.类模块之间的接口技术

    类之间的接口是中的一个关键,接口的方法大致有以下几类:

    (1)通过继承机制实现类之间的接口

    第一种方法是可定义两层或多层:描述接口的通用类以及提供各种实现的子类(例如以列表作为通用类,以堆栈,队列等作为列表的实现),从而实现同一接口,不同实现的接口方法。第二种方法使用继承机制实现类模块接口对称目的:采用几种接口到基本模块中,通过继承的正交性与输出机制来实现此方法。通用类不作输出,而多个子类执行不同的输出。例如银行的账目作为通用类,而由不同的用户来实现对它的查询。

    (2)使类实例具有人工智能的状态机和主动数据结构

    在定义类实现抽象数据类型及数据抽象时,将这些抽象设置于“主动”方式。也就是说,类实例不仅作为信息的被动集合,而且可看作具有内部状态及局部存储的状态机。这为类之间接口提供了有用的方法。

    5.对类库和应用构架的支持

    OOD的最终目标是把方法和实例变量放在类库中抽象层次尽可能高的类中,一个方法在类库的类层次结构中的层次越高,能够共享这个方法的子类就越多,以这种方式进行设计,就使重用达到了最大的可能限度。由于类库的目标是支持重用,所以纳入类库的类层次结构必须仔细加以推敲。这里主要指从有利于重用的角度来设计。尽管这方面还没有形式化的方法论,因而也没有完全自动化的工具,但可从下面3个方面着手:

    (1)改善标准的协议,在面对象系统中,消息传递是对象之间通信的唯一方式,从通信的角度来看,消息的内容便是对象之间的通信协议。应提高协议的标准化程度,如:为相应的方法设计一致的接口;限制消息中的参数个数;简化方法的功能等。

    (2)提高类的抽象程度,对于一个健全的类库来说,它的层次结构在进行若干层次的子类设计后,应当是深而窄的。这是因为,如果类层次结构中的层次较多。而每一层上的类少,就表明对象的共有特性经过了比较细致的分层次抽象,使用类的特殊性逐渐增强,因而能够提供较多的、在特定应用范畴内可普遍适用的类。

    (3)认定和培育构架,类库中的类就象一般建筑预制件,可以复杂到整个单元居室,也可以简单到梁柱,规格比较标准,容易被独立使用。但需要应用开发人员自己根据应用特征进行组装,因此类库本身并不是重用的基本单位。相对地,构架则是以构件之间有密切的联系为特征,面向特定的应用范畴,以整个构架而不是其中的单个构件来体现它的能量,因此构架本身是重用的基本单位,一旦与应用特征相符,就可以整体被重用。所以,构架是OOD是理想的目标。

你可能感兴趣的:(面向对象分析与设计,数据结构,工具,任务,扩展,存储)