“实战OO”学习笔记
作者:徐建祥(netpirate@gmail.com)
时间:2006/01/11
来自:http://www.anymobile.org
“实战OO”系列文章是徐锋发表在2004年《程序员》杂志的一系列关于面向对象的入门文章,通过图书馆的实例,深入浅出地讲述了基于软件建模技术的面向对象开发过程。介绍了面向对象的分析(OOA)和设计(OOD),并对OOP做了指导,让你迅速了解OO的威力,成为你分析系统和设计解决方案的工具。
全系列包括:
1)域建模
2)用例建模
3)鲁棒性分析
4)交互建模
5)过程总结
6)部署与实施
7)补遗
1、 问题域建模,概念模型
辅助性的,静态模型,帮助开发团队了解客户所处的世界。
从现实问题域中找到最有代表性的概念对象;整理成类图;改成文字描述,基本完成术语表。
a、 概念模型的目的是让开发团队对问题域,业务知识建立正确的理解;
b、 概念模型是在开发过程中产生出来的第一个系统的静态模型。
2、 用例建模,用例模型
反映系统行为的,动态模型,帮助开发团队明白客户想解决什么问题。
Ivar Jacobson:“用例实例是在系统中执行的一系列动作,这些动作将生成特定参与者可见的价值结果。一个用例定义一组用例实例。”
a、 需求(功能特性)捕获,编号(FEAT***),以便进行跟踪管理;
b、 识别参与者(actor,与系统交互,系统之外的所有事物);
c、 合并需求,编号实例(UC**),决定用例的优先级;
d、 细化用例描述:搭框架;细化事件流(沟通);补缺漏(确认)。
1、 用例名称:
新增书籍信息(UC01)
2、 简要说明:
录入新购书籍信息,并自动存储建档。
3、 事件流:
3.1 基本事件流
3.2 扩展事件流
4、 非功能需求:
5、 前置条件:
用户进入图书管理系统。
6、 后置条件:
完成新书信息的存储建档。
7、 扩展点:
无。
8、 优先级:
最高(满意度5,不满意度) |
1)前置条件:指在用例启动时,参与者(Actor)与系统应置于什么状态,这个状态应该是系统能够检测到的、可观测的;
2)后置条件:用例结束时,系统应置于什么状态,这个状态也应该是系统能够检测得到的、可观测的;
3)基本事件流:基本事件流是对用例中常规、预期路径的描述,也被称为Happy day场景,这时大部分时间所遇到的场景;它将体现系统的核心价值;
4)扩展事件流:主要是对一些异常情况、选择分支进行描述。
注:非核心实体无须过渡展开,如四轮马车,将新增、修改、查询、删除,抽象为管理;可以通过包来实现用例层次。
3、 Robustness鲁棒分析,健壮性分析
Ivar Jacobson 1991引入,分析与设计之间的桥梁。
草图,使得开发者对于系统细节了解得更加清楚。
3.1 分析的作用:
a、 正确性检查;
b、 完整性检查;
c、 持续发现对象;
d、 对象确定;
e、 初步设计:将分析的元素,类分为实体对象,控制对象,边界对象。类似MVC。
实体对象:来自域模型,通常映射到数据表或文件中。
控制对象:抽象应用程序的执行逻辑。
边界对象:用来完成参与者与系统之间交互的对象。
3.2 分析规则:
a、参与者,只能够通过边界对象与系统交互;
b、边界对象,只能与控制对象或参与者交互;
c、实体对象,也只能与控制对象交互;
d、控制对象,可以与边界对象、实体对象交互,但不能与参与者交互。
4、 交互建模
序列图,协作图,详细设计阶段。通过寻找对象之间的交互关系,从而进行“行为分配”。
Ivar Jacobson:“只有在所有的用例为所有事件进程建立了交互模型之后,才可以确定已经发现系统所需的每个对象所扮演的角色,以及它们的责任。”
序列图Sequence diagram:体现事件发生的次序。
协作图Collaboration diagram:通过使用局部图指明了各个对象之间是如何静态相连的。
a、 罗列实体对象;
b、 罗列边界对象和参与者,放置在左边;
c、 添加个类的属性与方法;
d、 引入基础类;
e、 质量评审;
1) 低耦合:耦合性是指两个类之间的连接强度,耦合性越低,独立性越高,越灵活。
2) 高内聚:内聚性是指一个类的属性和方法高度地集成,内聚性越高,设计越合理。
3) 效率:衡量的要点在于解决方案的执行效率是否满足系统要求。
4) 完整性:是指在任何环境下都可以重复使用。
5) 简单性:类越简单,出错的可能性越小,系统的灵活性和可维护性也越好。
可以使用一些例如OCP、SRP、DIP、LSP原则等经典的面向对象设计原则来衡量。
Robert C Martin《敏捷软件开发》
f、 用设计模式进行优化。
5、 过程总结
现代软件开发过程:
a、 RUP,Rational公司,Rose软件,“用例驱动、以体系结构为中心,迭代、增量的软件开发过程。”
RUP软件开发分为四个阶段:
1) 初始阶段:理解和分析需求,生产用例模型框架,对优先级较高的用例进行细化;
2) 精化阶段:完成部分优先级最高的用例开发,并完善出所有的用例模型;
3) 构建阶段:分为多个迭代,逐步完成不同优先级的用例开发;
4) 交付阶段:进行各种功能、性能测试,进行产品化、部署,完成整个系统的开发工作。
b、 XP,极限编程,“敏捷建模”,以最大化发挥人的能量为核心目标,以“小步快走”的逻辑知道开发,12个最佳实践充分体现了其迭代式开发的特点。
User Story用户故事是Kent Beck在极限编程(XP)方法论中推荐的最佳实践之一。它由客户参与编写,说明他们需要系统为他们做什么,一般用客户的术语写就,三句话左右。
敏捷开发:
1) 直接的沟通和交流;
2) 分步实施、及时交付、及时测试;
3) 从简单开始,逐步完善;
4) 积极主动;
5) 接受变化,响应变化,甚至从头再来。 |
c、 FDD,Feature Drive Develop,特征驱动开发,Together创始人Peter Coad所创。通过特征来制定开发计划,也是每日构建为核心,强调按特征分步开发和交付。一个特征就是一个小的、具有客户价值的功能,通常表示为<action><result><object>。
迭代开发过程:
a、 第一次迭代
1) 捕获需求
2) 建立初始的领域模型
3) 建立用例模型框架
4) 制定开发计划
b、 第二次迭代
1) 关键用例的Robustness分析与交互建模
2) 体系结构设计
3) 建立类模型
4) 关键用例的开发与测试
5) 完善用例模型
c、 第n次迭代
完成所有用例的分析、设计与开发。
d、 最后的迭代
1) 整体测试:进行各种功能、性能和压力测试。
2) 部署与安装:生成相应的部署图。
3) 产品化:进行一些产品化的包装。
注:每一次迭代之后,都应该交付一个可以运行的中间版本。
6、 部署和实施
构件图:表现系统物理结构。
部署图:说明系统部署结构。
“构件是系统中可替换的物理部分,它包装了实现而且遵从并提供一组接口的实现。”
1) 实施构件:构成一个可执行系统必要和充分的构件,如DLL、EXE文件。
2) 工作产品构件:开发过程的产物,包括创建实施构件的源代码和数据文件。
3) 执行构件:是作为一个正在执行的系统的结果而被创建的,如COM+对象。
构件图:包括构件、接口以及各种关系。
1) 对源代码进行建模:表示出各个不同源程序文件之间的关系。
2) 对可执行的发布建模:表示出各个执行部分之间的信赖和关联关系。
3) 对物理数据库建模:表示出各种类型的数据库、表之间的关系。
4) 对可调整的系统建模:如负载均衡,故障恢复等。
部署图或实施图的关键组成部分:节点和连接;构件和连接。
1) 对处理器和设备建模;
2) 对构件的分步建模:通常用来可视化地指定其构件的位置和协作关系。
7、 其它
活动图:面向对象的流程图。
状态图:用来描述一个特定对象的所有可能状态及其引起状态转移的事件。
活动图按照简繁程度划分:
1) 基本活动图。
2) 实例说明。
3) 带泳道的活的图。
a、 业务建模阶段:针对的是职责对象。
b、 系统设计状态阶段:针对的是对象,使用较少,一般使用顺序图。
链接:
徐锋专栏--无名空间
http://blog.csdn.net/fjxufeng/
用例驱动的需求过程实践(徐锋)
http://www.ccw.com.cn/cio/research/info/htm2003/20031223_13XEG.asp
http://www.sawin.cn/doc/SA/REQ/blueski313.htm
广告管理系统中的UML分析与设计
http://www.itpmi.com/Article.asp?ArtID=425
销售管理系统的UML分析与设计
http://51cmm.csai.cn/ANALYZE/no000081.htm
posted on 2006-01-29 22:35
Xu Jianxiang 阅读(1034)
评论(0) 编辑 收藏 所属分类:
Design Research