当前课程知识点:面向对象程序设计(C++) >  第八讲 基于接口组合,应对复杂变化 >  8.0 引言 >  Video

返回《面向对象程序设计(C++)》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《面向对象程序设计(C++)》慕课在线视频列表

Video课程教案、知识点、字幕

同学们好

我们前面学习了七章了

这七章内容里面

涉及到面向对象程序设计

涉及到C++语言的语法

涉及到面向对象程序设计的一些

基本的方法和逻辑

还有一些基本思想

总的来讲

我们从前面看

实际上我们是在不断的

把一个程序一层一层的往下拆

分成很多互相之间能够

比较清晰的分开的一些小块

然后把这些块想办法让它

互相之间能够独立的变化

用这方式使得我们程序更加

容易适合需求的改变

容易被复用

就是满足我们在第五章的时候

说的那个要求

开闭

还有这种单一职责

咱们实际上切了半天了

把这程序实际上说的

有横的切的

有竖着切的

已经切的挺碎了

现在基本上已经拆成零件了

把一桌子零件放在这儿

咱们这章内容

你得想办法把它合起来

咱们得琢磨着

你如果有了一桌子零件在这儿

你怎么把它组装成一个程序

按照咱们这个领域的话说

就是复用

已有的东西

已有的各种代码

怎么把它利用起来

从面向对象程度设计来讲

一般来讲复用

无非就是这几种方法

要么就是已有代码继承

要么就是组合

代码的一些东西组合进来

还有如果你已有代码里边

比如像STR那种东西

这是一个模板

直接实例化

这也是一种手段

让编译器帮我们来复用

这是比较常见的几种手段

但是具体来讲

怎么去实现这种复用

在复用过程中

比如说预见了

这个功能满足我要求了

但是接口不一样

02:58就不一样

我这个接口一致了

但是功能稍微差了点

怎么办

我有了一个基本的东西

我要在基础上给它添点什么

进行叠加

描个圈画个洼的

怎么往上加

还有一种形式就是

我有一大堆类似功能的一堆东西

我要把它组装起来

形成一个完整的处理的体系

这种情况要怎么做

等等

那么这些就是我们

这节课要考虑的内容

就是怎么样去把这堆零件

再组装成符合你要求的机器来

所以实际上学这章

我觉得也应该带着一个问题

我们前面在第六章第七章

进行拆的时候

为什么要拆

其实拆的时候固然是为了符合

我们在第五章介绍的时候说

你要满足那些原则

但是其实也是奔着

我们这一章以及后面一章

要去讲的复用这样的目的来的

因为你拆本身目的就是要装嘛

你拆成一桌零件也没用了

目的就是为了现在装方便

将来把它拿过来装一样方便

而且这个和这个装方便

换一个来还能装上

这是个目标

所以实际上接下来的这两章里头

当我们去学习这种

组装的技巧和方法的时候

我们反过头去也能够更深刻的体会

过去提的那种拆的原则是多么重要

因为你只有拆的好

你现在装的方便

你过去如果拆的拖泥带水

不干不净

可能你现在就没法装了

而且如果拆的时候接口不够清晰

现在还想装一块

所以在装的第一步

就是咱们这一章要切入的

从接口与功能的变跟不变的关系上

给大家介绍一些常见的套路

当我们碰到一些具体问题的时候

怎么去处理

看看我们的场景符合哪种形式

所以一定是在应用场景之下

来决定到底怎么来组装

这个组装实际上不是说

我觉得这么装好

而是说你最后那个问题是怎么

你的目标是什么

你按这个目标来做

我觉得你那句话说的特别好

因为确确实实大家在学习C++

尤其是面向对象思想编程序的时候

很容易有一种感觉

就是觉得一个问题似乎是

仁者见仁智者见智

最后说不清楚到底谁对错

但是其实

当这个场景在那儿放着的时候

当它场景为了有可能发生变化

是已经确定的

就是那一些有可能变化

在这种情况下其实往往

答案是唯一的

也就是说根据你的经验的多少

一般的来讲

经验不足的人

多数情况下判断不准

而不是说它

当你告诉他判断准了之后

他也知道会这么装

所以有时候他会得出一个

似是而非的结论

就是说这个程序或者这个东西

这个任务

用这个也能解决

而且也能装起来

为什么不可以呢

所以我想可能就在于

对这个问题到底怎么能够

用已有东西把它组装起来去解决

认识的还是有一定的偏差

