作者:Anders小明

先看下Booch对面向对象分析和设计的经典论述:
OOP:面向对象编程是一种实现方法,程序被组织成对象的协作集合,每一个对象代表某个类的实例,对象的类是通过继承关系联合在一起的类层次中的所以成员。
OOD:面向对象设计是一种设计方法,它包含面向对象的分解过程,以及一种表示方法,用来描写设计中的系统的逻辑模型与物理模型,以及静态模型与动态模型。
OOA:面向对象分析是一种分析方法,它以可在问题域的词汇表中找到的类和对象的观点来审视需求。
 
经典是经典,不过总是不那么容易实践,我自己在工作中总结了一下面向对象分析和面向对象设计的区别:
1. 面向对象分析的关键点,是其产出物能够映射到业务系统的需求。因此,面向对象分析的产物称为业务模型(Business Model)和业务行为,关注在:领域对象(Domain Model),领域服务(Domain Service),以及相关的边界对象(Boundary Object)和控制对象(Controller Object);以及在此之上业务模型交互视图,包括了测量观察行为,以及账目(或类账目)处理行为。此时的设计不涉及任何具体的框架,工具包以及相关处理具体实现技术的对象。

2. 面向对象设计的关键是,其产出物能映射到计算机系统的要求。因为,面向对象设计建立在面向对象分析之上,细化业务模型和业务行为,给出面向对象技术的技术实现。表现为结合了大量具体框架,工具包以及相关技术实现对象(以Factory为代表,Factory对象是处理实例化的,而这是计算机系统的概念)。

虽然面向对象分析和设计存在重大区别,然后它们有时并不能被明显区分。面向对象设计是对面向对象分析有限制作用。从实用角度讲,如果分析的成果在转化为设计的成果存在巨大困难时,分析成果的价值是有限的。

以下简单列出自己的面向对象分析设计的实践过程:
1. 分析阶段
 分析对象模型,不细化对象模型的抽象和封装
 分析业务行为,不细化行为的层次分解
 连接对象模型和业务行为,分析相关的各种Specification
 初步细化行为的层次分解
 初步细化对象模型的抽象层次
 分析行为和请求的响应模式

2.设计阶段
 设计各种Specification的实现策略
 进一步细化行为的层次分解
 设计行为和控制器的关联逻辑分解
 进一步细化对象模型的抽象体系
 结合框架设计行为和请求的响应模式
 结合框架设计行为和控制器的关联逻辑分解

不知道其它的兄弟们怎么工作的。