当前课程知识点:面向对象程序设计(C++) > 第五讲 找到对象,确定接口 > 5.0 引言 > Video
咱们前边已经讲了半天了
这个给介绍好多的新的语法点
什么类
虚函数什么这些东西
那么咱们接下来是不是应该去
介绍一些更深层次的东西了
就是说这些语法到底
作为当时设计这个语言的人
他提供这些语法功能
到底有什么样的一个用意
对吧
对啊
这些东西到底是为了适应一个什么样的
环境或者说一个什么样的需求而来的
应该还是为了去帮助你的程序
第一设计起来更方便
然后将来这个程序的
这种维护修改也更容易
那就涉及到这么一个问题了
对于我们来讲
或者说我们这些写程序人来讲
什么样的程序是一个好程序
这是一个很关键的问题
也是咱们这门课其实
要教给大家的一个东西
所以就像我们最开始讨论的时候
说到的那样子
就是在程序设计里
课程里头我们已经学了很多的算法
其实也能解决很多的问题
对啊
那我们学这个课程
我们所讲的那个知识到底目的何在
其实就是为了提高
你的程序将来
编写和维护的这种方便的程度
更确切来讲其实就是来
增强你程序应对变化的一种能力
对啊
那是啊
因为本身咱们都知道
世界本身就一直在变
而且说作为你个人来讲
不管你个人来讲还是说大家
作为一个集体来讲吧
你对这个世界的认识
其实也是不停在变化的
对
我们有的时候做设计
哪怕产品经理或者什么这些学生来讲
他对一个事物的把握不时的会发生变化
有的时候我们就说产品经理不靠谱
其实不是他不靠谱
本身刚开始的时候
就没认识到那个深度
对
那么必然它这个
对你程序这种需求肯定会发生一些变化
发生一些改变
对
那么你在
如果你要是一个程序有一点改变
这个需求有一点改变
你的程序都得推倒了重写
那你的程序说白了就是一个废物
所以这里边总结出一句话
其实相当于两点吧
一点就是说你用程序
要去解决的问题
或者说描述的这个世界本身复杂
对
可变
常变
对
常变
所以你本身就得用一些
更有效的工具和手段
或者指导思想
来面对这样一个问题
第二个话呢就是
我们人对这个世界的认识对吧
直场面的
其实也是老在变化
这样的话客体
客观的世界在变
然后你的主观世界
你的认识也在不断的变
那这两个变叠加起来
最后我们去编程序的话
我们就应该让这个程序本身
能够去适应
和应对这样的一个变化的外界
对
是
那就是说变化永恒的
你永远都不可能让它不变
但是返过来呢
你的程序又不能总是在变
对
你程序总是在变
那个谁也受不了
对
所以实际上我们后面大量的内容
要去介绍或者讨论的
就是说怎么能够让程序去
有能力适应这样的变化
而且这个适应过程呢
又不是说像我们想象的那样
我来了一个什么变化
我就得重新写一个程序
或者说把程序什么大段的
给它扔掉修改去变
去适应
而是说在程序一开始设计的时候
我们设计出一些比较合理的结构
在这个结构框架之内
我可以通过不断的往里填新的东西
这种方式来去适应这个变化
对
这样得到的好处就是说我这个
以前的功能都积累了
我不至于像狗熊掰棒子
掰一根扔一根
掰一根扔一根
对
所以就是说我们在
后面大量要讨论和介绍里头
在我们每一个问题编程序的时候
其实要思考几个问题
第一刚才我们说的大段的这种变化
变化在哪
变化是什么
对
先是是什么
然后哪来的
然后这个变化在你的程序里边
应该怎么体现
怎么体现或者说我怎么去应对它
对吧
始终贯穿着这根主线
还忘了一个
最后还有一个就是怎么样设计
能够让这些变化对你的程序影响最小
对
所以实际上是
围绕变化再展开我们程序设计的一种思路
对
围绕变化再去做你的代码的实现
到最后其实就是一个原则
所谓的叫做
在程序里面叫开闭原则
open closs
所谓开呢就是这个程序设计好了
那它不能是死的
必须针对各种变化是开放的
或者再确切来说
因为程序你编出来之后
它提交上去它当然是死的
对
只是说这种
就是说我容易去改它
它并不抗拒我的这种修改
而且或者我改起来比较容易
那么形象的说法呢
就是说它是开放的
我容易改嘛
还有个闭呢
闭是什么呢
闭就是
闭其实就是表示它的这种
内在的稳定性
就是说我有一些可能不常修改的
它应该是说
它在那个地方是保持它的稳定
对
或者从另外的一个角度去说闭就是
你新进来的东西和你的修改
不影响已有的那些东西
看上去它好像是封闭的
完全不受外界的干扰这种感觉
所以把这种称为是一种闭
或者你也可以这么理解
就是说我已有的东西放里边了
就不要再动了
就别动它了
对
其实这个也跟我们平时的一些
这种怎么说呢
平时的一些这种日常经验有关
咱们都知道程序这个东西人写的
你很难不犯错误
那么什么样的程序最有可能
不犯错误呢
就是那种已经运行很长时间了
那种程序
那肯定不会有错
对
另外还有一个就是我们程序
就像刚才我们讲到的
你很难不做改动
但是改动的话
要尽可能的在现有的基础上
把它利用好
发挥好
而不要什么东西都推倒重来
推倒出来那谁也受不了
所以我尽量的不推倒
而是把现有东西重新的这种组合组装
或者调配
有的时候我们也把这些都附用对吧
不要重新发明轮着嘛
对
就是说这些附用要显得很方便
这个其实也是一种闭的这种体现
而且也是我们前面讲的
我的程序应对变化的能力提高了
相当于我还是这些
我不变应万变
但是我东西换来换
我换一换
组织一下
加一点新东西
我就能干一些别的其他的活
对
以最小的代价去适应
最快的变化或者最复杂的这种变化
其实闭
开闭原则里面这个闭
对于开来讲本身也是有意义的
对
因为你想啊
开闭原则无非就是开是可改变
那你要是说没有这个闭
这个原则的限制的话
那开也就没有意义了嘛
对
怎么改都行
那还改什么劲
或者返过来讲就是
你开其实是永远都存在的
对
因为刚刚说的你世界是变化的
是复杂的
你的认知是变化的
是变动的
程序也得跟着变
对
所以开其实是在
永远的一个永恒的要求
对吧
但是如果没有相对的闭
那你开随便改了
再就没有意义了对吧
所以就是说你总有一些
相当于你自己的一些准则
就跟为人处事一样
你总有自己的立场观点
这个地方
总要是有一个指导思想在那个地方
总要有自己的坚持所在对吧
对
然后去面对变成的东西
当然你这是属于比较哲学的了
从比较实际的角度来讲就是说
尽可能的维持那些已有的
经过千锤百炼的那些部分
不要把它们扔掉
对
然后我加入新的东西
来适应外界的变化
对
这样来讲
我既保持了程序本身的稳定性
又能够让程序
灵活的去应对外界变化
这是取得了实质性的统一
对
实际上就是在一定的时空范围里头
保持它的稳定性
然后也具备
与时俱进的变化的能力
既要有稳定
又要有与时俱进的进化能力
其实这个开闭原则
可以说是咱们一般来讲
做程序设计的一个
应该算是最高准则吧
最高的准则
就是说我们考虑一个程序设计
到底他设计的是不是好
其实完全可以用这个准则去套用
对
你只要看这一个程序设计
它设计的符合这个原则
能够很简单的去扩展
而且在扩展过程中
不用去改原有的代码
尽可能少的改原有代码
OK
那这就是好程序
对
所以我们课程上其实是
介绍的就是这样一些方面的理论
以及这样的一些手法
就是实际的一些技巧
当然你去领会这个
去掌握和运用它们
还得靠大家的这种实践
也就是在这个实践当中
不断去体会说什么叫开闭
什么叫这个程序好
你体验了之后才会发现
原来这样设计我的程序可能就是
一方面很好用
一方面也很好改
后面就得看大家的实际努力了
对
反正我们也会逐步的展开
然后希望能够让大家学到更多
更有用的这样一些设计的思想
和设计的技巧
-1.0 课程定位、教学内容
-1.0 课程定位、教学内容--作业
-1.1 编程环境与工具
--源程序拆分
-1.2 main函数的命令行参数
-作业一--作业
-2.1 变量定义
--变量定义
-2.2 变量的初始化、类型推导与基于范围的循环
-2.3 函数重载
--函数重载
-2.4 函数参数的缺省值与追踪返回类型的函数
-2.5 类的定义
--类的定义
-2.6 类成员的访问权限与友元
-第二讲 基础语法(1)--作业二
-3.1 构造函数析构函数
--构造函数析构函数
-3.2 赋值运算符重载
--赋值运算符重载
-3.3 流运算符重载
--流运算符重载
-3.4 函数运算符重载
--函数运算符重载
-3.5 下标运算符与自增减运算符重载
-3.6 静态成员与常量成员
-3.7 对象组合
--对象组合
-3.8 移动构造函数
--Video
--Video
-3.9 default修饰符
--Video
-第三讲 基础语法(2)--作业三
-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
-期末考试--作业