UML类间的关系

本文详细介绍了UML中的五种基本关系:泛化、依赖、关联、聚集与组合及实现关系,通过实例和代码展示了每种关系的特点和应用场景。

1          泛化关系:

1.1       定义:

泛化关系是一般元素和具体元素之间的一种分类关系。具体元素与一般元素完全一致,但包含一些额外的信息(is a)。在允许使用一般元素的场合,可以使用具体元素的实例。

1.2         描述

在实际生活中,有许多东西都具有共同的特征。对象也可以具有共同的特征,您可以使用它们所属类之间的泛化关系来阐明这些共同特征。通过将共同特征抽取到它们所属的类中,可以在将来更容易地变更和维护系统。泛化是的多态成为可能。

1.3         举例

交通工具为父类,汽车和自行车为子类。

UML类间的关系

 1 泛化

代码:Transport.h

#ifndef TRANSPORT_H_HEADER_INCLUDED_B16409BB

#define TRANSPORT_H_HEADER_INCLUDED_B16409BB

 

//##ModelId=4E9B908F0196

class Transport

{

  public:

    //##ModelId=4E9B90D201A5

    virtual bool run() = 0;

};

 

#endif

==================================================

代码:Bicycle.h

#ifndef BICYCLE_H_HEADER_INCLUDED_B1647D9B

#define BICYCLE_H_HEADER_INCLUDED_B1647D9B

#include "Transport.h"

 

//##ModelId=4E9B9091037A

class Bicycle : public Transport

{

  public:

    //##ModelId=4E9B90F90138

    bool run();

};

 

#endif

================================================

代码:Car.h

#ifndef CAR_H_HEADER_INCLUDED_B16447DF

#define CAR_H_HEADER_INCLUDED_B16447DF

#include "Transport.h"

 

//##ModelId=4E9B909302AF

class Car : public Transport

{

  public:

    //##ModelId=4E9B91210399

    bool run();

};

#endif

===============================================

===============================================

2          依赖关系:

2.1    定义:

如果两个元素其中一个的定义发生改变则会引起另一个元素发生变化则称这两个元素之间存在依赖关系(use a)

2.2    描述:

依赖可能存在于下列几种情况中:

1)        一个类要发送消息给另一个类
2)        一个类将另一个类作为其数据的一部分
3)        一个类的操作中将另一个类作为其参数

2.3      举例:

系统类依赖于窗口类,当窗口类发生变化时,系统类也会放生变化。

UML类间的关系

 2 依赖

代码:Form.h

#ifndef SYSTEM_H_HEADER_INCLUDED_B1644885

#define SYSTEM_H_HEADER_INCLUDED_B1644885

#include "Form.h"

 

//##ModelId=4E9BC232002E

class System

{

  public:

    //##ModelId=4E9BC24202CE

    bool ShowWindow(Form form);

 

};

============================================

代码:System.h

#ifndef TRANSPORT_H_HEADER_INCLUDED_B16409BB

#define TRANSPORT_H_HEADER_INCLUDED_B16409BB

 

//##ModelId=4E9B908F0196

class Transport

{

  public:

    //##ModelId=4E9B90D201A5

    virtual bool run() = 0;

 

};

==============================================

===============================================

3          关联关系

3.1    普通关联关系:

3.1.1      定义:

类与类之间的联接,它使一个类知道另一个类的属性和方法(has a)

3.1.2      描述:

关联是对象间长期的一种关系,在这个长期的关系中,被调用类表现为调用类的引用、或者调用类的属性,在这些情况下,我们说调用类和被调用类之间就属于关联关系。关联可以是双向的,也可以是单向的。

3.1.3   举例:

UML类间的关系

 3 普通关联

 

代码:Team.h

#ifndef TEAM_H_HEADER_INCLUDED_B16449D0

#define TEAM_H_HEADER_INCLUDED_B16449D0

class Player;

 

//##ModelId=4E9BD0170157

class Team

{

  public:

    //##ModelId=4E9BD123029F

