【UML用户指南】-12-对高级结构建模-接口、类型和角色

news2024/12/27 0:55:53

目录

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)中的任何一种

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

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

相关文章

数仓建模中的一些问题

​​​在数仓建设的过程中,由于未能完全按照规范操作, 从而导致数据仓库建设比较混乱,常见有以下问题: 数仓常见问题 ● 数仓分层不清晰:数仓的分层没有明确的逻辑,难以管理和维护。 ● 数据域划分不明确…

ipynb转markdown的简单方法

在线转换 推荐在线转换,拖进去后下载就行,简单易操作。 Convert Jupyter notebook to GitHub-Flavored Markdown for free on AlldocsThe free text converter for all your documents.https://alldocs.app/convert-jupyter-notebook-to-markdown vsc…

RHEL8/Centos8 install for PXE

PXE介绍 PXE(Preboot Execution Environment)是预引导执行环境的缩写。它是由Intel设计的,允许客户端计算机通过网络从服务器上加载操作系统镜像。PXE通常用于大规模部署操作系统,例如在企业或学校环境中。 PXE工作流程如下&…

Windows安装运行elasticsearch服务

官方下载地址:Download Elasticsearch | Elastic 我在linux上执行的下载命令:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.5.3-linux-x86_64.tar.gz Elasticsearch(简称ES)是一款基于Apache Lu…

Functional ALV系列 (10) - 将填充FieldCatalog封装成函数

在前面的博文中,已经讲了封装的思路和实现,主要是利用 cl_salv_data_descr>read_structdescr () 方法来实现。在这里,贴出代码方便大家参考。 编写获取内表组件的通用方法 form frm_get_fields using pt_data type any tablechanging…

OpenFeign远程接口调用使用公共模块出现的错误

今天在使用openfeign和sentinel实现fallback服务降级时遇到找不到类型的异常 检查代码发现没有错误,EnableFeignClients也在启动类上标注了 错误信息:A component required a bean of type com.zxc.cloud.apis.PayFeignSentinelApi that could not be f…

Effective Java 2 遇到多个构造器参数时要考虑使用构建器

第2个经验法则:用遇到多个构造器参数时要考虑使用构建器(consider a builder when faced with many constructor parameters) 上一条讨论了静态工厂相对于构造器来说有五大优势。但静态工厂和构造器有个共同的局限性:它 们都不能很好地扩展到…

SpringBoot——整合WebSocket长连接

目录 WebSocket 项目总结 新建一个SpringBoot项目 pom.xml WebSocketConfig配置类 TestWebSocketEndpoint服务端点类 socket.html客户端 IndexController控制器 SpringbootWebsocketApplication启动类 测试客户端和服务端如何使用WebSocket进行连接和通信 WebSocket S…

LayUI的暗淡:错误的押宝了前后端不分离

LayUI是一个不错的中后台UI框架,贝格前端工场用的CMS就是基于layUI的,可以说简单轻便。除此之外,贝格前端工场很少接到客户要求升级LayUI界面,或者采用LayUI框架的。 一、LayUI官网的谢幕,吹起了前后端不分离模式没落…

Java Set系列集合的使用规则和场景(HashSet,LinkedHashSet,TreeSet)

Set集合 package SetDemo;import java.util.HashSet; import java.util.Iterator; import java.util.Set;public class SetDemo {public static void main(String[] args) {/*Set集合的特点:1.Set系列集合的特点:Set集合是一个存储元素不能重复的集合方…

【数据结构(邓俊辉)学习笔记】图03——拓扑排序

文章目录 0. 概述1. 零入度算法1. 1 拓扑排序1. 2 算法 2. 零出度算法2.1 算法2.2 实现2.3. 复杂度 0. 概述 学习下拓扑排序 1. 零入度算法 1. 1 拓扑排序 首先理解下拓扑排序 其实老师经常干这事,如编讲义,将已经知道的知识点串起来变成讲课序列。那…

AIGC作答《2024年高考作文|新课标I卷》能拿多少分?

AIGC作答《2024年高考作文|新课标I卷》能拿多少分? 一、前言二、题目三、作答 一、前言 如火如荼的2024年高考圆满落幕,在如此Happy的时刻,AIGC技术正以其前所未有的热度席卷全球。它不仅改变了我们获取信息的方式,也…

RJ45 PCB布线

RJ45底盘接地和数字地通过一个1M欧姆的电阻和一个0.1uF的去耦电容隔离。其底盘接地和数字地的间距,必须比60mil宽。如图11及图12所示。 图11 典型变压器集成单RJ45的机箱/数字地平面 图12 典型RJ45和变压器分开的机箱/数字地平面https://www.bilibili.com/read/…

Java学习-JDBC(二)

核心API 注册驱动 Class.forName(“com.mysql.cj.jdbc.Driver”);在Java中,当使用JDBC连接数据库时,需要加载数据库特定的驱动程序,以便与数据库进行通信,加载驱动程序的目的是为了注册驱动程序,使得JDBC API能够识别…

Element-UI入门

目录 1.什么是Element-UI 2.作用 3.版本历史 4.优缺点 4.1.优点 4.2.缺点 5.应用场景 6.代码示例 7.未来展望 8.总结 1.什么是Element-UI Element-UI 是由饿了么前端团队开发的一套基于 Vue.js 的桌面端组件库。提供了一整套 UI 组件,使开发者能够快速构…

统信UOS1070上配置文件管理器默认属性01

原文链接:统信UOS 1070上配置文件管理器默认属性01 Hello,大家好啊!今天给大家带来一篇关于在统信UOS 1070上配置文件管理器默认属性的文章。文件管理器是我们日常操作系统使用中非常重要的工具,了解如何配置其默认属性可以极大地…

使用贝塞尔曲线实现一个iOS时间轴

UI效果 实现的思路 就是通过贝塞尔曲线画出时间轴的圆环的路径,然后 使用CAShaper来渲染UI,再通过 animation.beginTime [cilrclLayer convertTime:CACurrentMediaTime() fromLayer:nil] circleTimeOffset 来设置每个圆环的动画开始时间, …

手写kNN算法的实现-用余弦相似度来度量距离

设a为预测点,b为其中一个样本点,在向量空间里,它们的形成的夹角为θ,那么θ越小(cosθ的值越接近1),就说明a点越接近b点。所以我们可以通过考察余弦相似度来预测a点的类型。 from collections i…

【学术小白成长之路】03三方演化博弈(基于复制动态方程)均衡点与稳定性分析

从本专栏开始,笔者正式研究演化博弈分析,其中涉及到双方演化博弈分析,三方演化博弈分析,复杂网络博弈分析等等。 先阅读了大量相关的博弈分析的文献,总结了现有的研究常用的研究流程,针对每个流程进行拆解。…

HTML-CSS练习例子

HTML CSS 练习 https://icodethis.com 作为前端练习生。不敲代码只看,入门是很慢的,所以直接实战是学习前端最快的途径之一。 这个网站练习HTML CSS的,可以打开了解一下,可以每天打卡,例子简单,循序渐进&…