UML静态图-类图

2024-06-01 10:04
文章标签 静态 uml 类图

本文主要是介绍UML静态图-类图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概述

静态图包含类图、对象图和包图的主要目的是在系统详细设计阶段,帮助系统设计人员以一种可视化的方式来理解系统的内部结构和代码结构,包括类的细节、类的属性和操作、类的依赖关系和调用关系、类的包和包的依赖关系。

一、类图的表示法

类图(Class Diagram)是描述类、接口、协作及它们之间关系的图,用来显示系统中各个类的静态结构。类图是定义其他图的基础,在类图基础上,可以使用序列图、协作图、组件图和部署图等进一步描述系统其他方面的特性。
类图包括6个元素:类(Class)、接口(Interface)、泛化关系(Generalization)、关联关系(Association)、依赖关系(Dependency)及实现关系(Realization)。

1.类图的表示法
类的名称是每个类中所必有的构成元素,用来区分其他的类。类名是一个字符串,称为简单名字。路径名字是在类名前加包含类的包名为前缀。例如 User、java::uti::List 都是合法的类名。
类的 UML表示为一个长方形垂直地分为3个区。顶部区域显示类的名字,中间区域列出类的属性变量,底部区域列出类的操作函数。当在一个类图上画一个类元素时,必须要有顶端的区域,下面的两个区域是可选择的(当图描述仅仅用于显示分类期间关系的高层细节时,下面的两个区域是不必要的)。
在这里插入图片描述
对应代码为:

public class User{
}

2.类图属性的表示法

类的属性(中部区域)在分隔线上列出每一个类的属性,类可以有任意多个属性,也可以没有属性。按照 UML的约定,单字的属性名需要小写。如果属性名包含多个单词,这些单词要合并,且除了第一个单词外其余单词的首字母要大写。在类图中属性只要写上名字就可以了,如图3-2所示。

对于属性,还需要了解以下3个方面。
1)属性类型
也可以在属性名后通过冒号来执行属性的类型,如图3-3所示
在这里插入图片描述
对应的类代码为:

public class User {private String username;private String password:
}

2)属性默认值
也可以在属性名后跟上类型甚至默认值,如图3-4所示:
在这里插入图片描述
对应的类代码为:

public class User {private String username = "admin';private String password = "123";
}

3)属性的可见性
类中属性的可见性主要包括:

  • 公有,使用关键字 public。
  • 受保护,使用关键字 protected.
  • 私有,使用关键字 private。
  • 默认,不使用关键字。

4种可见性如图 3-5 所示。

在这里插入图片描述
3.类图操作的表示法
类的任意一个实例对象都可以调用操作,并可能影响该对象行为的实现。类操作记录在类图长方形的第3个(最低的)区域中,它也是可选择的。与属性一样,类的操作以列表格式显示,如3-6 所示。
在这里插入图片描述
操作的命名与属性类似,第一个单词的首字母小写,后续每一个单词的首字母要大写。操作也拥有不同的可见性,默认的可见性为public的,与属性相似,它也可以设置如下4种可见性:

  • 公有,使用关键字public。
  • 受保护,使用关键字 protected。
  • 私有,使用关键字 private。
  • 默认,不使用关键字。

4种可见性显示的图标分别为如图3-7所示的 getUsername()、setUsername()、getPassword()和setPassword()前的图标。
在这里插入图片描述

二、接口的表示法

接口与类相似,它仅仅包含操作但不包含属性,且它没有对外界可见的关联。它直接对应于 Java中的一个接口类型。接口可用如图3-8所示的两种图来表示,两条竖线的上方为接口名,下方为接口的操作列表。
在这里插入图片描述
以上对应的 Java 类代码如下:

public interface MyInterface {public void insertUser();
}

接口除了没有属性外,其他的定义都与类相同,这里就不再重复介绍。

三、类图之间的 4 种关系

