对象的特征与实现二

1、复用具体实现
代码复用是面向对象程序设计语言所提供的最了不起的优点之一。
最简单的复用某个类的方式就是直接使用该类的一个对象。此外也可以将那个类的一个对象置于某个新的类中。我们称其为“创建一个成员对象”。新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能的方式所组成。因为是在使用现有的类合成新的类,所以这种概念被称为组合,如果组合是动态发生的,那么它通常被称为聚合。组合经常被视为“has-a"(拥有)关系。
组合带来了极大的灵活性。新类的成员对象通常都被声明为private,使得使用新类的客户端程序员不能访问它们。这也使得你可以在不干扰现有客户端代码的情况下,修改这些成员。也可以在运行时修改这些成员对象,以实现动态修改程序的行为。
2、继承
对象这种观念,本身就是十分方便的工具。使得你可以通过概念将数据和功能封装到一起,因此可以对问题空间的概念给出恰当的表示,而不用受制于必须使用底层机器语言。这些概念用关键字class表示,它们形成了编程语言中的基本单位。
继承:能够以现有的类为基础,复制它,然后通过添加和修改这个副本来创建新类。
当源类(被称为基类,超类或父类)发生变动时,被修改的”副本“(被称为导出类、继承类或子类)也会反映出这些变动。
类型不仅仅只是描述了作用于一个对象集合上的约束条件,同时还有与其他类型之间的关系。两个类型可以有相同的特性和行为,但是其中一个类型可能比另一个含有更多的特性,并且可以处理更多的消息(或以不同的方式来处理消息)。继承使用基类型和导出类型的概念表示了这种类型之间的相似性。一个基类型包含其所有导出类型所共享的特性和行为。可以创建一个基类型来表示系统中某些对象的核心概念,从基类型中导出其他类型,来表示此核心可以被实现的各种不同方式。
当继承现有类型时,也就创造了新的类型。这个新的类型不仅包括现有类型的所有成员(尽管private成员被隐藏了起来,并且不可访问),而且更重要的是它复制了基类的接口。也就是说,所有可以发送给基类对象的消息同时也可以发送给导出类对象。由于通过发送给类的消息的类型可知类的类型,所以这也就意味着导出类与基类具有相同的类型。通过继承而产生的类型等价性是理解面向对象程序设计方法内涵的重要门槛。
有两种方法可以使基类与导出类产生差异。第一种方法非常直接:直接在导出类中添加新方法。第二种也是更重要的一种使导出类和基类之间产生差异的方法是改变现有基类的方法的行为,这被称之为覆盖那个方法。要想覆盖某个方法,可以直接在导出类中创建该方法的新定义即可。

 

posted @ 2018-10-30 10:33  止水于石  阅读(98)  评论(0编辑  收藏  举报