【UML用户指南】-12-对高级结构建模-接口、类型和角色
目录
1、名称
2、操作
3、关系
4、理解接口
5、常用建模技术
5.1、对系统中的接缝建模
5.2、对静态类型和动态类型建模
5.2.1、对静态类型建模
5.2.2、对动态类型建模
使接口易于理解和易于访问
接口在关于一个抽象做什么的描述与关于这个抽象如何做的实现之间定义了一条界线。接口是一组操作的集合,其中的每个操作用于描述类或构件的一个服务。
用接口对系统中的接缝进行可视化、详述、构造和文档化。类型和角色提供了在特定的语境下为抽象与接口之间的静态和动态一致性进行建模的机制。
结构良好的接口能够清楚地把抽象的外视图与内视图分开,这样就使理解和访问抽象成为可能,而不必探究它的实现细节。
把房屋设计得每次重新粉刷墙壁都要毁坏建筑物,这是没有道理的。类似地,人们也不愿意生活在这样的地方:每当要换一个灯泡时,都要为这幢房子重接电线。大厦的主人更不高兴这样的情况发生:每当一个新的房客入住时,都要移动门或更换所有的电器和电话插座。
在UML中,用接口对系统中的接缝建模。接口是一组操作的集合,其中的每个操作用于描述类或构件的一个服务。通过声明一个接口,可以陈述对一个抽象所要得到的与其实现无关的行为。客户能够对照接口进行建造,你可以自己建造或购买接口的实现,只要接口的实现能满足接口所指定的职责和合约即可。
接口(interface)是一组操作的集合,其中的每个操作用于描述类或构件的一个服务。类型(type)是类的一个衍型,用于描述一组对象的域以及作用于对象的操作(不是方法)。角色(role)是一个参与特定语境的实体的行为。
在图形上,
把接口画成一个衍型化的类,以显露它的操作和其他性质。为了表示类和其接口之间的联系,提供了一种特殊的表示法。
把供接口(provided interface)(表示类提供的服务)表示为与类框连接在一起的小圆圈。
把需接口(required interface)(表示类需要的别的类的服务)表示为与类框连接在一起的半个小圆圈。
1、名称
每个接口都必须有一个有别于其他接口的名称。名称(name)是一个文字串。单独的一个名称称作简单名(simple name),路径名(path name)是以接口所在的包的名称为前缀的接口名。绘制接口时可以仅显示接口的名称,如图所示。
在一个包中的各接口的名称必须是唯一的
2、操作
接口是一组已命名的操作,其中的每个操作用于描述类或构件的一个服务。接口不同于类或类型,它不描述任何实现(因此不包含任何实现操作的方法)。像类一样,接口可以有一些操作。这些操作可以用可见性、并发性、衍型、标记值和约束来修饰。
在声明一个接口时,把接口画成衍型化的类,并在合适的分栏列出它的操作。可以仅显示操作的名称,也可以显示出操作的全部特征标记和其他特性,如图所示。
3、关系
像类一样,接口也可以参与泛化、关联和依赖关系。此外,接口也可以参与实现关系。实现是两个类目之间的语义关系,其中一个类目描述了另一个类目保证实现的合约。
用两种方式来表现一个元素实现一个接口。
第一种方式可以用简化形式,即把接口和它的实现关系画成一条位于类框和小圆(用于供接口)或者半圆(用于需接口)之间的连线。当要简单地显露系统的接缝时,这种形式是有用的,这通常是首选的形式。然而,这种方式的局限性是不能直接地对接口提供的操作或信号进行可视化。
第二种方式是使用展开的形式,即把接口表示成衍型化的类,这种方式允许对接口的操作和其他的特性进行可视化,然后画一个从类目或构件到接口框的实现关系(用于供接口)或依赖(用于需接口)。在UML中,把实现关系画成一条带有空心三角箭头并指向接口的有向虚线。这种表示法是泛化和依赖的混合。
4、理解接口
在处理一个接口时,首先看到的是一组操作,该组操作描述了类或构件的服务。看得更深些,会看到这些操作的全部特征标记,连同它们的各项具体特性,如可见性、范围和并发语义等。
首先,可以为各个操作附上前置和后置条件,以及为整个类或构件附上不变式。通过这样做,需要使用接口的客户就能理解接口做什么以及如何使用它,而不必深究其实现。若要求是严格的,可使用 UML 的OCL 形式化地描述其语义。
其次,给接口附上一个状态机。用状态机详述接口操作的合法的局部命令。最后,可以为接口附上协作。通过一系列的交互图,可以用协作详述接口的预期行为。
5、常用建模技术
5.1、对系统中的接缝建模
识别系统中的接缝涉及到识别在系统体系结构中的明确的分界线。在这些分界线的每一边,都会发现一些可独立变化的构件,只要在分界线两边的构件遵循由接口描述的合约,在一边变化的构件就不会影响另一边的构件。
下图展示了取自一个财务系统的构件Ledger周围的接缝。这个构件提供(实现)了3个接口:IUnknown、ILedger和IReports。在图中以展开形式显示了IUnknown;另外两个接口以简单形式(棒棒糖形式)显示。这3个接口由Ledger实现,并向要使用它的其他构件引出。
该图还表示,Ledger需要(使用)两个接口,即IStreaming和ITransaction,后者以展开形式显示。Ledger构件为其适当的操作而需要这两个接口。因此,在一个运行系统中,必须提供实现这两个接口的构件。通过识别诸如 ITransaction 这样的接口,已经有效地减弱了接口每一边的构件耦合,允许使用任何符合接口要求的构件。
像 ITransaction 这样的接口并不只是一堆操作。这种特殊的接口有一些关于其操作应被调用的次序的假设。可以向该接口附加用况,并枚举它的常用方式,虽然这里并未显示出来。
5.2、对静态类型和动态类型建模
5.2.1、对静态类型建模
对象的静态性质建模可以在类图中进行可视化。然而,当对业务对象这样的事物建模时,这些对象在整个工作流中会自然地变化它们的角色,显式地对对象类型的动态性质建模有时是有用的。在这种情况下,对象在它的生存期内能获得或丢弃类型。也可以用状态机为对象的生存期建模。
5.2.2、对动态类型建模
通过把每一个类型表示为类(若该抽象需要结构和行为)或接口(若该抽象仅需要行为)来详述对象可能的各种不同类型。
对象类在任何时间点上可能扮演的角色建模。可以用«dynamic»衍型(这不是一个预定义的UML衍型,但是可以增加这种衍型)来标记它们。
在交互图中,适当地表示每个被动态类型化的类的实例。在对象名下面的括号中指明实例的类型,就像一个声明一样
描述了类Person的实例可以是3种类型(Candidate、Employee或Retiree)中的任何一种
相关文章:

