面向对象三特性之【封装】
2015-09-16 23:24
232 查看
校招时背熟了“封装、继承、多态”,研究过继承和多态的内部运行机制,却忽略了对封装的理解。
最近看Thinking in Java,突然觉得封装特性才是最能体现“面向对象”思想的特性(继承、多态表示对象间[?是?]关系)。
封装,指隐藏属性和实现。
仅公开[必要]的[接口],以便于具体实现的维护。
常见的误区有:
1、数据成员可见性设置为private,并添加getter、setter,就是封装。
>>>这跟public数据成员并无区别。
2、公开的接口提供了多于“必须”的功能。
>>>例如一个[栈]类,必须的功能只有[压栈][出栈];如果提供getByIndex(int index),就有违封装原则,即使栈的存储结构是数组,可以方便地通过index访问。
>>>提供超出必要的功能的坏处在于,画蛇添足......
以下用面向“对象”作说明:
>>>博主的对象无偿帮博主保管全月工资。
>>>聪明的博主给对象提供了一个接口getSalary(),博主和对象幸福地生活着。(仅提供必要接口)
>>>坦诚的博主又给对象提供了几个接口getBaseSalary()+getBonus()+getExtraGains(),对象幸福地生活着。(提供非必要接口)
>>>博主还给了对象这些->_->set/getOffWorkTime()+set/getBackHomeTime()+doHousework(),博主是中国好老公。(提供所有accessor、business method)
最近看Thinking in Java,突然觉得封装特性才是最能体现“面向对象”思想的特性(继承、多态表示对象间[?是?]关系)。
封装,指隐藏属性和实现。
仅公开[必要]的[接口],以便于具体实现的维护。
常见的误区有:
1、数据成员可见性设置为private,并添加getter、setter,就是封装。
>>>这跟public数据成员并无区别。
2、公开的接口提供了多于“必须”的功能。
>>>例如一个[栈]类,必须的功能只有[压栈][出栈];如果提供getByIndex(int index),就有违封装原则,即使栈的存储结构是数组,可以方便地通过index访问。
>>>提供超出必要的功能的坏处在于,画蛇添足......
以下用面向“对象”作说明:
>>>博主的对象无偿帮博主保管全月工资。
>>>聪明的博主给对象提供了一个接口getSalary(),博主和对象幸福地生活着。(仅提供必要接口)
>>>坦诚的博主又给对象提供了几个接口getBaseSalary()+getBonus()+getExtraGains(),对象幸福地生活着。(提供非必要接口)
>>>博主还给了对象这些->_->set/getOffWorkTime()+set/getBackHomeTime()+doHousework(),博主是中国好老公。(提供所有accessor、business method)
相关文章推荐
- 使用WCF对外提供接口
- 女人衰老四大危险信号
- docker基础入门之一
- centos下haproxy日志的配置
- Spring的事务管理阅读笔记与感悟(一)
- 算法的时间复杂度和空间复杂度详解
- 探究Linux下参数传递及查看和修改方法
- 总结
- Centos 6.4 python 2.6 升级到 2.7一起的MySQLdb不能使用的解决问题
- Opencv固定阀值操作-Threshold函数
- log4j输出多个自定义日志文件,动态配置路径
- Paper阅读笔记_2
- ls -al每一列的意思
- opencart2.0.3.1上安装vqmod和hide not permitted menu
- Linq中Lanbda表达式做参数
- emmet —— Eclipse html 插件
- Java心得32
- jsdoc使用markdown插件
- Android源码解析--Material Design之水波纹点击效果RippleEffect使用
- 启动一个Activity