zoukankan      html  css  js  c++  java
  • 关于保护成员是否有意义的一点看法

    我们知道,一般的面向对象语言,都会有类,而类成员一般有三种访问权限:公开,保护,私有。

    有些人说,“保护”似乎没有什么价值,还建议不用。

    有些人却认为,没有“保护”,举步维艰。

    我觉得,“保护”属于类库维护者,而“公开”属于类库使用者。只要我们明白这两个身份的不同,就好理解该如何使用“保护”了。

    比如,你本身是类库的设计者,或者是团队设计者之一,那么你也可能自己做自己的类库维护者。但是类库维护者并不好当。从接口的角度,“保护”成员对类库维护者来说是属于“接口”级别的,所谓接口,就要维持他的不变性。我们要维持接口的不变性,非常难,唯一的办法就是尽量减少“接口”,将不必要的封装起来。但是“保护”成员却将很多成员转化成了接口,必然会让代码的维护量指数飙升。所幸的是,你和你的团队牢牢控制着类库代码,想怎么改就怎么改。

    但,如果你并不是类库的设计者,结果会相当麻烦。因为你用到“保护”后,类库的设计者如果改变“保护”成员,就破坏掉你的代码。因此他们绝对不应该去改变“保护”的成员,这对于他们来说是一个很大的负担。

    因此,你要使用“保护”,你就必须承担“类库维护者”的风险,你的代码就要承担比只是“类库使用者”更大的修改风险。

    这也是为什么有些人提倡完全不用“保护”的原因。

    那为什么还是有很多类库愿意冒风险去使用“保护”成员呢?保护相对于公开,代表了两种层次,一个是具体实现,一个是抽象接口。人们想用“保护”,是为了有机会修改实现。如果没有“保护”,只能从新建立一个实现,而不能修改原有的实现。这对很多情况是相当麻烦的。

    总的来说,我是赞成,尽量少用“保护”,有些时候,通过其他一些方法,也能局部改变实现,而不需要完全建立新的实现,又能避免“保护接口”的维护的。

  • 相关阅读:
    mysql基础(三)存储引擎和锁
    为给定字符串生成MD5指纹
    区块链基本原理,Part-2:工作量证明和权益证明
    区块链基本原理,Part-1:拜占庭容错
    区块链挖矿 2.0
    以太坊 2.0 中的验证者经济模型,Part-2
    以太坊 2.0 中的验证者经济模型,Part-1
    Java归并排序之递归
    Python爬虫入门教程 64-100 反爬教科书级别的网站-汽车之家,字体反爬之二
    Java棋盘覆盖问题
  • 原文地址:https://www.cnblogs.com/Nobel/p/1666869.html
Copyright © 2011-2022 走看看