首页 百科知识 对象间关系

对象间关系

时间:2022-10-16 百科知识 版权反馈
【摘要】:当对象被不同的关系连接时,OOP的强大功能更明显。其中可能存在很多种关系,下文将分析两种最基本的关系:HAS-A和IS-A。统一建模语言是一门图形化语言,它用于描述系统,特别是描述系统中对象间的关系。在UML语言中,通过在对象之间连接一条带菱形箭头的线来表示HAS-A关系,如图3-2所示。在SystemVerilog中,可通过在一个类中例化另外一个类,或者提供一个句柄指向另外一个类中的对象,实现HAS-A关系。通过继承方式产生的对象被表示为“IS-A”。

3.3 对象间关系

当对象被不同的关系连接时,OOP的强大功能更明显。其中可能存在很多种关系,下文将分析两种最基本的关系:HAS-A和IS-A。

3.3.1 HAS-A

HAS-A指“一个对象被另外一个对象所包含或所拥有”这样一种概念。HAS-A关系通过成员表现出来。如在前文的堆栈类中,堆栈有一个指针(stkptr)和一个堆栈数组。虽然这里的指针和数组是基本的数据类型,不是类,但使用与HAS-A相同的概念。在SystemVerilog和SystemC语言中,可使用引用或者指针构造类间HAS-A关系。HAS-A关系如图3-1所示。

图3-1为HAS-A关系构造的基本内存模型。其中对象A包含对象B的一个引用或者指针。

img58

图3-1 HAS-A关系

统一建模语言(UML)是一门图形化语言,它用于描述系统,特别是描述系统中对象间的关系。在UML语言中,通过在对象之间连接一条带菱形箭头的线来表示HAS-A关系,如图3-2所示。

img59

图3-2 HAS-A关系的UML描述

对象A拥有对象B的实例。在SystemVerilog中,可通过在一个类中例化另外一个类,或者提供一个句柄指向另外一个类中的对象,实现HAS-A关系。

img60

类A中包含了类B的一个引用。类A的构造函数(new()函数)调用类B的new()函数,来创建类B实例。成员b就是刚创建的B的实例的一个引用。

3.3.2 IS-A

IS-A关系更多的时候指一种继承。新类从先前存在的对象中派生,并继承它的特性。通过继承方式产生的对象被表示为“IS-A”。派生对象称作子类,或者称作父类的一个特定版本。

图3-3用哺乳动物的部分分类来说明继承的概念。

img61

图3-3 哺乳动物分类

鲸科、食肉科和灵长科动物都属于哺乳动物,都具有哺乳动物共同的特点。但鲸科(鲸,海豚)、食肉科(狗,熊,浣熊)和灵长科(猴子,人类)动物又都有自己清晰的特征。若用面向对象(OOP)术语表示,就是熊IS-A于食肉动物,而食肉动物IS-A哺乳动物。对象熊由食肉动物属性加上哺乳动物属性以及它自己独有的区别于其他食肉动物的属性组成。

图3-4所示中在UML语言中,通过在对象之间连接一条带三角箭头且箭头指向基类的线来表示IS-A关系。通常情况,基类在派生类上方,箭头向上指向基类,构成继承树(或者有向无环图,在支持多重继承的语言如C++中实现)。

img62

图3-4 IS-A关系的UML描述

当计算机程序利用继承关系构造新对象,新的派生对象会包含父对象的所有属性和自己的一些额外属性。图3-5用基本内存模型阐明IS-A关系。其中,类B由类A派生而来。

img63

图3-5 IS-A关系的例子

下面是IS-A关系用SystemVerilog语言描述的代码。

img64

类B由类A派生而来,因此它拥有A的所有属性。B的任何实例不仅包含成员字符s,还包含成员浮点数f和整数i。

以上是对OOP继承概念的简单介绍。如想更加深入地了解继承和其他的面向对象概念和技术,可参考附录的相关书目。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