UML的定义和组成详细介绍

1、UML

1.1概述

UML(Unified Modeling Language 统一建模语言) 是为软件系统的制品进行 描述(specifying)可视化(visualizing)构造(constructing)文档化(documenting) 的一种语言。

UML规范用来描述建模的概念有: 类、对象、关联、职责、行为、接口、用例、包、顺序、协作,以及状态。

1.2 UML是一种建模语言

  • 建模方法 = 建模语言 + 建模过程。建模语言定义了用于表示设计的符号(通常是图形符号);建模过程描述进行设计所需要遵循的步骤。
  • 标准建模语言UML是一种建模语言,而不是一种方法,它统一了面向对象建模的基本概念、术语及其图形符号,为人们建立了便于交流的共同语言。
  • 建模能力: 建模方法 + 领域知识 + 实践

1.3 UML语言包含三方面

  1. UML基本图素:它是构成UML模型图的基本元素。例如类、对象、包、接口、组件等。
  2. UML模型图:它由UML基本图素按照UML建模规则构成。例如用例图、类图、对象图、…等。
  3. UML建模规则:UML模型图必须按特定的规则有机地组合而成,从而构成一个有机的、完整的UML模型图(well-formed UML diagram)。

2、UML支持软件体系结构建模

为了表达不同的软件开发相关人员在软件开发周期的不同时期看待软件产品的不同侧重面, 需要对模型进行分层。

UML根据软件产品的体系结构(architecture)对软件进行分层。
软件的体系结构分解为五个不同的侧面,称为4+1视图(view)。分别是:

  • 用例视图(Use case view,Scenarios)—场景视角
  • 逻辑视图(Logical view) — 逻辑视角
  • 进程(过程)视图(Process view) — 过程视角
  • 实现(开发)视图(Implementation view) —开发视角
  • 部署(物理、配置)视图(Deployment view) —物理视角

UML的定义和组成详细介绍
  • 每个视图分别关注软件开发的某一侧面
  • 视图由一种或多种模型图(diagram)构成
  • 模型图描述了构成相应视图的基本模型元素(element)及它们之间的相互关系。

2.1 逻辑视图

逻辑视图定义系统的实现逻辑, 描述为实现用例图描述的功能,在对软件系统进行设计时, 所产生的设计概念,设计概念又称为软件系统的设计词汇 (vocabulary)。
逻辑视图定义了:

  • 设计词汇的逻辑结构
  • 存在于它们之间的语义联系
  • 设计词汇包括系统的类/协同/接口及其关系

对逻辑视图的描述在原则上与软件系统的实现平台无关。 它相当于电子产品生产中的电原理图。逻辑视图包含的模型图有:

  • 类图(class diagrams)
  • 对象图(object diagrams)
  • 交互图(interaction diagrams)
  • 状态图(state-chart diagrams)
  • 活动图(activity diagrams)

2.2 实现(开发)视图

实现视图描述组成一个软件系统的各个物理部件,这些部件以各种方式组合起来,(如: 不同的源代码经过编译,构成一个可执行系统; 或者不同的软件组件配置成为一个可执行系统;以及不同的网页文件,以特定的目录结构,组成一个网站,等等) 构成了一个可实际运行的系统。

当系统的逻辑结构在逻辑视图里被定义之后, 需要定义逻辑结构的物理实现。这包括:

  • 设计元素对应的源代码文件
  • 各物理文件之间的关系、存放路径,等等

实现视图就是定义这些内容的地方,它当于电子产品的印刷电路板的布线图。

实现视图包含的模型图有:

  • 部件图(Component diagram)
  • 交互图(Interaction Diagram)
  • 状态图(state-chart diagram)
  • 活动图(activity diagram)

2.3 部署视图

软件产品将运行在计算机硬件系统上, 如果软件产品是面向网络的应用系统,则有可能同时运行在多个计算机上。
部署视图用来描述软件产品在计算机硬件系统和网络上的安装、分发(delivery)、分布(distribution)。

