当前课程知识点:软件工程 >  第9章 面向对象分析与设计 >  9.3 面向对象设计 >  讲课视频-1

返回《软件工程》慕课在线视频课程列表

讲课视频-1在线视频

下一节:讲课视频-2

返回《软件工程》慕课在线视频列表

讲课视频-1课程教案、知识点、字幕

下面我们介绍

面向对象设计有关的内容

在软件设计的过程中

我们始终要应对

需求的日新月异的变化

对设计创新的持续追求

以及对软件质量

持续提升的要求

那么在整个过程中

我们可以采用很多种不同的方法

来应对这些问题

面向对象方法就是其中之一

然而真相是

面向对象方法本身

并不能保证你的设计

成为优秀的设计

你可以用非面向对象的方法

建立一个非常好的设计

也可以 用了面向对相的方法

但是生成了一个不良的设计

平庸的依然平庸

但是我们用面向对象的方法

它最主要应对的问题

就是数据封装和减小模块间的

依赖性

让我们有更好的

可以重用的设计单元

在面向对象的设计过程中

我们首先进行适当的领域分析

撰写设计描述

确定系统的开发任务

基于问题描述抽取需求

同时开发用户界面原型

在抽取需求的过程中

对象类的识别

是面向对象设计的基础

我们要定义每个类的职责

确定类与类之间的交互关系

从而建立系统的设计模型

在这个过程中

最主要的一个步骤

就是识别对象类的过程

我们下边介绍一种

识别对象类的方法

那么究其根本

面向对象思维方式

最核心的理念有哪些

这主要包括

要把接口和实现区分开来

要从具体到抽象

以及定义最小的接口的原则

区分接口与实现

其最主要的目的

就是实现接口的标准化

使得我们能够在

接口不变的情况下

对实现的部分进行演化和修改

比如在下图中

我们如果要撰写一个

数据库的访问类

其中最主要的功能

就是打开数据库这个功能

我们如果定义了一个

统一的接口Open

它的参数只有我们要打开的

数据库的名字

而在内部的实现过程中

我们既可以打开一个

Oracle的数据库

也可以打开一个SQL数据库

那么我们就能够保证

无论底层的实现

采用的是哪种数据库

我们都能够用统一的方法

来访问数据库

确保接口与实现的分离

定义标准的接口

保证了我们程序结构的稳定性

使我们可以动态的

替换用户的实现代码

和底层的数据库实现

保证我们的程序

在演化的过程中

有相对稳定的结构

下面我们给出一个

设计抽象接口的实例

以我们叫出租车

这样的一个服务为例

一个抽象的接口

给予用户最简单的

访问功能的方式

比如如果我们在

使用这个服务的时候

只需要告诉出租车司机

师傅请送我去机场

这样一个简单的信息的话

那么用户使用起了这个服务

就会非常的简单

但是如果我们向用户暴露了

过多的实现细节的话

接口就会显得非常的纷繁复杂

比如仅仅是刚才

同样的去机场的过程

我们就需要不断地

和服务的对象之间发生交互

告诉他向左转向右

转那么当我们的目的地

发生变化的时候

这个接口的定义也会发生变化

因此不够抽象的接口

会增加系统的访问的

和交互的复杂性

由此我们可以看出

一个定义抽象的接口

是要向用户暴露尽可能少的

实现细节

让用户知道的关于类的

内部实现的细节越少越好

这里把握的原则就是

只给用户看他所必须的部分

只给用户看和使用公开的信息

只从用户的业务需求来考虑

而不暴露实现的和设计的细节

这也是给用户最小负担的

这样的一个原则

在定义类的职责的过程中

我们一定要采用一种

面向服务的原则

确定这个类的对外提供的服务的

用户是谁

这一过程非常重要

因为只有这样

我们设计出来的系统

才能够有明确的职责划分

谁是提供服务的一方

谁是使用服务的一方

服务好坏与满足与否的标准

是什么

比如在刚才出租车的例子中

司机是提供服务的一方

客户是使用服务的一方

他们二者之间是有不同的

对服务是否合规的

以及满足的这样的条件

出租车司机是为了赚更多的钱

而用户则是要花费更少的开销

因此我们要在类的设计中

考虑二者之间的这一个平衡

在确定类对象的行为的时候

我们已经通过之前用例分析

以及对类职责的分析

定义了一部分设计的细节

但是在我们对接口

进行抽象的时候

这些对象的行为定义

是有可能发生变化的

因为这个时候

我们识别了更多的

环境对功能的约束

包括实现一个操作的前置条件

后置条件 意外情况等等

比如在用户使用

出租车对象的时候

他需要上车

需要告知司机终点是哪里

在到达之后他要下处 还要付钱

这些就是这一个类对象

他要完成的公共的那些行为

因此

我们要把它定义在接口上头

那么从用户的这一端

我们可以看到

用户在用出租车的时候

他的脑子里一定是要有一个

出行的地点

他还要能够召唤出租车

还要能够付钱

那么通过对这些公共的

接口的识别

我们就得到了

第一步的关于类的行为的定义

除了这些公共的接口以外的内容

我们都可以把它看作

是和实现相关的

这也就是通过这个过程

我们了解到

如何去区分接口和实现

服务的用户

他无须关注实现的细节

他只需要知道

要完成我预期的功能的话

我需要提供什么

所以他只关注的是

要定义哪些方法

以及这些方法它的参数有哪些

至于编码实现的部分

就是和实现细节相关的

我们可以看出

通过分离了接口和实现

当我们修改实现的时候

接口是无须修改的