类之间存在4种关系:

  • 泛化关系(Generalization)表示类的继承。
  • 关联关系(Association)表示类的变量,还包括聚合和组合
  • 依赖关系(Dependency)表示局部变量。
  • 实现关系(Realization)–表示接口的实现。

1. 泛化关系(Generalization)–表示类的继承
泛化关系表示类与类之间的继承关系,接口与接口之间的继承关系。泛化关系是从子类指向父类的,或从实现接口的类指向被实现的接口,与继承的方向相反,如图3-10所示。
在这里插入图片描述
泛化关系在 Java 语言中可以直接使用关键字 extends 表示,描述类与类、接口与接口之间的泛化。以上的泛化可以表示为如下的代码:

public class ClassA extends ParemtClass {}
public class ClassB extends ParemtClass {}

2.关联关系(Association)-表示类的变量
关联关系是类与类之间的连接,它使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。

  • 双向的关联可以有两个箭头或者没有箭头,通常不鼓励使用双向的关联。
  • 单向的关联有一个箭头,表示关联的方向,单向的关联使用更为普遍。

每一个关联都有一个名字,如图3-11所示。
在这里插入图片描述
在Java 代码中,关联关系是表示变量的引用。例如上面的例子中,类 User 拥有一个 Book 类型的变量 book,这个变量实现了这两个类之间的关联关系。以上的关联可以用下面的代码表示:

public class User {...private Book book;...
}

在关联的两端可以使用一个数字表明该端可以有几个实例,数字可以有以下4种用法:

  • 0…1–表示零个或一个实例。
  • 0…或者–表示对实例的数目没有限制。
  • 1–表示只有一个实例。
  • ] *_-表示至少有一个实例。

如图 3-12所示,它表示每一个User 实例可以拥有任意数量的 Book 实例。
在这里插入图片描述
一个关联关系往往可以进一步确定为聚合关系或者合成关系。

1)聚合关系(Aggregation)
聚合关系表示整体和部分关系的关联,聚合关系描述了“hasa”的关系。聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。聚合也转换成 Java中的一个实例作用域变量。聚合是一种单向关系,聚合与关联的区别在于聚合的两个类之间的关系在概念层次上不是一个级别的,一般来说聚合中的类关系总是一个类比另一个类要高级一些,而关联基本上是平级的。例如电脑是 CPU、主板、机箱的聚合。

2)组合关系(Compostion)
组合关系是聚合关系中的一种特殊情况,是更强形式的聚合,又被称为强聚合。在组合中,成员对象的生命周期取决于聚合的生命周期。组合也是非共享的,所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。例如,人是大脑、四肢、躯干的组合。

3.依赖关系(Dependency)-表示局部变量
依赖关系也是类与类之间的连接,它是单向的关系。依赖关系表示一个类依赖于另一个类。例如 User 需要办理图书证 BookCard,则它就依赖于类 BookCard,其表示关系如图 3-13 所示。
在这里插入图片描述
以上的关联可以用下面的代码表示:

public class User {...public void handleBookCard(BookCard bookcard) {...}...
}

在 Java 中依赖关系体现为局部变量、方法的参数,以及对静态方法的调用,也就是说,如果类A的某一个局部变量类型是类 B,那么类A就依赖于类 B。如果类A的一个方法包含有B类型的参数,或A调用了B中的一个静态方法,那么A都应该依赖于B。
如果B出现在A的实例变量中,那么依赖关系就会扩大为关联关系,因此,泛化关系>关联关系>依赖关系。

4.实现关系(Realization)–表示接口的实现
实现关系表示类对接口的实现关系。实现关系是从子类指向接口类的,实现的方向相反,如3-14 所示。
在这里插入图片描述
实现关系在 Java 语言中可以直接使用关键字 implements 表示,描述类与接口之间的实现。以上的实现可以表示为如下的代码:

public class ClassC implements Paremtlnterface {}
public class ClassD implements ParemtInterface {}

这篇关于UML静态图-类图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1020698

相关文章

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp

一步一步将PlantUML类图导出为自定义格式的XMI文件

