从传统的面向过程的模式,到学习掌握面向对象编程的过程中,总是有些思想观念难于转变,面向对象,更多的是思维的方式,而不是使用方法。越是深入的学习,越感到面向对象技术的博大精深,最近有一些心得总结一下。

在面向对象编程中,套用重构的思想,也使用两顶帽子,来达成目的。

重构的两顶帽子,指修改及新增功能两顶帽子,在新增功能时,不改变任何原来的代码,也就是戴上新增功能的帽子,如果发现原来的代码有问题,就戴上重构的帽子,而不增加或改变原有代码执行的功能及接口。那么面向对象编程的两顶帽子是什么呢? 
1.什么是对象编程的两顶帽子? 
    一个软件的目的是为了解决一个或一些问题,就有了需求和实现,在面向对象编程中,表现为一个个的类或是对象,相互协作,调用,通信。在这个过程当中,简单来说就是使用和被使用两种关系。

一个对象总会表现出两种形式,它自身,及它的接口。或者说是它的本体与表象。本体是对象自身的结构及构成,表象是它的接口,与其它对象的交互或是表现。 
那么,当我们关注的是对象的自身还是接口的时候,就需要戴上不同的帽子。 
有哪些帽子可戴呢?我们把一个对象分成两部分,一是接口,一是实现,接口是对象对外部的表现,实现是内部分运行及处理机制,所以就有了这两顶帽子。

为什么会是两顶而不是三顶四顶?从认识事物来看,二分法很容易理解和体会,就象白和黑,好和坏一样,当关注接口时,根本不用想如何实现,会不会有实现的困难等,关注实现时,也不用考虑需不需要更多的功能,要不要改个名称,加个参数等情况,只要专注于实现此接口的功能即可。 
之所以要这么做,是因为接口和实现是对象的一体两面,这两个因素互相影响而形成一个完整的整体。接口的改变必定导致实现的改变,实现的改变有可能会影响接口。把它分开来,减少这种相互影响。 
如何戴这两顶帽子?当然不能同时戴,先戴实现的帽子么?也不可能,没有接口你实现什么呢?一开始要戴上接口这顶帽子,然后去实现它,在实现当中,你会发现实现的代码需要和更多的其它对象交互,没关系,就当它于经存在了,当你完成编译时,你自然会发现通不过,通过编译器的提示又戴上了接口的帽子,如此交替反复。 
戴上帽子后,干什么呢? 
帽子是一种角色的象征,而不是做事的方式,因为在编码的时候,写接口和写实现都是在写代码,做事方式一样,但是想法不同。 
当你戴上接口的帽子时,你就是一个使用者,从客户的角度来考虑问题,把你当前处理的对象当做是你的供应商,你就是一个挑剔的客户。 
我们从自然界来理解这个问题,一个对象就是一个物体,这个对象之所以是这样,并不是因为它本身长的是这样,而是因为周围环境的影响才会成为这样,也就是接口部分是由于外界的需要而形成的,可以看成它不属于对象自身,而是由它的客户拥有,对象自身拥有的是关于接口的实现,它为了向外界提供所需要的接口,不得不在内部进行演化,来实现这种接口。

当戴上实现的帽子时,你就变成了那个供应商,面对着挑剔的客户,也就是刚才戴着接口的帽子的那个你,你就想着如何去应付它。来满足他的要求。

这种方式和设计模式有什么关系?上面所说的接口,是指一个类的方法,属性,事件等,是细粒度的接口,实现,是指对这个类的方法,属性,事件等的实现,不是指类一级的实现。是我在编程过程中,对细部处理的一些想法。当然这种方法放大了以后,到设计类及类间关系这一级,实现就变得次要了,关心更多的是接口。 
模式的定义(Alexander):每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。 
而设计模式,指的是在软件开发活动中的模式。是软件设计的模式,一般说来,一个设计模式是多个类相互协作的结果,一个设计模式的实现就是一个设计,而不是设计的实现。一个模式可以有N个设计,而每一个设计,又可以有N种实现。所以两顶帽子,描述的是面对一个设计,如何去实现它的问题。

和TDD有什么关系?事实上,这两顶帽子是学习TDD的一种理解。TDD通过测试来驱动开发,由测试来保证重构,是一套完善的机制和方法论。结合其它的XP思想,形成一整个XP的开发过程模式,从这一点可以看出老外高手思想、逻辑体系的严明。TDD的测试就是接口的帽子,为了通过测试写的代码就是实现的帽子,但不同点在于,测试驱动的是整个的开发,包括设计及实现,重构等过程,是一个大的框架。 
当然,如果不写测试,或测试代码不能完全覆盖的情况下,也可以戴这两顶帽子,比如私有方法,对一个类的内部来说,它仍然是使用它的方法的一个接口。 
通过戴这两顶帽子,能改善接口的易用性,稳定性及偶合性。因为在写每一个接口的时候,都是站在使用者的角度来考虑的,这时候关注的是调用者使用的方便,从小处着眼,比如一个私有方法,我们会关注它起什么名字,准备给它传什么参数,需要返回什么值等,而在对此方法的实现里,关注怎么把这个方法实现得更好。再大一点,到类级,再大一点,到一组协作的类,再大一点,到组件,模块等,原理都是一样的。

