第1课 - 学习C++的意义
第1课 - 学习 C++ 的意义
1. 对 C++ 的一些误解 ×××
(1)操作系统和驱动都是用 C 写的,学好 C 就够了。 (驱动和操作系统开发属于极少部分的人)
(2)C++ 在应用层用的多,学嵌入式的没必要学。 (嵌入式系统应用程序开发也需要 C++)
(3)以后就做驱动开发了,没精力也没必要学习 C++ 了。 (掌握一门编程语言不可能支撑整个职业生涯)
(4)Linus 大神都认为 C++ 一无是处,还学它干嘛? (技术盲目崇拜)
2. UNIX 操作系统的发展历史
(1)UNIX 操作系统诞生之初是直接用汇编语言编写的。
(2)随着 UNIX 的发展,汇编语言的开发效率成为一个瓶颈。如何提高 UNIX 系统的开发效率?
(3)1971年,Ken Thompson 和 Dennis Richie 对 B 语言进行了改良,使其能够直接产生机器码,C 语言诞生。
(4)UNIX 开始用 C 语言重写,同时 C 语言在实践的过程中得到发展。
3. C 语言的特点
C 语言就是为了编写 UNIX 操作系统而发明的,并且在实践中得到了发展,C 语言有以下两个主要特点:
(1)C 语言的目标是高效
最终得到的程序效率很高,表现在两个方面:① 执行效率很高 ②在那个时代来说,开发效率很高(和汇编等语言相比)
(2)C 语言是在实践的过程中逐步完善起来的
① 没有深思熟虑的设计过程,导致今天的 C 语言有很多的灰色地带
② 残留过多低级语言的特征,比如可以通过指针直接访问内存
4. 软件方法论的发展
4.1 面向过程程序设计
(1)面向过程程序设计:数据结构 + 算法,主要解决科学计算问题,用户需求简单而固定。
(2)特点:
分析解决问题所需要的步骤 ==> 利用函数实现各个步骤 ==> 依次调用函数解决问题
(3)缺陷:软件可重用性差、软件可维护性差
4.2 面向对象程序设计
(1)面向对象程序设计:由现实世界建立软件模型,将现实中的事物直接映射到程序中,可直接满足用户需求。
(2)特点:
-
-
- 直接分析用户需求中涉及的各个实体
-
-
-
- 在代码中描述现实世界中的实体
-
-
-
- 在代码中关联各个实体协同工作解决问题
-
(3)优势:
-
-
- 构建的软件能够适应用户需求的不断变化
-
-
-
- 直接利用面向过程方法的优势而避开其劣势
-
5. C 语言的加强
(1)当面向过程方法论暴露出越来越多的缺陷时,业界开始考虑在工程项目中引入面向对象的设计方法,那么如何来具体实现呢?
首先想到的是使用 C 来实现面向对象中的思想,比如 "类",可是这种做法实现起来难度很大,真的很 "累",
那么能不能开发一门新的编程语言直接就可以支持面向对象方法呢?
答案是肯定的,但第一个需要解决的问题就是:该语言支持高效的面向对象方法,并且能够兼容已经存在的代码。
如果不兼容,以前使用 C 写的大型项目都需要重写,这显然是不可能的,代价很大;如果兼容,就可以使用该语言对项目进行逐次更新。
于是 Objective-C 和 C++ 便诞生了。
(2)C++ 是以 C 语言为基础的,并且完全兼容 C 语言的特性。
(3)C++ 是 C 语言的加强,是一种更好的 C 语言。
(4)C 语言和 C++ 并不是对立的竞争关系,学习 C++ 并不会影响原有的 C 语言的知识,相反,它可以让我们学到更多的软件设计方法。
6. 学习 C++ 的优势
C++ 是 Java/C#/D 等现代开发语言的基础,学习 C++ 后能够快速掌握这些语言。
7. 现代软件的产品架构及特性
7.1 现代软件产品的架构图
7.2 现代软件产品的特性
(1)系统一般是由多种语言写成的
(2)系统架构的目标是拥抱用户需求的变化
(3)系统拥有较好的移植性
(4)系统能够方便的部署和更新
(5)操作系统的修改和驱动程序的开发在现代软件产品中占据的比重越来越小
7.3 商场收银系统架构图
8. 学习 C++ 的意义
(1)C++ 是一种更为强大的C,通过学习 C++ 能够掌握更多的软件设计方法
(2)C++ 是 Java/C#/D 等现代开发语言的基础,学习 C++ 后能够快速掌握这些语言
(3)C++ 是各大知名软件企业挑选人才的标准之一
注:本文总结于狄泰唐老师的《C++深度解析》课程
狄泰QQ群:199546072
本人QQ号:502218614