这样我们可以用不同的方式

来实现用户的期望

接口是站在系统的外部

从用户的角度

来看待对象的定义

而实现则是对对象的定义

如果我们把对象

看成是一个水果的话

那么实现是包含在对向内部的

果核和果肉

而接口则是果皮

在实现中

我们需要描述对象的内部状态

并编码实现这些状态的迁移

软件工程课程列表:

第1章 初识软件工程

-1.1 软件无处不在

--讲课视频

-1.2 软件的本质特性

--讲授视频

-1.3 软件工程的产生与发展

--讲授视频

-1.4 软件工程的基本概念

--讲授视频

-1.5 软件质量实现

--讲授视频

-1.6 业界人士谈软件工程

--海芯科技创始人施侃乐访谈

-测验题--作业

-讨论题

--讨论题

-作业题

--第一张 作业题

第2章 编写高质量代码

-2.1 编程过程与规范

--讲课视频

-2.2 良好的编程实践

--讲课视频

-2.3 Python集成开发环境

--讲课视频

-2.4 代码静态检查

--讲课视频

-2.5 代码性能分析

--讲课视频

-2.6 结对编程实践

--讲课视频

-2.7 刘贺谈软件工程

--讲课视频

--讨论

-测验题--作业

-作业题

--第二章 作业题

第3章 单元测试

-3.1 单元测试概述

--讲课视频

-3.2 黑盒测试方法

--黑盒测试方法

-3.3 白盒测试方法

--基本概念

--代码覆盖标准

--基本路径测试

-3.4 单元测试工具

--单元测试工具

--html

-测验题--作业

-作业题

--第三章 作业题

--作业题附件

第4章 软件开发过程

-4.1 软件过程

--讲课视频

-4.2 软件过程模型

--讲课视频

-4.3 敏捷开发过程

--讲课视频

-4.4 微软公司开发过程

--邹欣经理自我介绍

--微软开发过程之一

--微软开发过程之二

-测验题--作业

第5章 团队开发管理

-5.1 团队组织与管理

--讲课视频

-5.2 项目沟通管理

--讲课视频

-5.3 软件项目计划

--讲课视频

-5.4 软件项目估算

--讲课视频

-测验题--作业

-讨论题

--讨论

第6章 敏捷开发与配置管理

-6.1 敏捷开发之Scrum

-- 敏捷开发之Scrum

--html

-6.2 用户故事与估算

--讲课视频

-6.3 团队协作工具Tower

--Tower工具介绍(1)

--Tower工具介绍(2)

-6.4 配置管理

--讲课视频

-6.5 配置管理工具Git

--讲课视频

-测验题--作业

-作业题--作业

第7章 需求获取

-7.1 需求工程师

--讲课视频

-7.2 需求定义

--讲课视频

-7.3 需求的类型

--讲课视频

--讲课视频(2)

-7.4 需求工程过程

--讲课视频

-7.5 需求的主要来源

--讲课视频

-7.6 需求获取技术

--讲课视频

--讲课视频二

--讲课视频三

-7.7 撰写需求文档

--讲课视频

-测验题--作业

-讨论题

--讨论

第8章 用例建模

-8.1 用例建模概念

--讲课视频

-8.2 用例建模过程

--讲课视频

-8.3 用例建模精讲

--讲课视频

-8.4 建模工具介绍

--讲课视频

-8.5 微信抢票应用案例

--讲课视频

-测验题--作业

-讨论题

--讨论

第9章 面向对象分析与设计

-9.1 面向对象分析

--讲课视频

-9.2 CRC卡片分拣法

--讲课视频-1

--讲课视频-2

-9.3 面向对象设计

--讲课视频-1

--讲课视频-2

-9.4 类图建模

--讲课视频-1

--讲课视频-2

-第9章 面向对象分析与设计--测验题

-讨论题

--讨论

第10章 行为建模

-10.1 顺序图概念

--讲课视频

-10.2 顺序图建模

--讲课视频

-10.3 顺序图风格

--讲义视频

-10.4 状态建模

--讲课视频

-10.5 状态图

--讲课视频

-10.6 状态图精讲

--讲义视频

-测验题--作业

-讨论题

--讨论

第11章 软件系统设计

-11.1 软件体系结构概念

--讲授视频

-11.2 软件设计原则

--讲授视频

-11.3 软件体系结构风格(一)

--讲授视频

-11.4 软件体系结构风格(二)

--讲授视频

-11.5 软件体系结构风格(三)

--讲授视频

-11.6 软件设计过程

--讲授视频

-11.7 Web系统架构设计

--讲授视频

-11.8 数据库选择策略

--讲授视频

-测验题--作业

-作业题

--html

--html

--html

-作业题--作业

第12章 软件交互设计

-12.1 交互设计概述

--讲授视频

-12.2 交互设计目标

--讲授视频

-12.3 GUI设计原则

--讲课视频

-12.4 KLM效率模型

--Video

-12.5 Fitts定律

--讲授视频

-12.6 交互设计过程

--讲授视频

-测验题--作业

第13章 软件系统测试

-13.1 软件测试概念

--讲课视频

-13.2 软件测试类型

--讲课视频

-13.3 软件功能测试

--讲课视频

-13.4 软件性能测试

--讲课视频

-测验题--作业

第14章 软件交付与维护

-14.1 软件部署与交付

--讲课视频

-14.2 软件演化与维护

--讲课视频

-测验题--作业

第15章 期末考试与总结

-第一部分:基础知识

-第二部分:编程与测试(选做)

--编程与测试(选做)

讲课视频-1笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。