一旦类被创建并被测试完,那么他就应该代表一个有用的代码单元。事实证明,这种复用性并不容易达到我们所希望的那种程度,产生一个客服用的对象设计需要丰富的经验和敏锐的洞察力。但是一旦你有了这样的设计,它就可供复用。代码复用是面向对象程序设计语言所提供的最了不起的优点之一。
最简单的复用某个类的方式就是直接使用该类的一个对象,此外也可以将那个类的一个对象置于某个新的类中。我们称其为“创建一个对象”。新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能的方式所组成。因为是在使用现有的类合成新的类,所以这种概念被称为组合(composition),如果组合是动态发生的,那么他通常被称为聚合(aggregation)。组合通常被视为“has-a”(拥有)关系,就像我们常说的“汽车拥有引擎”(下面这张UML图用实心菱形表明了组个关系。我们通常采用最简单的形式:仅仅用一条没有菱形的线来表示关联。)
组合带来和极大的灵活性。新类的成员通常都被声明为private,使得使用新类的客户端程序员不能访问它们。这也使得捏可以在不干扰现有客户端代码的情况下,修改这些成员。也可以在运行时修改这些成员对象,以实现动态修改程序的行为。下面将讨论的继承并不具备这样的灵活,因为编译器必须对着通过继承而创建的类施加编译时的限制。
由于继承在面向对象设计中如此重要,所以它经常被高度强调,于是程序员新手就会有这样的印象:处处都应该使用继承。这会导致难以使用并导致过分复杂的设计。实际上,在建立新类时,应该首先考虑组合,因为它更加简单灵活。如果采用这种方式,设计会变得更加清晰。一旦有了一些经验后,便能够看出使用继承的场合了。
总结:
①新手首先考虑用组合
②想用继承嘛?感觉继承难用嘛?没事,等你有经验就不难用了。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于