当前位置: 首页 > news >正文

【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&#xff0c…...

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…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 ​…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...

免费数学几何作图web平台

光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...