天天看点

《C++面向对象高效编程(第2版)》——2.1 接口和实现的分离

本节书摘来自异步社区出版社《c++面向对象高效编程(第2版)》一书中的第章,第2.1节,作者: 【美】kayshav dattatri,更多章节内容可以访问云栖社区“异步社区”公众号查看。

c++面向对象高效编程(第2版)

细心的读者可能已经注意到,在上一段中,我们使用了接口(interface)和实现(implementation)两个术语。传统的面向过程编程思想认为,接口和实现差异不大。但是在面向对象编程中,整个设计过程都围绕着接口进行。

通常,我们在现实中使用现有对象时,都会注意到眼前的事物。驾驶汽车时,看到的是不同的仪表盘(速度表、油料表、温度表)、方向盘、油门踏板等。当你踩下油门(也叫做节流阀或加速器)时,希望汽车移动(假设已挂挡,且手刹已松开),此时汽车内部发生了许多事情:

(1)从油箱中向化油器(或者喷油器)中泵油。

(2)化油器或喷油器将汽油送至发动机汽缸中。

(3)配电器为火花塞供电,点燃燃料。

(4)活塞带动曲轴,驱动车轮转动。

如果密切关注以上这些细节会让驾驶员分心。把电喷式发动机换成化油器发动机,对于驾驶员而言意义不大,他希望的是汽车的各个操作环节流畅。另外,改变汽车内部燃料供给机制,也不会影响驾驶员的驾驶技术(或习惯)。

当驾驶员查看速度表时,可以很容易地获知汽车的准确速度。至于速度表如何检测速度,与驾驶员毫不相关。顺带一提,速度表通过机械耦合机制或电子机械系统(电子和机械系统的结合)测量汽车的速度。

通过以上分析,对驾驶员而言,真正重要的是她从外部看到或感觉到的事物,而不是它们在汽车内部如何运作。类对象的接口支持外部视图,接口就是用户观察的对象视图,以及用户可以用接口做什么(也包括接口对用户做什么)。因此从用户角度看,油门踏板控制汽车的速度,速度表显示汽车当前的速度。与此类似,用户将ld播放机看做是接受影碟并将编码图像再现至电视机屏幕上的装置。

当我们设计接口时,应最大程度地满足用户的要求,这些用户也称为客户(client)。所谓类的客户,就是使用类且不知道(或不用关心)类内部运作的人。客户可创建类的对象,并通过接口对其进行操作。

继续阅读