读书笔记《道法自然--面向对象实践指南》第五章

FISHGUI项目组决定用面向对象的方法完成项目,也决定采用迭代的开发模型。现在终于进入
到面向对象分析的阶段了。

面向对象分析该从哪里开始呢?要完成些什么工作呢?第一次采用面向对象开发的项目组都
会碰到这样或那样的问题,解决之道是要允许项目组犯错误,在错误中学习、成长。书中提
到:
    面向对象分析的主要任务是根据用户需求,建立一个准确的、完整的、一致的系统模型
    。这个过程的输入是软件的功能性需求(非功能性需求通常要留到面向对象设计阶段再
    考虑)。在面向对象分析过程里,项目组通过分析软件的功能性需求,得到一个理想化
    的系统模型,该模型更多的侧重于描述我们需要解决的问题是什么样的--我们称这样的
    模型为分析模型。
    面向对象分析过程一般要从不同的视角观察和分析软件系统,并相应地产生以下三种分
    析模型。
    ·功能模型:把用户的功能性需求转化为开发人员和用户都能理解的一种表达方式,其
    结果就是我们此前谈到的用例模型。从这个意义上说,用例分析也是面向对象分析工作
    的一个组成部分。
    ·对象模型:通过对用例模型的分析,把系统分解成相互协作的分析类。一般情况下,
    我们通过类图和对象图来描述系统中的所有对象、对象的属性以及对象之间的相互关系
    。对象模型是系统的静态模型。   
    ·动态模型:描述系统的动态行为。我们一般通过顺序图和协作图来描述系统中对象之
    间的交互关系,以揭示所有对象是如何通过分工协作来实现每个具体用例;通过状态图
    来描述系统中单个对象的状态变化情况,以揭示单个对象的动态行为。
   
既然功能模型在需求分析的阶段已经做了,接下来要做的便是找到系统的对象模型,即找出
系统中的分析类,分析类可分为实体类和软件类,软件类又包括边界类和控制类。实体类是
应用领域中的核心类,一般是从现实世界中的实体对象归纳和抽象出来的,用于长期保存系
统中的信息,以及提供针对这些信息的相关处理行为。一般情况下,实体类的对象实例和应
用系统本身有着相同的生命周期。边界类是从那些系统和外界进行交互的对象中归纳和抽象
出来的,也就是说,边界类是系统内外参与者的联系媒介,外界的消息只有通过边界类实例
才能发送给系统。控制类是实体类和边界类之间的润滑剂,是从控制对象中归纳和抽象出来
的,用于协调系统内边界类和实体类之间的交互。例如,某个边界对象必须给多个实体对象
发送消息,多个实体对象完成操作后,传回一个结果给边界对象,这时,我们可以使用控制
类来协调这些实体对象和边界对象之间的交互关系。给类分类,是为了明确的定位它们,按
照这种分类方法,我们很容易把这些分析类对应到MVC模式上。

面向对象分析和面向对象设计是很不容易区分的两个阶段,为了能够较好的进行面向对象分
析,我们还有必要区分出,哪些工作是面向对象分析阶段该做的,哪些是该留在面向对象设
计应时完成的。两者的区别在以下方面:
    ·在侧重点上,面向对象分析侧重于理解问题,描述软件要做什么,而面向对象
     设计侧重于理解解决方案,描述软件要如何做。
   
    ·面向对象分析一般只考虑理想的设计,不关心技术和实现层面的细节,
     而面向对象设计需要得到更具体、更详尽,更接近于真实的代码的设计方案。
   
    ·在设计结果的描述方式上,面向对象分析阶段侧重于描述对象的行为,而面向对象设
     计阶段侧重于描述对象的属性和方法。
   
    ·面向对象分析只关注功能性需求,而面向对象设计既关注功能性需求,也关注
     非功能性需求。
   
    ·面向对象分析产生的系统模型通常规模较小,而面向对象设计产生的系统
    模型规模较大,内容也比较完整、详尽。
   
一般说来,完整的面向对象分析应该包括从用例中提取实体对象和实体类、添加边界类、
添加控制类、提取属性、提取分析类间关系、绘制类图和顺序图、绘制术语
表等几个步骤。

接着,书中讲述了通过寻找用例描述中名词和名词短语得到实体对象的方法,还介绍了应用
概念类型列表(物理的或实在的对象、人的角色、组织、时间、地点、规格说明或实物的描
述、规则和策略)
怎样找出实体对象,在寻找实体对象的时候,必须要知道系统外的对象不
属于我们考察的范围、不能把实体对象的属性当成实体对象,还有就是根据需要我们可以创
建并不存在的实体对象。完成后,便是根据对象分组,得到实体类,寻找实体类的属性,找
出实体类之间的关系,关系可分为一对一、一对多、多对多、归纳四种。此阶段的工作做完
,即大略知道了系统应该有哪些类,这些类又有哪些成员变量,以及类之间的耦合情况。此
时分析工作远没有结束,我们还该根据系统与外界的交互情况添加边界类,根据消息传递情
况添加控制类,在寻找控制类时,可以遵循GRASP模式中的控制者模式背后的原则,找出分析
类之后,便要绘制类图、用例实现图(顺序图)、绘制术语表。

最后的总结说到:
    ·面向对象分析和面向对象设计既有区别,又有联系;
    ·面向对象分析是由用例驱动的(即我们应该通过用例寻找实体类);
    ·寻找软件系统中的实体类和软件类,确定类或对象之间的关系,这是面向对象分析
        工作的核心内容。

你可能感兴趣的:(读书笔记《道法自然--面向对象实践指南》第五章)