UML类图介绍以及自用python封装库

本文介绍了UML类图在描述面向对象设计中的作用,包括类的表示,如类名、属性和方法,以及类之间的关系,如继承、实现和依赖。同时,文章展示了如何使用Graphviz和Python进行类图的绘制,提供了一个示例来解释这些概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

UML类图常用于描述面向对象语言中类的结构以及类与类之间关系。

1. 类的表示

类是具有相似结构、行为和关系的一组对象的描述符。类是面向对象语言中极为重要的结构。下图所示的就是类在UML类图中的表示。

在这里插入图片描述

从上往下被分为三层,依次为:类名、属性以及方法

  1. 如果是接口,则类名采用斜体表示
  2. 属性以及方法前的符号代表可见性:
    • “+”表示public
    • “-”表示private
    • “#”表示protected
    • "~"表示default,也就是包权限
    • “_”下划线表示static
    • 斜体表示抽象

2. 类之间的关系

在面向对象语言中,类与类之间的关系是错综复杂的,接下来主要介绍几种常用的关系。

2.1 继承 (extend)

介绍:继承可以说是面向对象语言中极为重要的一种关系,它使得一个类可以继承另一个类的能力,并且可以修改或者新增一部分能力,一个类只可以继承一个类。

表示:空心三角 + 实线

案例:Student类继承了People类,新增了 studentId 属性 以及study 方法;同时由于可见性导致私有属性 age 以及私有方法 work 方法没有被继承,如下图:

在这里插入图片描述

2.2 实现 (implement)

介绍:实现与继承不同,实现某个接口主要是为了标识某个标记或者实现某个功能,同时一个类可以实现多个接口。

表示:空心三角 + 虚线

案例:Student类通过实现Swimmable接口具有了swim的能力,如下图:

在这里插入图片描述

2.3 依赖

介绍:某个对象的方法需要另一个对象的参与时,两者之间就体现为依赖关系。

表示:箭头 + 虚线

案例:People类的eat方法依赖Food类的参与,因此可以说People依赖Food,如下图:

在这里插入图片描述

3 graphviz的封装

Graphviz 是 AT&T 实验室开发的一个开源软件,它以一种文本语言去描述图(graph),然后自动排布节点和边去生成图片。我使用python对其进行了封装使其更方便复用且可读性好以方便自己画UML类图。

在2.3节中的UML类图便是采用下述代码生成的。

from Graph.GraphBuilder import GraphBuilder
from Graph.Enum import *

builder = GraphBuilder()

ReturnType.Balance = "Balance"

builder.create_node("People") \
    .add_property(Modifier.private, "age", ReturnType.int) \
    .add_property(Modifier.public, "name", ReturnType.String) \
    .add_function(Modifier.public, "speak", ["text: String"], ReturnType.void) \
    .add_function(Modifier.private, "work", [], ReturnType.Balance) \
    .add_function(Modifier.public, "eat", ["food: Food"], ReturnType.void) \
    .end()

builder.create_node("Swimmable", class_style=ClassStyle.interface) \
    .add_function(Modifier.public, "swim", [], ReturnType.void) \
    .end()

builder.create_node("Student") \
    .add_property(Modifier.public, "name", ReturnType.String) \
    .add_property(Modifier.public, "studentId", ReturnType.Long) \
    .add_function(Modifier.public, "speak", ["text: String"], ReturnType.void) \
    .add_function(Modifier.private, "study", [], ReturnType.void) \
    .add_function(Modifier.public, "swim", [], ReturnType.void) \
    .add_function(Modifier.public, "eat", ["food: Food"], ReturnType.void) \
    .end()

builder.create_node("Food").end()

builder.create_edge("Student", "People", Relationship.extend) \
    .create_edge("Student", "Swimmable", Relationship.implement) \
    .create_edge("People", "Food", Relationship.depend)

builder.save("graphy", False, OutputFormat.png)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄才不管那么多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值