面向对象方法学的基本原则 面向对象方法学认为:客观世界是由各种“对象”所组成的,任何事物都是 对象,每一个对象都有自己的运动 规律和内部状态,每一个对象都属于某个对象“类”,都是该对象类的一个元素。 复杂的对象可以是由相对比较 简单的各种对象以某种方式组成的。不同对象的相互作用就构成了我们要研究 分析和构造的客观系统 面向对象方法学认为:通过类比,发现对象间的相似性,即对象间的共同属 性,这就是构成对象类的根据。 面向对象方法学认为:对于已分成类的各个对象,可以通过定义一组“方法” 来说明该对象的功能,也即是:允许作 用于该对象上的各种操作。对象间的相互联系是通过传递“消息”来完成的。 面向对象方法学比较自然地模拟了人类认识客观世界的方法。即应使描述问 题的问题空间和解决问题的方法空间在结 构上尽可能地一致。我们分析设计和实现一个系统的方法尽可能接近我们认识 个系统的方法 面向对象的基本概念 对象 我们把客观世界的实体称之为问题空间的对象,任何事物都是对象 我们用计算机解题是借助某种语言规定对计算机实体施加某种动作,以此动作 的结果去映射解,我们把计算机实体 称之解空间的对象。 在面向对象的程序设计中,“对象”是系统中的基本运行实体。即对象是具有 特殊属性(数据)和行为方式(方法) 的实体 从动态的观点看,对象的操作就是对象的行为。问题空间对象的行为是极其 丰富的,而解空间对象的行为是极其死 板的。因此,只有借助于极其复杂的算法才能操纵解空间对象而得到解。面向对 象语言提供了“对象”概念,这样,程 序员就可以定义解空间对象 从存储的角度来看,“对象”是一片私有存储,其中有数据也有方法。其它对 象的方法不能直接操纵该对象的私有数 据,只有对象私有的方法才可以操纵它。 从对象的实现来看,“对象”是一台自动机,其中私有数据表示了对象的状态 该状态只能由私有的方法改变它。每 当需要改变对象的状态时,只能由其它对象向该对象发送消息,对象响应消息后 按照消息模式找出匹配的方法,并执行 该方法
面向对象方法学的基本原则 面向对象方法学认为:客观世界是由各种“对象”所组成的,任何事物都是 对象,每一个对象都有自己的运动 规律和内部状态,每一个对象都属于某个对象“类”,都是该对象类的一个元素。 复杂的对象可以是由相对比较 简单的各种对象以某种方式组成的。不同对象的相互作用就构成了我们要研究 分析和构造的客观系统。 面向对象方法学认为:通过类比,发现对象间的相似性,即对象间的共同属 性,这就是构成对象类的根据。 面向对象方法学认为:对于已分成类的各个对象,可以通过定义一组“方法” 来说明该对象的功能,也即是:允许作 用于该对象上的各种操作。对象间的相互联系是通过传递“消息”来完成的。 面向对象方法学比较自然地模拟了人类认识客观世界的方法。即应使描述问 题的问题空间和解决问题的方法空间在结 构上尽可能地一致。我们分析 设计和实现一个系统的方法尽可能接近我们认识 一个系统的方法。 面向对象的基本概念 一 对象 我们把客观世界的实体称之为问题空间的对象,任何事物都是对象。 我们用计算机解题是借助某种语言规定对计算机实体施加某种动作,以此动作 的结果去映射解,我们把计算机实体 称之解空间的对象。 在面向对象的程序设计中,“对象”是系统中的基本运行实体。即对象是具有 特殊属性(数据)和行为方式(方法) 的实体。 从动态的观点看,对象的操作就是对象的行为。问题空间对象的行为是极其 丰富的,而解空间对象的行为是极其死 板的。因此,只有借助于极其复杂的算法才能操纵解空间对象而得到解。面向对 象语言提供了“对象”概念,这样,程 序员就可以定义解空间对象。 从存储的角度来看,“对象”是一片私有存储,其中有数据也有方法。其它对 象的方法不能直接操纵该对象的私有数 据,只有对象私有的方法才可以操纵它。 从对象的实现来看,“对象”是一台自动机,其中私有数据表示了对象的状态, 该状态只能由私有的方法改变它。每 当需要改变对象的状态时,只能由其它对象向该对象发送消息,对象响应消息后 按照消息模式找出匹配的方法,并执行 该方法
对象的特征 1模块性:一个对象是一个可以独立存在的实体。从外部看这个模块,只 了解这个模快具有哪些功能,模快的内 部状态以及如何实现这些功能的细节都是“隐蔽”在模快的内部的。 2继承性和类比性:人们是通过对客观世界中的各种对象进行分类及合并 等方法来认识世界的,每个具体的对象 都是在它所属的某一类对象(类)的层次结构中占据一定的位置。下一层次的对 象继承了上一层次对象的某些属性。 另一方面,不同的对象具有某些相同的属性时,也常常把它们归并成一类 3动态连接性:我们把对象和对象间所具有的统一方便动态地连接和 传递消息的能力与机制称之为动态连接性 4易维护性 二消息和方法 1消息 对象间的相互联系是通过传递消息来实现的。消息用来请求对象执行某一处理或 回答某些信息的要求,消息统一了数 据流和控制流,程序的执行是靠在对象间传递消息来完成的。 发送消息的对象称为发送者,接受消息的对象称为接受者。消息中只包含发送者 的要求,消息完全由接受者解释,接 受者独立决定采用什么方式完成所需的处理。一个对象能接受不同形式不同内容 的多个消息,相同形式的消息可以送 往不同的对象,不同的对象对于形式相同的消息可以有不同的解释,能够做出不 同的反映。对于传来的消息,对象可 以返回响应的回答信息,但这种返回并不是必修的。 消息的形式用消息模式刻画,一个消息模式定义了一类消息,它可以对应内容不 同的消息。对于同一消息模式的不同 消息,同一个对象所做的解释和处理都是相同的,只是处理的结果可能不同。对 象固有处理能力按消息分类,一个消 息模式定义对象的一种处理能力。所以,只要给出对象的所有消息模式及相应于 每一个模式的处理能力,也就定义了 个对象的外部特征。消息模式不仅定义了对象所能受理的消息,而且还定义了 对象的固有处理能力。 2方法 把所有对象分成各种对象类,每个对象类都定义一组所谓的“方法”,它们实际 上可视为允许作用于诶对象上的各 种操作
对象的特征 1 模块性:一个对象是一个可以独立存在的实体。从外部看这个模块,只 了解这个模快具有哪些功能,模快的内 部状态以及如何实现这些功能的细节都是“隐蔽”在模快的内部的。 2 继承性和类比性:人们是通过对客观世界中的各种对象进行分类及合并 等方法来认识世界的,每个具体的对象 都是在它所属的某一类对象(类)的层次结构中占据一定的位置。下一层次的对 象继承了上一层次对象的某些属性。 另一方面,不同的对象具有某些相同的属性时,也常常把它们归并成一类。 3 动态连接性:我们把对象和对象间所具有的统一 方便 动态地连接和 传递消息的能力与机制称之为动态连接性。 4 易维护性 二 消息和方法 1 消息 对象间的相互联系是通过传递消息来实现的。消息用来请求对象执行某一处理或 回答某些信息的要求,消息统一了数 据流和控制流,程序的执行是靠在对象间传递消息来完成的。 发送消息的对象称为发送者,接受消息的对象称为接受者。消息中只包含发送者 的要求,消息完全由接受者解释,接 受者独立决定采用什么方式完成所需的处理。一个对象能接受不同形式不同内容 的多个消息,相同形式的消息可以送 往不同的对象,不同的对象对于形式相同的消息可以有不同的解释,能够做出不 同的反映。对于传来的消息,对象可 以返回响应的回答信息,但这种返回并不是必修的。 消息的形式用消息模式刻画,一个消息模式定义了一类消息,它可以对应内容不 同的消息。对于同一消息模式的不同 消息,同一个对象所做的解释和处理都是相同的,只是处理的结果可能不同。对 象固有处理能力按消息分类,一个消 息模式定义对象的一种处理能力。所以,只要给出对象的所有消息模式及相应于 每一个模式的处理能力,也就定义了 一个对象的外部特征。消息模式不仅定义了对象所能受理的消息,而且还定义了 对象的固有处理能力。 2 方法 把所有对象分成各种对象类,每个对象类都定义一组所谓的“方法”,它们实际 上可视为允许作用于诶对象上的各 种操作
三类和类层次 在面向对象程序设计中,“对象”是程序的基本单位,相似的对象可以归并到一 类中。 类由方法和数据组成,它是关于对象性质的描述,包括外部特性和内部实现两个 方面。类通过描述消息模式极其相应 的处理能力来定义对象的外部特性,通过描述内部状态的表现形式及固有处理能 力的实现来定义对象的内部实现 个类实际上定义的是一种对象类型,它描述了属于该类型的所有对象的性质。 对象是在执行过程中由其所属的类动态生成的,一个类可以生成多个不同的对 象。同一个类的对象具有相同的性质 一个对象的内部状态只能由其自身来修改。因此,同一个类的对象虽然在内部状 态的表现形式上相同,但可有不同的 内部状态。从理论上讲,类是一个抽象数据类型的实现。 个类的上层可以有超类,下层可以有子类,形成一种类层次结构。这种层次结 构的一个重要特点是继承性,一个类 继承其超类的全部描述。这种继承具有传递性。所有,一个类实际上继承了层次 结构中在其上面的所有类的全部描述 因此,属于某个类的对象除具有该类所描述的特性外,还具有层次结构中该类上 面所有类描述的全部特性。 抽象类是一种不能建立实例的类。抽象类将有关的类组织在一起,提供一个公共 的根,其它的子类从这个根派生出来 抽象类刻画了公共行为的特性并将着些特征传给它的子类。通常一个抽象类只描 述与这个类有关的操作接口,或是这 些操作的部分实现,完整的实现被留给一个或几个子类。抽象类已为一个特定的 选择器集合定义了方法,并且着些方 法服从某种语义,所以,抽象类的用途是用来定义一些协议或概念。 综上所述,类是一组对象的抽象,它将该种对象所具有的共同特征集中起来,由 该种对象所共享。在系统构成上,则 形成了一个具有特定功能的模块和一种代码共享的手段 四继承性 继承性是自动的共享类子类和对象中的方法和数据的机制。 每个对象都是某个类的实例,一个系统中类对象是各自封闭的。如果没有继承机 制,则类对象中数据和方法就可能出 现大量的重复 多重继承:如果一个类可以直接继承多个类,则着种继承方式称为多重继承。 简单继承:如果限制一个类至多只有一个超类,着种方式称为简单继承
三 类和类层次 在面向对象程序设计中,“对象”是程序的基本单位,相似的对象可以归并到一 类中。 类由方法和数据组成,它是关于对象性质的描述,包括外部特性和内部实现两个 方面。类通过描述消息模式极其相应 的处理能力来定义对象的外部特性,通过描述内部状态的表现形式及固有处理能 力的实现来定义对象的内部实现。 一个类实际上定义的是一种对象类型,它描述了属于该类型的所有对象的性质。 对象是在执行过程中由其所属的类动态生成的,一个类可以生成多个不同的对 象。同一个类的对象具有相同的性质。 一个对象的内部状态只能由其自身来修改。因此,同一个类的对象虽然在内部状 态的表现形式上相同,但可有不同的 内部状态。从理论上讲,类是一个抽象数据类型的实现。 一个类的上层可以有超类,下层可以有子类,形成一种类层次结构。这种层次结 构的一个重要特点是继承性,一个类 继承其超类的全部描述。这种继承具有传递性。所有,一个类实际上继承了层次 结构中在其上面的所有类的全部描述。 因此,属于某个类的对象除具有该类所描述的特性外,还具有层次结构中该类上 面所有类描述的全部特性。 抽象类是一种不能建立实例的类。抽象类将有关的类组织在一起,提供一个公共 的根,其它的子类从这个根派生出来。 抽象类刻画了公共行为的特性并将着些特征传给它的子类。通常一个抽象类只描 述与这个类有关的操作接口,或是这 些操作的部分实现,完整的实现被留给一个或几个子类。抽象类已为一个特定的 选择器集合定义了方法,并且着些方 法服从某种语义,所以,抽象类的用途是用来定义一些协议或概念。 综上所述,类是一组对象的抽象,它将该种对象所具有的共同特征集中起来,由 该种对象所共享。在系统构成上,则 形成了一个具有特定功能的模块和一种代码共享的手段。 四 继承性 继承性是自动的共享类 子类和对象中的方法和数据的机制。 每个对象都是某个类的实例,一个系统中类对象是各自封闭的。如果没有继承机 制,则类对象中数据和方法就可能出 现大量的重复。 多重继承:如果一个类可以直接继承多个类,则着种继承方式称为多重继承。 简单继承:如果限制一个类至多只有一个超类,着种方式称为简单继承
继承的四种类型 1替代继承:如果我们能够对类T的对象比类E的对象实施更多的操作, 就说类T继承类E,即在类E的对象 处,能够用类T的对象来替代。这种继承是基于方法而非值。 2包含继承:如果类T的每个对象也是类E的对象,则说类T是类E的 子对象。这种继承是基于结构而非操作 3限制继承:如果类E包括满足某种已知限定条件的类T的所有对象,则 类T是类E的一个子类 4特化继承:如果类E的对象是类T的对象,而T带有更多特殊信息,则 类T是类E的子类。 继承性是实现从可重用成分构造软件系统的最有效的特征,它不仅支持系统的可 重用性,而且还促进系统的可扩充性。 五封装性 封装是一种信息隐蔽技术,用户只能见到对象封装界面上的信息,对象内部 对用户是隐蔽的。封装的目的在于将对 象的使用者和对象的设计者分开,使用者不必知道行为实现的细节,只需用设计 者提供的消息来访问该对象。 封装的定义为: 1一个清晰的边界,所有的对象的内部软件的范围被限定在这个边界内。 2一个接口,这个接口描述这个对象和其它对象之间相互的作用。 3受保护的内部实现,这个实现给出了由软件对象提供的功能的细节,实 现细节不能在定义这个对象的类的外面 访问。 面向对象的语言以对象协议或规格说明作为对象的外界面。协议指明该对象 所接受的消息,在对象的内部,每个消 息响应一个方法,方法实施对数据的运算。对数据方法的描述是协议的实现部分 或叫类体。 显式地将对象的定义和对象的实现分开是面向对象系统的一大特色。 六多态性 当同样的消息可以送到一个父类的对象和子类的兑对象上时,这被称作多态 所谓多态即一名字可具有多种语义。在面向对象的语言中,多态引用表示可 引用多个类的实例。由于多态具有可表
继承的四种类型 1 替代继承:如果我们能够对类 T 的对象比类 E 的对象实施更多的操作, 就说类 T 继承类 E,即在类 E 的对象 处,能够用类 T 的对象来替代。这种继承是基于方法而非值。 2 包含继承:如果类 T 的每个对象也是类 E 的对象,则说类 T 是类 E 的 子对象。这种继承是基于结构而非操作。 3 限制继承:如果类 E 包括满足某种已知限定条件的类 T 的所有对象,则 类 T 是类 E 的一个子类 4 特化继承:如果类 E 的对象是类 T 的对象,而 T 带有更多特殊信息,则 类 T 是类 E 的子类。 继承性是实现从可重用成分构造软件系统的最有效的特征,它不仅支持系统的可 重用性,而且还促进系统的可扩充性。 五 封装性 封装是一种信息隐蔽技术,用户只能见到对象封装界面上的信息,对象内部 对用户是隐蔽的。封装的目的在于将对 象的使用者和对象的设计者分开,使用者不必知道行为实现的细节,只需用设计 者提供的消息来访问该对象。 封装的定义为: 1 一个清晰的边界,所有的对象的内部软件的范围被限定在这个边界内。 2 一个接口,这个接口描述这个对象和其它对象之间相互的作用。 3 受保护的内部实现,这个实现给出了由软件对象提供的功能的细节,实 现细节不能在定义这个对象的类的外面 访问。 面向对象的语言以对象协议或规格说明作为对象的外界面。协议指明该对象 所接受的消息,在对象的内部,每个消 息响应一个方法,方法实施对数据的运算。对数据方法的描述是协议的实现部分 或叫类体。 显式地将对象的定义和对象的实现分开是面向对象系统的一大特色。 六 多态性 当同样的消息可以送到一个父类的对象和子类的兑对象上时,这被称作多态 性。 所谓多态即一名字可具有多种语义。在面向对象的语言中,多态引用表示可 引用多个类的实例。由于多态具有可表
示对象的多个类的能力,因而,它既与动态类型有关又与静态类型有关。 多态性支持“同一接口,多种方法”。 面向对象分析 作为一个比较全面的方法,面向对象分析由五个主要步骤组成,即确定类与对 象,识别结构,识别主题,定义属性和 定义方法。一旦建立了模型,就可以由五个层次来表示,它们是 主题层主题给出分析模型的总体概貌。 对象层对象是数据及其处理的抽象。它反映了系统保存和处理现实世界中 某些事物的信息的能力。 结构层结构表示问题域的复杂性。类一成员结构反映了一般一特殊关 系,整体一部分结构反映了整体和部分 的关系。 属性层属性就是数据元素,可用来描述对象或分类结构的实例,可在图中 给出并在对象的存储中定义。 方法层方法是在收到消息后必须进行的处理,在图上定义它并在对象的存 储中指定。 确定类与对象 1什么是类对象 在面向对象分析中对象是一个封装体和抽象体,即是属性和处理这些属性的方 法的封装体以及问题域的抽象体。 类是对一个以上对象的共同属性和方法集合的描述,包括如何在一个类中建立 新对象的描述。 属性以及处理这些属性的方法的封装体对面向对象分析模型的稳定性影响很 大。首先,封装性是可以将属性和方法 看成一个不可分割的整体的基础。第二,封装性有助于减少重复劳动 在面向对象分析中,对问题域中某件事情的抽象是很重要的。事实上,在每次 分析活动中,分析人员必须首先理解 要分析的问题域。而将对象定义为现实世界的抽象,这样有助于深刻理解问题 域,从而获得系统模型。这种模型至 少可以产生一个现实的可观察且可管理的模型层集合,包括主题对象结 构属性和方法。 为什么要识别对象 识别对象的主要目的是为了使一个系统的技术表示同现实世界更为接近。这种 分析的表示和策略是依据人类的三种基本
示对象的多个类的能力,因而,它既与动态类型有关又与静态类型有关。 多态性支持“同一接口,多种方法”。 面向对象分析 作为一个比较全面的方法,面向对象分析由五个主要步骤组成,即确定类与对 象,识别结构,识别主题,定义属性和 定义方法。一旦建立了模型,就可以由五个层次来表示,它们是: 主题层 主题给出分析模型的总体概貌。 对象层 对象是数据及其处理的抽象。它反映了系统保存和处理现实世界中 某些事物的信息的能力。 结构层 结构表示问题域的复杂性。类—成员结构反映了一般 — 特殊关 系,整体 — 部分结构反映了整体和部分 的关系。 属性层 属性就是数据元素,可用来描述对象或分类结构的实例,可在图中 给出并在对象的存储中定义。 方法层 方法是在收到消息后必须进行的处理,在图上定义它并在对象的存 储中指定。 一 确定类与对象 1 什么是类 对象 在面向对象分析中对象是一个封装体和抽象体,即是属性和处理这些属性的方 法的封装体以及问题域的抽象体。 类是对一个以上对象的共同属性和方法集合的描述,包括如何在一个类中建立 新对象的描述。 属性以及处理这些属性的方法的封装体对面向对象分析模型的稳定性影响很 大。首先,封装性是可以将属性和方法 看成一个不可分割的整体的基础。第二,封装性有助于减少重复劳动。 在面向对象分析中,对问题域中某件事情的抽象是很重要的。事实上,在每次 分析活动中,分析人员必须首先理解 要分析的问题域。而将对象定义为现实世界的抽象,这样有助于深刻理解问题 域,从而获得系统模型。这种模型至 少可以产生一个现实的 可观察且可管理的模型层集合,包括主题 对象 结 构 属性和方法。 2 为什么要识别对象 识别对象的主要目的是为了使一个系统的技术表示同现实世界更为接近。这种 分析的表示和策略是依据人类的三种基本
本分析方法的,即对象和属性,类与成员,以及整体和部分。 识别对象的另一个目的是希望建立考察问题域和了解需求的稳定框架。对象只 是相对稳定的,但分析问题的框架 却是稳定的。 最后一个动机是希望在从系统分析向系统设计过渡时不要改变所采用的表示 法 3如何定义对象。 表示法 类-&-对象 类 2)何处去确定对象 问题域文字说明和图形表示都是有助于确定对象的素材 首先应该观察问题域并研究问题域本身 其次是研究文字说明材料。 最后是要仔细地观察各种图形表示 3)哪些可以作为对象 结构。问题域中的结构对确定对象和表示问题域层十分重要。在面向对象分 析中,有专门的一个识别结构的步骤 有关系统。所考虑的系统将以何种方式同有关的系统和外部终端交互 装置。所考虑的系统需要同何种装置交互。 应记忆的事件。系统是否有必要观测和记录时间点和历史事件 所起的作用。在所考虑的系统中,人起什么作用? 地点。所考虑的系统需要什么样的地理知识? 组织结构。人属于哪个机构? 4)应考虑那些内容 如果已找到一个候选对象,是否要放到模型中去?应考虑以下问题 必要的记忆。是否该系统需要记忆某个对象的所有情况?能否描述该对象的实 例?该对象的潜在的属性是什么?是否系统需要记忆与该对象有关的情况?如 果这一切的回答都是否定的,则该对象的存在就值得怀疑了
本分析方法的,即对象和属性,类与成员,以及整体和部分。 识别对象的另一个目的是希望建立考察问题域和了解需求的稳定框架。对象只 是相对稳定的,但分析问题的框架 却是稳定的。 最后一个动机是希望在从系统分析向系统设计过渡时不要改变所采用的表示 法。 3 如何定义对象。 1) 表示法 类-&-对象 类 2)何处去确定对象 问题域 文字说明 和图形表示都是有助于确定对象的素材。 首先应该观察问题域并研究问题域本身。 其次是研究文字说明材料。 最后是要仔细地观察各种图形表示。 3)哪些可以作为对象 结构。 问题域中的结构对确定对象和表示问题域层十分重要。在面向对象分 析中,有专门的一个识别结构的步骤。 有关系统。 所考虑的系统将以何种方式同有关的系统和外部终端交互? 装置。 所考虑的系统需要同何种装置交互。 应记忆的事件。 系统是否有必要观测和记录时间点和历史事件。 所起的作用。 在所考虑的系统中,人起什么作用? 地点。 所考虑的系统需要什么样的地理知识? 组织结构。 人属于哪个机构? 4)应考虑那些内容 如果已找到一个候选对象,是否要放到模型中去?应考虑以下问题 必要的记忆。是否该系统需要记忆某个对象的所有情况?能否描述该对象的实 例?该对象的潜在的属性是什么?是否系统需要记忆与该对象有关的情况?如 果这一切的回答都是 否定的,则该对象的存在就值得怀疑了
必要的方法。系统是否需要该对象提供的方法? 个以上的属性 共同属性。能否识别一组每个对象都有的属性? 共同的方法。能否识别一组共同的方法? 5)对什么提出否定意见 并非必要的记忆 并非必要的方法 单个实例; 派生结果 6)为对象命名 对象名应该能描述对象的实例的基本特征 识别结构 1什么是结构 从一般意义上来说,结构是一种思维组织的方式。在面向对象分析中,结构是问 题域复杂关系的表示,它与系统的任务直接相关。结构有一般 特殊结构和 整体 部分结构 2为什么要定义结构 识别结构能使分析人员的注意力集中在多个类和对象的复杂问题上。使用结构能 使分析人员考虑到问题的边缘,并揭示那些尚未发现的类和对象。 3定义一般一特殊结构的策略 将每个类看成一般类。针对它的潜在特殊类提出以下问题: 它是属于该问题域吗? 它是该系统的任务吗? 存在继承性吗? 特殊类满足类与对象的准则吗? 再以类似的方式,将每个类考虑为特殊类,并对它的潜在一般类提出同样的问题。 采用继承来显式表达属性和方法的共同部分,可以实现在一般特殊结构中恰当 地分配属性和方法。将共同的属性和方法放在上层,而将特有的属性和方法放在 下层 每个一般特殊结构均形成层次或网络 网络能描述复杂的特殊类;能有效地表示公共部分;对模型的复杂程度影响较少
必要的方法。系统是否需要该对象提供的方法? 一个以上的属性。 共同属性。能否识别一组每个对象都有的属性? 共同的方法。能否识别一组共同的方法? 5)对什么提出否定意见 并非必要的记忆; 并非必要的方法; 单个实例; 派生结果 6)为对象命名 对象名应该能描述对象的实例的基本特征。 二 识别结构 1 什么是结构 从一般意义上来说,结构是一种思维组织的方式。在面向对象分析中,结构是问 题域复杂关系的表示,它与系统的任务直接相关。结构有一般 —— 特殊结构和 整体 —— 部分结构。 2 为什么要定义结构 识别结构能使分析人员的注意力集中在多个类和对象的复杂问题上。使用结构能 使分析人员考虑到问题的边缘,并揭示那些尚未发现的类和对象。 3 定义一般 — 特殊结构的策略 将每个类看成一般类。针对它的潜在特殊类提出以下问题: 它是属于该问题域吗? 它是该系统的任务吗? 存在继承性吗? 特殊类满足类与对象的准则吗? 再以类似的方式,将每个类考虑为特殊类,并对它的潜在一般类提出同样的问题。 采用继承来显式表达属性和方法的共同部分,可以实现在一般 特殊结构中恰当 地分配属性和方法。将共同的属性和方法放在上层,而将特有的属性和方法放在 下层。 每个一般 特殊结构均形成层次或网络。 网络能描述复杂的特殊类;能有效地表示公共部分;对模型的复杂程度影响较少
泛化一特化结构表示法 用类作为泛 化类 4定义整体部分结构的策略 策略由两部分组成,首先,当确定潜在的整体部分结构时,考虑以下的变种情 况 总成 部件 容器 内容 集合 成员 然后在将每个对象看成整体的前提下,针对它的潜在部分,考虑下列问题: 是否属于该问题域? 是否属于该系统的任务? 所反映的是多个状态值吗? 是否提供了有价值的抽象? 同样,在将每个对象看成部分的前提下,对每个潜在的整体考虑同样的问题, 目 0 整体一部分结构表示法 总成一部件关系 识别主题 什 么是主题 在面向对象分析中,主题是一种知道读者或用户研究大型复杂模型的机制 在初步面向对象分析的基础上,主题有助于分解大型项目 主题所提供的机制可控制一个用户必须同时考虑的模型数目。同时它还可以给出 面向对象分析模型的总体概貌。 主题所依据的原理是整体—部分关系的扩充。因此,识别主题的主要基础是以泛 化—特化结构和整体一部分结构为标志的问题复杂性。在这种方式下,主题就是 用来同整个问题域和系统任务这个“总体”进行通讯的“部分”。 2 为
泛化 — 特化结构表示法 用类作为泛 化类 4 定义整体 部分结构的策略 策略由两部分组成,首先,当确定潜在的整体 部分结构时,考虑以下的变种情 况: 总成 —— 部件 容器 —— 内容 集合 —— 成员 然后在将每个对象看成整体的前提下,针对它的潜在部分,考虑下列问题: 是否属于该问题域? 是否属于该系统的任务? 所反映的是多个状态值吗? 是否提供了有价值的抽象? 同样,在将每个对象看成部分的前提下,对每个潜在的整体考虑同样的问题。 1,m 1,m 户 0,m 1 1 0,1 整体—部分结构表示法 总成—部件关系 三 识别主题 1. 什 么是主题 在面向对象分析中,主题是一种知道读者或用户研究大型复杂模型的机制。 在初步面向对象分析的基础上,主题有助于分解大型项目。 主题所提供的机制可控制一个用户必须同时考虑的模型数目。同时它还可以给出 面向对象分析模型的总体概貌。 主题所依据的原理是整体—部分关系的扩充。因此,识别主题的主要基础是以泛 化—特化结构和整体—部分结构为标志的问题复杂性。在这种方式下,主题就是 用来同整个问题域和系统任务这个“总体”进行通讯的“部分”。 2. 为
什么要识别主题 人类的短期记忆能力限于一次记忆5—9个对象。这就是著名的7加减2原则。 面向对象分析从控制可见性和知道读者的注意力这两个方面来贯彻这一原则。首 先通过控制分析人员能见到的层次数目来控制可视性;其次可以对读者进行引 导。面向对象分析增加了一个主题层,它可以从一个相当高的层次来表示总体模 型。该主题曾能知道读者观察模型,总结问题域的主题。 何定义主题 选 择主题 为了选择主题,应该 为每个结构相应地增加一个主题 为每个对象相应地增加一个主题。 如果主题的数目超过7,则进一步精炼主题。在识别属性和方法的阶段,一旦确 定了对象和结构之间的连接关系,就可以将紧密耦合的主题结合起来以便得到更 好的主题层。 2) 精 炼主题 为了精炼主题,可从问题域和接口两方面入手。 使用问题子领域来精炼主题:就是按领域而不是按功能分解的方式来确定主题。 通过使对象间的依赖性最小和交互最少的原则来确定主题:对象间依赖性是由结 构和实例连接来表示,而交互则是由消息连接来表示的 3) 构 造主题 在主题层上标出主题以及主题间的消息连接。 为主题编号。为了方便通信,每层都要形成一个按主题来分组的图。 将主题画成一个小方框并取一个适当的名字。连接在案主题层上显示,它反 映了该主题和其它主题之间的关系 4)何时引入主题 何时引入主题取决于模型本身的复杂性。对一个很小的系统来说,也许不需 要主题层;对有较多的对象的系统,应该首先识别对象和结构,然后再识别主题 对很大的项目需要首先识别主题。 定义属性 什 么是属性 在面向对象分析中,“属性”被定义用来反映问题域和系统的任务。一个属性就
什么要识别主题 人类的短期记忆能力限于一次记忆 5—9 个对象。这就是著名的 7 加减 2 原则。 面向对象分析从控制可见性和知道读者的注意力这两个方面来贯彻这一原则。首 先通过控制分析人员能见到的层次数目来控制可视性;其次可以对读者进行引 导。面向对象分析增加了一个主题层,它可以从一个相当高的层次来表示总体模 型。该主题曾能知道读者观察模型,总结问题域的主题。 3. 如 何定义主题 1) 选 择主题 为了选择主题,应该: 为每个结构相应地增加一个主题。 为每个对象相应地增加一个主题。 如果主题的数目超过 7,则进一步精炼主题。在识别属性和方法的阶段,一旦确 定了对象和结构之间的连接关系,就可以将紧密耦合的主题结合起来以便得到更 好的主题层。 2) 精 炼主题 为了精炼主题,可从问题域和接口两方面入手。 使用问题子领域来精炼主题:就是按领域而不是按功能分解的方式来确定主题。 通过使对象间的依赖性最小和交互最少的原则来确定主题:对象间依赖性是由结 构和实例连接来表示,而交互则是由消息连接来表示的。 3) 构 造主题 在主题层上标出主题以及主题间的消息连接。 为主题编号。为了方便通信,每层都要形成一个按主题来分组的图。 将主题画成一个小方框并取一个适当的名字。连接在案主题层上显示,它反 映了该主题和其它主题之间的关系。 4)何时引入主题 何时引入主题取决于模型本身的复杂性。对一个很小的系统来说,也许不需 要主题层;对有较多的对象的系统,应该首先识别对象和结构,然后再识别主题; 对很大的项目需要首先识别主题。 四 定义属性 1. 什 么是属性 在面向对象分析中,“属性”被定义用来反映问题域和系统的任务。一个属性就
是一些数据(状态信息),它在类的每个对象中均有自己的值 为 什么要定义属性 主要原因是属性能为“类-&-对象”以及结构提供更多的细节 属性的值(状态)将由该对象的方法来处理。我们把属性和对这些属性进行操作 的方法靠成一个不可分割的整体。 随着时间的推移,问题域的“类”保持稳定,但属性却可能改变。 何定义属性 别属性 首先要明白某个类的对象应该描述什么东西?从单个对象的角度来看,需要询问 以下问题: 般情况下怎样描述该对象? 在本问题域中怎样描述该对象? 在本系统的主要上下文中怎样描述该对象? 紧接着询问以下问题 该对象需要了解什么? 该对象需要记住什么状态信息? 该对象能处于什么状态? 同时回忆从前对相同和类似问题域实行面向全国对象分析的结果。看哪些属性可 以重新使用。在定义属性方面可吸取哪些教训? 在原子概念的层次上标识属性,使每个属性只代表一个“原子概念”,它可以是 个单独的数据单元,也可以是数据单元的一个自然组合。表示“原子概念”的 动机是为了产生一个供人观察的简单模型,该模型可能只有几个属性名和自然数 据组。 2) 位属性 将每个属性放到它最合适的类-&-对象中。在大多数情况下,这是直接的 对于泛化—特化结构中的类,如果将某个属性放到结构的最上端的类,则该属性 适合它所有的特化类。如果每个属性适合于某层的所有特化类,则应将它向上移 动到响应的泛化类 如果你发现某个属性有时有值,而有时又没有值,则应研究该泛化一特化结构, 看是否存在着另外一个泛化一特化结构 3) 别实例连接 属性可以描述对象状态,而实例连接则加强了这种描述能力 一个实例连接就是一个问题域映射模型,该模型反映了某个对象对其它对象的需
是一些数据(状态信息),它在类的每个对象中均有自己的值。 2. 为 什么要定义属性 主要原因是属性能为“类-&-对象”以及结构提供更多的细节。 属性的值(状态)将由该对象的方法来处理。我们把属性和对这些属性进行操作 的方法靠成一个不可分割的整体。 随着时间的推移,问题域的“类”保持稳定,但属性却可能改变。 3. 如 何定义属性 1) 识 别属性 首先要明白某个类的对象应该描述什么东西?从单个对象的角度来看,需要询问 以下问题: 一般情况下怎样描述该对象? 在本问题域中怎样描述该对象? 在本系统的主要上下文中怎样描述该对象? 紧接着询问以下问题: 该对象需要了解什么? 该对象需要记住什么状态信息? 该对象能处于什么状态? 同时回忆从前对相同和类似问题域实行面向全国对象分析的结果。看哪些属性可 以重新使用。在定义属性方面可吸取哪些教训? 在原子概念的层次上标识属性,使每个属性只代表一个“原子概念”,它可以是 一个单独的数据单元,也可以是数据单元的一个自然组合。表示“原子概念”的 动机是为了产生一个供人观察的简单模型,该模型可能只有几个属性名和自然数 据组。 2) 定 位属性 将每个属性放到它最合适的类-&-对象中。在大多数情况下,这是直接的。 对于泛化—特化结构中的类,如果将某个属性放到结构的最上端的类,则该属性 适合它所有的特化类。如果每个属性适合于某层的所有特化类,则应将它向上移 动到响应的泛化类。 如果你发现某个属性有时有值,而有时又没有值,则应研究该泛化—特化结构, 看是否存在着另外一个泛化—特化结构。 3) 识 别实例连接 属性可以描述对象状态,而实例连接则加强了这种描述能力。 一个实例连接就是一个问题域映射模型,该模型反映了某个对象对其它对象的需