一步一步将PlantUML类图导出为自定义格式的XMI文件 说明: 首次发表日期:2024-09-08PlantUML官网: https://plantuml.com/zh/PlantUML命令行文档: https://plantuml.com/zh/command-line#6a26f548831e6a8cPlantUML XMI文档: https://plantuml.com/zh/xmi

UML- 统一建模语言(Unified Modeling Language)创建项目的序列图及类图

陈科肇 ============= 1.主要模型 在UML系统开发中有三个主要的模型: 功能模型:从用户的角度展示系统的功能,包括用例图。 对象模型:采用对象、属性、操作、关联等概念展示系统的结构和基础,包括类图、对象图、包图。 动态模型:展现系统的内部行为。 包括序列图、活动图、状态图。 因为要创建个人空间项目并不是一个很大的项目,我这里只须关注两种图的创建就可以了,而在开始创建UML图

C++/《C++为什么要有静态成员函数》

摘要        本文说明了什么是静态成员变量,什么是静态成员函数的概念,讨论了访问私有静态成员变量的三个方法。得出用静态成员函数访问静态私有成员变量是最佳方法即回答了“C++为什么要有静态成员函数“的问题。 类的静态成员 我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。静态成员在类的所有对象中是

c++的静态变化!

静态成员   对于非静态成员,一个类的每个对象都自己存有一个副本,每个对象根据自己拥有的非静态的数据成员来区别于其他对象。而静态成员则解决了同一个类的多个对象之间数据和函数的共享问题。   静态数据成员   静态数据成员的作用是:实现同一类的不同对象之间的数据共享。   #include<IOSTREAM>   using namespace std;   class Po

本地如何快速启动静态服务器

本地快速启动静态服务器 有许多第三方库可以帮助你快速启动一个静态服务器,甚至无需编写代码。通过命令行运行这些库后,它们会自动启动一个服务器并打开指定端口,展示当前目录下的文件内容: 电脑得提前安装NodeJS 1、http-server http-server 是一个轻量级的命令行工具,允许你快速启动一个静态文件服务器。 安装 npm install -g http-server

第三章 UML类图简介(设计模式笔记)

第三章 UML类图简介 3.1类 3.2接口 名字层必须有<> 3.3 泛化(继承)关系 箭头终点端指向父类(空心三角形) 3.4 关联(组合1)关系 B类是A类的成员变量 ,称A关联B。 箭头终点端指向B 3.5 依赖(组合2)关系 B类是A类的某个方法的参数 ,称A依赖B。 箭头终点端指向B(虚线) 3.6 实现关系 箭头终点端指向接口(虚线,空心

linux基础IO——动静态库——进程编址、进程执行、动态库加载

前言:本节内容为基础IO部分的最后一节, 主要是为了讲一下动静态库里面的动态库如何加载到内存, 动态库的地址等等。 但是,这些内容牵扯到了程序的编址, 程序的加载, 进程的执行等等知识点, 所以,我们会从程序的编址讲起, 一直到进程的执行, 以及动态库加载结束。         ps:本节内容涉及到了进程地址空间, 磁盘的内容, 建议友友们了解相关知识后再来观看。 目录

(六十四)第 10 章 内部排序(静态链表的插入排序)

示例代码 staticLinkList.h // 静态链表的插入排序实现头文件#ifndef STATIC_LINK_LIST_H#define STATIC_LINK_LIST_H#include "errorRecord.h"#define SIZE 100#define NUM 8typedef int InfoType;typedef int KeyType;ty

ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名

前言 当我们需要把本地开发的应用展示给外部用户时,常常会因为无法直接访问而陷入困境。 就为了展示一下,买服务、域名,搭环境,费钱又费事。 那有没有办法,让客户直接访问自己本机开发的应用呢? 这种需求场景这么多,当然有现成的技术 —— 内网穿透。 什么是内网穿透? 内网穿透是一种网络技术,它允许外部互联网用户访问部署在本地网络(内网)中的服务或设备。 通常,家庭或企业网络都位于内网,连