什么是统一建模语言(UML)UML与UML类图的基本概念

什么是统一建模语言UML(Unified Modeling Language)

UML

UML(统一建模语言)是一种通用的建模语言,用于描述软件系统的结构、行为和交互。它提供了一组符号和规则,用于创建可视化的图形模型,帮助开发人员、设计师和利益相关者之间进行沟通和理解。

起源和历史

  • UML起源于20世纪90年代初,由James Rumbaugh、Grady Booch和Ivar Jacobson等知名软件工程师合作开发。
  • 这三位工程师各自拥有自己的建模方法(Rumbaugh的OOA、Booch的OOD和Jacobson的OOSE),为了统一这些方法并提供一个通用的建模语言,他们联合起来并发展出了UML。

为何使用UML

  • 提供统一标准:UML提供了一个统一的标准化建模语言,使得不同团队和人员之间可以使用相同的符号和表示法进行沟通和交流。
  • 可视化表达:UML使用图形符号和图表来表示系统的结构和行为,使得复杂的概念和关系可以以直观的方式展示出来,提高了可理解性。
  • 易于学习和使用:UML的符号和规则相对简单,并且有大量的教程和工具支持,使得学习和使用UML相对容易。
  • 支持系统设计和分析:UML提供了丰富的建模工具和技术,支持系统设计、分析和实现的各个阶段,帮助开发人员更好地理解和规划系统。
  • 提高团队协作:通过使用UML,团队成员可以共享和交流对系统的理解和设计,促进团队之间的协作和沟通,减少误解和错误。

UML的优点

  • 统一标准化的建模语言
  • 可视化表达复杂概念和关系
  • 易于学习和使用
  • 支持系统设计和分析的各个阶段
  • 提高团队协作和沟通

总而言之,UML作为一种通用的建模语言,为软件开发提供了标准化的符号和表示法,帮助开发人员更好地理解、设计和实现软件系统,提高了软件开发过程的效率和质量。

Purpose of Class Diagrams

UML类图主要有以下几个目的:

  1. 显示系统中分类器的静态结构。
  2. 为UML规定的其他结构图提供基本符号和表示法。
  3. 对开发人员和团队成员有帮助。
  4. 业务分析师可以使用类图从业务角度对系统进行建模。

UML类图的组成部分

UML类图由以下两部分组成:

  1. 一组类(Classes)
  2. 类之间的关系(Relationships)

What is a Class

Class是系统中一组具有类似角色的对象的描述,它包括:

结构特征(Attributes)

结构特征定义了类的对象所"知道"的内容,包括:

  • 代表类对象的状态
  • 描述类的结构或静态特征

行为特征(Operations)

行为特征定义了类的对象所"能做"的事情,包括:

  • 定义了对象之间可能的交互方式
  • 描述类的行为或动态特征

Class Notation

类的表示包括三个部分:

类名(Class Name)

类名出现在第一个分区中。

类属性(Class Attributes)

属性显示在第二个分区中。
属性类型在冒号后面显示。
属性对应于代码中的成员变量(数据成员)。

类操作(方法)(Class Operations (Methods))

操作显示在第三个分区中,它们是类提供的服务。
方法的返回类型在方法签名的末尾的冒号后面显示。
方法参数的返回类型在参数名后面的冒号后面显示。
操作对应于代码中的类方法。

Class Relationships

类之间的关系

一个类可以与其他类之间存在一个或多个关系。关系可以是以下几种类型之一:(请参考右侧的图形表示关系)。

Relationship Type

关系的种类

Graphical Representation

图形解释

Inheritance (or Generalization):

继承(或泛化):

  • 表示“是一个”关系。
  • 抽象类名称以斜体显示。
  • SubClass1和SubClass2是Super Class的特化。
  • 从子类指向父类的实线箭头。
    继承

Simple Association:

简单关联:

  • 两个对等类之间的结构链接。
  • Class1和Class2之间存在关联。
  • 连接两个类的实线。
    简单关联

Aggregation:

聚合:

  • 一种特殊的关联类型。表示“部分-整体”关系。
  • Class2是Class1的一部分。
  • Class1可以关联多个Class2的实例(用*表示)。
  • Class1和Class2的生命周期是独立的。
  • 带有未填充菱形的实线,连接到复合类的关联端点。
    聚合

Composition:

组合:

  • 一种特殊的聚合关系,当整体被销毁时,部分也会被销毁。
  • Class2的生命周期与Class1相连。
  • Class2不能独立存在。
  • 带有填充菱形的实线,连接到复合类的关联端点。
    组合

Dependency:

依赖:
在这里插入图片描述

  • 如果对一个类的定义的更改可能导致对另一个类的更改(但反过来不成立),则存在依赖关系。
  • Class1依赖于Class2。
  • 带有虚线和开放箭头的线条。
    依赖

