1.3面向对象的分析方法 面向对象分析 作为一个比较全面的方法,面向对象分析由五个主要步骤组成,即确定类 与对象,识别结构,识别主题,定义属性和定义方法。一旦建立了模型,就可 以由五个层次来表示,它们是: 主题层主题给出分析模型的总体概貌 对象层对象是数据及其处理的抽象。它反映了系统保存和处理现实世界 中某些事物的信息的能力 结构层结构表示问题域的复杂性。类一成员结构反映了一般——特殊关 系,整体一一部分结构反映了整体和部分的关系 属性层属性就是数据元素,可用来描述对象或分类结构的实例,可在图 中给出并在对象的存储中定义。 方法层方法是在收到消息后必须进行的处理,在图上定义它并在对象的 存储中指定 确定类与对象 、什么是类、对象 在面向对象分析中对象是一个封装体和抽象体,即是属性和处理这些属性 的方法的封装体以及问题域的抽象体。类是对一个以上对象的共同属性和方法 集合的描述,包括如何在一个类中建立新对象的描述 属性以及处理这些属性的方法的封装体对面向对象分析模型的稳定性影响 很大。首先,封装性是可以将属性和方法看成一个不可分割的整体的基础。第 ,封装性有助于减少重复劳动 在面向对象分析中,对问题域中某件事情的抽象是很重要的。事实上,在 每次分析活动中,分析人员必须首先理解要分析的问题域。而将对象定义为现 实世界的抽象,这样有助于深刻理解问题域,从而获得系统模型。这种模型至 少可以产生一个现实的可观察且可管理的模型层集合,包括主题、对象、结构、 属性和方法 系统模型还为上下文的初始表示奠定了基础。上下文树是由系统分析人员 在分析过程中画出来用于技术决策的。系统上下文表明该系统包含有几个问题 域、要保存什么样的数据、处理的复杂程度如何等。系统上下文有着“四重约 束”,即预算、进度、性能和人员。为了使一个项目顺利进行,必须满足所有这 四个约束 2、为什么要识别对象 识别对象的主要目的是为了使一个系统的技术表示同现实世界更为接近。 这种分析的表示和策略是依据人类的3种基本分析方法的,即对象和属性, 与成员,以及整体和部分 识别对象的另一个目的是希望建立考察问题领域和了解需求的稳定框架
1. 3 面向对象的分析方法 面向对象分析 作为一个比较全面的方法,面向对象分析由五个主要步骤组成,即确定类 与对象,识别结构,识别主题,定义属性和定义方法。一旦建立了模型,就可 以由五个层次来表示,它们是: 主题层 主题给出分析模型的总体概貌。 对象层 对象是数据及其处理的抽象。它反映了系统保存和处理现实世界 中某些事物的信息的能力。 结构层 结构表示问题域的复杂性。类—成员结构反映了一般——特殊关 系,整体——部分结构反映了整体和部分的关系。 属性层 属性就是数据元素,可用来描述对象或分类结构的实例,可在图 中给出并在对象的存储中定义。 方法层 方法是在收到消息后必须进行的处理,在图上定义它并在对象的 存储中指定。 一、 确定类与对象 1、什么是类、对象 在面向对象分析中对象是一个封装体和抽象体,即是属性和处理这些属性 的方法的封装体以及问题域的抽象体。类是对一个以上对象的共同属性和方法 集合的描述,包括如何在一个类中建立新对象的描述。 属性以及处理这些属性的方法的封装体对面向对象分析模型的稳定性影响 很大。首先,封装性是可以将属性和方法看成一个不可分割的整体的基础。第 二,封装性有助于减少重复劳动。 在面向对象分析中,对问题域中某件事情的抽象是很重要的。事实上,在 每次分析活动中,分析人员必须首先理解要分析的问题域。而将对象定义为现 实世界的抽象,这样有助于深刻理解问题域,从而获得系统模型。这种模型至 少可以产生一个现实的 可观察且可管理的模型层集合,包括主题、对象、结构、 属性和方法。 系统模型还为上下文的初始表示奠定了基础。上下文树是由系统分析人员 在分析过程中画出来用于技术决策的。系统上下文表明该系统包含有几个问题 域、要保存什么样的数据、处理的复杂程度如何等。系统上下文有着“四重约 束”,即预算、进度、性能和人员。为了使一个项目顺利进行,必须满足所有这 四个约束。 2、为什么要识别对象 识别对象的主要目的是为了使一个系统的技术表示同现实世界更为接近。 这种分析的表示和策略是依据人类的 3 种基本分析方法的,即对象和属性,类 与成员,以及整体和部分。 识别对象的另一个目的是希望建立考察问题领域和了解需求的稳定框架
对象只是相对稳定的,但分析问题的框架却是稳定的。 最后一个动机是希望在从系统分析向系统设计过渡时不要改变所采用的表 示法。如多年来在分析中使用的是网络组织(数据流程图),而在设计中使用的 则是层次组织(结构图)。这一状况使开发者感到十分不便,无法跟踪开发过程。 为此可以通过在分析、设计和实现三个阶段均采用面向对象的表示法来改进这 局面 3、如何定义对象 (1)、表示法 类&-对象 (2)何处去确定对象 问题域、文字说明和图形表示都是有助于确定对象的素材 首先应该观察问题域并研究问题域本身。问题域是用户的世界,用户一般 在问题域中给出或隐含地给出某种形式的需求,这些需求可能是几句话的描述, 也可能是大段的叙述。 其次是研究文字说明材料。让用户提供一个详细的专题报告,并从专业书 籍中找到该问题域的权威描述,这种方法有助于了解某个专题的基本知识和术 语,同时这样一种调研也可尽快掌握问题域的概貌。在阅读时,重点注意名词, 但不能简单地把这些名词声明为对象 最后是要仔细地观察各种图形表示。收集所能拿到的任何图形表示,包括 方块图、接口图、系统部件图和高层次的数据/控制流程图等,并用图符和它 们之间的连线的方式画出问题域的草图。 (3)哪些可以作为对象 为了确定潜在的对象,需要首先确定问题域的结构、有关系统、装置、所 记忆的事件、所起的作用、地点和组织机构。下面按其用途的大小不依次考虑 这些问题。 结构。问题域中的结构对确定对象和表示问题域层十分重要。在面向对象 分析中,有专门的一个识别结构的步骤。在结构当中,最为重要的就是泛化 一特化结构和整体—一部分结构(后面详细叙述)。 有关系统。所考虑的系统将以何种方式同有关的系统和外部终端交互?如 无线或者是有线。 装置。所考虑的系统需要同何种装置进行交互(交换数据和控制信息) 要注意的是不要从实现上而应从功能上来考虑,以便出在具体实现变化时,无 须作太多的重复性劳动
对象只是相对稳定的,但分析问题的框架却是稳定的。 最后一个动机是希望在从系统分析向系统设计过渡时不要改变所采用的表 示法。如多年来在分析中使用的是网络组织(数据流程图),而在设计中使用的 则是层次组织(结构图)。这一状况使开发者感到十分不便,无法跟踪开发过程。 为此可以通过在分析、设计和实现三个阶段均采用面向对象的表示法来改进这 一局面。 3、如何定义对象。 (1)、表示法 类-&-对象 类 (2)何处去确定对象 问题域、文字说明和图形表示都是有助于确定对象的素材。 首先应该观察问题域并研究问题域本身。问题域是用户的世界,用户一般 在问题域中给出或隐含地给出某种形式的需求,这些需求可能是几句话的描述, 也可能是大段的叙述。 其次是研究文字说明材料。让用户提供一个详细的专题报告,并从专业书 籍中找到该问题域的权威描述,这种方法有助于了解某个专题的基本知识和术 语,同时这样一种调研也可尽快掌握问题域的概貌。在阅读时,重点注意名词, 但不能简单地把这些名词声明为对象。 最后是要仔细地观察各种图形表示。收集所能拿到的任何图形表示,包括 方块图、接口图、系统部件图和高层次的数据/控制流程图等,并用图符和它 们之间的连线的方式画出问题域的草图。 (3)哪些可以作为对象 为了确定潜在的对象,需要首先确定问题域的结构、有关系统、装置、所 记忆的事件、所起的作用、地点和组织机构。下面按其用途的大小不依次考虑 这些问题。 结构。 问题域中的结构对确定对象和表示问题域层十分重要。在面向对象 分析中,有专门的一个识别结构的步骤。在结构当中,最为重要的就是泛化— —特化结构和整体——部分结构(后面详细叙述)。 有关系统。 所考虑的系统将以何种方式同有关的系统和外部终端交互?如 无线或者是有线。 装置。 所考虑的系统需要同何种装置进行交互(交换数据和控制信息)。 要注意的是不要从实现上而应从功能上来考虑,以便出在具体实现变化时,无 须作太多的重复性劳动
应记忆的事件。系统是否有必要观测和记录时间点和历史事件 人所起的作用。在所考虑的系统中,人起什么作用?代表人的对象有两种 系统用户;并不与系统直接交互,但系统有其记录的人。他们在系统中起的作 用不同,后面的属性和方法的探讨将更详细地揭示这种区别。 地点。所考虑的系统需要什么样的地理知识? 组织结构。人属于哪个机构? (4)应考虑那些内容 假设已经找到一个候选对象,这时又发现另一个可能成为对象的东西,那 么是否应该将它作为对象放到模型中去?这时应该考虑以下问题 ①必要的记忆(属性) 是否该系统需要记忆某个对象的所有情况?能否描述该对象的实例?该 对象潜在的属性是什么?是否真实事物的知识对所考虑的系统有用?是否系统 需要记忆与该对象有关的情况?如果一切的回答是否定的,则该对象存在的合 法性和必要性就值得怀疑。记住:现实世界中存在许多对象,但仅可以讨论而 已,不能都纳入系统中去 ②必要的方法 系统是否需要该对象提供的方法?只要必要的记忆中所述的不完全是否 定的,则也必定需要方法,因此最低限度也要维持该对象的一次出现,即有 个合适的对象。 有时某个对象可能要求有方法,但不要求有记忆(属性)。如可能在问题 域中找到一个“用户”对象,但系统并不要求保存该用户的任何信息,但是系 统确实需要监视用户、响应请求和定时提供信息。因此由于需要方法,不得不 将一个相应的对象加到问题域的模型中去。 ③一个以上的属性。在分析人员考虑不周的地方,该准则能帮助他筛选潜 在的对象。如果一个对象(如“地点”)有一个名字相同的属性,就让人费解 这时“地点”最好作为属性用到其他的对象中去,而不是单独作为一个对象 关键是要详细到何种程度:对象是用属性来描述的,而属性则又可在属性 字典中描述 ④共同属性。能否识别一组每个对象都有的属性?每次当系统产生一个对 象时,它应该为所有的共同属性赋值。如果只有部分属性可用,则表明还存在 个泛化一一特化结构(后面讨论)。 ⑤共同的方法。能识别一组共同的方法吗?即可用到某个对象的所有实例 的处理操作。这些处理操作可能用来创建对象的实例,在对象之间建立联系 如果每个实例的方法都是相同的,那还好办。但是如果方法是随实例的类型而 变化的,则表明还存在一个泛化一一特化结构 ⑥基本需求。基本需求是指那些系统必须具备的要求,如在考虑“雷达” 和“传感器”对象时,不管最终采用何种计算机技术,最终的目标还是“雷达” 和“传感器”对象。至于其他的都只是设计和实现上的考虑
应记忆的事件。 系统是否有必要观测和记录时间点和历史事件。 人所起的作用。在所考虑的系统中,人起什么作用?代表人的对象有两种: 系统用户;并不与系统直接交互,但系统有其记录的人。他们在系统中起的作 用不同,后面的属性和方法的探讨将更详细地揭示这种区别。 地点。 所考虑的系统需要什么样的地理知识? 组织结构。 人属于哪个机构? (4)应考虑那些内容 假设已经找到一个候选对象,这时又发现另一个可能成为对象的东西,那 么是否应该将它作为对象放到模型中去?这时应该考虑以下问题: ①必要的记忆(属性) 是否该系统需要记忆某个对象的所有情况?能否描述该对象的实例?该 对象潜在的属性是什么?是否真实事物的知识对所考虑的系统有用?是否系统 需要记忆与该对象有关的情况?如果一切的回答是否定的,则该对象存在的合 法性和必要性就值得怀疑。记住:现实世界中存在许多对象,但仅可以讨论而 已,不能都纳入系统中去。 ②必要的方法 系统是否需要该对象提供的方法?只要必要的记忆中所述的不完全是否 定的,则也必定需要方法,因此最低限度也要维持该对象的一次出现,即有一 个合适的对象。 有时某个对象可能要求有方法,但不要求有记忆(属性)。如可能在问题 域中找到一个“用户”对象,但系统并不要求保存该用户的任何信息,但是系 统确实需要监视用户、响应请求和定时提供信息。因此由于需要方法,不得不 将一个相应的对象加到问题域的模型中去。 ③一个以上的属性。在分析人员考虑不周的地方,该准则能帮助他筛选潜 在的对象。如果一个对象(如“地点”)有一个名字相同的属性,就让人费解。 这时“地点”最好作为属性用到其他的对象中去,而不是单独作为一个对象。 关键是要详细到何种程度:对象是用属性来描述的,而属性则又可在属性 字典中描述。 ④共同属性。能否识别一组每个对象都有的属性?每次当系统产生一个对 象时,它应该为所有的共同属性赋值。如果只有部分属性可用,则表明还存在 一个泛化——特化结构(后面讨论)。 ⑤共同的方法。能识别一组共同的方法吗?即可用到某个对象的所有实例 的处理操作。这些处理操作可能用来创建对象的实例,在对象之间建立联系。 如果每个实例的方法都是相同的,那还好办。但是如果方法是随实例的类型而 变化的,则表明还存在一个泛化――特化结构。 ⑥基本需求。基本需求是指那些系统必须具备的要求,如在考虑“雷达” 和“传感器”对象时,不管最终采用何种计算机技术,最终的目标还是“雷达” 和“传感器”对象。至于其他的都只是设计和实现上的考虑
(5)对什么提出否定意见 ①并非必要的记忆 ②并非必要的方法; ③单个实例 ④冗余信息。 首先,如果系统并不需要保存某个对象的信息也不需要为它提供方法,则 去掉该对象。这种情况在同用户讨论和评价初始模型时经常发生。 其次,对只有单个实例的对象提出异议。当然如果某个(只有单个实例的 对象)确反映了问题域的真实情况,则不必管它。 最后,考虑冗余信息的模型。在基本需求模型中,冗余信息会使一切变得 十分繁杂混乱。因此尽量少地保存属于冗余信息的派生结果。 (6)如何命名对象 原则上,对象名应该能描述对象的实例的基本特征,因此,为对象命名的 主要方法可以是 ①用单个名词或者形容词加名词作为对象名 ②采用标准名称作为对象名 ③尽量采用可读性好的名字。 识别结构 本节研究泛化——特化结构和整体—一部分结构。 1、什么是结构 在面向对象分析中,结构是问题域复杂关系的表示,它与系统的任务直接 相关。结构有一般—一特殊结构和整体一一部分结构。它们是面向对象分析方 法和重要组成部分。 2、为什么要定义结构 泛化一特化结构和整体一部分结构能使分析人员和领域专家的注意力集中 在具有多个类和对象的复杂问题上。也可以考虑到问题的边缘,揭示那些尚未 发现的类和对象。此外,泛化一特化结构具有继承性,泛化类和对象的属性和 方法一旦被识别,即可在特化类和对象中使用 3、如何定义结构 (1)如何定义泛化一一特化结构 首先给出泛化一一特化结构的表示法和策略,然后给出它的层次 ①表示法 泛化一特化结构用下图表示:顶部是一个泛化类,下面是几个特化类 它们之间用线连接。一个半圆型的标记表明图形泛化一一特化结构这种表示法 是有向的,从半圆弧中心画一条线所指的是泛化类。一般来说,泛化类总是放 在上部,而特化类放在下部
(5)对什么提出否定意见 ①并非必要的记忆; ②并非必要的方法; ③单个实例; ④冗余信息。 首先,如果系统并不需要保存某个对象的信息也不需要为它提供方法,则 去掉该对象。这种情况在同用户讨论和评价初始模型时经常发生。 其次,对只有单个实例的对象提出异议。当然如果某个(只有单个实例的 对象)确反映了问题域的真实情况,则不必管它。 最后,考虑冗余信息的模型。在基本需求模型中,冗余信息会使一切变得 十分繁杂混乱。因此尽量少地保存属于冗余信息的派生结果。 (6)如何命名对象 原则上,对象名应该能描述对象的实例的基本特征,因此,为对象命名的 主要方法可以是: ①用单个名词或者形容词加名词作为对象名; ②采用标准名称作为对象名; ③尽量采用可读性好的名字。 二、识别结构 本节研究泛化——特化结构和整体——部分结构。 1、 什么是结构 在面向对象分析中,结构是问题域复杂关系的表示,它与系统的任务直接 相关。结构有一般——特殊结构和整体——部分结构。它们是面向对象分析方 法和重要组成部分。 2、为什么要定义结构 泛化—特化结构和整体—部分结构能使分析人员和领域专家的注意力集中 在具有多个类和对象的复杂问题上。也可以考虑到问题的边缘,揭示那些尚未 发现的类和对象。此外,泛化—特化结构具有继承性,泛化类和对象的属性和 方法一旦被识别,即可在特化类和对象中使用。 3、如何定义结构 (1)如何定义泛化——特化结构 首先给出泛化——特化结构的表示法和策略,然后给出它的层次 ①表示法 泛化——特化结构用下图表示:顶部是一个泛化类,下面是几个特化类, 它们之间用线连接。一个半圆型的标记表明图形泛化——特化结构这种表示法 是有向的,从半圆弧中心画一条线所指的是泛化类。一般来说,泛化类总是放 在上部,而特化类放在下部
Generalization pecializationl Specialization 泛化一—特化结构线的端点位置表明这是类(而不是对象)之间的映射。 每个特化类的名字必须能充分地反映它自己的物征。比较合适的特化类名 字可由相应的泛化类名加上能描述该特化类性质的形容词来组成。如对于名为 Sensor(传感器)的泛化类,其特化类可称为 StandardSensor(标准传感器)或 CriticalSensor(精密传感器)而不称为 Critical(标准)。 所有最底部的特化类必须使用“类一&一对象”符号,而其他地方即可用 “类一&一对象”符号也可用类符号。如下图所示的实例 ensor Model Init Sequence Conversion Address Threshold Value Initialize Moni tor CriticalSensor StandardSensor Monitor ②定义一般—一特殊结构的策略 将每个类看成一般类。针对它的潜在特殊类提出以下问题: a、它是属于该问题域吗? b、它是该系统的任务吗? 存在继承性吗 d、特殊类满足类一&一与对象的准则吗? 以类似的方式,将每个类考虑为特殊类,并对它的潜在泛化类提出同样的
泛化——特化结构线的端点位置表明这是类(而不是对象)之间的映射。 每个特化类的名字必须能充分地反映它自己的物征。比较合适的特化类名 字可由相应的泛化类名加上能描述该特化类性质的形容词来组成。如对于名为 Sensor(传感器)的泛化类,其特化类可称为 StandardSensor (标准传感器)或 CriticalSensor (精密传感器)而不称为 Critical(标准)。 所有最底部的特化类必须使用“类—&—对象”符号,而其他地方即可用 “类—&—对象”符号也可用类符号。如下图所示的实例。 ②定义一般——特殊结构的策略 将每个类看成一般类。针对它的潜在特殊类提出以下问题: a、它是属于该问题域吗? b、它是该系统的任务吗? c、存在继承性吗? d、特殊类满足类—&—与对象的准则吗? 以类似的方式,将每个类考虑为特殊类,并对它的潜在泛化类提出同样的