当前课程知识点:面向对象程序设计(C++) > 第八讲 基于接口组合,应对复杂变化 > 8.0 引言 > Video
同学们好
我们前面学习了七章了
这七章内容里面
涉及到面向对象程序设计
涉及到C++语言的语法
涉及到面向对象程序设计的一些
基本的方法和逻辑
还有一些基本思想
总的来讲
我们从前面看
实际上我们是在不断的
把一个程序一层一层的往下拆
对
分成很多互相之间能够
比较清晰的分开的一些小块
对
然后把这些块想办法让它
互相之间能够独立的变化
用这方式使得我们程序更加
容易适合需求的改变
容易被复用
对
就是满足我们在第五章的时候
对
说的那个要求
开闭
还有这种单一职责
咱们实际上切了半天了
把这程序实际上说的
有横的切的
有竖着切的
已经切的挺碎了
现在基本上已经拆成零件了
把一桌子零件放在这儿
咱们这章内容
你得想办法把它合起来
对
咱们得琢磨着
你如果有了一桌子零件在这儿
你怎么把它组装成一个程序
按照咱们这个领域的话说
就是复用
已有的东西
已有的各种代码
怎么把它利用起来
对
从面向对象程度设计来讲
一般来讲复用
无非就是这几种方法
要么就是已有代码继承
要么就是组合
代码的一些东西组合进来
还有如果你已有代码里边
比如像STR那种东西
这是一个模板
直接实例化
这也是一种手段
让编译器帮我们来复用
这是比较常见的几种手段
但是具体来讲
怎么去实现这种复用
在复用过程中
比如说预见了
这个功能满足我要求了
但是接口不一样
02:58就不一样
我这个接口一致了
但是功能稍微差了点
怎么办
我有了一个基本的东西
我要在基础上给它添点什么
进行叠加
描个圈画个洼的
怎么往上加
对
还有一种形式就是
我有一大堆类似功能的一堆东西
我要把它组装起来
形成一个完整的处理的体系
这种情况要怎么做
等等
那么这些就是我们
这节课要考虑的内容
就是怎么样去把这堆零件
再组装成符合你要求的机器来
所以实际上学这章
我觉得也应该带着一个问题
我们前面在第六章第七章
进行拆的时候
为什么要拆
其实拆的时候固然是为了符合
我们在第五章介绍的时候说
你要满足那些原则
但是其实也是奔着
我们这一章以及后面一章
要去讲的复用这样的目的来的
因为你拆本身目的就是要装嘛
对
你拆成一桌零件也没用了
对
目的就是为了现在装方便
将来把它拿过来装一样方便
对
而且这个和这个装方便
换一个来还能装上
对
这是个目标
所以实际上接下来的这两章里头
当我们去学习这种
组装的技巧和方法的时候
我们反过头去也能够更深刻的体会
过去提的那种拆的原则是多么重要
对
因为你只有拆的好
你现在装的方便
你过去如果拆的拖泥带水
不干不净
可能你现在就没法装了
而且如果拆的时候接口不够清晰
现在还想装一块
对
所以在装的第一步
就是咱们这一章要切入的
从接口与功能的变跟不变的关系上
给大家介绍一些常见的套路
当我们碰到一些具体问题的时候
怎么去处理
看看我们的场景符合哪种形式
所以一定是在应用场景之下
来决定到底怎么来组装
这个组装实际上不是说
我觉得这么装好
而是说你最后那个问题是怎么
你的目标是什么
你按这个目标来做
我觉得你那句话说的特别好
因为确确实实大家在学习C++
尤其是面向对象思想编程序的时候
很容易有一种感觉
就是觉得一个问题似乎是
仁者见仁智者见智
最后说不清楚到底谁对错
但是其实
当这个场景在那儿放着的时候
当它场景为了有可能发生变化
是已经确定的
就是那一些有可能变化
对
在这种情况下其实往往
答案是唯一的
也就是说根据你的经验的多少
一般的来讲
经验不足的人
多数情况下判断不准
而不是说它
当你告诉他判断准了之后
他也知道会这么装
所以有时候他会得出一个
似是而非的结论
就是说这个程序或者这个东西
这个任务
用这个也能解决
而且也能装起来
为什么不可以呢
所以我想可能就在于
对这个问题到底怎么能够
用已有东西把它组装起来去解决
认识的还是有一定的偏差
其实有的时候
面向对象程序设计
并不仅仅是一个方法论
并不仅仅是一个理论体系
对
它也包括了很多经验在里边
这种经验也是需要长期的练习
所以在我们这章
介绍的例子里大家也会看到
有一些办法他们两两之间非常相似
非常接近
如果你只是去看它的
语法的表现形式
甚至可以说是一模一样的
但是我们偏偏说它是不一样的
为什么
对
其实你仔细听听
仔细想想就明白
所以大家听后面的
几个小节的讲解
留意注意这里面的差别
-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
-期末考试--作业