封装和类

封装和类

类是面向对象(OOP)编程的基础,类封装了存在关联的数据以及操作数据的函数,对象是类的具体实现。之所以要提出类和对象的概念,是因为它们的存在有助于软件开发,能清晰程序逻辑结构,能提升开发速度。

 

我想先从类的基本特性之一封装谈起。

在开发过程中我们不希望不断重复的书写一段相同的程序,所以我们引进循环和函数,绝大多数函数都需要处理来自外部的数据,这些数据要么来自于参数,要么是可见性高的数据(如全局变量)。无论是那种,随着程序的整个容量的不断扩大,要进行处理的数据越来越多,显而易见的结果是要么全局变量变得越来越多,要么是函数的参数列表变得的越来越长。此时出现了几个比较重要的问题。

  1. 记忆问题:当你想调用一个函数时,你费力地记着函数参数列表中各个参数的用处和可用类型
  2. 修改问题:当你想修改一处被广泛调用的变量名时,你难以寻找全部的调用点,调用它的函数可能被分散在各个不同文件的各处
  3. 适应性问题:因为函数的的内部具体实现不同,大体相似的函数却难以被复用
  4. ...

可见,仅有函数是不够的。

函数需要和他形影不离的数据在一起。

把彼此相关的数据和函数放在一起,隐藏起来,对外提供标准化接口(API),称之为封装。

被封装起来的结构,一般是我们称之为的

之所以说一般以类封装,是因为你只要能满足封装的必要条件(函数,数据,访问接口),就是完整的封装。比如把函数和数据放在单独的文件下,提供几个可用的接口,也是封装。而类是一种封装的标准结构。

 

我们现在来看看封装的好处,即更深入的了解什么时候我们应该进行封装。

  1. 封装为数据和函数提供了一个友好的环境。在环境内的函数可以直接调用同环境的数据。一个或多个函数和相同数据亲密,就可以考虑和这些数据封装在一起,把其他”不亲密“的数据作为参数传递。这样就减少了参数列表。
  2. 封装能提供一个清晰的观测点,可以由此监控数据的变化和使用情况,我们还可以轻松地添加数据被修改时的后续逻辑。封装之后的结构,易于在内部增加更多功能。
  3. 封装缩小变量的可见范围。当我们需要一个变量时,我们不直接调用变量本身而是调用一个返回该变量的函数。这样做的好处是提供了一种灵活性,当你想改名或搬移一份变量时(别告诉我你从来不怎么做),修改函数比前修改数据更加容易(我们可以先修改函数内部变量,在创建新函数调用旧函数,之后可以安全的修改调用点),因为函数只有一种功能,就是调用。
  4. 封装意味着每个模块之间应该尽可能少了解系统的其他部分,如此一来,一旦发生变化,需要了解这一变化的模块就会比较少,这会使变化比较容易进行。在这里我想举个例子来说明:我(A)想叫服务员(B)帮我要一份兰州拉面(D),其中厨师(C)被封装隐藏了,我不在意谁是谁下的厨,我只想吃拉面。哪怕有一天换了个厨师,这不管我的事!这些变化只会影响服务对象,而不会直接波及所有的客户。显而易见,我实现同样的功能却减少变化带来的影响。
  5. .....

需求的变化、新功能的实现贯穿了开发的整个生命周期,拥有应付变化的抵抗力和新功能编写的优良环境,是高效开发的基础。有效的封装能帮助提供这些优良特性。

 

此博客根据本人少有的编程经验以及《重构》书中相关介绍提炼而成,记录本人对类与封装的一点理解与看法

由于本人的表述或理解问题,文中可能存在一些错误,敬请见谅,欢迎指正

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章