在部署视图中,系统的静态特性用分布图(deployment diagram)描述。
动态特性的描述用

  • 交互图(interaction diagram)
  • 状态图(state-chart diagram)
  • 活动图(activity diagram)

2.4 过程视图

过程架构考虑一些非功能性的需求,如性能和可用性。它解决并发性、分布性、系统完整性、容错性的问题,以及逻辑视图的主要抽象如何与过程结构相配合在一起 —— 即在哪个控制线程上,对象的操作被实际执行。

2.5 用例视图

用例(场景)视图用来支持软件系统的需求分析,它定义系统的边界,关注的是系统的外部功能的描述。

它从系统的使用者的角度,描述系统的外部的

  • 静态的功能
  • 动态行为

系统的动态功能由UML以下模型图描述:

  • 交互图(interaction diagram),包括顺序图和协作图。
  • 状态图(state-chart diagram)
  • 活动图(activity diagram)

3、UML基本组成

(UML = UML成员 + UML建模规则)

UML建模规则:相当于建模语言的语法
UML成员(building blocks of the UML):它是UML的基本组成部分

(UML成员 = UML 基本模型元素+ 关系+ 模型图)

UML成员可进一步划分为

  • UML 基本模型元素(things in UML)
  • 关系(relationship)
  • 模型图(diagram)

3.1 UML成员

3.1.1 UML 基本模型元素

UML基本模型元素,类似于电子产品电原理图里的集成电路符号,是模型图上包含的基本符号

(UML基本模型元素 = 结构模型元素+行为模型元素+成组元素+注解元素)

基本模型元素可分为四类, 它们是:

  • 结构模型元素(structural things)
  • 行为模型元素(behavioral things)
  • 分组模型元素(grouping things)
  • 注解元素(annotational things)

详情点击这里

3.1.2 关系

结构模型元素是UML模型的静态组成部分,静态组成部分不是孤立存在的,它们被组合在一起互相协作以完成某项任务。因此,结构模型元素之间存在着某种语义上的联系。
在UML中,这种联系是 关系(relationship)

UML中共有4种关系,它们是:

  • 关联关系(association)
    UML的定义和组成详细介绍
  • 依赖关系(dependency)
    UML的定义和组成详细介绍
  • 泛化关系(generalization)
    UML的定义和组成详细介绍
  • 实现关系(realization)
    UML的定义和组成详细介绍
    详情点击这里

3.1.3 模型图

UML基本模型元素及其关系必须通过某种载体表示,这种载体就是 模型图(diagram)

在UML中,模型图是一组UML基本模型元素的图形表示,它通常由一组节点(UML基本模型元素), 及节点之间的连线(关系)组成

软件系统体系结构的5个视图的内容, 就是用模型图来表达的

一般地说,一个UML基本模型元素既可以出现在所有的模型图中,又可以出现在某些模型图中,甚至可以不在任何一个模型图上出现

9种UML模型图。它们是:

  • 类图
  • 对象图
  • 用例图
  • 序列图
  • 协同图
  • 状态图
  • 活动图
  • 组件图
  • 分布图

3.2 UML建模规则

UML建模规则包括:

  • 名字:任何一个UML成员都必须包含一个名字
  • 作用域:UML成员所定义的内容起作用的上下文环境
  • 可见性:UML成员能被其它成员引用的方式
  • 完整性:UML成员之间互相联接的合法性和一致性。
  • 运行属性(execution):UML成员在运行时的特性。

完备的UML模型必须对以上的内容给出完整的解释, 当用于软件系统的建造时,UML模型是必须是完备的, 但是当模型在不同的视图中出现时, 出于不同的交流侧重点, 其表达可以是不完备的 。

