我正在读 The Pragmatic Programmer: From Journeyman to Master by Andrew Hunt, David Thomas .当我读到一个叫做正交的术语时,我在想我正确的做法.我很了解它.然而,在本章的最后,提出了一些问题来衡量对该
这里捆绑了三个问题:(1)支持多重继承对正交性的影响是什么? (2)实现多个接口对正交性的影响是什么? (3)两种影响有什么区别?C++ supports multiple inheritance, and Java allows a class to
implement multiple interfaces. What impact does using these facilities
have on orthogonality? Is there a difference in impact between using multiple
inheritance and multiple interfaces?
首先,让我们掌握正交性.在“Unix编程艺术”中,Eric Raymond解释说“在纯粹的正交设计中,操作没有副作用;每个动作(无论是API调用,宏调用还是语言操作)都只改变一件事而不影响其他动作有一种方法可以改变你所控制的任何系统的每个属性.“
所以,现在看问题(1). C支持多重继承,因此C中的类可以从具有相同操作但具有两种不同效果的两个类继承.这可能是非正交的,但C要求您明确说明哪个父类具有要调用的功能.这将操作限制为仅一种效果,因此保持正交性.见Multiple inheritance.
问题(2). Java不允许多重继承.一个类只能从一个基类派生.接口用于编码各种类型共享的相似性,但不一定构成类关系. Java类可以实现多个接口,但只有一个类在执行,因此在调用方法时应该只有一个效果.即使一个类实现了两个接口都有一个具有相同名称和签名的方法,它也会同时实现这两个方法,所以应该只有一个效果.见Java interface.
最后问题(3).不同之处在于C和Java通过不同的机制保持正交性:C要求明确指定父级,因此效果中不会产生歧义;和Java通过同时实现类似的方法,所以只有一个效果.