问题:怎么运用OO设计原则和模式到UML的分析阶段和设计阶段建模?
思路:OOAD概念:分OOA 分析阶段,OOD 设计阶段,OOP 编码阶段,OOT 测试阶段
OOA阶段主要解决以下问题(“What to do?”)
建立针对业务问题域的清晰视图 业务流程
列出系统必须要完成的核心任务 业务核心
针对问题域建立公共词汇表 业务术语
列出针对此问题域的最佳解决方案 经验积累
OOD阶段主要解决以下问题(“How to do?”)
如何解决具体的业务问题
引入系统工作所需的支持元素
定义系统的实现策略
OOP的主要特征:
抽象(abstract)
封装(encapsulation)
关联(Association)
1.A对象通过B对象的引用来访问B对象的方法时,称A关联B。
2.4种方法关联:构造方法设置;set方法设置;方法参数传引用;在方法内部new出对象
3.. 对象间交互的方式;
. 对象间相互使用其功能;
. 一个对象使用另一个对象的服务或操作另一个对象,这时候对象相互关联。
4.关联是有方向性的
A对象通过B对象的引用来访问B对象的方法时,A关联B ,单向关联
A、B互拿对方引用,双向关联
关联关系有多重性
class A{
private List
}
A与C是一对多的单项关联
一个A对应多个C,一个C对应一个A
若Class C{
private A a;
}
则称为A与C是一对多的双向关联。
若Class C{
private List a;
}
则称为A与C是多对多的双向关联。
5.关联的2种方式:聚合和依赖
序列化一个对象,就是序列化和他有聚合关系的对象
只关注聚合关系的关联是狭义的关联
class A{
private B b; //聚合关系,has a关系,A有B,B是A的属性,是个实例变量,关联性强
public A(B b){ //A是外部对象,B是内部对象,A聚合B
this.b=b;
}
public void action(C c){
c=new C(); //依赖关系,use a关系,A使用C,C是A的局部变量
}
}
聚合(aggregation)
. 定义一个对象是另一个对象的一个组成部分;
. 是一种比较强的关联;
. 一个对象是另外一个对象的组成部分(特殊的关联)。
. 通过“Has A”关系可进行确认。一辆车有轮子、座椅以及门,它们是一部车的组成部分。
假如你移除其间的任何一部分,车没有了相应的功能,但仍是一部车。
组合(composition)
1.组合的关联关系是最强的
. 一个对象包含另一个对象(has a的关系);
. 是最强的关联形式;
. 外部对象全程负责内部对象的生命周期(特殊的聚合)
. 通过“contain”关系可进行确认。
. 假设部件不存在,对象亦不存在。
2.一种特殊的聚合,外部对象管理内部对象的生命周期
有外部对象不一定有内部对象
有内部对象一样要有外部对象
内部对象的创建往往是由外部对象自己控制的
继承(inheritance)
1.泛化和特化
2.. 是一种根据既存类定义新类的机制;
. 通过“Is A”或者“Kind of”关系可进行确认;
. 允许你组织相关类,这样这些类可共同地被管理以及重用。
内聚与耦合(cohesion & coupling)
. 组件之间依赖关系的度量;
. 内聚: 在一个类或一个模块的内部独立完成工作的能力
. 耦合: 组件之间依赖关系的度量;
. 系统的耦合性越小越好,系统的内聚性越高越好。高内聚,低耦合
依赖-----类A调用B类的方法,局部变量
多态(polymorphism)
编译时多态(方法重载)、运行时多态(父类引用指向子类对象)
. 一种行为在不同的环境下所变现出来不同的行为;
. 不同对象完成相同语义上的结果;
. 基于继承或实现;
. 多态功能的实现依赖于它应用的对象;
. 举例:足球-扔-需二只手、网球-扔-只需一只手,同样是扔,有不同的实现。当你将不同的球给一个小孩子,他知道是用
一只手还是二只手。小孩都知道多态。
UML(Unified Modeling Language,统一的建模语言):
软件开发过程及其控制(引言):
1. 传统开发过程:
. 瀑布式开发:需求->分析->设计->实现->测试。每个步骤完成和文档化后才进入下一个阶段。使用于小项目
. 假设在后期阶段出现问题,很难返回到先前阶段。
. 项目组成员花费大量时间和精力于每个阶段确保它是正确的.
. 各阶段所用符号和术语均是变化的。完成的软件虽然正确,但与它所表现的商业逻辑相关甚少。
2. OOAD开发过程 --- 统一开发过程(USDP)
. 典型的处理方式是将一个项目作为一系列的小项目;
. UML(Unified Modeling Language)是一种符号,不是一个处理过程;
. USDP(Unified Software Development Process)是迭代增量式的(即,下面的3.部分);
初启->细化->构建->交付,每个阶段都有特定的目标
统一软件开发过程是一个跌代、递增的开发过程。
. USDP和RUP(Rational Unified Process)都是流行的OOAD过程。
3.1迭代增量式项目生命周期
1.“迭代”指生命周期中每一个步骤;
2. 迭代的结果便是整个项目功能完成的一步步增长;
3. 在每个迭代的构建阶段,你应该:
. 选择并分析相关的用例;
. 使用选择的体系结构创建一个设计;
. 用组件实现设计;
. 检验组件满足用例。
3.2迭代增量生命周期的主要阶段
1.Inception(初始)阶段:
. 这个阶段的增长集中在:
a. 开始项目;
b. 为这个项目建立起商业原则;
c. 定义一个商业问题;
d. 识别潜在的风险;
e. 定义对问题更好理解的范围;
f. 创建对商业问题的解释文档。
. 每个循环包括一至多个反复,每个阶段的完成结果都是里程碑式的。
2. Elaboration(细化)阶段:
. 这个阶段的增长集中在:
a. 高水平的分析和设计;
b. 为项目建立一个架构体系的基线;
c. 监测潜在的风险;
d. 创建一个实现项目目标的构建计划;
3. The Construction(构建)阶段:
. 这个阶段的增长集中在软件项目日益成型;
4. The Transition(提交)阶段:
. 这个阶段的增长集中在:
a. 发布产品给客户;
b. 完成beta测试;
c. 实现性能调整、用户培训以及接受度测试。
3.3迭代增量式项目过程图:
业务建模,需求,设计分析,实现,测试,部署,配置管理,项目管理,环境搭建
阶段期间的工作步骤
1. 每次跌代由以下五个工作步骤组成:
. 需求 . 分析 . 设计 . 实现 . 测试
2. 不同的反复对每个工作步骤完成的程度不同;
3. 早期的反复在深度上覆盖了第一个工作步骤,以后的反复在深度上覆盖了最后的工作步骤。
4. 80/20原则:测试里80%的Bug存在于20%的操作上,开发里80%的时间用在20%的工作上。
反复和工作步骤
1. 在每个反复过程,根据需求你可以包括五个工作步骤中的任何一个。
2. 早期的反复过程集中在靠前的工作步骤,后期的反复过程集中在靠后的工作步骤。
3. 当你发现应该修改早先工作步骤中的某些错误,你可以:
. 继续并在下一个反复过程中修正;
. 继续并增加一个新的反复过程修正问题;
. 假如时间允许,返回到当前的反复并修正这个问题。
4. 不同的反复执行每个工作步骤于不同的程度。
迭代增量生命周期的好处
1. 错误提早发现,降低成本;
2. 对项目进度的更好保证;
3. 对于开发团队而言开发速度更快;
4. 便于适应用户需求的动态改变;
UML简介:
1. UML定义 :图形化的建模语言
1. UML是一种图形化语言用于:
. 说明;
. 构建;
. 肉眼观察;
. 文档化系统原型;
2. 在分析阶段,你创建类图以帮助你理解商业概念(还没有实现的细节);
3. 在构建阶段,我们通过为相同的类图增加附加的细节——实现商业细节;
2. UML和蓝图的关系:开发OOAD程序——UML(程序的结构),蓝图——整体的规划
3. UML图形类型
1. 静态模型:代表你正在建模的软件系统的基本结构;
1. 构建以及文档化一个系统的静态方面;
2. 反映了一个软件系统基本的、稳定的框架,即由什么组成;
3. 创建问题主要元素的代表;
4. 由以下图形组成:
用例图(use case diagrams) 用来解析需求
类图(class diagrams) 用于描述类的结构和关系
对象图(object diagrams) 用来描述对象间的关系,这个图现在已不再使用了。
组件图(component diagrams) 描述你在你的项目中都使用了哪些组件
部署图(deployment diagrams) 用于代表部署的结构
用例图和类图是必须要会的
2. 动态模型 动态建模:强调了系统的行为;
1. 构建显示系统行为的图形,即系统的行为;
2. 由以下图形组成:
时序图(sequence diagrams) 某一个模块按时间的变化图
协作图(collaboration diagrams) 如何在模块与模块间传递东西
状态图(state chart diagrams) 指对象状态的变化
活动图(activity diagrams) 近似于流程图
一般时序和协作选用一个,常用的是时序图
在静态建模的时候确定类的方法,在动态建模验证类的方法
需求和初始化分析:
OO设计原则和模式:
分析阶段:
静态建模:
动态建模:
设计阶段:
静态建模:
动态建模:
代码(文字:UML实验内容):
OOA静态建模:
OOA动态建模:
OOD静态建模:
OOD动态建模:
解释: