「信息隐藏」在软件开发领域中是一个非常重要的核心要点, 它的另一个名称叫做「封装」, 但是因为现代面向对象技术流行的原因, 「封装」似乎已被视为和private是等价的, 这就导致了封装的含意并不那么准确了, 事实上它的使用范围在代码的编写中无处不在, private只是封装的其中一项用途而已。 因为封装一词已经被误用太久,所以使用「信息隐藏」能更简单的阐述清楚这个概念,这能避免受对「封装」先入为主的错误理解的影响。
信息隐藏, 顾名思义就是将信息给隐藏起来。 信息是什么? 在编程语言中, 信息包括变量、常量、语句、函数、类等等一切组成代码的元素, 信息隐藏的意义就是在高级别的代码元素层面上对低级别的代码元素进行隐藏。 比如说
函数的作用就是将变量、语句等最低级的代码元素给包裹起来, 使之对于函数外部不可见, 对于函数的调用者来说,他只需知道函数的作用, 而无需了解函数内部的实现细节, 这样才能将问题简单化, 这便是函数的信息隐藏的能力。
类的作用就是将private成员给包裹起来,使之对于类外部不可见,这就是类的信息隐藏功能,而类的信息隐藏能力就是为大众所知的封装功能。 在面向对象编程语言中还有一项protected的访问修饰级别, 它也能起到信息隐藏的作用, 只是能力相对较弱, 因为当类成员启用protected访问修饰以后, 对于类外部虽然起到隐藏的作用, 但是对于继承它的子类而言,是没有信息隐藏的能力的。 因此我们在编写类的时候, 能使用private就不要使用protected, 能使用protected的就不要使用public,以此来最大限度的保证类的信息隐藏能力。 public是完全公开的, 没任何隐藏的能力,因此能不使用尽量不使用。 从理论上来说, 一个完美的类的所有成员都应该是private的,但是这样的类的是无法正常使用, 然而,在写代码的时候我们应该让自己编写的类无限趋向于这种方式,以最大限度获得信息隐藏能力。
信息隐藏能带来什么好处呢?其实最主要的核心作用就一点:降低软件开发的复杂性, 使问题尽量简单化。 复杂的代码项目是程序员的恶梦, 许多兢兢业业的前沿科学工作都无时无刻不在想方设法发明或者发现各种降低软件代码复杂性的工具和方法, 信息隐藏就是一项经过实践并已被证明是行之有效的工具。 这个道理其实很简单, 就拿世界上最好的语言php实现发送http请求来说明信息隐藏能将问题简单化的能力。 php发送http请求一般有两种方式, 一种是使用curl库,另一种是使用file_get_contents函数,使用curl势必要写许多代码来实现完整的发送http请求的功能, 如下图
这便是没有经过信息隐藏(封装)的代码示例, 它复杂且难以使用,以这种方式发送http请求肯定会导致功能实现的效率降低, 出错的机率增加。
而以file_get_content方式发送请求则要简单许多,一行代码就可以搞定
$response = file_get_content($url);
足够高效,足够简单, 因为所有发送请求的具体细节都被封装(