创建并测试好一个类后,从理想的角度而言,它应代表一个有用的代码单位。它要求较多的经验以及洞察力,这样才能使这个类有可能重复使用。
重用是面向对象程序设计所能提供的最伟大的一种杠杆。
为重用一个类,最简单的办法是仅直接使用那个类的对象,但同时也能将那个类的一个对象置入一个新类。我们把这叫作“创建一个成员对象”。新类可由任意数量和类型的其他对象构成,这个概念叫作“组合(composition)”。若该组合是动态发生的,则也称为“聚合(aggregation)”。有时,我们也将组合称作“包含(has-a)”关系,比如“一辆车包含了一个引擎”,如图3-4所示。
图3-4 has-a关系
因为有了对象的组合,所以让编程具有了极大的灵活性。新类的“成员对象”通常设为“私有”(private),使用这个类的客户程序员不能访问它们。这样一来,我们可在不干扰客户代码的前提下从容地修改那些成员。也可以在“运行期”更改成员,进一步增大了灵活性。后面要讲到的“继承”并不具备这种灵活性,因为编译器必须对通过继承创建的类加以限制。
继承虽然重要,但是新建类的时候首先应考虑“组合”对象,这样做显得更加简单和灵活。利用对象的组合,我们的设计可保持清爽。