UML 架构图入门介绍 starUML

拓展阅读

常见免费开源绘图工具

OmniGraffle 创建精确、美观图形的工具

UML-架构图入门介绍 starUML

UML 绘制工具 starUML 入门介绍

PlantUML 是绘制 uml 的一个开源项目

UML 等常见图绘制工具

绘图工具 draw.io / diagrams.net 免费在线图表编辑器

绘图工具 excalidraw 介绍

绘图工具 GoJS 介绍 绘图 js

原型设计工具介绍-01-moqups 介绍

常见原型设计工具介绍

UML

统一建模语言(UML)是一种标准的建模语言,用于可视化、指定、构造和文档化软件系统的各个方面。

UML 中文版

常见的图

用例图(UseCase)

使用ASCII字符画出用例图是一种简单的方式来表示系统的功能需求和用户交互。

下面是一个简单的用例图示例,它展示了一个在线图书馆系统的几个关键用例:

+-------------------+               +------------------------+
|    用户 (User)     |               |   在线图书馆系统        |
|                   |               |   (Online Library System)|
+-------------------+               +------------------------+| 搜索图书       |               | 登录系统               ||---------------->|               |<------------------------|| 查看图书详情   |               | 浏览图书列表           ||---------------->|               |<------------------------|| 借阅图书       |               | 管理借阅记录           ||---------------->|               |<------------------------|| 归还图书       |               | 查找推荐图书           ||---------------->|               |<------------------------|| 评价图书       |               | 管理个人账户           ||---------------->|               |<------------------------|

在这个例子中,我们定义了一个“用户”角色,并且列出了几个可能与在线图书馆系统交互的用例。

类关系图(Class Relationship)

类关系图(Class Diagram)是UML中用于展示系统中类之间关系的静态结构图。

在类关系图中,我们通常展示类的属性(attributes)和方法(methods),以及类之间的关联(associations)、依赖(dependencies)、继承(inheritance)和实现(realization)等关系。

下面是一个简单的ASCII艺术表示的类关系图示例,它展示了一个简单的学校管理系统中的三个类:StudentTeacherCourse

+----------------+  " 1 "  +----------------+
|    Student     |----------|    Teacher    |
+----------------+          +----------------+
| - name         |          | - name         |
| - age          |          | - subject      |
| - id           |          +----------------+
| + enroll()     |               ^
| + attendClass()|               |
+----------------+               |^  " 0..* "          ||                    |
+----------------+               |
|     Course     |---------------+
+----------------+
| - name         |
| - code         |
| - description |
+----------------+

在这个例子中:

  • Student类与Teacher类之间有一个关联关系,表示一个学生可以被一个教师指导(这里用" 1 "表示学生端的关系强度,用" 0..* "表示教师端的关系强度,意味着一个教师可以指导多个学生)。

  • Student类与Course类之间有一个关联关系,表示一个学生可以注册多个课程(这里用" 0..* "表示学生可以注册从零到多个课程)。

  • Teacher类与Course类之间有一个关联关系,表示一个教师可以教授多个课程(这里同样用" 0..* "表示教师可以教授从零到多个课程)。

请注意,ASCII艺术图的复杂性可以根据你的需求进行调整。简单的ASCII图可以快速传达基本的概念,但是它们通常不适合表示复杂系统的设计。

对于更复杂的设计,使用专业的UML工具来创建图形化类关系图会更加清晰和易于理解。

活动图(Activity)

活动图(Activity Diagram)是UML中用于描述业务流程或系统操作的工作流的一种图形表示。它展示了活动的顺序、决策点、并行处理以及合并点等。下面是一个简单的ASCII艺术表示的活动图示例,它展示了一个在线购物流程:

+-------------------+     +-------------------+
|    开始 (Start)   | --> |   选择商品 (Select) |
+-------------------+     +-------------------+|                            |V                            V
+-------------------+     +-------------------+
|   登录账户 (Login) |     |   添加到购物车 (Add) |
+-------------------+     +-------------------+|                            |V                            V
+-------------------+     +-------------------+
|   确认订单 (Confirm)| --> |   选择支付方式 (Pay) |
+-------------------+     +-------------------+|                            |+------------+------------+|V+-------------------+|   订单完成 (Order Complete) |+-------------------+

