学习目标:
1.理解与掌握面向对象的概念与方法。
2.使用UML。
3.完成面向对象的分析与设计工作。
4.了解OO的设计原则及一些典型的设计模式
什么是面向对象?
对象
--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”水果。
多态
Basketball—play(): 使用手来完成。
5.给出一个具体的足球或篮球,用户自动知道该使用谁的方式去执行play().
关联
聚合
组合
域模型
--具有状态和行为的域对象
--域对象之间的关系。
域对象之间的关系
关联关系
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的开发过程
迭代、递增的项目生命周期
--选择并分析相关用例
--根据所选架构进行设计
--在组件层次实现设计
--验证组件满足用例的需要
6.当一次迭代满足目标后,开发进入下一个迭代周期。
Inception—start up
Elaboration—refine
Construction—implement
Transition--promotion
7.每一个周期包含一次或多次迭代
8.一个阶段的结束称之为“里程碑”(milestone)
初始化阶段
该阶段的增量集中于:
--项目启动
--建立业务
--定义业务问题域
--找出主要的风险因素
--定义项目需求的外延
--创建业务问题域的相关说明文档
细化阶段
--高层的分析与设计
--建立项目的基础框架
--监督主要的风险因素
--制订达成项目目标的创建计划
构建阶段
本阶段的增量集中于
--代码及功能的实现
移交阶段
本阶段的增量集中于
--向用户发布产品
--beta测试
--执行性能调优,用户培训和接收测试
每一个阶段所含工作流
·每一次递增都由5部分工作流组成
--需求与初始分析
--分析
--设计
--实现
--测试
--每一次迭代执行工作流的深度不同
--早期的迭代在深度上覆盖初始工作流,后期迭代在深度上覆盖后期工作流。
--80/20原则
迭代、递增生命周期的优势
·降低成本
·便于更好地维护项目进度
·便于团队的协作开发
·便于适应用户需求的动态变化