OPP(Object-oriented programming,面向对象编程)是一种方法,用于将现实世界的对象
抽象为可供代码使用的类。其思想是:如果可以在代码中建立业务问题的模型,那就可以
更轻松地创建能够正确解决这些业务问题的应用程序,而且其解决方式能够更好地反映现
实世界。大多数现代开发语言都支持OOP。利用OOP 可以更轻松地将现实世界概念化,
开发出满足业务需要的应用程序,同时使各个代码单元短小,能够重用。拥有坚实的OOP
基础,那就可以很轻松地理解和使用TDD 中用到的一些概念。
笼统来说,OOP 有3 个主要原则。过去几年,许多人一直坚持还有其他一些原则。这
些人也不一定是错的。但如果对这些主张稍做分析,马上就会发现,这些附加原则要么是
想吹捧一种语言相对于另一种语言的优势,要么是想贬低一种语言或平台,说它不是真正
的OOP。还有一种可能,就是它们组成了一个愿望清单,开发人员希望在自己选择的语言
中见到这些功能。这些附加原则不一定是无效的;绑定和消息传送都是重要的概念,在某
1. 封装
“封装原则”要求:创建的类应当是黑盒。换句话说,类的内部不允许客户端访问。
客户端只有一种方式可以与类交互或改变其状态,那就是通过类的公共接口。客户端在任
何情况下都不能也不需要知道一个类是如何执行其行为的。客户端只知道利用哪些方法及/
或属性来获取它所需要的信息和交互。
真的不需要在意类的客户端如何完成其工作,只要获取所需要的结果即可。还需要确
保类能够自由执行其任务,而不存在未经许可修改其内部状态的风险。在设计类时,非常
重要的一点就是正确设定方法、属性和变量的作用域。只有那些作为公共接口组成部分的
成员才应当声明为公共成员。只有那些必须供类的后代使用的成员才应当声明为受保护的。
所有其他成员都应当是私有的。对于新接触这一概念的开发人员来说,有一条很不错的经
验法则,那就是把所有成员都设置为私有的,在需要时再将某一成员变为公共成员。另外,
永远都不要允许成员变量设置为私有之外的内容;如果一个后代类需要使用该变量,可以
让它通过一个受保护的属性来访问。如果需要使该变量成为公共接口的一部分,应当将它
包装在一个公共属性中。永远都不要简单地允许对内部变量进行不加监视或不加控制的
在应用程序中构建类时,很快可以发现,一些类之间存在很自然的分层关系。这些类
可能非常相似,但它们的功能并不是完全一样。在这些情况下,可以将公共功能放在一个
基类中,然后再从该基类中派生出目的性更强的类来。这就是“继承”,是OOP 中一个非
常重要的概念。