面向对象(Object-Oriented)的系统(I)

面向对象的系统包括:

下面逐一介绍:
Inheritance

Inheritance是在类级别的一种关系。一个新类可以继承自一个存在的类。
像上面的图片,Violin Player继承自Musician类,Musician称为基类,或者Parent Class,Super Class,Violin Player成为继承类,或者child class,sub  class.
Inheritance是一种功能很强大的RelationShip,因为继承类可以获取基类的Everything。比如Musician 有一个方法ReadyPlay,那么Violin Player也会有这个方法。
对于基类来说,可以有任意数量的继承类。可以建立新类如Piano Player,FlutePlayer,继承自Musician.

注意:对基类的任何修还,都会对继承类产生影响。比如Musician 加入了一个MusicianTime方法,那么每个继承类都会存在这个方法。如果Musician中有一个Bug的话,那么很不幸,每个继承类都存在这个Bug。

类的层次(Class Hierarchies):

继承自基类的类,同样可以被其他类继承。如String Musician继承自Musician类,ViolinPlayer继承自String Musician。通过继承而形成的一组类称为Class Hierarchies(类层)的结构。Depth of Hierarchies 指Hierarchies的继承级别的数量(number of levels of Inheritance in the Hirarchies),Depth 深的类比浅的类,使用起来更加困难。大多数的工具书建议Depth控制在最高为5-7。
建立Class Hirarchies 并不简单:开始时要建立合适的基类,继承层次是设计的重点----工作模块 可以被建立和别扩展。

Single and Mutiple Inheritance:

Violin类直接继承自Stirnged Instrument类,属于Single继承,而Stringed Instrument继承自Musical Instrument和Pluckable类,这2个类同Violin没有直接联系,属于Mutiple 继承。
Single继承如果要Wisely使用也是困难的。继承是最Powerful的软件模型工具,同时也是最难懂和最难使用的。
Multiple继承指直接从2个或者多个类继承,像上面的Stringed Instrument继承自Musical Instrument 和Pluckable。Multiple继承提供了Multiple Opportunites to Misuse Inheritance.
C# 限制了Multiple 继承的使用:
你可以继承任意多的Interface,但是不能继承Non-interface。
注意:在继承的所有形式中,Multiple继承是特殊的,提供相同Object的不同view。
Vilin Object可以在Violin class level使用,但是不能在Stringed Instrument Class Level使用。

Polymorphism(多行,多态):

Polymorphism :字面解释为多种形态,多种组合。
定义了这样一种概念:方法在base Class中定义,在不同的继承类中有不同的执行方式。
设想这样一种状况:如果没有Polymorphism,一个乐队参加演出,指挥要逐个看看队员使用的是什么乐器,告诉队员该怎样使用,怎样配合乐队使用。如果使用Polymorphism,那么指挥只需要说:看着我,开始,就可以了,队员知道自己的乐器该怎样用,只需要根据指挥的节奏演奏就可以了。指挥甚至不需要知道各种乐器该怎样演奏。即使有新的队员带着新的乐器加入,也没意任何关系的。
有一个问题:在Base Class中,Method的Body是什么?如果不知道演奏的是什么乐器,那么肯定无法演奏的。在base class 中,只定义Method Name,不定义Body(Called an Operation),Method的Body在继承的类中自己定义,这样就可以根据乐器定义使用方法了。

Abstract Base Classes:

典型的Class Hierarchy(类层),Operation(name of method) 在基类中定义, 而method body 在继承的类中定义。基类只是把method name 加入到Hierarchy,Base Class Operation不需要执行方式。这样Base Class才会更有生命力,当然,不可以有Base Class的实例,因为缺少执行方式。需要有一种机制确保不可以使用Base Class的实例,那就是在Base Class加入abstract 修饰符。


原文更精彩。
参考:MSDN Training
            Introduction to C# Programming
            for the Microsoft® .NET Platform
            (Prerelease)
            Workbook
            Course Number: 2124A

posted on 2005-05-13 12:37  Pierce  阅读(653)  评论(0)    收藏  举报

导航