当前课程知识点:面向对象程序设计(C++) > 第一讲 课程简介与编程环境 > 1.0 课程定位、教学内容 > 课程定位与教学内容
朋友们好
欢迎大家参加面向对象
程序设计基础的部分课程的学习
我是清华大学计算机系的徐明星
我是清华大学计算机系黄震春
那么这门课程呢将由我们两位老师
一起来给大家带着大家一起来学习
然后我们这门课程呢
也建设了一个微信的公众号
公众号的名字叫程设论道
大家可以到时候通过扫描网上的二维码
能够关注公众号参与到这个里头来
那么这个公众号呢将为大家提供
我们平时的课程内容的讨论交流
和答疑的一些事情
我想我们首先可以讨论一下
就是课程的教学的计划
我想我们这个课程呢
应该是分成几个不同的部分
首先先是就今天这节课
主要就是介绍一下
最简单我们的课程的目的
教学理念教学方法
还有后面的一些最基础的知识
比如说怎么去怎么去在这节课里面
教的这些内容你用什么方式去用它呀
去进行最基础的编程啊这些环节
一些最基本的知识
再有的话就是说把这个我们去学习
这个面向对象课程所基本需要的
一些环境呀工具对吧
先在第一次的时候给大家介绍一下
然后完了之后我想应该
还有一部分需要去讲这个面向对象的一些
我们所用到的这个语言
我们语言是C++
然后呢C++已经到了二零一四版了
但是我们这个基本上
还是基于二零一一版的这个C++
来做一些基本语法的一个介绍
最后呢也就是说我们这个最大头
最重头的一段呢
就是怎么样用使用这个C++
或者说使用对象这种思维方式
或者说这种方法论上的东西吧
去解决我们现实生活中
遇到的这个编程的问题
怎么样把这个用在我们这个实际编程里面
而且就是这个虽然说是一个编程序的
但是实际上这个里头在我们去
用这个语言来把这个实际问题做解决的时候
它的这种思考方式对吧思维的这种
这种技巧其实可能超出这个语言本身
也超出了这个编程序本身
甚至是不仅仅编程序时候用
我们去认识各种东西的时候
都可以采用这种分析呀
怎么样去判断这些方法
对所以我想这也是我们
这个教学课程理念里头一个
很重要的一个方面
不仅是教会你去用那一个C++的这种语言
也不仅是这个C++ 具体的这种
OO 的这种思想去解决编程
更主要的可能还是提升了一个人认识世界
所谓计算人生吗对吧
我想还有一个可能要跟大家去讨论交流的
就是我们这个课程跟后续的
或者跟前面的这两个方面的课程
这一种关系
首先一个呢就是我们这个课程
实际上是接在这个程序设计基础
就是我们另外一门慕课课程
是由我还有吴晓君老师王玉萍老师来讲的
在这个课程之后来讲的
所以有一些这个我们在讲那门课程的时候
有一些C++ 的一些基本的用法
在那个课程里头已经有讲到了
比方说大家可以看到像这种cin cout
其实在我们面向对象在程序设计基础课程里头
已经提到过了
其实就是说换句话说如果你还没看过那课的话
至少先把那课看一遍然后再看这个
然后接下来呢这门课还会后续的几门课
作为一个引导吧包括像数据结构软件工程
这种这实际上在计算机教学里边
也都是属于非常重要 的课程
对而且特别要提到的是
如果你去选择我们清华大学邓菊辉老师上的
这个数据结构那那个里头会讲到
用到大量的这个模板用到这个类
还有一些接口这种概念
所以我想我们这个课程呢
本身也是有很多的知识要去讨论
实际上去讨论这个接口啊模板啊
这些知识
所以是后续你选择选上那门慕课课程
一个很重要的前提一个基础
至于软件工程那就更不用说了
咱们都知道这design pattern 设计模式
可以被认为是软件工程的一个
最基础的组成部分之一
我想大家可能一直有一个疑问
就是说我们去拿一个语言去编程序
到底我选哪些知识才能把这个程序编出来
这个说实话跟你到底要编啥程序有关
这个关系非常大
那从最基础来讲呢至少第一你得有
你得会一种语言
对你否则的话听不懂你的话
这是最基础的
第二你得知道怎么去编程序去
像什么排序呀什么
你知道怎么用语言表达出来
当然这个就是咱们这节课主要内容
这个就是我们刚才说的
就是前面那个面向
就是那个程序设计课
就是那个课程里头我们重点解决的
除了这些之外呢还有就是说
你总要依托计算机那好
计算机本身的东西你得会
比如说最典型就是操作系统那些东西
再有你编啥程序
你编啥程序你得会啥东西
你说你要是编一个这个游戏程序
你连这个显卡驱动你都搞不定
对那就是专的一个部门啦
但是你如果不编游戏
那个其实你可以不用管
但是你如果要编那些地方缺少的话
那程序你是编不出来的
但说实话这些都不是咱们
咱们这节课不管那些
咱们这门课管什么
一个设计方法
或者说是个程序设计的方法论的问题
就是说到底怎么来去做这种设计
使得我们开发的效率更高
然后维护的这个成本更低
说白了就是写一个真正所谓的好程序
尤其是当你做大型系统的时候
你写一个几百行 的程序
可能在这儿你看不出来
当你一旦一个程序个大了
上万行十万行那你如果要是没有这些东西的话
你这个程序很可能会按我们的说法
就是把自己拖死了
所以这就是有的时候
我们在社会上也是有这种情况
就是你有一个好的指导的思想
对吧你可能做事情
或者你做事情的方法正确的话
这个事情就事半功倍能够完成它
所以我想我们课程里头一个很重要的一点
其实我们是要来介绍到底一个
面对复杂的问题去解决它的时候
我们应该怎么去思考它
对有解决方案对所谓方法论的角度吧
下面给大家列一下这个我们在
这个准备这门课程
以及希望大家在学习这门课程的时候的一些
参考的目录
大家可以看这个ppt的内容
将来我们也会放到网上去把这个文字数目放上去
这个里头列的比较多
当然了不是让你每本都看了
那不可能的有选择性的
所以我建议大家是说我们如果讲到哪个部分
你最好呢是在对应这个各种书里头
如果它有对应的章节或者相近的章节的话
专门针对那一小节去看
或者去对照的学习
这样的话会比较好一点
这个书目比较多
大家这个自己底下根据实际情况去选择来看
我想在我们介绍正式的内容之前呢
我们有必要跟同学们一起来探讨一下
本课程的一些学习的方法
因为这是我们在备课时的一个考虑
以及根据以前的教学经验
我们大概总结出来的
其实这门课程里
因为咱们这门课程本质上来讲
还是教你怎么样去做一件事的这门课程
所以呢咱们还是从这个角度去出发
那么你做要想学会做一件事
那无非是首先先去学嘛
看别人怎么做的多看书
多去看相关的资料
然后看完了之后接着自己动手自己试
那么多学多试多用多做做题目
然后对于自己有一些东西
你还搞不清楚你自己上手试一试
而且这里头我想有一个要补充的
就是说我们前面虽然列了
很多的那种参考书
对吧那是纸质已经出版了的
但其实现在目前还有一个很重要的资源
大家也应该去弄
就是网络上面其实有很多的问题
那上面都有现成的答案
别人有问到同样的问题的
所以这些互联网的资源
是希望大家充分去发挥
包括大家来这个学习这个慕课课程
其实也是一种以网络为载体的一个东西
所以大家要善于使用网络
然后呢在上面多查一些东西
然后呢多去看相关的书
说到这个还有就是说再一个就是说
在网络上你也不要说光去查
因为有一些常见的网络社区呢
也都你得去发问
但前提是你发的问最好是
你查了很大的你再没有查到结果
不要一个很基础的东西发问
而且呢我们前面也给大家介绍了
我们课程呢会有一个微信的公众号
所以特别因为这个就比较集中了
这专门针对我们这个课程
而且是我们老师跟助教
一起来维护和管理的
所以希望大家如果有什么
重要的一些问题希望得到解答啦
也能够希望大家通过这个公众号
来直接来进行关注来进行参与这个讨论
除了这些之外呢其实因为它是
咱们这门课吧
它本质上是一个方法论上的东西
一个涉及思想涉及思路
那么既然是思路吗所以脑筋就得多用
多想多去琢磨
你不琢磨的话那东西始终是别人的
所以我们可能不是简单地说
一个语法的知识
或者某一个开发的一种什么小技巧
你照猫画虎就完了
这个动脑筋对吧是非常重要的
而且在这个学习和动脑筋的过程中
真正把自己的这种思维能力提高上来
把思维的这个深度加深下去
多琢磨琢磨反正一个方法出来之后
你要想一下它为什么会用这样的方法
它背后体现了一种什么样的思维模式
最后当然是更重要的就是
你这些东西看也看了问也问了
然后这个最后别都忘了
最后还给我们了
那这个就有问题了
所以希望大家通过在这个
理论的学习的同时加强实践的锻炼
在实践锻炼的时候加强对理论的理解
所有的这些东西
最后都要变成你自己的能力
变成你的脑袋里的东西要把它记住
而且这个记忆的时候不是说死记硬背
也得讲点办法就是你得整理梳理归纳
在这个层面上面
可能更容易把它掌握牢靠
所以这样的话
我想经过这样的一些办法呢
可能课程的学习
第一个呢能够降低难度
第二个的话呢也能够取得效果
收获更多
所以这是我们在开篇的时候
特别想跟同学们去交待和介绍的
-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
-期末考试--作业