封装的意义和喻义

我一直在不遗余力得推荐大家去看<<Exceptional C++ Style>>的16、17、18章
原因是这三章是我目前为止看到众多文章中阐述私有、封装、多态、继承表达最清楚的了
需要反复咀嚼
今天又看一遍
摘录其中几句关键的话与大家分享

1. 封装意味着什么? 
    en-cap-su-late:  用囊状物包围、包装或者保护

2. 一个良好的类接口能够隐藏其所性类的内部实现,并向外界提供一个与类的内部实现分离和区别开来的"interface"
    细菌细胞膜外表面的意义在于与外界进行感知、接触以及发生交互作用

3. 一个良好的类接口设计必须是完整的,同时又不能暴露类的任何内部实现
    如果一个细菌的细胞膜不是封闭的,那么这种细菌肯定活不长;其内部的有机组织会迅速溢出,它也肯定会死亡

4. 一个良好的类接口会保护类的内部实现,以免它们遭受未经授权的访问和操作
    杀灭细菌(和人类)的主要手段是制造能够破坏细胞膜的东西. 从微观层面来说,这包括化学制品、酶或者能够适当制造破孔的有机生物体(或许最终是纳米机器人). 而从宏观层面来说,刀和枪都是人类长久以来热衷的武器

5. 封装是面向对象编程的核心概念

6. 所谓面向对象,通常定义为:  数据以及操作这些数据的函数的组合,补充 - 通过由一组函数构成的接口将调用代码与内部数据隔离开来(由接口来负责操纵内部数据). 此观念强调了两点,一点是低耦合度,另一点是被组合起来的函数构成了一个起保护作用的接口

7. 简单的说,面向对象就是关于将接口和实现分享的方法学,只不过这种分离必须能够改善高内聚性和低耦合度

8. 除了struct的情况,数据成员永远都应当为私有的

9. 公用数据违反了封装原则,因为它允许调用代码直接操纵对象的内部信息,这意味着对调用代码的高度信任

10.在现实当中,很少人需要直接去操纵对象的内部实现,举个例子,很少有人需要直接操纵我的胃,因为那样他们可能很容易一不小心就干错事. 至多他们只会通过我的公用接口去间接地操纵我的内部,这种做法的好处是他们在进行操作之前必须首先让我知道并得到我的认可才行,例如递给我一瓶标有"喝掉我"字样的液体,那么我可以决定是喝了它,还是用它来洗头或洗车,根据自己的感觉和判断. 当然,有些人的确有资格直接操作我的"内部",例如外科医生,只不过即使如此:  a. 这种情况也很少见  b. 我至少能够选择是否愿意接受手术 c. 我至少能够选择我高度信任的医生.以上是合法范围,否则就是强暴了,像reinterpret_cast那么粗鲁,是不会给人以好印象,也不会带来良好的结果


窃以为以上9点皆为前戏,在第10点才道出了高潮,我略微在最后加入了一点我的新的见解,希望大家看了之后会明白,会HIGH~
原文地址:https://www.cnblogs.com/oiramario/p/620778.html