其实有的时候

面向对象程序设计

并不仅仅是一个方法论

并不仅仅是一个理论体系

它也包括了很多经验在里边

这种经验也是需要长期的练习

所以在我们这章

介绍的例子里大家也会看到

有一些办法他们两两之间非常相似

非常接近

如果你只是去看它的

语法的表现形式

甚至可以说是一模一样的

但是我们偏偏说它是不一样的

为什么

其实你仔细听听

仔细想想就明白

所以大家听后面的

几个小节的讲解

留意注意这里面的差别

面向对象程序设计(C++)课程列表:

第一讲 课程简介与编程环境

-1.0 课程定位、教学内容

--课程定位与教学内容

-1.0 课程定位、教学内容--作业

-1.1 编程环境与工具

--程序结构与编译链接

--源程序拆分

--多文件编译链接的方法

-1.2 main函数的命令行参数

--main函数的命令行参数

-作业一--作业

第二讲 基础语法(1)

-2.1 变量定义

--变量定义

-2.2 变量的初始化、类型推导与基于范围的循环

--变量的初始化、类型推导与基于范围的循环

-2.3 函数重载

--函数重载

-2.4 函数参数的缺省值与追踪返回类型的函数

--函数参数的缺省值与追踪返回类型的函数

-2.5 类的定义

--类的定义

-2.6 类成员的访问权限与友元

--类成员的访问权限与友元

-第二讲 基础语法(1)--作业二

第三讲 基础语法(2)

-3.1 构造函数析构函数

--构造函数析构函数

-3.2 赋值运算符重载

--赋值运算符重载

-3.3 流运算符重载

--流运算符重载

-3.4 函数运算符重载

--函数运算符重载

-3.5 下标运算符与自增减运算符重载

--下标运算符与自增减运算符重载

-3.6 静态成员与常量成员

--静态成员与常量成员

-3.7 对象组合

--对象组合

-3.8 移动构造函数

--Video

--Video

-3.9 default修饰符

--Video

-第三讲 基础语法(2)--作业三

第四讲 基础语法(3)

-4.1 继承

--Video

-4.2 函数重写

--Video

-4.3 虚函数

--Video

--Video

-4.4 自动类型转换

--Video

-4.5 禁止自动类型转换

--Video

-4.6 强制类型转换

--Video

-4.7 函数模板

--Video

-4.8 类模板

--Video

-4.9 成员函数模板

--Video

-4.10 模板特化

--Video

-作业四--作业

第五讲 找到对象,确定接口

-5.0 引言

--Video

-5.1 从FOP到OOP

--Video

-5.2 对象在哪里

--Video

-5.3 接口在哪儿

--Video

-5.4 实现接口

--Video

-5.5 变与不变:多态的威力

--Video

第六讲 算法横向拆分,分离步骤

-6.0 引言

--讨论

-6.1 从负载监视器的设计开始

--从负载监视器的设计开始

-6.2 接口的分离与单一责任原则

--接口的分离与单一责任原则

-6.3 委托与接口的进一步分解

--委托与接口的进一步分解

-6.4 分离不同层面的可变性

--分离不同层面的可变性

第七讲 算法纵向拆分,分离表示

-7.0 引言

--Video

-7.1 迭代器

--Video

-7.2 迭代器的实现

--Video

-7.3 迭代器与模板

--Video

-7.4 算法与数据的解耦

--Video

-7.5 抽象结构与类模板

--Video

-7.6 函数对象与算法分解

--Video

-7.7 基于模板的策略模式

--Video

第八讲 基于接口组合,应对复杂变化

-8.0 引言

--Video

-8.1 已有资源的组合

--Video

-8.2 适当引入接口

--Video

-8.3 接口不变时的功能变化

--Video

-8.4 装饰

--Video

-8.5 责任的传递与责任链

--Video

-8.X 小结

--Video

第九讲 增加抽象层级,隔离复杂变化

-9.0 引言

--Video

-9.1 通过封装增加隔离、应对变化

--Video

--Video

-9.2 增加抽象层,应对变化

--Video

--Video

-9.3 相互关联对象的创建

--Video

-9.4 示例:自动组卷系统设计

--Video

-9.5 设计思路(上)

--Video

-9.6 设计思路(中)

--Video

-9.7 设计思路(下)

--Video

-9.X 小结

--Video

-课程总结

--Video

期末考试

-期末考试--作业

Video笔记与讨论

也许你还感兴趣的课程:

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