统一建模语言UML之类图(Class Diagram)(表示|关系|举例)

参考:Class Diagram | Unified Modeling Language (UML)
UML是软件设计和面向对象编程中常用的一种标准化建模语言,对于可视化系统结构和功能非常有用,类图有多种不同类型的图:用例图,类图,时序图,活动图和状态图,每类图都有规范的表示,不局限于语言,本文介绍以下内容
(1)UML的图分类
(2)类图的表示
(3)类图的关系
(4)类图的作用

1.UML

Unified Modeling Language(UML)是一种标准化的建模语言,用于在软件系统开发过程中可视化、描述和设计软件的结构与行为。UML 提供了一系列图表,帮助开发人员、系统架构师以及相关人员交流系统的设计和功能。UML 包括许多不同类型的图:

  • 用例图(Use Case Diagram):描述系统的功能需求以及外部参与者的交互
  • 类图(Class Diagram):描述系统的静态结构,展示类、属性、方法以及类之间的关系
  • 时序图(Sequence Diagram):展示对象之间的消息传递顺序,描述时间序列中的动态行为
  • 活动图(Activity Diagram):用于表示系统中的流程和业务逻辑
  • 状态图(State Diagram):描述系统或对象的状态以及状态之间的转换

2.Class Diagram

2.1 类图的表示

在类图中,类用方框表示,每个方框包含三个部分:类名,属性和方法,方框之间的连接线说明这些类的关系。类图提供了系统设计的高级概述,有助于沟通和记录软件的结构。它们是面向对象设计的基本工具,在软件开发生命周期中起着至关重要的作用。

在这里插入图片描述
如图所示的方框为类Car的类图表示

  • Class Name:第一个小框描述了类名,通常放在方框中间加粗,类民首字母大写
  • Attributes:第二个小框介绍了类的属性(字段),包括属性名,属性的可见性和数据类型
  • Methods:第三个小框介绍了类的方法,代表了类的行为函数,包括可见性,返回类型和参数
  • Visibility:可见性表示了属性和方法的可获取水平
    (1)+:public公共,对所有类可见
    (2)-:private私有,仅在类内可见
    (3)#:protected保护,对子类可见
    (4)~:包或默认可见性,对同一包中的类可见
  • Parameter:方法中的参数显示了类之间的信息流动
    (1)in:输入参数是从调用对象(client)到被调用对象(server)的参数
    (2)out:输出参数是从被调用对象(server)到调用对象(client)的参数
    (2)inout:输入输出参数同时作为输入和输出,在client和server之间进行信息流通

2.2 类间的关系

在类图中,类之间的关系有以下几种:
在这里插入图片描述
比较常见的分类是6种:关联,聚合,组合,泛化(继承),实现,依赖,还有一些概念更细分的,比如直接关联,使用依赖等。

关系 描述
关联Association 表示类之间的长期持久关系,一个类持有另一个类的引用,通常通过成员变量表示
聚合Aggregation 整体和部分关系,部分可以独立于整体
组合Composition 整体和部分关系,部分不能独立于整体
泛化Generalization 子类继承父类属性和方法,可扩展和重写
实现Realization 通过抽象类定义接口,客户端和实现解耦
依赖Dependency 表示类之间临时的关系,一个类需要短暂使用另一个类的某个功能,通常通过方法调用实现

2.2.1 关联

此处介绍两种:关联和直接关联,由于概念比较类似放在一个小节

(1)关联Association:是泛指两个类之间的关系,可以是双向或单向,也可以是弱耦合的逻辑联系,用直线表示

在这里插入图片描述

关联举例:选课系统中学生和课程之间是双向关联,学生可以注册多门课程,每门课程可以有多个学生,Student类和 Course类存在关联关系,但是并不代表Student类直接引用 Course类的实例。如下面代码所示,student1和course1的实例创建是独立的,但是student1中的enroll方法会用到course1,course1的add_student也会添加student1

class Student:
    def __init__(self, name):
        self.name = name
        self.courses = []  # 一个学生可以注册多门课程

    def enroll(self, course):  # 学生注册课程,课程添加学生
        self.courses.append(course)
        course.add_student(self)

class Course:
    def __init__(self, title):
        self.title = title
        self.students = []  # 一门课程可以有多个学生

    def add_student(self, student):  
        self.students.append(student)

# 创建实例
student1 = Student("Alice")
course1 = Course("Math")

# 学生注册课程
student1.enroll(course1)

(2)直接关联Direct Association:强调单向依赖关系,一个类直接持有或依赖另一个类的实例,用带单向箭头的直线表示,箭头指向被持有的类。

直接关联是关联的一种更具体的表现,表示类之间有更明确的耦合关系

在这里插入图片描述

直接关联举例:学生和身份证之间存在一种直接关联。每个学生都必须有一个身份证,学生对象直接持有身份证对象。Student类和IDCard类之间有一个单向的直接关联,这是一种更强的依赖关系,表示Student 类的对象必须持有一个 IDCard 类的对象才能正常工作。如下面代码所示,student的实例创建必须用到id_card实例

class IDCard:
    def __init__(self, card_number):
        self.card_number = card_number

class Student:
    def __init__(self, name, id_card):
        self
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值