    Player *thePlayer;

  private:

    //##ModelId=4E9BD036000F

    int name;

    //##ModelId=4E9BD08B03A9

    int address;

};

#endif

===============================================

代码:Player.h

#ifndef PLAYER_H_HEADER_INCLUDED_B164167F

#define PLAYER_H_HEADER_INCLUDED_B164167F

class Team;

//##ModelId=4E9BD02402EE

class Player

{

  public:

    //##ModelId=4E9BD0F40196

    bool PlayBall();

    //##ModelId=4E9BD12302FE

    Team *theTeam;

  private:

    //##ModelId=4E9BD0BA02EE

    int name;

    //##ModelId=4E9BD0C4036B

    int number;

    //##ModelId=4E9BD0DF0222

    int height;

};

#endif

===============================================

===============================================

 

3.2    聚集关系

3.2.1      定义:

关联关系的一种,是强的关联关系(owns a)

3.2.2      描述:

聚集关系是整体和个体的关系。普通关联关系的两个类处于同一层次上,而聚集关系的两个类处于不同的层次,一个是整体,一个是部分。同时,是一种弱的 关系。体现的是A对象可以包含B对象,但B对象不是A对象的组成部分。具体表现为,如果AB聚合成,则A包含有B的全局对象,但是B对象可以不在A创建的时刻创建。

3.2.3      举例:

UML类间的关系

 4 聚集关系

 

代码:Class.h

#ifndef CLASS_H_HEADER_INCLUDED_B1645976

#define CLASS_H_HEADER_INCLUDED_B1645976

#include "Student.h"

//##ModelId=4E9BE69303D8

class Class

{

  public:

    //##ModelId=4E9BEDC500FA

    Student theStu;

};

#endif

===============================================

代码:Student.h

#ifndef STUDENT_H_HEADER_INCLUDED_B1645C8B

#define STUDENT_H_HEADER_INCLUDED_B1645C8B

 

//##ModelId=4E9BE69701B5

class Student

{

};

#endif

================================================

================================================


3.3      组合关系:

3.3.1      定义:

关联关系的一种,是最强的关联关系(owns a)

3.3.2      描述:

组合是关系当中的最强版本,它直接要求包含对象对被包含对象的拥有以及包含对象与被包含对象生命期的关系。被包含的对象还可以再被别的对象关联,所以被包含对象是可以共享的,然而绝不存在两个包含对象对同一个被包含对象的共享。

3.3.3      举例:

UML类间的关系

 5 组合关系

 

代码:Class.h

#ifndef CLASS_H_HEADER_INCLUDED_B1645976

#define CLASS_H_HEADER_INCLUDED_B1645976

#include "Student.h"

 

//##ModelId=4E9BE69303D8

class Class

{

  public:

    //##ModelId=4E9BEDC500FA

    Student theStu;

};

#endif

================================================

代码:Student.h

#ifndef STUDENT_H_HEADER_INCLUDED_B1645C8B

#define STUDENT_H_HEADER_INCLUDED_B1645C8B

 

//##ModelId=4E9BE69701B5

class Student

{

};

#endif

================================================

================================================


4          实现关系

4.1      定义:

是将一种模型元素与另一中国模型元素链接起来,从而说明和其实现之间的关系。

4.2      描述:

泛化和实现关系都可以将一般描述与具体描述联系起来。泛化将同一语义层上的元素连接起来,并且通常在同一模型内。实现关系则将不同语义层内的元素连接起来,通常建立在不同的模型内。

4.3      举例:

UML类间的关系

 6 实现关系

代码:Interface.h

#if !defined(_INTERFACE_H)

#define _INTERFACE_H

 

 

class Interface {

public:

       virtual bool run() = 0;

};

 

#endif  //_INTERFACE_H

==========================================

代码:Car.h

#if !defined(_CAR_H)

#define _CAR_H

 

#include "Interface.h"

 

class Car : public Interface {

public:

       bool run();

};

 

#endif  //_CAR_H

=========================================

=========================================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值