封装的内涵

函数式编程越来越流行了。

号称使用它可以大幅度的提高工作效率。

人们也开始厌恶面向对象编程了。


面向对象的思想该淘汰了吗?

函数式真的有这么先进吗?


其实不然。


因为,程序员具有哪些思维才是重要的。

通过学习不同范型的编程语言,积累的是有用的编程思想。

然后,在实际工作中灵活运用。


没有人规定剑客不可以用刀法御敌。

未来属于那些活学活用的人。


本文,以面向对象的封装思想为例。

我们要挖掘一下,隐藏在封装思想中的深刻内涵。


将独立的部分隔离起来

很多人对封装的认识,来自于“将数据和对它的操作放在一起”这种说法中。

其实,这只是对封装思想的一种应用而已。


初学者,可能会写出一个巨类。

很多函数和它们操作的数据都在这一个类中。


而事实上,隔离才是这么做的原因。

将不需要访问的数据隔离出去,将不需要使用的函数也隔离出去。


这样,一个巨类就可以拆分成几个小类。

他们之间的函数和数据,互相独立,互不影响。


函数式是怎样处理的呢?

函数式中使用了闭包的概念,将数据存储在具有词法作用域的变量中。


将功能的提供者和使用者分层

有些人,学会了写很多小类。

但是这些小类之间互相使用,看起来十分混乱。

其实,这是因为没有分层所致。


分层也是封装思想的一种应用。

当多个独立的小部分,共同提供一个功能时,就构成了一个层次。


将功能的提供者和使用者分层,有三个好处。

首先,依赖关系图就退化成了依赖关系树。

其次,我们可以有效的避免跨层调用和逆向调用。

最后,同一层次的重新组合,就可以调整上层所需的功能,而对下层不会产生影响。


函数式是怎样处理的呢?

函数式中的高阶函数是实现分层的方式之一。

一般的函数提供功能集,高阶函数使用它们。


将语言的描述和实现分开

不知道为什么,有些人很鄙视设计模式。

这些人通常没有从丰富自身的角度考虑问题。


对自己有用的东西,往往并不是整块出现的。

我们必须有能力把它们挑选出来。


取其精华,去其糟粕。


我认为,设计模式提供了很多素材(内部结构和外部场景)。

让我们有能力设计出更富表现力的用户接口。


站在每个功能层次上,我们都需要考虑上层如何使用。

学习设计模式,会丰富我们的语言,灵活的设计上层接口。


这也是封装吗?

是的,实现细节封装在用户接口的描述中了。

其实,编程语言本身,就是封装的一种应用。


封装业务领域

什么是好的程序员?

好的程序员应该在代码与功能之间建立了一个抽象的隔离层,

让外行人可以在讨论功能的时候不用关心代码的细节,

这是面向对象的封装思想在项目上的应用。


既然别人不强求程序员理解他们,程序员也无需强求他们理解代码。

不是吗?


好的合作,就是尽量隐藏属于自己业务范围内的事情,因为别人并不关心。

和好的程序员合作,你不用关心他代码的问题,你看不到他在调整。


结语

正所谓,长视者把目的当作手段,短视者把手段当作目的。

让我们正确看待编程思想的演变吧,以丰富自身的眼光。