对抽象的理解
CPP高级编程学习(2)
抽象与重用
CPP设计有两个基本的设计原则:抽象以及重用。这两个原则贯穿与高效CPP程序设计的所有领域。
抽象:
抽象是一个在计算机领域中运用很广的概念,无数的书籍中已经列举了很多的例子。我真正对抽象这个概念开始有感觉是从我当时阅读《现代操作系统》关于文件系统的论述。众所周知,计算机的数据是长期储存在外存(硬盘)上的,所有计算机但是这样的。但是对于硬盘这种十分精密的器件来说,如果人工管理,会面临很多问题:(这里以机械硬盘为例子)
1.硬盘是柱面旋转,磁头寻找相关扇区这样的方式来寻找数据并读取数据的。柱面在没有任务的时候是转还是不转其实就是一个问题。柱面一直转的话,将导致硬盘的寿命减少,如果不转的话,但任务来临的时候,将重新让柱面转起来,本身硬盘的速度就远低于内存这样的存储器,这样就会使得对必要数据的存取变得更慢,使得运行的的程序运行时间变长,如果这个程序的运行级别比较高的话,CPU的使用权将分配给这个程序,然而在等待获取数据的时间内,CPU什么都做不了,这使得CPU的利用率变低,甚至降低整个系统的效率。
2.硬盘是一个十分复杂的设备,然而又他在计算机中十分重要,涉及到很多地方的应用,也就意味着,我们必须使用硬盘,然而要对硬盘合理运用是很困难的,加大了对程序员的负担。
以上只是硬盘问题的冰山一角,远不止于此。而且不同的厂家不同的工业标准不同工艺的硬盘的使用方法和复杂程度都不会一样。例如现在的固态硬盘,倘若原来有一个工程要求程序员编写一个针对与机械硬盘的程序,现在由于工艺水平提高了,程序将运行在由固态硬盘支持的系统上,那么刚刚花费了大量时间学习机械硬盘的程序员,将重新去学习固态硬盘,并且还得精通。这无疑加大了程序员的负担,硬盘这个设备的重要性是不言而喻的,如果出了什么岔子,bug是很严重的。
看来人工来控制硬盘是很不理想的而且不太科学的,于是人们将这个繁重的任务交给了我们的大管家操作系统,让操作系统去管理硬盘,并且提供了一个重要的抽象 文件系统。对没错就是你桌面上的那个文件夹背后的东西。大家从此得到了解放,我们只用把硬盘想象成一个文件,他的功能就是存放我们的数据。
好处是什么呢?
1.使得使用硬盘简单
程序员或者普通用户,不用去了解硬盘到底是如何使用的,而只需晓得硬盘对应的抽象文件是储存数据的和如何使用文件(键入数据和读数据),甚至完全可以不知道硬盘的存在,这就是很多人不知道计算机中有些什么同样也能熟练运用计算机的原因,因为文件这个抽象使得我们的操作变得极为简单。
2.开发简单,维护简单
如果现在程序员编写的程序,我们不用去学习硬盘是如何工作,如何使用的。如果原先编写好的程序要被用于一个采用完全不一样新技术的硬盘,只要操作系统能兼容这个新技术硬盘的话,我们的程序员是不用改变程序任何地方的,因为我们的程序中用到硬盘的地方,都是抽象成了对文件功能的(接口)使用,我们的使用将被操作系统转换为对硬盘的控制。对硬盘的具体操作都是由操作系统完成的。
总结一下抽象的好处:使得使用简单,更改容易,不会牵一发动全身。
逻辑简单和易修改是开发中十分重要的,因为逻辑简单就意味着出现bug的几率变小,修改的地方小意味着,改动地方小,由于修改原有bug而产生新bug的几率变小。