# 8.3 接口服务——讲诚信与守规矩
# 权力与义务
OOP的世界是民主制,所有对象都是独立而平等的公民,有权利寻求服务,也有义务提供服务。
- 作为服务的提供者,最重要的是讲诚信
首先服务要有可靠性,不能阳奉阴违——即接口必须履行它的承诺;
其次服务要具有稳定性,不能朝令夕改——即接口一经公开,不得随意更改。
从抽象的角度看,服务的可靠性保证了规范抽象,服务的稳定性保证了数据抽象。
前者更为重要,后者才有法律保障——如果接口被废弃或其签名发生变化,
固然会牵连客户,至少还可以通过编译器来发现和修改;
而规范只是语义上的契约,没有语法上的约束,不在编译器的监管范围。
(可以通过单元测试来保证,这也是单元测试的主要目的,另外,契约式设计也正是用于确保规范的有效实施的)
高质量的服务还要有纯粹性和完备性
对比Unix哲学“一个程序只做一件事,但要做好”,OOP则是“一个类只提供一套服务,但要完善”。
类提供的服务不在于数量的多少,而在于服务的一致性和关联性。
如果一个类提供的几种关联反应性不强的服务,可以考虑拆分为几个类,
如果几个类分别提供互补的服务,可以考虑合并为一个类。
纯粹和完备是相对的概念,与具体场合和语境有关系。
- 作为服务的享受者,最重要的是守规矩
依赖源代码而非规范文档编程是危险的。
提倡针对接口编程(programming to an interface),
避免针对实现编程(programming to 按 implementation)
以违背服务初衷的方式享受服务,如同盛夏的豆腐——即使没有变质,也是不能持久的。
- 总结
OOP系统是对现实社会的模拟,这不仅仅反应在表现形式上,还反应在行为准则上。
他们都是由一些相互交流、相互作用的个体对象组成的,个体的品行、行为、能力等参差不齐。
为实现合作共赢,所有个体都应该恪守‘严以律己、宽以待人’的原则
作为服务的主体,应保证服务的信誉和品质
作为服务的客体,应遵守服务的规则和规范
唯有如此,无论个体还是整体系统,方能保持和谐而不失活力、稳定而不惧变化。