类之间的六种静态关系和类图实现(c++)

本文详细介绍了UML类图中的六种静态关系——继承、组合、聚合、关联、依赖和实现,并给出了C++代码示例。通过这些关系,可以清晰地理解类之间的结构和相互作用,提升软件设计能力。

类之间的六种静态关系和类图实现(c++)

类图的表示方法:每个类分为三层,最顶层的为类名,中间层的为属性,最底层的为方法。

  • 属性 的表示方式为:【可见性】【属性名称】:【类型】={缺省值,可选}
  • 方法 的表示方式为:【可见性】【方法名称】(【参数列表】):【类型】
  • 可见性 都是一样的:"-“表示private、”+“表示public、”#"表示protected。
① 继承(generalization)

继承:继承是最能体现面向对象代码复用的类关系。

  • “is a”
  • 例如 duck “is a” bird ,duck和bird就是继承关系。

代码:在C++中的表现为duck是bird子类。

class duck:public bird{
  //duck的扩展属性和方法  
};
  • 用带空心三角形的实线来表示。
    在这里插入图片描述
② 组合(composition)

组合:将一个对象wing(翅膀类)放到另一个对象bird里。(翅膀wing不能脱离鸟bird而存在

  • 组合是一种强所属关系。wing是bird的一部分,具有相同的生命周期,wing在bird之前创建,在bird销毁之前销毁。
  • wing是不能脱离bird独立存在的。

代码:在C++中表现为wing是bird成员属性。

class wing{
    
};

class bird{
private:
    wing w;             //wing是部分类,bird是组合类
};
  • 带实心菱形的实线,菱形指向整体,箭头指向部分
    在这里插入图片描述
③ 聚合(aggregation)

聚合:成员对象(Engine、Wheel)都是整体(Car)的一部分。(Engine、Wheel虽然是Car的一部分,但能脱离Car而存在

代码:在C++中表现为Engine、Wheel是Car成员属性。

class Engine{};
class Wheel{};

class Car{
private:
    Engine m_en;
    Wheel m_wh;
public:
    Car(Engine en, Wheel wh):m_en(en),m_wh(wh){}
};
  • 空心菱形的实线,菱形指向整体,箭头指向部分
    在这里插入图片描述
④ 关联(association)

关联:表示对象A和对象B之间有联系,相关联的对象可以看作是平等的。 (前面组合、聚合都是部分,关联是平等。

  • 常见关联有3种:单向关联、双向关联、自关联。下面以顾客和商品的双向关联举例。
    在这里插入图片描述

代码:在c++中表现为一个类的对象作为另一个类的成员变量。

//商品类
class product{
private:
    customer cu;     //商品属于哪位顾客,作为成员变量
};

//顾客类
class customer{
private:
  	product pro[10]; //顾客买了哪些商品,作为成员变量  
};
  • 用实线连接有关联关系的对象所对应的类
⑤ 依赖(dependency)

依赖:是一种 使用 关系。(例如司机driver使用汽车car

代码:在C++中的表现为 某个类的方法 使用 另一个类的对象 作为参数。

class Car{
public:
    void move();
};

class Driver{
public:
    void drive(Car car)
    {
        car.move();
    }
};
  • 用带箭头的虚线表示,谁是被用的,箭头就指向谁
    在这里插入图片描述
⑥ 实现(realization)

实现:子类实现父类中的“接口”(通过纯虚函数来实现)。(每种动物都有自己独有的移动方法,例如鸟会飞

代码:在C++中表现为子类实现父类中的纯虚函数。

class animal{
public:
    virtual void move();
};

class bird{
public:
    void move(){
        //鸟的移动方式,飞
    }
};
  • 和继承较像,用带空心三角形的虚线来表示。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值