Original: https://www.cnblogs.com/workhah/p/15554030.html
Author: WorkHaH
Title: UML的定义和组成详细介绍

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/572538/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 盲撸 Ant Design Pro 开篇

    碎语 本人是从事后端开发,但是自己一直是前后端都写的,之前一直使用vue,因为vue简单么上手快,但是vue一直感觉没有特别好用的中台框架,最近打算撸一撸 Ant Design P…

    Java 2023年6月8日
    099
  • 安利一个Mac下好用的抓包工具-Charles

    Charles:让天底下没有难抓的包。 前言 今天给大家推荐一个我所使用过的抓包工具中最好用的抓包工具-Charles(音译:查尔斯),它可以抓各端发起的网络请求,我主要用来抓移动…

    Java 2023年6月14日
    0134
  • Scala调用Kafka的生产者和消费者Demo,以及一些配置参数整理

    kafka简介 Kafka是apache开源的一款用Scala编写的消息队列中间件,具有高吞吐量,低延时等特性。 Kafka对消息保存时根据Topic进行归类,发送消息者称为Pro…

    Java 2023年6月9日
    070
  • git的基本操作

    Git的基本操作 1 Git本地操作总结 初始化工作区 git init 查看状态 git status 提交 工作区提交暂存区 git add 文件 或 git add . &#…

    Java 2023年6月9日
    0157
  • Spring 源码(13)Spring Bean 的创建过程(4)

    Spring Bean的创建过程非常的复杂,上一篇重点介绍了 Spring在创建 Bean的过程中,使用 InstantiationBeanPostProcessor进行提前创建 …

    Java 2023年6月14日
    072
  • JAVA RSA加密AES加密

    RSA加密: import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.crypto.C…

    Java 2023年5月29日
    087
  • 程序包javax.persistence不存在解决办法

    只需添加以下包即可 javax.persistence persistence-api 1.0.2 Original: https://www.cnblogs.com/javalo…

    Java 2023年6月15日
    083
  • Netty源码研究笔记(3)——Channel系列

    依旧是通过先纵向再横向的研究方法,在开篇中,我们发现不管是Sever还是Client,最终的启动是通过调用channel的对应方法来完成的,而这个动作实际在channel绑定的ev…

    Java 2023年6月10日
    081
  • Java8新特性

    Java8 新特性 Java8最重要的两个改变,一个是Lambda表达式,另一个就是Stream API。 Lambda表达式 一段可以传递的代码 -> 更紧凑的代码风格 接…

    Java 2023年6月8日
    093
  • java数组算法——数组元素的赋值2

    java数组算法——数组元素的赋值2——java经典面试题:创建一个长度为6的int型数组,要求数组元素的值都在1-30之间,且是随机赋值。同时要求元素时的值各不相同 经典面试题:…

    Java 2023年6月5日
    090
  • 采用SmartQQ 协议可制作聊天机器人

    采用.NET CORE可运行在 Linux 、 Windows 和 Mac OSX 平台下。 SmartQQ可以: 收发文字消息 获取好友、群、讨论组、好友分组和最近会话的列表 S…

    Java 2023年6月7日
    065
  • 可落地的DDD(7)-战术设计上的一些误区

    背景 几年前我总结过DDD战术设计的一些落地经验可落地的DDD(5)-战术设计,和一次关于聚合根的激烈讨论最近两年有些新的落地体验,回过头来发现,当初对这些概念的理解还是没有深入,…

    Java 2023年6月8日
    082
  • JavaCV的摄像头实战之七:推流(带声音)

    借助JavaCV,完成本地摄像头和麦克风数据推送到媒体服务器的操作,并用VLC验证 欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://gith…

    Java 2023年6月8日
    090
  • 深入浅出分析 PriorityQueue

    作者:炸鸡可乐原文出处:www.pzblog.cn 一、摘要 在前几篇文章中,咱们了解到,Queue 的实现类有 ArrayDeque、LinkedList、PriorityQue…

    Java 2023年6月9日
    0126
  • centos 7 下 rabbitmq 3.8.0 & erlang 22.1 源码编译安装

    1. erlang 22.1 源码编译安装 2. rabbitmq 3.8.0 binary安装 注意下载下来的文件是xz格式的,xz命令 XZ Utils 是为 POSIX 平台…

    Java 2023年5月29日
    067
  • ::before与::after的使用

    今天介绍在前端开发中,会使用到的伪元素::before和::after 介绍两个主要的作用 1.在标签前面或者后面添加元素 例子1:使用::before和::after在标签前添加…

    Java 2023年6月8日
    086
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球