当前课程知识点:面向对象程序设计(C++) >  第五讲 找到对象,确定接口 >  5.0 引言 >  Video

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

Video在线视频

Video

下一节:Video

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

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

咱们前边已经讲了半天了

这个给介绍好多的新的语法点

什么类

虚函数什么这些东西

那么咱们接下来是不是应该去

介绍一些更深层次的东西了

就是说这些语法到底

作为当时设计这个语言的人

他提供这些语法功能

到底有什么样的一个用意

对吧

对啊

这些东西到底是为了适应一个什么样的

环境或者说一个什么样的需求而来的

应该还是为了去帮助你的程序

第一设计起来更方便

然后将来这个程序的

这种维护修改也更容易

那就涉及到这么一个问题了

对于我们来讲

或者说我们这些写程序人来讲

什么样的程序是一个好程序

这是一个很关键的问题

也是咱们这门课其实

要教给大家的一个东西

所以就像我们最开始讨论的时候

说到的那样子

就是在程序设计里

课程里头我们已经学了很多的算法

其实也能解决很多的问题

对啊

那我们学这个课程

我们所讲的那个知识到底目的何在

其实就是为了提高

你的程序将来

编写和维护的这种方便的程度

更确切来讲其实就是来

增强你程序应对变化的一种能力

对啊

那是啊

因为本身咱们都知道

世界本身就一直在变

而且说作为你个人来讲

不管你个人来讲还是说大家

作为一个集体来讲吧

你对这个世界的认识

其实也是不停在变化的

我们有的时候做设计

哪怕产品经理或者什么这些学生来讲

他对一个事物的把握不时的会发生变化

有的时候我们就说产品经理不靠谱

其实不是他不靠谱

本身刚开始的时候

就没认识到那个深度

那么必然它这个

对你程序这种需求肯定会发生一些变化

发生一些改变

那么你在

如果你要是一个程序有一点改变

这个需求有一点改变

你的程序都得推倒了重写

那你的程序说白了就是一个废物

所以这里边总结出一句话

其实相当于两点吧

一点就是说你用程序

要去解决的问题

或者说描述的这个世界本身复杂

可变

常变

常变

所以你本身就得用一些

更有效的工具和手段

或者指导思想

来面对这样一个问题

第二个话呢就是

我们人对这个世界的认识对吧

直场面的

其实也是老在变化

这样的话客体

客观的世界在变

然后你的主观世界

你的认识也在不断的变

那这两个变叠加起来

最后我们去编程序的话

我们就应该让这个程序本身

能够去适应

和应对这样的一个变化的外界

那就是说变化永恒的

你永远都不可能让它不变

但是返过来呢

你的程序又不能总是在变

你程序总是在变

那个谁也受不了

所以实际上我们后面大量的内容

要去介绍或者讨论的

就是说怎么能够让程序去

有能力适应这样的变化

而且这个适应过程呢

又不是说像我们想象的那样

我来了一个什么变化

我就得重新写一个程序

或者说把程序什么大段的

给它扔掉修改去变

去适应

而是说在程序一开始设计的时候

我们设计出一些比较合理的结构

在这个结构框架之内

我可以通过不断的往里填新的东西

这种方式来去适应这个变化

这样得到的好处就是说我这个

以前的功能都积累了

我不至于像狗熊掰棒子

掰一根扔一根

掰一根扔一根

所以就是说我们在

后面大量要讨论和介绍里头

在我们每一个问题编程序的时候

其实要思考几个问题

第一刚才我们说的大段的这种变化

变化在哪

变化是什么

先是是什么

然后哪来的

然后这个变化在你的程序里边

应该怎么体现

怎么体现或者说我怎么去应对它

对吧

始终贯穿着这根主线

还忘了一个

最后还有一个就是怎么样设计

能够让这些变化对你的程序影响最小

所以实际上是

围绕变化再展开我们程序设计的一种思路

围绕变化再去做你的代码的实现

到最后其实就是一个原则

所谓的叫做

在程序里面叫开闭原则

open closs

所谓开呢就是这个程序设计好了

那它不能是死的

必须针对各种变化是开放的

或者再确切来说