Navigability

导航性

箭头表示在一个实例参与关系时,是否可以确定与之相关的另一个类的实例。

上面的图示表明:

  • 给定一个电子表格,我们可以找到它所包含的所有单元格,但是
  • 我们无法从一个单元格中确定它所属的电子表格,即无法从单元格导航到电子表格,所以单元格的导航性是不可行的。
  • 给定一个单元格,我们可以获取相关的表达式和值,但是
    • 给定一个值(或表达式),我们无法找到这些属性所属的单元格,即无法从值或表达式导航到单元格,所以值或表达式的导航性是不可行的。

简而言之,导航性指的是在关系中是否可以通过一个实例来导航到与之相关的其他实例。根据箭头的存在与否,我们可以确定导航性的可行性。

Visibility of Class attributes and Operations

类属性和操作的可见性

在面向对象设计中,有关属性和操作的可见性有一种标记表示法。UML识别了四种可见性类型:public(公共)、protected(受保护)、private(私有)和package(包内)。

在类中的属性和操作名称之前,使用 +、-、# 和 ~ 符号表示属性和操作的可见性。

  • + 表示公共属性或操作
  • - 表示私有属性或操作
  • # 表示受保护属性或操作
  • ~ 表示包内属性或操作

参考:https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-class-diagram/

仅供学习使用,勿用做商业和其他违法用途

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/39413.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ios 启动页storyboard 使用记录

本文简单记录ios启动页storyboard 如何使用和注意事项。 xcode窗口简介 以xcode14为例,新建项目如下图,左边文件栏中的LaunchScreen.storyboard 为默认启动页布局。窗口中间部分是storyboard中的组件列表,右侧为预览,可以看到渲…

Android 自定义CheckBox样式,设置切换背景图,类似于RadioButton

文章目录 概要自定义CheckBoX资源文件如下使用方法实现效果 概要 目前要实现类似于Radiobutton选择按钮,如果只有一个RadioButton,就不能和radio Group连用,导致选择没办法取消,如果要实现只能代码中进行操作,过于繁琐…

ASEMI快恢复二极管MUR20100CTR在电子工程中的应用

编辑-Z 随着电子技术的日益发展,各种电子元件的使用场景与需求也在逐步扩大。今天,我们将聚焦于一款广泛应用于各类电路的二极管——MUR20100CTR,来详细解读其性能特征及应用。 一、MUR20100CTR二极管的主要特性 MUR20100CTR是一款极高性能的…

HTML语法

文章目录 前言HTML 文件基本结构常见标签标签种类特殊符号图片链接a链接 双标签链接 列表表格 &#xff1a;表单多行文本域: 前言 HTML是有标签组成的 <body>hello</body>大部分标签成对出现. 为开始标签, 为结束标签. 少数标签只有开始标签, 称为 “单标签”. 开…

Ubuntu 安装 Docker

本文目录 1. 卸载旧版本 Docker2. 更新及安装工具软件2.1 更新软件包列表2.2 安装几个工具软件2.3 增加一个 docker 的官方 GPG key2.4 下载仓库文件 3. 安装 Docker3.1 再次更新系统3.2 安装 docker-ce 软件 4. 查看是否启动 Docker5. 验证是否安装成功 1. 卸载旧版本 Docker …

JS逆向系列之猿人学爬虫第18题-jsvmp - 洞察先机

文章目录 目标网址加密参数分析Python 实现往期逆向文章推荐目标网址 https://match.yuanrenxue.cn/match/18题目标着难度是困难级别,主要还是vmp保护的JS代码调试困难,理清逻辑就会变得简单了 加密参数分析 请求第一页时没有加密参数,从第二页开始,url会携带t和v两个参数…

文献阅读:MathPrompter: Mathematical Reasoning using Large Language Models

文献阅读&#xff1a;MathPrompter: Mathematical Reasoning using Large Language Models 1. 内容简介2. 方法细节3. 实验内容4. 结论&思考 文献链接&#xff1a;https://arxiv.org/abs/2303.05398 1. 内容简介 这篇文章是今年3月份的时候微软提出的一篇工作&#xff0…

TortoiseGit 入门指南07:创建分支

Git 的 分支 出了名的好用。其它的版本控制系统也提供分支&#xff0c;但在易用度上&#xff0c;只有两类版本控制系统&#xff1a;一种是 Git&#xff0c;一种是其它。 Bob 大叔在《匠艺整洁之道》中写道&#xff1a; 我曾经坚持拒绝分支。在使用 CVS 和 Subversion 的时候&a…

IDE /字符串 /字符编码与文本文件(如cpp源代码文件)