【UML用户指南】-12-对高级结构建模-接口、类型和角色
目录 1、名称 2、操作 3、关系 4、理解接口 5、常用建模技术 5.1、对系统中的接缝建模 5.2、对静态类型和动态类型建模 5.2.1、对静态类型建模 5.2.2、对动态类型建模 使接口易于理解和易于访问 接口在关于一个抽象做什么的描述与关于这个抽象如何做的实现之间定义了…...

C++笔试强训day42
目录 1.最大差值 2.兑换零钱 3.小红的子串 1.最大差值 链接https://www.nowcoder.com/practice/a01abbdc52ba4d5f8777fb5dae91b204?tpId182&tqId34396&rp1&ru/exam/company&qru/exam/company&sourceUrl%2Fexam%2Fcompany&difficulty2&judgeSta…...
Docker 中运行的 MySQL 数据库与 Docker 外部的管理系统连接
步骤 1:运行 MySQL 容器 首先,确保你的 Docker 容器中运行了 MySQL 数据库。 docker run --name mysql-container -e MYSQL_ROOT_PASSWORDmy-secret-pw -d -p 3306:3306 mysql:latest--name mysql-container 为容器命名。-e MYSQL_ROOT_PASSWORDmy-sec…...

10 设备树
掌握设备树是 Linux 驱动开发人员必备的技能! 1、什么是设备树 新版本 Linux 中,ARM 相关的驱动全部采用了设备树。Linux-4.1.15 支持设备树。我们了解一下设备树的起源、重点学习一下设备树语法。 设备树:Device Tree,就是“设备”和“树”,描述设备树的文件叫做 DTS(…...
【架构分析】GPU执行GEMM矩阵运算实例演示
背景介绍 Cutlass是 NVIDIA 提供的一套用于高效实现矩阵乘法和卷积操作的 C 库。它以 CUDA 为基础,提供了高度优化的数学运算,尤其适用于GPU上的高性能并行计算。本文以GEMM矩阵运算作为实例,展示Cutlass在GPU上执行GEMM运算的过程 实例演示…...

从《千脑智能》看大模型
千脑智能与大模型 千脑智能介绍 世界模型千脑智能理论——对大脑的全新理解旧大脑:演化的历史烙印新大脑:智慧的创新引擎新旧大脑的互动与争斗启示与借鉴 大脑对信息的处理和建模六根六尘六识 新脑:智能的创新中枢旧脑:生存的本能…...

k8s Pods漂移时间配置
默认为300秒 apiVersion: apps/v1 kind: Deployment metadata:name: my-test spec:replicas: 1selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: nginx:latestports:- containerPort: 80tolerations:- key: &…...
Python - json 美化格式、保存文件
文章目录 读取长篇幅的 jsonl 文件时,我们难以了解 json 的格式,复制出来贴到 sojson 之类的网站,当数据量大的时候感觉麻烦。 不如自己写个 json 格式美化,然后保存到文件。 text open(file_path).readline() # 读取 jsonl 文…...
博客目录~
1、Jenkins构建打包部署前端Vue项目至Nginx-CSDN博客 2、https://blog.csdn.net/askuld/article/details/139429298 3、基于DockerJenkins实现自动部署SpringBootMaven项目-CSDN博客 4、时序数据库ClickHouse的安装使用_clickhouse安装使用-CSDN博客 5、Valid,…...
RPC RMI 区别以及在java中的应用
文章目录 1. 简介1.1 什么是RPC1.2 什么是RMI 2. RPC与RMI的区别2.1 RPC和RMI的优缺点对比RPC的优点RPC的缺点RMI的优点RMI的缺点 2.2 选择RPC还是RMI?应用场景和考虑因素选择RPC的场景选择RMI的场景 3. RPC在Java框架中的应用3.1 Java中常用的RPC框架3.2 RPC在Java…...
TCP和udp能使用同一个端口通讯吗
TCP和UDP是可以使用同一个端口进行通讯的。这是因为TCP和UDP是两个完全不同的协议,它们工作在传输层,各自维护不同的连接和会话。每个协议都有自己的端口号空间,因此TCP和UDP可以互不干扰地使用相同的端口号。 但是,需要注意的是…...

红黑树的介绍与实现
前言 前面我们介绍了AVL树,AVL树是一棵非常自律的树,有着严格的高度可控制!但是正它的自律给他带来了另一个问题,即虽然他的查找效率很高,但是插入和删除由于旋转而导致效率没有那么高。我们上一期的结尾说过经常修改…...

easyexcel将csv转为excel处理数字问题
使用easyexcel可以将csv格式的文件转为.xlsx文件,但是csv中有很多数字,比如:"123","12.34","-111",默认情况下会将其作为字符串写入.xlsx文件,就如同下面一样,字符类型的数字…...

DDMA信号处理以及数据处理的流程---随机目标生成
Hello,大家好,我是Xiaojie,好久不见,欢迎大家能够和Xiaojie一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程,本系列文章将从目标生成、信号仿真、测距、测速、cfar…...
爬虫实现思路
现在的人工智能太强大了,只要有问题,输入后就能给出大致的实现思路;我看了下确实没问题,只需要更改一些细节基本就能拿来就用;下面是我实验经历: 问题: c# 书写爬虫爬取按动物名称,…...

神经网络 torch.nn---Non-Linear Activations (ReLU)
ReLU — PyTorch 2.3 documentation torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) 非线性变换的目的 非线性变换的目的是为神经网络引入一些非线性特征,使其训练出一些符合各种曲线或各种特征的模型。 换句话来说,如果模型都是直线特征的…...