因为程序你编出来之后

它提交上去它当然是死的

只是说这种

就是说我容易去改它

它并不抗拒我的这种修改

而且或者我改起来比较容易

那么形象的说法呢

就是说它是开放的

我容易改嘛

还有个闭呢

闭是什么呢

闭就是

闭其实就是表示它的这种

内在的稳定性

就是说我有一些可能不常修改的

它应该是说

它在那个地方是保持它的稳定

或者从另外的一个角度去说闭就是

你新进来的东西和你的修改

不影响已有的那些东西

看上去它好像是封闭的

完全不受外界的干扰这种感觉

所以把这种称为是一种闭

或者你也可以这么理解

就是说我已有的东西放里边了

就不要再动了

就别动它了

其实这个也跟我们平时的一些

这种怎么说呢

平时的一些这种日常经验有关

咱们都知道程序这个东西人写的

你很难不犯错误

那么什么样的程序最有可能

不犯错误呢

就是那种已经运行很长时间了

那种程序

那肯定不会有错

另外还有一个就是我们程序

就像刚才我们讲到的

你很难不做改动

但是改动的话

要尽可能的在现有的基础上

把它利用好

发挥好

而不要什么东西都推倒重来

推倒出来那谁也受不了

所以我尽量的不推倒

而是把现有东西重新的这种组合组装

或者调配

有的时候我们也把这些都附用对吧

不要重新发明轮着嘛

就是说这些附用要显得很方便

这个其实也是一种闭的这种体现

而且也是我们前面讲的

我的程序应对变化的能力提高了

相当于我还是这些

我不变应万变

但是我东西换来换

我换一换

组织一下

加一点新东西

我就能干一些别的其他的活

以最小的代价去适应

最快的变化或者最复杂的这种变化

其实闭

开闭原则里面这个闭

对于开来讲本身也是有意义的

因为你想啊

开闭原则无非就是开是可改变

那你要是说没有这个闭

这个原则的限制的话

那开也就没有意义了嘛

怎么改都行

那还改什么劲

或者返过来讲就是

你开其实是永远都存在的

因为刚刚说的你世界是变化的

是复杂的

你的认知是变化的

是变动的

程序也得跟着变

所以开其实是在

永远的一个永恒的要求

对吧

但是如果没有相对的闭

那你开随便改了

再就没有意义了对吧

所以就是说你总有一些

相当于你自己的一些准则

就跟为人处事一样

你总有自己的立场观点

这个地方

总要是有一个指导思想在那个地方

总要有自己的坚持所在对吧

然后去面对变成的东西

当然你这是属于比较哲学的了

从比较实际的角度来讲就是说

尽可能的维持那些已有的

经过千锤百炼的那些部分

不要把它们扔掉

然后我加入新的东西

来适应外界的变化

这样来讲

我既保持了程序本身的稳定性

又能够让程序

灵活的去应对外界变化

这是取得了实质性的统一

实际上就是在一定的时空范围里头

保持它的稳定性

然后也具备

与时俱进的变化的能力

既要有稳定

又要有与时俱进的进化能力

其实这个开闭原则

可以说是咱们一般来讲

做程序设计的一个

应该算是最高准则吧

最高的准则

就是说我们考虑一个程序设计

到底他设计的是不是好

其实完全可以用这个准则去套用

你只要看这一个程序设计

它设计的符合这个原则

能够很简单的去扩展

而且在扩展过程中

不用去改原有的代码

尽可能少的改原有代码

OK

那这就是好程序

所以我们课程上其实是

介绍的就是这样一些方面的理论

以及这样的一些手法

就是实际的一些技巧

当然你去领会这个

去掌握和运用它们

还得靠大家的这种实践

也就是在这个实践当中

不断去体会说什么叫开闭

什么叫这个程序好

你体验了之后才会发现

原来这样设计我的程序可能就是

一方面很好用

一方面也很好改

后面就得看大家的实际努力了

反正我们也会逐步的展开

然后希望能够让大家学到更多

更有用的这样一些设计的思想

和设计的技巧

面向对象程序设计(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笔记与讨论

也许你还感兴趣的课程:

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