面向对象之封装

2017-11-02  本文已影响8人  liudai123

 封装的作用:

1.隔离性:

被封装后的对象(这里的对象是泛指代码的编程单元,一般指:程序集,命名空间,类,方法,属性,变量等)其外部对象是无法直接访问对象的内部实现细节,内部实现细节的的改动不会影响到外部对象的访问原则(即:对象内部修改后,在公开暴露指定的访问路径不变的情况下,外部访问它的对象是无需修改的),这是隔离性的体现,同时也是实现高内聚,低耦合的最根本的思想之一;良好的封装能够减少耦合。

2.可复用性:

被封装后的对象可以被外部多个对象访问,而无需为每个外部对象去指定不同的服务对象;如:所有的对象的基类都是object类,object类里面的公共成员可以被其所有子类使用,Ado.Net相关的数据访问类及其公共成员均可被其它所有的对象使用等。类内部的结构可以自由修改。

3.可读性:

被封装后的对象的名称(如:程序集名,类名,方法名)如果命名恰当,那么就能在不看里面的实现细节的前提下,了解该对象的作用;如:DataTable就是用来装表格数据的;ToString就是转换为字符串,Length就是指长度等。可以对成员进行更精确的控制,隐藏信息,实现细节。

一个类的封装

今天看到的一个封装的解释:

封装这个解释,我一直喜欢用CPU作为例子

CPU把所有的电阻电容门电路等都封装起来,只留出一些管脚(接口)让用户使用,CPU能暴露什么,不能暴露什么,是生产商设计决定的,用户不能直接操作CPU的电阻电容等等,但可以通过給管脚适当的电压来控制电阻电容等,也就是说用户不能直接访问CPU的属性,但是可以通过方法修改CPU的属性的值

同样的一个类也是把属性算法(逻辑处理)封装起来,只留必要的方法(接口)让用户使用,一个类该暴露什么,不该暴露什么,由类的设计者根据需求设计决定的。private属性用户不能直接访问,如果设计者提供相应的接口方法,那么用户可以通过该接口方法访问。

楼主的疑惑在于通过方法能修改属性和直接修改属性的区别,直接修改相当于不经过门电路直接给CPU的电阻电容等元件输个电压,这样这个电压(电流)是否超载不能有效保证,元件就有可能被烧坏,所以提供相应的方法访问属性,可以在方法中做相应的控制。同样的,一个类,不直接修改属性而通过方法来修改,可以在方法里做相应的处理避免用户输入的一些非法数据而造成系统故障。只不过对于POJO类来说,因为类本身只是作为数据的载体,并不带有逻辑处理,所以一般的set方法就是简单的给属性赋值。

上一篇下一篇

猜你喜欢

热点阅读