C++设计目标
为系统程序设计提供Simula语言的程序组织功能(类、类的层次结构),同时提供C语言的效率和灵活性.[1]
早期C++ 即 带类的C
面向过程与面向对象
C是一门面向过程的语言,如果我们想表示两个类之间的关系,只能用 组合、包含 的形式(一个类作为另一个类的属性),如果以图表表示,其实相当于以 文氏图 的方式来表示,当实体数目变多时,图会变得庞大复杂难以辨认。
实体 生物{
营养物质;
成长();
死亡();
};
实体 动物{
生物 生物特性;
细胞膜;
};
实体 植物{
生物 生物特性;
细胞壁;
};
而C++有面向对象的特性,
面向对象是什么呢,我们来看下作者的话
区分一些类的共有的性质和它们各自特有的性质,面向对象的程序设计就是要表达这种差异并从中获益。[1]
从这句话中我们可以看出来,面向对象的主要思想就是 寻求一种对实体间的同与异特性的清晰的表达方式,更好的组织实体:层次结构(树形)
事实上,我们经常会看到以树形组织,如科学中知识的分门别类,生物的分类。
实体 生物{
营养物质;
成长();
死亡();
};
实体 动物 extend 生物{
细胞膜;
};
实体 植物 extend 生物{
细胞壁;
};
面向对象与大型系统软件
大型系统软件: 实体众多,逻辑交互关系复杂 ,维护开销巨大(比开发的开销大2-3倍,维护也包括功能拓展更新)
复杂的逻辑关系就需要清晰的组织结构,面向对象中类的层次结构是个好选择。
继承和动态绑定
继承就是实现层次结构的一种手段,能清晰的表达相似实体的同与异、演变与进化。
动态绑定则使得我们在使用这些相似实体时能尽量忽略它们之间的差异,使用相似的实体时能尽量少的修改原先代码,做功能拓展时很有用,一个重要理念就是 层次结构中高层类能做的事,下层一定也能做,且能做的更好 。
重点笔记
- 面向对象寻求一种对实体间的同与异特性的清晰的表达方式,更好的组织实体:层次结构(树形)
- 而面向过程以组合、包含的方式(文氏图)来组织
- 动态绑定的原则:类层次结构中 上层类能做的事,直属下层类一定也能做,且能做的更好
参考文献
- BjarneStroustrup, Stroustrup, 裘宗燕. C++语言的设计和演化[M]. 机械工业出版社, 2002.