C++技术隐藏实现
在任何关系中,存在相关各方都遵从的边界是很重要的。当我们建立了一个库之后,我们就与该库的用户(也可以叫用户程序员)建立了一种关系,他是另外的程序员,但他需要用我们的库来编写一个应用程序或用我们的库来建立更大的库。
在任何关系中,存在相关各方都遵从的边界是很重要的。当我们建立了一个库之后,我们就与该库的用户(也可以叫用户程序员)建立了一种关系,他是另外的程序员,但他需要用我们的库来编写一个应用程序或用我们的库来建立更大的库。
对于很小的项目组,可以用紧密接触的方式自然维持通讯。这是理想的请况。C++的最大的好处之一是它可以使项目由很少的项目组成员建立,因此,明白表示的通讯能使维护变得容易,因而通讯费用低,项目组能更快地建立。情况并不总是这样理想,有可能项目组成员很多,项目很复杂,这就需要某种形式的通讯原则。方法提供一种在项目组成员之间形成“约定”的办法。
把函数放进结构是C++中的根本改变,并且这引起我们将结构作为新概念去思考。在C中,结构是数据的凝聚,它将数据捆绑在一起,使得我们可以将它们看作一个包。但这除了能使程序设计方便之外,别无其他好处。这些结构上的运算可以用在别处。然而将函数也放在这个包内,结构就变成了新的创造物,它既能描述属性(就像C中的struct能做的一样),又能描述行为,这就形成了对象的概念。对象是一个独立的有约束的实体,有自己的记忆和活动。
对象的设计不限于写程序的时期,它出现在一系列阶段。有这种观点很有好处,因为我们不再期望设计立刻尽善尽美,而是认识到,对对象做什么和它应当像什么的理解是随着时间的 推移而产生的。这个观点也适用于不同类型程序的设计。特殊类型程序的模式是通过一次又一 次地求解问题而形成的。同样,对象有自己的模式,通过理解、使用和重用而形成。 下面是描述,不是方法。它简直就是对象期望的设计出现时的观察结果。
为了更新和改善程序,需要更新思考问题的方法。它不只是“我们如何让程序工作”,而是“我们如何让程序工作并且使它容易改变”。这里就有一个新问题:当我们只是试图让程序工作时,我们可以假设开发组是稳定的(总之,我们可以希望这样),但是,如果我们正在考虑程序的整个生命期,就必须假设开发组成员会改变。这意味着,新组员必须以某种方式学习原程序的要点,并与老组员互相通讯(也许通过对话)。这样,该程序就需要某种形式的设计文档。
程序设计的演化(C++只是其中的一步)从程序设计模型强加于内部开始,也就是允许程序员为内存位置和机器指令取别名。这是数字机器程序设计的一次飞跃,带动了其他方面的发展,包括从初级机器中抽象出来,向更方便地解决手边问题的模型发展。不是所有这些发展都 能流行,起源于学术界并延伸进计算机世界的思想常常依赖于所适应的问题。
所谓方法学是指一组过程和启发式,用以减少程序设计问题的复杂性。在 OOP中,方法学 是一个有许多实践的领域。因此,在程序员考虑采用某一方法之前,了解该方法将要解决的问 题是很重要的。对于 C++,有一点是确实的:它本身就是希望减少程序表达的复杂性。从而不 必用更复杂方法学。对于用过程语言的简单方法所不能处理的大型问题,在 C++中用一些简单 的方法就足够了。
许多传统语言对程序的规模和复杂性有自身的限制。例如,BASIC对于某些类型的问题能很快解决,但是如果这个程序有几页纸长,或者超出该语言的正常解题范围,那么它可能永远 算不出结果。C语言同样有这样的限制,例如当程序超过 50 000行时,名字冲突就开始成为问 题。简言之,程序员用光了函数和变量名。另一个特别糟糕的问题是如果 C语言中存在一些小 漏洞—错误藏在大程序中,要找出它们是极其困难的。 没有清楚的文字告诉程序员,什么时候他的语言会失效,即便有,他也会忽视它们。他不 说“我的 BASIC程序太大,我必须用 C重写”,而是试图硬塞进另外几行,增加额外的性能。 所以额外的花费就悄悄增加了。
C++能够如此成功,部分原因是它的目标不只是为了将C语言转变成O O P语言(虽然这是最初的目的),而且还为了 … 继续阅读为什么C++ 会成功