文章目录 概述文本编辑器如何识别文件的编码格式优先推测使用了UTF-8编码&#xff1f;字符编码的BOM字节序标记重分析各文本编辑器下的测试效果Qt Creator的文本编辑器系统记事本VS的文本编辑器Notepad 编译器与代码文件的字符编码ANSI编码其他 概述 前期在整理 《IDE/VS项目属…

备战秋招 | 笔试强训9

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、某函数申明如下&#xff08;&#xff09; void Func(int &nVal1); A. Func(a) B. Func(&a) C. Func(*a) D. Func(&(*a)) 2、C语言中&#xff0c;类ClassA的构造函数和析构函数的执行…

如何生成一个漂亮的allure测试报告

前言 今天给大伙展示一下如何生成一个漂亮的allure测试报告&#xff0c;同时呢希望能帮助到大家。 定制化后的allure测试报告效果展示 如何定制化输出锦上添花的allure测试报告 使用前&#xff0c;先导入allure模块。 import allure 使用前&#xff0c;先熟悉运行测试用例…

【Spring Boot】拦截器与统一功能处理:统一登录验证、统一异常处理与统一数据返回格式

前言 Spring AOP是一个基于面向切面编程的框架&#xff0c;用于将横切性关注点&#xff08;如日志记录、事务管理&#xff09;与业务逻辑分离&#xff0c;通过代理对象将这些关注点织入到目标对象的方法执行前后、抛出异常或返回结果时等特定位置执行&#xff0c;从而提高程序的…

供应链管理系统有哪些?

1万字干货分享&#xff0c;国内外 20款 供应链管理软件都给你讲的明明白白。如果你还不知道怎么选择&#xff0c;一定要翻到第三大段&#xff0c;这里我将会通过8年的软件产品选型经验告诉你&#xff0c;怎么样才能快速选到适合自己的软件工具。 &#xff08;为防后续找不到&a…

Waves 14 Complete对Mac和Windows系统的最低要求

Waves 14 Complete是一款功能齐全的音频编辑软件&#xff0c;适用于音乐制作、音频工程和声音设计等领域。它提供了一系列强大的工具和效果&#xff0c;帮助用户在音频处理过程中实现专业水平的效果和混音。 Waves 14 Complete包含了多个实用的插件&#xff0c;如均衡器、压缩…

Gradle和Aritifactory,实现上传Apk并发送消息到钉钉

Gradle和Aritifactory 本文链接&#xff1a;https://blog.csdn.net/feather_wch/article/details/131746580 文章目录 Gradle和AritifactoryGradle基本介绍Gradle插件开发流程本地仓库artifactory搭建添加仓库使用本地仓库gradle插件仓库引入 插件buildSrc开发步骤xxxPluginPg…

甲板上的战舰(力扣)递归 JAVA

给你一个大小为 m x n 的矩阵 board 表示甲板&#xff0c;其中&#xff0c;每个单元格可以是一艘战舰 ‘X’ 或者是一个空位 ‘.’ &#xff0c;返回在甲板 board 上放置的 战舰 的数量。 战舰 只能水平或者垂直放置在 board 上。换句话说&#xff0c;战舰只能按 1 x k&#xf…

Redis入门基础命令

文章目录 一、redis1.1 redis概述1.2 redis安装 二、string2.1 基础命令2.2 存储结构2.3 应用 三、list3.1 基础命令3.2 应用 四、hash4.1 基础命令4.2 存储结构4.3 应用 五、set5.1 基础命令5.2 存储结构5.3 应用 六、zset6.1 基础命令6.2 存储结构6.3 应用 一、redis 1.1 re…

随手笔记——如何手写高斯牛顿法

随手笔记——如何手写高斯牛顿法 说明源代码 说明 将演示如何手写高斯牛顿法 源代码 #include <iostream> #include <chrono> #include <opencv2/opencv.hpp> #include <Eigen/Core> #include <Eigen/Dense>using namespace std; using names…

【前端知识】React 基础巩固(二十八)——StrictMode

React 基础巩固(二十八)——StrictMode StrictMode StrictMode 是一个用来突出显示应用程序中潜在问题的工具 与 Fragment 一样&#xff0c;StrictMode 不会渲染任何可见的 UI为后代出发额外的检测和警告严格模式检查仅在开发模式下运行&#xff0c;不影响生产构建 严格模式检…

线程与信号

1. 进程内所有线程共享信号处理配置&#xff0c;故信号配置可以全部放在主线程内。 2. 每个线程有自己的信号掩码sigset_t&#xff0c;线程创建时继承创建时线程的信号掩码。 3. 触发信号处理函数按创建线程顺序分配给当前空闲线程&#xff0c;信号处理函数内是可以阻塞的。 …