在这个例子中:

  1. 流程开始于“开始”节点,表示购物流程的启动。

  2. 用户首先需要“选择商品”,然后可以选择“登录账户”以便进行后续操作。

  3. 登录后,用户可以选择“添加到购物车”商品,或者直接“确认订单”。

  4. 在“确认订单”节点,用户需要选择一种“支付方式”来完成支付。

  5. 支付完成后,流程到达“订单完成”节点,表示购物流程结束。

活动图使用不同的形状来表示不同类型的节点:

  • 圆角矩形(如“选择商品”、“登录账户”等)表示活动的执行。

  • 箭头表示流程的流向。

  • 菱形(如“确认订单”)表示决策节点,通常包含条件逻辑。

  • 并行条(在本例中未展示)表示活动可以同时进行。

  • 结束节点(如“订单完成”)表示流程的结束。

序列图(Sequence)

它展示了一个简单的客户端-服务器通信场景:

+----------------+     +----------------+     +---------------+
|   客户端 (Client) | --> | 服务器 (Server) | --> | 数据库 (DB)   |
+----------------+     +----------------+     +---------------+| 请求数据       |               |               ||----------------->| 处理请求       |               ||                 |<-- 验证权限     |               ||                 |----------------->| 查询数据       ||                 |               |<-- 返回结果     ||                 |               |                 ||                 |               |                 ||                 |               |                 ||                 |               |                 ||                 |               |                 ||                 |               |                 ||                 |               |                 ||                 |               |                 |

在这个例子中:

  1. 客户端发起请求,向服务器请求数据。

  2. 服务器接收到请求后,首先验证客户端的权限。

  3. 权限验证通过后,服务器向数据库发出查询请求。

  4. 数据库处理查询请求,并将结果返回给服务器。

  5. 服务器接收到数据库返回的结果后,将其发送回客户端。

序列图中的每个箭头代表一个消息,消息的发送者和接收者分别位于箭头的两端。

箭头的方向表示消息的流向,即从发送者到接收者。

对象之间的交互按照时间顺序排列,垂直排列的对象表示它们在交互中的存在。

状态图(State chart)

状态图(State Diagram)是UML中用于描述系统或对象可能处于的各种状态以及在接收到特定事件或条件满足时状态之间的转换的一种图形表示。

下面状态图示例展示了一个在线订单的生命周期:

+-----------+
| 订单创建   |
+-----------+|V
+-----------+
| 待支付   |
+-----------+|V
+-----------+
| 已支付   |
+-----------+|V
+-----------+
| 已发货   |
+-----------+|V
+-----------+
| 已完成   |
+-----------+

在这个例子中,一个在线订单的生命周期包括以下几个状态:

  1. 订单创建:这是订单的初始状态。当用户完成商品选择并提交订单时,订单就处于此状态。

  2. 待支付:在订单创建之后,用户需要支付订单。在这个阶段,订单等待用户的付款。

  3. 已支付:用户完成支付后,订单状态更新为已支付。此时,订单正在处理中,准备发货。

  4. 已发货:订单处理完成并且商品已经发出,订单状态变为已发货。用户可以跟踪物流信息。

  5. 已完成:当用户收到商品,订单生命周期结束,状态变为已完成。

状态之间的转换通常由事件触发,例如,在“待支付”状态下,用户的支付行为是一个事件,它会触发状态转换到“已支付”状态。

状态图使用箭头来表示状态转换,箭头的方向表示转换的方向。

请注意,ASCII艺术图的复杂性可以根据你的需求进行调整。简单的ASCII图可以快速传达基本的概念,但是它们通常不适合表示复杂系统的设计。

对于更复杂的状态机,使用专业的UML工具来创建图形化状态图会更加清晰和易于理解。

组件图(Component)

组件图(Component Diagram)是UML中用于描述系统中软件组件以及它们之间的关系的静态结构图。