面向对象编程的两顶帽子相关推荐

  1. 两顶白帽子和一顶红帽子_自我发展:我如何不戴两顶帽子并找到第三顶帽子

    两顶白帽子和一顶红帽子 Hi all! I lead antispam team and several machine learning teams at Mail.ru Group. The su ...

  2. 三顶红帽子和两顶白(蓝)帽子。

    将其中的三顶帽子分别戴在A.B.C三人头上.这三人每人都只看见其他两人头上的帽子,但看不见自己头上戴的帽子,并且不知道剩余的两顶帽子的颜色. 问A:"你戴的是什么颜色的帽子?" A ...

  3. 有三顶红帽子和两顶蓝帽子逻辑推理

    有三顶红帽子和两顶蓝帽子逻辑推理 有三顶红帽子和两顶蓝帽子. 将五顶中的三顶帽子分别戴在A.B.C三人头上.这三人每人都只能看见其他两人头上的帽子,但看不见自己头上的帽子,并且也不知道剩余的两顶帽子的 ...

  4. python面向对象编程138讲_Python面向对象编程简单讲解

    学习目标: 1-面向对象编程 2-类和对象 3-对象的属性和方法 4-类的特性 Python面向对象编程 一种编程程序的设计思想,把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数.把计算机 ...

  5. 简明Python教程学习笔记_6_面向对象编程

    面向对象编程:https://www.liaoxuefeng.com/wiki/897692888725344/923030496738368 面向对象高级编程:https://www.liaoxue ...

  6. 从零开始学习python编程-从0开始的Python学习014面向对象编程(推荐)

    简介 到目前为止,我们的编程都是根据数据的函数和语句块来设计的,面向过程的编程.还有一种我们将数据和功能结合起来使用对象的形式,使用它里面的数据和方法这种方法叫做面向对象的编程. 类和对象是面向对象编 ...

  7. 戴好这六顶帽子的项目经理,无论项目团队还是个人成长都受益终生

    六顶思考帽是一个操作简单.经过反复验证的思维工具,让每一场会议.每一次讨论.每一份报告.每一个决策都充满新意和生命力.这六顶帽子分别是: 这个工具能够帮助PM: 提出建设性的观点: 聆听别人的观点: ...

  8. 函数式和面向对象编程有什么区别?

    函数式编程 (Functional Programming) 和 面向对象编程 (Object Oriented Programming) 是两个主流的编程范式,他们有各自独特的闪光点,比如函数式编程 ...

  9. Python 基础--面向对象编程

    在至今我们编写的所有程序中,我们曾围绕函数设计我们的程序,也就是那些能够处理数据的代码块.这被称作*面向过程(Procedure-oriented)*的编程方式.还有另外一种组织起你的程序的方式,它将 ...

最新文章

  1. 多线程之失败自动重试机制
  2. 循环数组的最大子段和
  3. UA MATH571B 试验设计VI 随机效应与混合效应3 嵌套设计
  4. ObjectInputStream和ObejctOutputStream
  5. 保持生长不焦虑,非科班程序媛的进击
  6. 最优化课程(part1)
  7. 小技巧!CSS 整块文本溢出省略特性探究
  8. .Net Core in Docker极简入门(上篇)
  9. greenfoot推箱子游戏_推箱子小游戏V2.0更新
  10. MFC随机博弈黑白棋
  11. Visual C++线程同步技术
  12. python串口通信_python的串口通信(pyserial)
  13. Excel用控件动态控制图表
  14. 【人工智能算法】算法基础之K均值聚类算法
  15. 【冰爪游戏】MC教程 —— 自定义皮肤
  16. RTKLIB基础函数等
  17. python数据分析 获取数组中非零元素的索引
  18. android上拉菜单和下拉菜单的实现
  19. MarkdownPad中使用中文
  20. 笔记:Smith圆图及其计算

热门文章

  1. 基本数据类型的成员变量放在jvm的哪块内存区域里?
  2. 2022年中国大学生学习与发展白皮书
  3. 数据分析体系构建那点事!
  4. 2021快手美妆行业数据营销报告
  5. 2020腾讯二次元营销通案
  6. python3 爬虫实例_【实战练习】Python3网络爬虫快速入门实战解析(上)
  7. python监听键盘的库的名称_python实时监控键盘鼠标,pynput库的详细用法
  8. python 可视化_Python数据可视化
  9. python 键盘输入_跟我一起学python | 探究07
  10. 科学数据中心资源和用户访问控制体系