【微服务】使用kubekey部署k8s多节点及kubesphere
kubesphere官方部署文档 https://github.com/kubesphere/kubesphere/blob/master/README_zh.md kubuctl命令文档 https://kubernetes.io/zh-cn/docs/reference/kubectl/ k8s资源类型 https://kubernetes.io/zh-cn/docs/reference/kubectl/#%E8%B5%84%E6%BA%90%E7%B1%BB%E5%9E…...

目标检测数据集 - 垃圾桶满溢检测数据集下载「包含VOC、COCO、YOLO三种格式」
数据集介绍:垃圾桶满溢检测数据集,真实场景高质量图片数据,涉及场景丰富,比如城市道边垃圾桶满溢、小区垃圾桶满溢、社区垃圾桶满溢、农村道边垃圾桶满溢、垃圾集中处理点垃圾桶满溢、公园垃圾桶满溢数据等。数据集标注标签划分为…...
6.9总结(省赛排位赛1)
省赛排位赛1省赛排名赛1 - Virtual Judge (vjudge.net) 思路: 其实就是一个斐波拉契数列,当前项前两项之和,先将范围内的数全部存起来放进一个数组,再进行累加查询 代码: #define _CRT_SECURE_NO_WARNINGS 1 #incl…...
58.CountdownLatch
用来进行线程同步协作,等待所有线程完成倒计时。 构造参数用来初始化等待计数值,await方法用来等待计数归零,countDown方法用来让计数减一。 CountdownLatch普通使用 @Slf4j public class CountdownLatchDemo {public static void main(String[] args) {CountDownLatch c…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...