1.OOA:
定义OOA阶段:
分析阶段主要解决以下问题:
1.建立针对业务问题域的清晰视图
2.列出系统要完成的核心任务
3.针对问题域建立公共词汇表
4.列出解决问题域的最佳方案
此阶段要解决的核心问题是“What to do ?”
2.OOD:
定义OOD阶段:
设计阶段主要解决以下问题:
如何解决具体的业务问题
引入系统工作所需的支持元素
定义系统的实现策略
此阶段要解决的核心问题是“How to do ?”
3.OOP的主要特征:
抽象(abstract) 封装(encapsulation) 继承(inheritance) 多态(ploymorphism)
关联(association)聚合(aggregation)组合(composition) 内聚与耦合(cohesion&coupling)
抽象:
忽略一个对象的或实体的细节而只关注其本质特征的过程。
简化功能及格式。
帮助用户与对象交互。
封装:
隐藏数据和实现
提取公共方法供用户调用功能
对象的两种视图
外部视图:对象能做的工作
内部视图:对象如何完成工作
继承:
通过存在的类型来定义新的类型的机制;
通常在两个类型之间存在“is a (什么是什么)”或“kind of(一种) ”的关系。
通过继承可实现代码重用,另外继承也是多态的基础。
如苹果“is a”水果。
多态:
一个名称,多种形式
基于继承的多态
调用方法时,根据所给对象的不同而选择不同的处理方式
如Football――play():使用脚来完成。
Basketball――play():使用手来完成。
给定一个具体的足球或篮球,用户自动知道该使用谁的方式去执行play()。
关联:
对象之间交互时的一种引用方式
当一个对象通过对另一个对象的引用去使用另一个对象的服务或操作时,两个对象之间 便产生了关联。
如person使用computer,person与computer之间就存在了关联关系。
聚合:
关联关系的一种,一个对象成为另外一个对象的组成部分
是一个关系较强的关联
在两个对象之间存在“has a ”这样的关系,一个对象作为另一个对象的属性存在,在 外部对象被生产时,可由客户端指定与其关联的内部对象
如汽车与轮胎,轮胎作为汽车的一个组成部分,他和汽车可以分别生产以后装配起来使 用,但汽车可以换新轮胎,轮胎也可以卸下来给其它汽车使用
组合:
当一个对象包含另一个对象时,外部对象负责管理内部对象的生命周期的情况
关联关系中最强的一种。
内部对象的创建由外部对象自己控制
外部对象不存在时,内部对象也不能存在。
如电视机与显示器。
4. 域模型
域模型是面向对象的。在面向对象术语中,域模型也称为设计模型。模型由以下内容组 成:
具有状态和行为的域对象
对象之间的关系
关联(association)
依赖(dependency)
聚集(aggregation)
一般化(泛化)(generation)
一对多:一要获得对方(多)的服务或操作,就要在自己的类里面定义集合的方法。“n”方要关联一方,就要在自己类里定义“1”的一个成员变量,通过成员变量关联。
内聚与耦合
内聚:度量一个类独立完成某项工作的能力
耦合:度量系统内或系统之间依赖关系的复杂度
设计原则:增加内聚度,降低耦合度。
5.开发过程概述
传统开发过程
瀑布模型
统一软件开发过程(USDP)
6.OOAD的开发过程
大项目分解为一些子项目
使用UML工具
统一软件开发过程是一个迭代、递增的开发过程
迭代、递增项目的生命周期(现在,开始是完成基础的功能,后逐渐添加新的功能)
项目是迭代、递增的
迭代指生命周期中的一个步骤
迭代导致“递增”或者是整过项目的增长
大项目迭代为子项目
每一个迭代的阶段,应该完成以下工作(迭代能很好的适应用户的需求变化)
选择并分析相关用例
根据所选架构进行设计
在组件层次实现设计
验证组件满足用例的需要
当迭代满足目标后,开发进入下一个迭代周期
迭代、递增的项目生命周期主要阶段
每一个周期包含一次或多次的迭代
一个阶段的结束称之为“里程碑(milestone)”
初始化阶段
该阶段的增量集中于:
项目启动
建立业务模型
找到主要的风险因素
定义项目需求的外延
创建业务问题域的相关说明文档
细化阶段
本阶段的增量集中于:
高层的分析与设计
建立项目的基础框架
监督主要的风险因素
制订达成项目的创建计划
构建阶段
本阶段的增量集中于:
代码及功能的实现
移交阶段
本阶段的增量集中于:
向用户发布产品
Beta测试(公司)
执行性能调优,用户培训和接受测试(用户)
7.每个阶段所含的工作流
每一次递增都由5部分工作流组成
需求与初始分析
分析
设计
实现
测试
每一次迭代执行工作流的深度不同
早期的迭代在深度上覆盖初始工作流,后期迭代在深度上覆盖后期工作流
80/20原则:系统中80%的代码被访问的几率是20%,而20%的代码的访问几率是80%。
每个阶段完成后又回到开始。
8.迭代、递增生命周期的优势
降低成本
编译更好地维护项目进度
便于团队的协作开发
便于适应用户需求的动态变化
UML简介1.UML(Unified Modeling Language),统一建模语言。图形化的语言表示。
2.定义:统一建模语言是一种图形化的语言,它可以帮助我们在OOAD过程中标识元素、 构建模块、分析过程并可通过文档说明系统中的重要细节。
3.UML图的分类:静态模型(static )和动态模型
静态模型:
创建并记录一个系统的静态特征
反映一个软件系统基础、固定的框架结构
创建相关问题域主要元素的视图
静态建模包括
用例图(use case diagrams)
类图(class diagrams)
对象图(object diagrams)
组件图(component digrams)
部署图(deployment diagrams)
动态建模
动态建模用来展示系统的行为
动态建模包括:
时序图(sequence diagrams)
协作图(collaboration diagrams)
状态图(state chart diagrams)
活动图(activity diagrams)
4.UML其他重要的元素
包(package)
UML的展示机制
注释(comments)
构造型(stereotypes)
标记值(tagged value)
限制(constraints)
核心UML图静态建模:
1.用例图
展现系统的核心功能及与其交互的用户
用户被称为“活动者”(actor)
用例图使用椭圆表示
为简化建模过程,用户可标注优先级
操作过程:starUML》模式浏览器》选择下边一项》右键》点击用例图》 双击修改组件的描述》结果。
2.类图
表现类的特征:
类图描述了多个类,接口的特征,以及对象之间的协作与交互。
由一个或多个矩形区域构成,内容包括:
类型(类名)
属性(可选)
操作(可选)
实践:
关联
在模型浏览器中点击右键》增加图形》选择类图》开始创建》添加类名(双击)》添加属性(也可在属性栏中操作)(移到类上,右键》增加》属性/操作(行为/方法))
泛化(继承(箭头指向父类))
类实现接口:
3.对象图
表现对象的特征
对象图展现了多个对象的特征及对象之间的交互。
模式浏览器》右键》增加图形》类图》工具条下边有对象选项》对象(类名用后边的图标添加)。链接用“连接”(对象下)
4.组件图
同样,在模型浏览器中的增加图形中添加“组件/构件”(双击左键添加注释)
5.部署图
添加部署图》节点》关联关系(右上角可调节对齐)
动态建模:
1.时序图(Sequence Diagram)重点
捕捉一段时间范围内多个对象指尖的交互信息
强调消息交互的时间顺序
创建时序图:Object/类规则(创建对象)》用stimulus/消息(表示类之间的调用、自身调用使用selfstimulus/自身消息,如method3())》
2.协作图
表现一定范围内对象之间的协作信息
强调参与信息交流的对象之间的组织结构
使用调用时,要先选中连线,后点击调用添加箭头
3.状态转换图
传输:状态之间
4.活动图(与C语言的流程图相似)
连接用传输:
5.包
引用一组相关实体
通常可用来划分类的命名空间
包可用于
命名(Naming)
成员可见度(Member visibility)
导入(Importing)
继承(Extends)
泛化(Generalization)
StarUML应用模式(设计模式) (新建一类,在模式浏览中点击右键,找到Apply Pattern)6.观察者模式(Observer)
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,让他们能够自动更新自己。
观察者模式的组成
抽象主题角色:把所有对观察者的引用保存在一个集合中,每个抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类或接口来实现。
抽象观察者角色:为所有具体的观察者定义一个接口,在的到主题的通知时更新自己。
具体的主题角色:在具体主题内部状态改变时,给所有的登记过的观察者发出通知。具体主题角色通用一个类实现。
具体观察者角色:该角色实现抽象观察者角色所有要求的更新接口,以便使本身的状态与主题的状态相协调。如果需要,具体主题角色的引用。通常用一个子类实现。
7.模板方式
模版方法模式的组成
父类角色:提供模版
子类角色:为模版提供实现。
8. 组合模式
9.装饰模式(Decorator)
装饰模式的角色:
抽象构件角色(component):给出一个抽象接口,以规范准备接收附加责任的对象。
具体构件角色(concrete Component):定义一个将要接受附加责任的类。
装饰角色(Decorator):持有一个构建对象的引用,并定义一个与抽象构件接口一致的接口。
具体装饰角色(Concrete Decorator):负责给构件对象“贴上”附加的责任。
10.适配器模式(按对象组合)
11.Proxy(代理模式)
代理模式一般涉及到的角色有
抽象角色:声明真实对象和代理对象的共同接口
代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象的相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
真实对象:代理角色所代表的真实对象,是我们最终要引用的对象。