• 提高代码质量的重要手段:将细节隐藏起来


    「信息隐藏」在软件开发领域中是一个非常重要的核心要点, 它的另一个名称叫做「封装」, 但是因为现代面向对象技术流行的原因, 「封装」似乎已被视为和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);

    足够高效,足够简单, 因为所有发送请求的具体细节都被封装(隐藏)在这个函数里面, 函数的调用者只需要知道如何使用这个函数就可以了。 当然, 这只是一个简单到不能再简单的示例,可能无法足够的深刻说明信息隐藏的威力。但是以小观大, 在写程序时, 信息隐藏无时无刻不伴随着我们, 我们在使用各种类库、框架、组件等都是信息隐藏的范例, 我们平时经常提及「底层」这个术语,它一般表示高难度、复杂、功能强大,但是使用效率低等特点,因为它从某种角度显现出来的都是未经过信息隐藏的细节内容。而那些在「底层」的基础上进行信息隐藏(封装)的框架或者库, 使用简单且高效,所以在现代软件开发中往往会使用各种框架来进行软件的开发,脱离框架编写原生代码的情形非常罕见, 这便是信息隐藏价值的体现了。

    因此,在编写代码的时候要时不时的问下自己:“我还需要隐藏些什么吗?”, 只要能做到这点,写出来的代码的质量将会有长足的进步。

  • 相关阅读:
    CF 1047 C
    POJ 1064 Cable master [二分]
    HDU 1257最少拦截系统[动态规划]
    CF 1096D Easy Problem [动态规划]
    CF 1095C Powers Of Two
    POJ 1O17 Packets [贪心]
    POJ 3273 Monthly Expense二分查找[最小化最大值问题]
    HDU 2037 今年暑假不AC[贪心]
    Machine Learning Stanford (week 3)
    matlab 函数笔记
  • 原文地址:https://www.cnblogs.com/aspwebchh/p/6649568.html
Copyright © 2020-2023  润新知