当前课程知识点:软件工程 > 第9章 面向对象分析与设计 > 9.3 面向对象设计 > 讲课视频-1
下面我们介绍
面向对象设计有关的内容
在软件设计的过程中
我们始终要应对
需求的日新月异的变化
对设计创新的持续追求
以及对软件质量
持续提升的要求
那么在整个过程中
我们可以采用很多种不同的方法
来应对这些问题
面向对象方法就是其中之一
然而真相是
面向对象方法本身
并不能保证你的设计
成为优秀的设计
你可以用非面向对象的方法
建立一个非常好的设计
也可以 用了面向对相的方法
但是生成了一个不良的设计
平庸的依然平庸
但是我们用面向对象的方法
它最主要应对的问题
就是数据封装和减小模块间的
依赖性
让我们有更好的
可以重用的设计单元
在面向对象的设计过程中
我们首先进行适当的领域分析
撰写设计描述
确定系统的开发任务
基于问题描述抽取需求
同时开发用户界面原型
在抽取需求的过程中
对象类的识别
是面向对象设计的基础
我们要定义每个类的职责
确定类与类之间的交互关系
从而建立系统的设计模型
在这个过程中
最主要的一个步骤
就是识别对象类的过程
我们下边介绍一种
识别对象类的方法
那么究其根本
面向对象思维方式
最核心的理念有哪些
这主要包括
要把接口和实现区分开来
要从具体到抽象
以及定义最小的接口的原则
区分接口与实现
其最主要的目的
就是实现接口的标准化
使得我们能够在
接口不变的情况下
对实现的部分进行演化和修改
比如在下图中
我们如果要撰写一个
数据库的访问类
其中最主要的功能
就是打开数据库这个功能
我们如果定义了一个
统一的接口Open
它的参数只有我们要打开的
数据库的名字
而在内部的实现过程中
我们既可以打开一个
Oracle的数据库
也可以打开一个SQL数据库
那么我们就能够保证
无论底层的实现
采用的是哪种数据库
我们都能够用统一的方法
来访问数据库
确保接口与实现的分离
定义标准的接口
保证了我们程序结构的稳定性
使我们可以动态的
替换用户的实现代码
和底层的数据库实现
保证我们的程序
在演化的过程中
有相对稳定的结构
下面我们给出一个
设计抽象接口的实例
以我们叫出租车
这样的一个服务为例
一个抽象的接口
给予用户最简单的
访问功能的方式
比如如果我们在
使用这个服务的时候
只需要告诉出租车司机
师傅请送我去机场
这样一个简单的信息的话
那么用户使用起了这个服务
就会非常的简单
但是如果我们向用户暴露了
过多的实现细节的话
接口就会显得非常的纷繁复杂
比如仅仅是刚才
同样的去机场的过程
我们就需要不断地
和服务的对象之间发生交互
告诉他向左转向右
转那么当我们的目的地
发生变化的时候
这个接口的定义也会发生变化
因此不够抽象的接口
会增加系统的访问的
和交互的复杂性
由此我们可以看出
一个定义抽象的接口
是要向用户暴露尽可能少的
实现细节
让用户知道的关于类的
内部实现的细节越少越好
这里把握的原则就是
只给用户看他所必须的部分
只给用户看和使用公开的信息
只从用户的业务需求来考虑
而不暴露实现的和设计的细节
这也是给用户最小负担的
这样的一个原则
在定义类的职责的过程中
我们一定要采用一种
面向服务的原则
确定这个类的对外提供的服务的
用户是谁
这一过程非常重要
因为只有这样
我们设计出来的系统
才能够有明确的职责划分
谁是提供服务的一方
谁是使用服务的一方
服务好坏与满足与否的标准
是什么
比如在刚才出租车的例子中
司机是提供服务的一方
客户是使用服务的一方
他们二者之间是有不同的
对服务是否合规的
以及满足的这样的条件
出租车司机是为了赚更多的钱
而用户则是要花费更少的开销
因此我们要在类的设计中
考虑二者之间的这一个平衡
在确定类对象的行为的时候
我们已经通过之前用例分析
以及对类职责的分析
定义了一部分设计的细节
但是在我们对接口
进行抽象的时候
这些对象的行为定义
是有可能发生变化的
因为这个时候
我们识别了更多的
环境对功能的约束
包括实现一个操作的前置条件
后置条件 意外情况等等
比如在用户使用
出租车对象的时候
他需要上车
需要告知司机终点是哪里
在到达之后他要下处 还要付钱
这些就是这一个类对象
他要完成的公共的那些行为
因此
我们要把它定义在接口上头
那么从用户的这一端
我们可以看到
用户在用出租车的时候
他的脑子里一定是要有一个
出行的地点
他还要能够召唤出租车
还要能够付钱
那么通过对这些公共的
接口的识别
我们就得到了
第一步的关于类的行为的定义
除了这些公共的接口以外的内容
我们都可以把它看作
是和实现相关的
这也就是通过这个过程
我们了解到
如何去区分接口和实现
服务的用户
他无须关注实现的细节
他只需要知道
要完成我预期的功能的话
我需要提供什么
所以他只关注的是
要定义哪些方法
以及这些方法它的参数有哪些
至于编码实现的部分
就是和实现细节相关的
我们可以看出
通过分离了接口和实现
当我们修改实现的时候
接口是无须修改的
这样我们可以用不同的方式
来实现用户的期望
接口是站在系统的外部
从用户的角度
来看待对象的定义
而实现则是对对象的定义
如果我们把对象
看成是一个水果的话
那么实现是包含在对向内部的
果核和果肉
而接口则是果皮
在实现中
我们需要描述对象的内部状态
并编码实现这些状态的迁移
-1.1 软件无处不在
--讲课视频
-1.2 软件的本质特性
--讲授视频
-1.3 软件工程的产生与发展
--讲授视频
-1.4 软件工程的基本概念
--讲授视频
-1.5 软件质量实现
--讲授视频
-1.6 业界人士谈软件工程
-测验题--作业
-讨论题
--讨论题
-作业题
--第一张 作业题
-2.1 编程过程与规范
--讲课视频
-2.2 良好的编程实践
--讲课视频
-2.3 Python集成开发环境
--讲课视频
-2.4 代码静态检查
--讲课视频
-2.5 代码性能分析
--讲课视频
-2.6 结对编程实践
--讲课视频
-2.7 刘贺谈软件工程
--讲课视频
--讨论
-测验题--作业
-作业题
--第二章 作业题
-3.1 单元测试概述
--讲课视频
-3.2 黑盒测试方法
--黑盒测试方法
-3.3 白盒测试方法
--基本概念
--代码覆盖标准
--基本路径测试
-3.4 单元测试工具
--单元测试工具
--html
-测验题--作业
-作业题
--第三章 作业题
--作业题附件
-4.1 软件过程
--讲课视频
-4.2 软件过程模型
--讲课视频
-4.3 敏捷开发过程
--讲课视频
-4.4 微软公司开发过程
--邹欣经理自我介绍
--微软开发过程之一
--微软开发过程之二
-测验题--作业
-5.1 团队组织与管理
--讲课视频
-5.2 项目沟通管理
--讲课视频
-5.3 软件项目计划
--讲课视频
-5.4 软件项目估算
--讲课视频
-测验题--作业
-讨论题
--讨论
-6.1 敏捷开发之Scrum
-- 敏捷开发之Scrum
--html
-6.2 用户故事与估算
--讲课视频
-6.3 团队协作工具Tower
-6.4 配置管理
--讲课视频
-6.5 配置管理工具Git
--讲课视频
-测验题--作业
-作业题--作业
-7.1 需求工程师
--讲课视频
-7.2 需求定义
--讲课视频
-7.3 需求的类型
--讲课视频
--讲课视频(2)
-7.4 需求工程过程
--讲课视频
-7.5 需求的主要来源
--讲课视频
-7.6 需求获取技术
--讲课视频
--讲课视频二
--讲课视频三
-7.7 撰写需求文档
--讲课视频
-测验题--作业
-讨论题
--讨论
-8.1 用例建模概念
--讲课视频
-8.2 用例建模过程
--讲课视频
-8.3 用例建模精讲
--讲课视频
-8.4 建模工具介绍
--讲课视频
-8.5 微信抢票应用案例
--讲课视频
-测验题--作业
-讨论题
--讨论
-9.1 面向对象分析
--讲课视频
-9.2 CRC卡片分拣法
--讲课视频-1
--讲课视频-2
-9.3 面向对象设计
--讲课视频-1
--讲课视频-2
-9.4 类图建模
--讲课视频-1
--讲课视频-2
-第9章 面向对象分析与设计--测验题
-讨论题
--讨论
-10.1 顺序图概念
--讲课视频
-10.2 顺序图建模
--讲课视频
-10.3 顺序图风格
--讲义视频
-10.4 状态建模
--讲课视频
-10.5 状态图
--讲课视频
-10.6 状态图精讲
--讲义视频
-测验题--作业
-讨论题
--讨论
-11.1 软件体系结构概念
--讲授视频
-11.2 软件设计原则
--讲授视频
-11.3 软件体系结构风格(一)
--讲授视频
-11.4 软件体系结构风格(二)
--讲授视频
-11.5 软件体系结构风格(三)
--讲授视频
-11.6 软件设计过程
--讲授视频
-11.7 Web系统架构设计
--讲授视频
-11.8 数据库选择策略
--讲授视频
-测验题--作业
-作业题
--html
--html
--html
-作业题--作业
-12.1 交互设计概述
--讲授视频
-12.2 交互设计目标
--讲授视频
-12.3 GUI设计原则
--讲课视频
-12.4 KLM效率模型
--Video
-12.5 Fitts定律
--讲授视频
-12.6 交互设计过程
--讲授视频
-测验题--作业
-13.1 软件测试概念
--讲课视频
-13.2 软件测试类型
--讲课视频
-13.3 软件功能测试
--讲课视频
-13.4 软件性能测试
--讲课视频
-测验题--作业
-14.1 软件部署与交付
--讲课视频
-14.2 软件演化与维护
--讲课视频
-测验题--作业
-第一部分:基础知识
-第二部分:编程与测试(选做)