OOAD基本概念
学习目标:
1.理解与掌握面向对象的概念与方法。
2.使用UML。
3.完成面向对象的分析与设计工作。
4.了解OO的设计原则及一些典型的设计模式
什么是面向对象?
- 面向对象(Object-Orientation, 简称OO)是一种系统建模技术。
- 面向对象编程(Object-Orientation Programming,简称OOP)是按照OO的方法学来开发程序的过程。
- 通过分析系统内对象的交互来描述或建模一个系统。
- 交互的对象最终以类的形式组织。
- OO的方法由三部分组成:过程,标识,规则。
对象
- 是一个客观存在的、唯一的实体。
- 是面向对象编程过程中分析与解决问题的出发点与基础。
- 拥有自己的标识、数据与行为。
- 可以简单或复杂。
- 可以抽象或具体。
- 在OOP中是一个类的动态实例。
- 如Student—id,name,age(attribute)
--setName,getName,countScore(methods)
--new Student()
类
- 类是对象的模板。
- 对象通过类实例化产生。
- 一个类可以创建多个对象
OOAD
OOAD(Object Oriented Analysis and Design),面向对象的分析与设计。
OOAD是根据OO的方法学,对软件系统进行分析与设计的过程。
--OOA 分析阶段
--OOD 设计阶段
定义OOA阶段
- 分析阶段主要解决以下问题
-- 建立针对业务问题域的清晰视图。
-- 列出系统必须完成的核心任务。
-- 针对问题域建立公共词汇表。
-- 列出针对此问题的最佳解决方案。
2.此阶段要解决的核心问题是“What to do?”
定义OOD阶段
1.设计阶段主要解决以下问题
-- 如何解决具体的业务问题。
-- 引入系统工作所需的支持元素。
-- 定义系统的实现策略
2. 此阶段要解决的核心问题是“How to do?”
OOP的主要特征
1 .抽象(abstract)
2.封装(encapsulation)
3.继承(inheritance)
4.多态(polymorphism)
5.关联(association)
6.聚合(aggregation)
7.组合(composition)
8.内聚与耦合(cohesion & coupling)
抽象
- 忽略掉一个对象或实体的细节而只关注其本质特征的过程。
- 简化功能与格式。
- 帮助用户与对象交互。
封装
- 隐藏数据和实现。
- 提供公共方法供用户调用功能。
- 对象的两种视图。
--外部视图:对象能做的工作。
--内部视图:对象如何完成工作。
继承
- 通过存在的类型定义新类型的机制。
- 通常在两个类型之间存在“is a”或“kind of”这样的关系。
- 通过继承可实现代码重用,另外继承也是多态的基础。
如:苹果“is a”水果。
多态
- 一个名称,多种形式。
- 基于继承的多态
- 调用方法时根据所给的对象的不同选择不同的处理方式。
- 如Football—play(): 使用脚来完成。
Basketball—play(): 使用手来完成。
5.给出一个具体的足球或篮球,用户自动知道该使用谁的方式去执行play().
关联
- 对象之间交互时的一种引用方式。
- 当一个对象通过另一个对象的引用去使用另一个对象的服务或操作时,两个对象之间便产生了关联
- 如:person使用computer,person与computer之间就存在了关联关系。
聚合
- 关联关系的一种,一个对象成为另外一个对象的组成部分。
- 是一种关系较强的关联。
- 在两个对象之间存在“has a”这样的关系,一个对象作为另一个对象的属性存在,在外部被生产时,可由客户端指定与其关联的内部对象。
- 如汽车与轮胎,轮胎作为汽车的一个组成部分,它和汽车可以分别生产以后装配起来使用,但汽车可以换新轮胎,轮胎也可以卸下来给其它汽车使用。
组合
- 当一个对象包含另一个对象时,外部对象负责管理内部对象的生命同期的情况。
- 关联关系中最为强烈的一种。
- 内部的创建由外部对象自己控制。
- 如电视机与显示器。
域模型
- 域模型是面向对象的。在面向对象术语中,域模型也可称为设计模型。域模型由以下内容组成:
--具有状态和行为的域对象
--域对象之间的关系。
- ·关联
- ·依赖
- ·聚焦
- ·一般化(泛化)
域对象之间的关系
- ·关联(Association)
- ·依赖(Dependency)
- ·聚焦(Aggregation)
- ·一般化(Generalization)
关联关系
Customer <---------------------- Order[customer:Customer]
从Order到Customer的多对一单向关联
Customer[orders:Set]-----------------àOrder
从Customer到Order的一对多单向关联
Customer[orders:Set]ß------------à Order[customer:Customer]
从Customer到Order的一对多双向关联
依赖关系
BusinessService---------àCustomer
BusinessService类依赖Customer类
在BusinessService类中访问Customer类的方法, 并且构造Customer实例。
聚集关系
聚集指的是整体与部分之间的关系,在实体域对象之间很常见。
Person{Set< Hand> hands}<--Hand
Person类与Hand类之间的聚集关系
一般化关系
一般化关系指的是类之间的继承关系
内聚与耦合
- 内聚:度量一个类独立完成某项工作的能力。
- 耦合:度量系统内或系统之间依赖关系的复杂度。
- 设计原则:增加内聚,减少耦合(高内聚,低耦合)。
开发过程概述
1.传统开发过程—瀑布模型
2.统一软件开发过程(USDP)
传统开发过程(瀑布模型)
RequirementsàAnalysisàDesignàImplementationàTest
OOAD的开发过程
- 大项目分解为一些子项目
- 使用UML工具
- 统一软件开发过程是一个迭代、递增的开发过程。
迭代、递增的项目生命周期
- 项目是迭代、递增的。
- 迭代指生命周期中的一个步骤。
- 迭代导致“递增”或者是整个项目的增长。
- 大项目分解为子项目。
- 在每一个迭代的阶段,应该做以下工作
--选择并分析相关用例
--根据所选架构进行设计
--在组件层次实现设计
--验证组件满足用例的需要
6.当一次迭代满足目标后,开发进入下一个迭代周期。
Inception—start up
Elaboration—refine
Construction—implement
Transition--promotion
7.每一个周期包含一次或多次迭代
8.一个阶段的结束称之为“里程碑”(milestone)
初始化阶段
该阶段的增量集中于:
--项目启动
--建立业务
--定义业务问题域
--找出主要的风险因素
--定义项目需求的外延
--创建业务问题域的相关说明文档
细化阶段
--高层的分析与设计
--建立项目的基础框架
--监督主要的风险因素
--制订达成项目目标的创建计划
构建阶段
本阶段的增量集中于
--代码及功能的实现
移交阶段
本阶段的增量集中于
--向用户发布产品
--beta测试
--执行性能调优,用户培训和接收测试
每一个阶段所含工作流
·每一次递增都由5部分工作流组成
--需求与初始分析
--分析
--设计
--实现
--测试
--每一次迭代执行工作流的深度不同
--早期的迭代在深度上覆盖初始工作流,后期迭代在深度上覆盖后期工作流。
--80/20原则
迭代、递增生命周期的优势
·降低成本
·便于更好地维护项目进度
·便于团队的协作开发
·便于适应用户需求的动态变化