1706762267
面向对象程序设计 ¶
课程学习内容 ¶
以 C++ 语言为例学习面向对象语言的特点。课程一部分学习 C++ 的语法,一部分学习 C++ 实现封装、继承和多态的方式。
先修要求 ¶
- 数据结构基础
- 掌握 C 语言
(个人认为 C++ 0 基础来上课是没问题的,想准备可以提前了解下相关语法和特性
任课教师 ¶
不出意外的话后续几年图灵班 OOP 的预置老师还会是翁恺老师。尽管翁恺老师在 21 级风评飞速下跌,大有晚节不保的情况,但作为永平奖获得者和在 OOP 课程组辛勤耕耘 20 余年的老师,翁恺老师授课毫无疑问还是最有水平的,也会做出很多课程外的知识拓展,因此不太推荐更换预置的翁恺老师。
翁恺老师的 OOP 应该稳定是 8 个实验,20 级是七个简单的 OJ lab 还有一个组队的大作业,21 级是 8 个 Project ,其中需要手批并且提交报告的三个 project 需要投入的时间较多。
与大二下诸多神仙课程比较,这门课难度不是特别大,但期末考试考纲不定,每个老师教的东西也不定,C++ 的相关规则本来就是很零散的知识点,复习起来也没有想象中那么容易。不过翁恺老师讲的很多比较难的都不在考察范围(上课基本只会讲到 C++98 标准,仅涉及少量 C++11 标准),极大减轻了负担。
翁恺老师给分还是值得信赖的,有补分集可以补满平时分(考虑到有补分集,因此存在期中考让大家巩固一遍春学期的内容其实算是件好事
当然有一个小的雷点就是 oop 部分他的编程题描述不清或者有一些奇怪的测试点,经常会搞人心态(翁老师可能忙着自己的公司对作业的审核越来越不上心了)。
考勤:纸质点名 / 做简单题目,听 21 级学长说是只有一次签到,一次占比 5 分;但是 22 级签到了三四次,第一次签到在第二周就有了,并且事后请假没有用,老师也不怎么看钉钉(有同学是亚运会志愿者,事后请假,还是找了别的老师之后才给算上的,可能是学校没有沟通好
平时作业:7 次左右,经常会出现几百道选择题的情况,感觉老师不是很挑题目。虽然因为这个被同学们诟病很久了,但是期末考试会考这类题目,而且很大概率是李际军出题,这些题目基本在网上都能搜到解答,其实就当题库做就好。
大作业:用 OpenGL 实现一个项目,21 级是几何画板,22 级是实现 libigl 的 tutorial 里的三个基本功能(三维建模、读入读出文件等),工作量巨大,可以试一试找网上的代码。大作业在 PTA 上交并且互评,千万不要不交,李际军不支持补交,不能出现姓名但可以出现学号。一个雷点是互评基本无法申诉,且容易被反噬扣分:总是会有不完成 / 一看就是随便找来的代码上交的,这些很难打出一个统一的分数,大作业的最后得分应该是 project 得分 - 反噬扣分 /2。
考试:全英文考试,非常八股文,包含选择题、程序填空题、函数题,不过他的 ppt 很全,考前过一遍就差不多了。很阴间的一个点是函数题的答题框不支持 tab 和自动补全等功能,甚至不如记事本,但是可以用 markdown 渲染显示高亮(我考试的时候甚至打不出英文标点,老师助教过来看半天没解决,最后我用了复制粘贴。
分数组成:期末考试 50%,平时 50%。平时分包括 Pintia 作业 30%,大作业 15%,点名 5%。
总结:虽然大作业确实阴间
课程教材 ¶
-
《C++ 程序设计》Intruduction to Programming with C++ (Third Edition) [ 美 ] Y. Daniel Liang(梁勇)
课程组指定教材,
但没有什么用处比较基础、简单易懂 -
《C++ 编程思想》Thinking in C++ [ 美 ] Bruce Eckel
一本比较经典的 C++ 教材,作者 Bruce Eckel 是著名的编程教育家。翁恺老师的大部分课件都是按照这本书内容编排。当然这本书有很多考试不考察的内容,如果时间不够可以只看老师 PPT 涉及内容对应的部分。
参考阅读 ¶
读万卷书,行万里路。
-
C++ Primer (5th edition), [ 美 ] Stanley B. Lippman / [ 美 ] Josée Lajoie / [ 美 ] Barbara E. Moo
经典 C++ 教材,有十分详尽的语法讲解。不过整本书看起来像是语法字典,可能并不容易读,建议用到某一特性再去找。第五版教材包括了 C++11 标准。
-
C++ Primer Plus (6th edition),[ 美 ] Stephen Prata
傻瓜式的、从 0 开始的 C++ 教材,有人觉得很面面俱到,个人觉得啰里啰嗦。
-
Essential C++, [ 美 ] Stanley B·Lippman
比较基础,分四个部分讲解 C++ 的本质,也可以用作入门读物。比较老了,只到 C++98 标准。
-
C++ 之父 Bjanre Stroustrup 的几本书:
-
Programming: Principles and Practice using C++
( 《C++ 程序设计原理与实践》)“适合以前没有编程经验或者已经学完另一种语言,并且希望对现代 C++ 有一个相对温和的介绍的人”,BS 给大一学生写的教材。覆盖 C++11 和 C++14 标准。
-
The C++ Programming Language (4th edition)
( 《C++ 程序设计语言》)“面向已经了解 C++ 或至少是经验丰富的程序员的人”。覆盖 C++11 标准。
-
如果你想知道为什么 C++ 的历史,请看 The Design and Evolution of C++
( 《C++ 语言的设计与演化》)。Thriving in a Crowded and Changing World: C++ 2006-2020 可以被视为 D&E 的最新后续。 -
A Tour of C++ (second edition)
( 《C++ 语言导学》)适合去快速了解 C++ 所提供的功能。这本书以 200 页的篇幅介绍了 C++ 及其标准库的主要特性,且覆盖 C++17 标准(及少量 C++20 标准),对于了解新标准特性也不错。
-
-
关于 C++ 的 STL(标准模板库),想要了解其内部实现细节,可参考侯捷老师《STL 源码剖析》,但侯捷老师这本书不适合初学者,而且标准比较老,后面几章有些已经用不上了。另外也可以看 Scott Meyers, Effective STL。
-
Effective C++, [ 美 ] Scott Meyers
讲解一些实际套路和原理,结合具体情况教你如何写程序,写了很多 C++ 各种容易踩坑的点。有些很有帮助,后面有些可能有点难。这本书还有后作 More Effective C++,更高深了(×。两本书都只涉及 C++98/03 标准,少量内容有些过时。
-
C++ Without Fear, Brian Overland
比较老(指 C++98 标准)的入门书籍。
-
Functional Programming in C++, Ivan Cukic
(给老司机们)了解 C++ 函数式编程
-
(给老司机们)进一步探索现代 C++:
-
Modern Effective C++, [ 美 ] Scott Meyers
教你怎么用 C++11 和 C++14,既有语法也有实例讲解,带你走向现代 C++。后面有点难。
-
《现代 C++ 快速上手 (Modern C++ Tutoral)》》,Ou Changkun,字面意思,快速上手。
-
C++ Templates (2nd edition),[ 美 ] David Vandevoorde / [ 德 ] Nicolai M.Josuttis / [ 美 ] Douglas Gregor
深入了解模板
的奇技淫巧。 -
其他,如
: 《深入探索 C++14(Discovering Modern C++)》《现代 C++ 语言核心特性解析》《C++20 高级编程》等
-
-
可参考 The Definitive C++ Book Guide and List,Stack Overflow 上整理的书单。也可以逛逛 Quora。
- C++ 之父 Bjanre Stroustrup 的 FAQ 很有意思,值得一看!此外他还有 C++ Style and Technique FAQ 。
- 一些 C++ 书籍的电子版资源:https://www.aliyundrive.com/s/z5hLRAELpPP
参考资料 ¶
- RyanFcr 整理的笔记和历年卷: RyanFcr/ZJU_Course: 大二春夏 / 面向对象程序设计 OOP
- Stanford CS106L 课程:https://www.cc98.org/topic/5401931
- 贺老师的专栏:https://www.zhihu.com/column/c_1561843704159232000
- Isshiki 的课堂笔记:📔 [ 大一寒假 ] ZJU Object-Oriented Programing Using C++ (yuque.com)
- 咸鱼暄学长的 C++ Weekly Tips 和快速入门 C++ 写题
- ZhouTimeMachine 提供的作业题整理:oop-mid-review、oop-final-review
分数构成 ¶
- quiz 5%
- Homework 10%
- 七个 Labs(一次上机期中考试) 15%
- 一个大 Project 15% team work(2 人一组)
- MUD 游戏
- 日记本
- 也可以是自己的题目
- 每个月都要上交进度报告,进度报告一般给 100,结题报告按实际情况给分,四次报告取平均
- 期中 5%
- 期末 50%
- quiz 5%(on 学在浙大 or paper work)
- Homework 16%(一周一个习题集,前两周不算分,最后计算所有题目集总分)
- 8 Lab/Project 24%(每个 project 3 分)
- 期中 5%(90min,在实验课进行)
- 期末 50%
除此之外还会有补分集(20 级 3 分,21 级由于期中考过难有 5 分),很多同学的平时分都是满分。
期末复习可以参考这个课程资料仓库。这门课期末考试不是很友好,除了之前说的大纲不确定外,部分老师命题水平实在有限,也有部分老师出题审核不严格出现漏洞。另外,C++ 语言本身就很复杂,而且考试可能会考到一些很细的语言特性,可能需要平时多注意。
并且自从 2019 级春夏出现大量编译错误后人工批阅的情况后,接下来的学期都采取主观题形式写代码(也是写在 PTA ),然后由老师人工批阅。个人认为平常写代码是认真写的,然后特别注意部分地方的语法(例如 virtual 等)分数都不会差。当然不得不承认的一点是,数据库系统大作业 minisql 是一个复习 oop 的很好的练习。