编程那点事编程那点事

专注编程入门及提高
探究程序员职业规划之道!

对象导论:复用具体实现(组合和继承)

一旦类被创建并被测试完,那么在理想情况下它就应该代表一个有用的代码单元。事实证明,这种复用性并不容易达到我们所希望的那种程度,产生一个可复用的对象设计需要丰富的经验和敏锐的的洞察力。但是一旦你有了这样的设计,他就可以复用。代码复用是面向对象程序设计语言所提供的最了不起的优点之一。

最简单地复用某个类的方式就是直接使用该类的一个对象。此外也可以将那个类的一个对象置于某个新的类中。我们称其为“创建一个成员对象”。新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能的方式组成。因为是使用现有的类合成新的类,所以这种概念被称为组合,如果组合是动态发生的,那么它通常被称为聚合。组合通常被视为has-a关系,就像我们常说的“汽车拥有引擎”一样。

汽车和引擎的UML图

组合带来了极大的灵活性。新类的成员对象通常被声明为private,使得使用新类的客户端程序员不能访问他们。这也可以使得你可以在不干扰客户端代码的情况下,修改这些成员。也可以在运行时修改这些成员对象,以实现动态修改程序的行为。下面将要讨论的继承并不具备这样的灵活性,因为编译器必须对通过继承而创建的类施加编译时的限制。

由于继承在面向对象程序设计中如此重要,所以它经常会被高度强调,于是程序员新手就会有这样的印象:处处都应该使用继承。这会导致难以使用并过分复杂的设计。实际上,在建立新类时,应该首先考虑组合,因为它更加简单灵活。如果采用这种方式,设计会变得更加清晰。一旦有了一些经验之后,便能够看出必须使用继承的场合了。

未经允许不得转载: 技术文章 » Java编程 » 对象导论:复用具体实现(组合和继承)