组件通常是指代码的封装单元,如库、模块或包。

下面是一个简单组件图示例,它展示了一个简单的文本编辑器应用程序的组件结构:

+--------------------------------------------------+
|   文本编辑器应用程序 (Text Editor Application)   |
+--------------------------------------------------+|            |            |            |V            V            V            V
+------------+  +------------+  +------------+  +------------+
| 用户界面   |  | 文件管理   |  | 编辑功能   |  | 显示组件   |
| (UI)       |  | (File Mgmt)|  | (Editing)  |  | (Display)  |
+------------+  +------------+  +------------+  +------------+

在这个例子中:

  1. 文本编辑器应用程序 是整个系统的边界,包含了所有子组件。

  2. 用户界面 (UI) 组件负责提供用户交互的界面,如菜单、工具栏和编辑区域。

  3. 文件管理 (File Mgmt) 组件处理文件的打开、保存和其他文件操作。

  4. 编辑功能 (Editing) 组件实现文本编辑的核心功能,如剪切、复制、粘贴等。

  5. 显示组件 (Display) 负责文本的显示,包括文本渲染和屏幕更新。

组件之间的关系可以用箭头或连接线表示,表示它们之间的依赖关系。

在这个例子中,组件之间的关系是隐含的,因为它们都是文本编辑器应用程序的一部分,相互之间存在依赖关系。

部署图(Deployment)

部署图(Deployment Diagram)是UML中用于描述系统中软件和硬件的配置以及它们之间的依赖关系的静态结构图。

部署图展示了系统的物理部署,包括节点(如服务器、客户端等)和它们的组件分布。

下面是一个简单的部署图示例,它展示了一个简单的Web应用程序的部署结构:

+--------------------------------------------------+
|           Web服务器 (Web Server)               |
|                   (Node A)                     |
+--------------------------------------------------+
|   +--------+   +--------+   +--------+   +--------+   |
|   | Web    |   | App    |   | DB     |   | Cache  |   |
|   | Server |   | Server |   | Server |   | (in-   |   |
|   +--------+   +--------+   +--------+   | memory)|   |
|   |        |   |        |   |        |   | (for    |   |
|   |        |   |        |   |        |   | hot    |   |
|   |        |   |        |   |        |   | data    |   |
|   |        |   |        |   |        |   | storage  |
|   |        |   |        |   |        |   +--------+   |
+--------------------------------------------------+|            |            |            ||            |            |            |V            V            V            V
+--------+  +--------+  +--------+  +--------+  +--------+
| 客户端 |  | 客户端 |  | 客户端 |  | 客户端 |  | 客户端 |  | 客户端 |
| (Client)|  | (Client)|  | (Client)|  | (Client)|  | (Client)|
+--------+  +--------+  +--------+  +--------+  +--------+

在这个例子中:

  1. Web服务器 (Web Server) 位于节点A,是部署图的主要节点,它托管了Web应用程序的各个组件。

    • Web Server:负责处理客户端请求和提供Web页面。

    • App Server:运行应用程序逻辑和处理业务请求。

    • DB Server:存储应用程序数据,处理数据库查询。

    • Cache (in-memory):用于存储热点数据,提高应用程序性能。

  2. 客户端 (Client) 表示多个客户端设备,它们通过网络与Web服务器进行交互。

部署图中的节点通常用矩形框表示,组件用较小的矩形框嵌套在节点内表示。

节点之间的连接线表示它们之间的通信或依赖关系。

客户端可以是物理设备,如个人电脑、手机等,也可以是其他网络中的服务器。

序列图

下面是一个使用 Markdown 格式编写的简单序列图示例:

<uml>下载->定义:定义->使用:
</uml>

js-sequence-diagrams 能够帮助你将文本转换成UML序列图。

而 flowchart 则是另一个工具。

  • 下载

    js-sequence-diagrams 依赖于 Raphaël 和 Underscore.js。

  • 定义

    <uml>标题: UML 测试A->B: 正常线条B-->C: 虚线C->>D: 开放箭头D-->>A: 虚线开放箭头
    </uml>
  • 使用

    1. 导入js文件
    <script src="raphael-min.js"></script>
    <script src="underscore-min.js"></script>
    <script src="sequence-diagram-min.js"></script>
    1. 在jQuery中定义这个:
    $("UML, uml").sequenceDiagram({theme: 'hand'});

    然后你可以看到:

    标题: UML 测试 A->B: 正常线条 B-->C: 虚线 C->>D: 开放箭头 D-->>A: 虚线开放箭头

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++初阶:6.string类

string类 string不属于STL,早于STL出现 看文档 C非官网(建议用这个) C官网 文章目录 string类一.为什么学习string类&#xff1f;1.C语言中的字符串2. 两个面试题(暂不做讲解) 二.标准库中的string类1. string类(了解)2. string类的常用接口说明&#xff08;注意下面我只讲解…

设计模式总结-装饰者模式

模式动机 一般有两种方式可以实现给一个类或对象增加行为&#xff1a; 继承机制&#xff0c;使用继承机制是给现有类添加功能的一种有效途径&#xff0c;通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法。但是这种方法是静态的&#xff0c;用户不能控制增…

Golang-Gin 框架写的免杀平台,内置分离、捆绑等多种BypassAV方式

Golang-Gin 框架写的免杀平台&#xff0c;内置分离、捆绑等多种BypassAV方式 Golang-Gin 框架写的免杀平台&#xff0c;内置分离、捆绑等多种BypassAV方式。 cool 时间线&#xff1a; Golang Gin 框架写的免杀平台- (2021.11.12)Golang Gin 框架写的免杀平台&#xff0c;更…

环境监测站升级选择ARM网关驱动精准数据采集

物联网技术的深入发展和环保需求的不断攀升&#xff0c;API调用网关在环境监测领域的应用正成为科技创新的重要推手。其中&#xff0c;集成了API调用功能的ARM工控机/网关&#xff0c;以其出色的计算性能、节能特性及高度稳定性&#xff0c;成功搭建起连接物理世界与数字世界的…

从零到精通:JavaScript编程全攻略

目录 前言 JavaScript简介 函数 事件处理 DOM操作 异步编程 错误处理机制 代码性能优化 总结 前言 JavaScript&#xff0c;作为网络时代的产物&#xff0c;自1995年由布兰登艾克&#xff08;Brendan Eich&#xff09;在Netscape Communications Corporation的辉煌岁月…

think:该写什么样的blog

前言 好久没更新blog&#xff0c;简单写点东西。随着chatgpt为首的大模型兴起&#xff0c;发现周边的很多程序员逐步减少使用google&#xff0c;Stack Overflow等搜索常见的问题&#xff0c;csdn流量估计也会受到不小的影响。chatgpt的下限不低&#xff0c;从简单的语法查询到…

【教程】App打包成IPA文件类型的四种方法

摘要 本教程总结了将App应用程序打包为IPA包的四种常用方法&#xff0c;包括Apple推荐的方式、iTunes拖入方法、自动编译脚本和解压改后缀名方法。每种方法都有其特点和适用场景&#xff0c;在实际开发中可以根据需求选择合适的方式进行打包。通过本教程&#xff0c;您将了解到…

微服务(狂神)

什么是微服务&#xff1a; 微服务方案&#xff1a; 1. SpringCloud NetFlix 2. Dubbo 3. SpringCloud Alibaba 解决了什么问题&#xff1a; 1. 服务过多&#xff0c;客户端怎么访问 2. 服务过多&#xff0c;服务间怎么传值 3. 服务过多&#xff0c;如何治理 4. 服务过多…

美团一面4/9

面的时候自我感觉良好&#xff0c;复盘感觉答的一坨。。 0怎么比较两个对象 0Integer 不使用new会自动装箱&#xff0c;返回提前创建的。使用new就创建新对象。 1.Object类有什么方法 java中Object类中有哪些常用方法以及作用_java中object的方法有什么用-CSDN博客 2.hash…

基于JSP的网上订餐系统

第一章 绪论 1.1课题背景与意义 自新世纪以来&#xff0c;我国经济发生翻天覆地的变化。中国经济发展迎来空前巨大的机遇与挑战&#xff0c;世界性的发展交流在这三十年较近四十年的时间中整体性上升发展&#xff0c;东西文化的碰撞&#xff0c;不断为国民经济的发展注入新鲜…

大话设计模式——19.责任链模式(Chain of Responsibility Pattern)

简介 使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有一个对象处理它为止。 主要有两个核心行为&#xff1a;1.处理请求&#xff1b;2.将请求传递到下一节点 U…

“AI”科普丨Transformer架构图解最强教程!

今天给大家分享一篇关于深度学习模型Transformer的文章。我愿称之为讲解Transformer模型最好的文章。 文章内容主要介绍 Transformer 模型的具体实现&#xff1a; Transformer整体架构 Transformer概览 引入张量 自注意力机制Self-Attention 多头注意力机制Mutil-Head Att…

算法四十天-删除排序链表中的重复元素

删除排序链表中的重复元素 题目要求 解题思路 一次遍历 由于给定的链表是排好序的&#xff0c;因此重复的元素在链表中的出现的位置是连续的&#xff0c;因此我们只需要对链表进行一次遍历&#xff0c;就可以删除重复的元素。 具体地&#xff0c;我们从指针cur指向链表的头节…

光子学,能否催生下一代计算革命?

研究和技术开发在光子计算领域正迅猛增长&#xff0c;其产品也逐渐融入市场。这一新兴的计算技术革命预计将对科学家和工程师的研究能力产生深远影响。 光子技术在加速大规模计算基础设施的数据处理速度方面展现出巨大的潜力&#xff0c;同时有可能显著降低网络及通讯的能耗。该…

解析大语言模型训练三阶段

大语言模型的训练过程一般包括3个阶段&#xff1a;预训练&#xff08;Pre-training&#xff09;、SFT&#xff08;有监督的微调&#xff0c;Supervised-Finetuning&#xff09;以及RLHF&#xff08;基于人类反馈的强化学习&#xff0c;Reinforcement Learning from Human Feedb…

第一届长城杯初赛部分wp(个人解题思路)

目录 Black web babyrsa2 APISIX-FLOW cloacked 本人不是很擅长ctf&#xff0c;这只是我自己做出的西部赛区部分题的思路&#xff0c;仅供参考 Black web 访问http://192.168.16.45:8000/uploads/1711779736.php 蚁剑连接 访问/var/www/html/u_c4nt_f1nd_flag.php babyr…

艾瑞咨询最新发布《2024年中国采购数字化平台行业研究报告》,企企通市场份额稳居第一!

导读 根据艾瑞咨询统计&#xff0c;以SRM和ERP背景的厂商为主&#xff0c;企企通以18.5%的市场份额&#xff0c;稳居国内采购数字化平台市场第一位置。 近日&#xff0c;国内知名研究机构艾瑞咨询发布《2024年中国采购数字化平台行业研究报告》&#xff08;以下简称”《报告》…

babyAGI(6)-babyCoder源码阅读4_Embbeding代码实现

在进入到主程序前&#xff0c;我们还需要看一个Embedding的实现代码&#xff0c;这里的功能主要是为了计算代码之间的相关性。 embedding可以文本中的词语转化为低维实数向量的表示&#xff0c;来计算两段文字间的几何距离来判断词语的含义是否相近。 1. 源码阅读-初始化和计算…

HJ1 字符串最后一个单词的长度(字符串,import java.util.HashSet;)

import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别int num sc.nextInt();boolean[] in new boolean[…

解析View树、apk安装

apk安装 https://github.com/sucese/android-open-source-project-analysis/blob/master/doc/Android%E7%B3%BB%E7%BB%9F%E5%BA%94%E7%94%A8%E6%A1%86%E6%9E%B6%E7%AF%87/Android%E5%8C%85%E7%AE%A1%E7%90%86%E6%A1%86%E6%9E%B6/02Android%E5%8C%85%E7%AE%A1%E7%90%86%E6%A1%8…