个人总结如下:
本章内容包括:
- C语言 C++发展历史、基本原理。
- 过程性编程、面向对象编程。
- C++是如何在C语言的基础上添加面向对象的概念的。。
- C++是如何在C语言的基础上添加泛型编程的概念的。
知识点:
1 简要介绍:
C语言特点---高效、简洁、快速、可移植性---
面向过程
C++特点---继承C的特点 具有
对象、类、数据隐藏、 封装、多态、继承
等新特性,以及另一种编程方法:
泛型编程
---
面向对象
------C++ 面向对象 目标:抽象通用概念 和 尽可能地重用代码
2 简史:
1970
年,Bell实验室的
D.Ritchie
和
K.Thompson
共同发明了
C语言
,初衷是用它编写UNIX系统程序,是UNIX的“副产品”。
1979年,
Bjame Sgoustrup
到了Bell实验室,开始从事将C改良为带类的C(
C with classes
)的工作。
1983
年该语言被正式命名为
C++
。
3 基本原理:
(1)C语言
C语言 = 数据 + 算法
--- 数据:程序要使用和处理的信息 算法:程序处理数据的方法
因此 C语言是
面向过程
的语言,强调的编程的算法方面。
C语言使用
自顶向下
的原则和
结构化编程
的方法,来实现一个程序的编写。本质上反映了C语言的
面向过程
思想,
即根据执行的操作来构思一个程序
。(
当然,为了更好地实现
“将分支限制为一个行为良好的结构”
这种
结构化编程
方法,C语言做了一些准备,如:for、while、do...while循环、if...else等。)
举例说明上述原则和方法:将最大块的清理屋子这件事情,分成几个小块:整理书桌、书橱、床铺、地面,这几个小块不够细到让自己轻易完成,则继续分成更小的模块,以整理书桌为例,整理桌面、整理抽屉、摆放整齐,顺序执行。显然,这是一种自顶向下、结构化的体现。
举例说明:
数据 | 算法 | |
几片茶叶 | 从抽屉里拿取放入杯中 | |
一杯糖 | + | 向杯中逐渐加糖 |
白开水 | 向杯中倒入白开水并搅拌 | |
... | .... |
||
程序 |
一杯热茶 |
数据 + 算法 = 程序
(2)C++
C++
面向对象
的编程,强调的是
数据
,其理念是
设计
与问题本质特性相对应的
数据格式
。
面向对象不像面向过程那样,试图让问题满足语言的过程性方法,而是试图让语言满足问题的要求。换句说,C语言不是直接根据问题就能用的,她需要一步步转换,即把一个总的问题转换一个个可以解决的小的过程才行。但是,C++就有所不同。
C++是按照人的思维直接来解决的问题的,不需要一步步地转换。如果你想解决一个实际问题,你需要做的就是“
找到与该问题本质特性相对应的数据格式
”就可以了。
你只需要找到解决该问题的相应数据,并根据这些数据提取出相应特性,构建出一个新的数据格式,然后利用这个通用的数据格式解决实际问题就好了
。说白了,这就是C++所讲的:
类
。
类
是一种规范,描述了上述的新型
数据格式
,
对象
则是根据这种数据格式创建出来的
数据结构
。这样的话,
类
规定了可以使用
哪些数据来表示对象
以及可以
对这些数据执行哪些操作
。也就是类的属性和方法规定了其实例化的对象具有哪些属性和方法。
(可这样近似理解:
C语言 | 结构体 | 结构体定义的变量 |
C++ | 类 | 类实例化的对象 |
抽象(记忆时,以此为准) | 数据格式 | 元素 |
)
举例说明:
条件:已知公司人员的个人信息
问题:创建一个公司人员信息管理系统,可以增删改查
解决:
I 通过已知条件可以提取公司人员的通用特征,如工号、姓名、性别、年龄、特长等等。
------类的属性
II 通过问题要求可知,需要对数据做这些操作:根据工号查询其相应信息、添加新的工作人员、移除某工作人员、修改某工作人员的个人信息等。
------类的方法
III 知道了数据的属性以及要对这些数据做什么操作,那么我们就可以据此创建一种新的数据格式---即类,然后通过这种数据格式定义出元素,也就是通过类来实例化对象,接着对该对象进行一系列操作来满足问题需求。本质上还是先
根据数据的属性和对其的相应操作
来
创建
一个满足问题要求的
类
。这些数据其实就是是从实际问题中一个个对象。
------创建类
Note:
The programming philosophy underlying classes is OOP(面向对象)。
C++特点---继承C的特点 具有
对象、类、数据隐藏、 封装、多态、继承
等新特性,以及另一种编程方法:
泛型编程
---
面向对象
------C++ 面向对象 目标:抽象通用概念 和 尽可能地重用代码
面向对象不仅仅是将数据和方法结合并为
类
定义,还有助于创建
可重用
的代码,这将减少大量工作。而且,
信息隐藏
可以保护数据,使其免遭不适当的访问。
多态
允许对运算符和函数创建多个定义,通过编程上下文来确定使用哪个定义。
继承
可以使用旧类派生出新类。OOP不是将重点放在任务上,而是放在
表示概念
上。
OOP编程:有时不一定使用自上而下的编程方法,而是使用自下而上的编程方法。
------自下而上:从低级组织(类)到高级组织(程序)的处理过程。
泛型编程:OOP强调的是编程的数据方面,而泛型编程强调的是独立于特定数据类型。OOP更像是一个管理大型项目的工具,而
泛型编程提供了执行常见任务(如:对数据进行排序和合并链表)的工具
。(具体内容见 C++ Primer Plus 第六版 第一章的1.2.4和第十六章)