uml类图

uml

如何使用uml描述一个类

类的UML画法

类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的

总称。在系统中,每个类都具有一定的职责,职责指的是类要完成什么样子的功能,要承担什么样子的义

务。一个类可以有多种职责,但是设计得好的类一般只有一种职责。

假如我现在定义了这么一个类:

那么此类对应的UML为:

cpp 复制代码
class Persion
{
public:
	string getName()
	{
		return name;
	}
	void setName(string name)
	{
		this->name = name;
	}
protected:
	void playBasketball()
	{
		pass();
	}
private:
	void pass()
	{
	}
private:
	string name = "Jack";
};

看到该图分为三层:最顶层的为类名,中间层的为属性,最底层的为方法。

属性的表示方式为:【可见性】【属性名称】:【类型】={缺省值,可选}

方法的表示方式为:【可见性】【方法名称】(【参数列表】):【类型】

可见性都是一样的,"-"表示private、"+"表示public、"#"表示protected

uml描述继承关系

普通继承关系

cpp 复制代码
class Student : public Persion
{
public:
	void study()
	{
	}
private:
	string studentNo;
};
class Teacher : public Persion
{
public:
	void teach()
	{
	}
private:
	string teacherNo;
};

抽象继承关系

cpp 复制代码
// 抽象类(含有纯虚函数的类)
class Link
{
public:
	virtual void insert() = 0;
	virtual void remove() = 0;
	int count()
	{
		return 0;
	}
};
// 子类
class OneWayLink : public Link
{
public:
	void insert()
	{
	}
	void remove()
	{
	}
};

如果是抽象类,类名是斜体的,如果是纯虚函数,由于没有被实现那么函数名也是斜体的。

uml描述关联关系

关联关系概述

关联关系是类与类之间最常见的一种关系,它是一种结构化的关系,表示一类对象与另一类对象之间有联系,如汽车和轮胎、师傅和徒弟、班级和学生等。在UML类图中,用实线连接有关联关系的对象所对应的类,在C++中通常将一个类的对象作为另一个类的成员变量。关联关系分单向关联、双向关联、自关联,逐一看一下。

单向关联关系

cpp 复制代码
// 地址类
class Address
{
};
// 顾客类
class Customer
{
private:
	Address address; // 作为成员变量
};

双向关联关系

cpp 复制代码
// 商品类
class Product
{
private:
	Customer customer; // 该商品属于哪一位顾客, 作为成员变量
};
// 顾客类
class Customer
{
private:
	Product product[64]; // 给顾客购买了哪些商品, 作为成员变量
};

自关联关系

cpp 复制代码
// 链表节点
class Node
{
private:
Node* nextNode; // 指向后继节点的指针, 作为成员变量
};

聚合关系

聚合(Aggregation)关系表示整体与部分的关系。在聚合关系中,成员对象是整体的一部分,但是成员对象可以脱离整体对象独立存在。在UML中,聚合关系用带空心菱形的直线表示,如汽车(Car)与引擎(Engine)、轮胎(Wheel)、车灯(Light),C++ 表示为:

cpp 复制代码
class Engine
{
};
class Wheel
{
};
class Light
{
};
class Car
{
public:
Car(Engine engine, Light light, Wheel wheel)
{
	this->engine = engine;
	this->light = light;
	this->wheel = wheel;
}
void drive()
{
}
private:
	Engine engine;
	Light light;
	Wheel wheel;
};

组合关系

组合(Composition)关系也表示的是一种整体和部分的关系,但是在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也不存在,整体对象和成员对象之间具有同生共死的关系

在UML中组合关系用带实心菱形的直线表示。比如人的头(Head)和嘴巴(Mouth)、鼻子(Nose),嘴巴和鼻子是头的组成部分之一,一旦头没了,嘴巴也没了,因此头和嘴巴、鼻子是组合关系,C++ 表示为:

cpp 复制代码
class Mouth
{
};
class Nose
{
};
class Head
{
public:
	Head()
	{
		mouth = new Mouth();
		nose = new Nose();
	}
	void shake()
	{
	}
private:
	Mouth *mouth;
	Nose *nose;
}

依赖关系

依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系,大多数情况下依赖关系体现在某个类的方法使用另一个类的对象作为参数。在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。比如,驾驶员(Driver)开车,Driver类的drive()方法将车(Car)的对象作为一个参数传递,以便在drive()

方法中能够调用car的move()方法,且驾驶员的drive()方法依赖车的move()方法,因此也可以说Driver依赖Car,C++代码为:

cpp 复制代码
class Car
{
public:
void move();
};
class Driver
{
public:
void drive(Car car)
{
car.move();
}
};

传参或者在成员函数创造对象
依赖的类作为函数的返回值

相关推荐
静心观复3 小时前
drawio画java的uml的类图时,class和interface的区别是什么
java·uml·draw.io
weixin_4569042716 天前
数据库设计与UML图
数据库·uml
希赛网19 天前
软考软件设计师常考知识点:(一)计算机组成与体系结构
软考·uml·编程语言·计算机基础·软件设计师
rolt20 天前
[pdf、epub]320道《软件方法》强化自测题业务建模需求分析共279页(202509更新)
产品经理·ddd·架构师·uml·领域驱动设计
攻心的子乐23 天前
软考 UML类图 泛化继承 实现 聚合 组合(最强) 依赖(最弱
uml
攻心的子乐24 天前
软考 UML 用例图 extend扩展关系 include包含关系 泛化继承inherit关系
uml
「QT(C++)开发工程师」1 个月前
UML | 最好的类图设计工具结合CSDN天启呈现-领路架构师
数据库·uml·类视图
小鱼儿LY1 个月前
软考系统架构设计师之UML统一建模语言
系统架构·软考·uml·架构设计师
workflower2 个月前
GitHub宕机自救指南
测试用例·需求分析·uml·敏捷流程·结对编程
青草地溪水旁2 个月前
Astah UML 中,状态机(State Machine)的建模最合适使用「UML 状态图(State Diagram)」
uml·状态机