认识抽象
在进行编程的时候,最重要的一点就是逻辑清晰。我个人很认同一个观点,就是代码是写给人看的,而不仅仅只是在计算上进行运行。逻辑清晰一个方面,我认为就是对抽象较好的认识。
在计算机中,抽象是无处不在的。维基百科上给了一个抽象的解释:是指以缩减一个概念或是一个现象的信息含量来将其广义化(Generalization)的过程,主要是为了只保存和一特定目的有关的信息。对此,可以知道,对计算机的建模分析也是一种抽象的方法。我一直认为在编写代码的时候,需要有黑箱思想。在对一个组件(来自第三方或者团队其他成员),经过认为合适的可靠性测试后,就要认为其是一个功能可靠的组件,我无需了解他内部的具体实现,只需要知道其是主要运行的流程和功能,然后直接拿来使用就行了。只有在需要对这个模块进行改造的时候才有必要了解他的具体实现和详细的运行流程。
除此之外,维基百科上也有一个关键计算机抽象化的一个定义:抽象化(英语:Abstraction)是将数据与程序,以它的语义来呈现出它的外观,但是隐藏起它的实现细节。抽象化是用来减少程序的复杂度,使得程序员可以专注在处理少数重要的部分。一个电脑系统可以分区成几个抽象层(Abstraction layer),使得程序员可以将它们分开处理。
其实,看一下定义的核心,就是去除具体的实现,将系统运行的骨架及核心剥离出来,这个抽离出来的骨架可以算是对所定义物体的抽象。对于计算机的使用者来说,操作系统可以算是对整个计算机内部计算运行的一个抽象,其屏蔽了这个计算机内部的实现原理,及各部件间是如何进行运行的,而我们只知道其运行的大体流程和大体上的组成,对于其具体的实现而言我们是不清楚的,这算是对计算机的一个抽象和屏蔽。
对于程序员来说,编程语言就是对计算机的抽象。在整个计算机的内部,高层是对低层次的一个抽象。如果不说操作系统,整个的抽象层次在我看了应该是这样的:问题->建模->代码框架->具体实现。对于我们写好的代码来说,下面还有许多的层次的抽象,像高级编程语言就是对汇编语言的抽象,汇编语言是对机器语言的抽象。一般我们会认为认为,到了机器语言上应该没有抽象层了吧,其实不是,机器语言还对计算机内部的各种电子元件的电气变化还是进行了抽象的(我对这些不熟)。
再说为什么不说操作系统,这在计算机编程中也是个及其重要的东西,我们既可能是操作系统的使用者,又有可能是操作系统的创建者,或者兼而有之。如果离开了操作系统,离开了操作系统的依托 ,我们所编写的软件也是可以进行运行的,例如大量的嵌入式设备。对于程序员来说,操作系统来说是一个特殊的抽象层的存在,他的使用者包括了普通人和开发人员。
其实我个人的认识在某些意义上来说还是有些问题的,所以我认为,如果想要了解这方面的信息,还是需要去看相关方面的书籍才行,比如《现代操作系统》和《深入理解操作系统》。
Author: moyu-x
Link: http://moyu-x.com/2017/03/07/201703/UnderstandAbstraction/
License: 知识共享署名-非商业性使用 4.0 国际许可协议