【UML用户指南】-16-对高级结构建模-构件

news2024/10/6 19:20:44

目录

1、概念

2、构件与接口

3、可替换性

4、组织构件

5、端口

6、内部结构

6.1、部件

6.2、连接件

7、常用建模技术

7.1、对结构类建模

7.2、对API建模


        构件是系统中逻辑的并且可替换的部分,它遵循并提供对一组接口的实现。好的构件用定义良好的接口来定义灵活的抽象,这样就可能容易用新的兼容构件代替旧的构件。

        接口是连接逻辑模型和设计模型的桥梁。例如,可以为逻辑模型中的一个类定义一个接口,而这同一个接口将延续到一些实现它的设计构件。通过把构件上的端口连接在一起,接口允许用小的构件来建造对大构件的实现。

        可以把应用程序做成一个单一的大单元,但是当需求改变时,它太僵化并很

难修改。此外,也无法利用一些现有的功能。即使一个现存的系统有很多你需要的功能,

它也会有许多你不想要的部分,并且很难或者不可能被剔除。对于软件系统的解决方法类

似于电气系统:把程序做成可灵活连接起来的、定义良好的构件,当需求发生变化时,这

些构件可以单独被替换。

1、概念

1)接口 (interface)是一组操作的集合,其中的每个操作描述了一个由类或构件所请求或者

所提供的服务。

2)构件 (component)是系统中可替换的部分,它遵循并提供了一组接口的实现

3)端口 (port)是被封装的构件的特定窗口,符合特定接口的构件通过它来收发消息。

4)内部结构 (internal structure)是由一组以特定方式连接起来的部件来表示的构件实现

5)部件 (part)是角色的规约,该角色组成构件的局部实现。在构件的实例中,有相应的部

件实例。

6)连接件 (connector)是在构件语境中的两个部件或者端口之间的通信关系。

2、构件与接口

几乎所有流行的基于构件的操作系统工具(例如COM+、CORBA和Enterprise Java Beans)都以接口作为把构件绑定在一起的粘合剂。

        基于构件来构造系统,通过描述接口(表示系统中的主要接缝)来分解系统。然后提供实

现这些接口的构件和通过访问接口获得服务的其他构件。这样的机制允许部署一个系统,

它的服务在某种程度上独立于位置,而且(如下一节所述)是可以替换的。

        构件所实现的接口称为供接口(provided interface),意思是构件向其他构件提供的作

为一个服务的接口。一个构件可以声明许多供接口。构件所使用的接口称为需接口

(required interface),意思是一个构件向其他构件请求服务时所遵从的接口。一个构

件可以遵从许多需接口。此外,一个构件可以既有供接口也有需接口。

        构件被表示成右上角标有 图标的矩形。

矩形中有构件的名字。构件可以有属性和操作,但在图中这些经常被省略。

构件可以表示内部结构

可以用两种方式来表示构件和接口之间的关系。

1、第一种方式(最通用的)是用简略的图符形式表示接口。供接口表示成用线连着构件的一个圆(一个“棒棒糖”)。需接口表示成用线连着构件的一个半圆(一个“插口”)。这两种情况下,接口的名字都写在图形符号的旁边。

2、第二种方法是用展开形式来表示,这种方式可以显示出接口的操作。实现接口的

构件用一个完整实现关系连接到接口上。通过接口访问其他构件的服务的构件用一个依赖

关系与该接口相连。

        一个给定的接口可以由一个构件提供,由另一个构件使用。这就形成一个事实:两个构件

间的这种接口打破了构件间的直接依赖关系。不管接口是用什么构件实现的,使用给定接

口的构件都能正常运行。当然,一个构件当且仅当在这样的语境中可以被使用:它的所有

需接口都由其他构件作为其供接口实现了。

3、可替换性

        所有基于构件的操作系统工具的基本目的都是允许用二进制可替换的制品来集成系统。这

就意味着可以用构件来设计系统,然后用制品来实现这些构件,并可以用添加新构件和替

换老构件的方式来更新系统,而无须重新构造系统。 

        构件遵循或提供一组接口的实现,并使逻辑设计和基于其上的物理实现的可替换性成为可能。

        构件是系统的一部分 。构件很少单独存在,相反,一个给定的构件通常与其他构件协作,

并且存在于打算使用它的体系结构或技术语境中。构件在逻辑上和物理上是内聚的,代表

一个较大系统的有意义的结构和(或)行为块。构件可以在多个系统中复用。因此,构件

表示了设计和组成系统的基础构造块。这个定义是递归的,某个抽象层次上的系统可能是

其他更高抽象层次上系统的一个构件。

4、组织构件

可以用组织类的方式来组织构件,用包将构件分组。

也可以通过描述构件之间的依赖、泛化、关联(包括聚合)和实现关系来组织构件。

构件可以由其他构件来构造

5、端口

        端口 (port)是一个被封装的构件的对外窗口。在封装的构件中,所有出入构件的交互都要通过端口。构件对外可见的行为恰好是它端口的总和。此外,端口是有标识的。别的构件可以通过一个特定端口与一个构件通信。

        端口允许把构件的接口划分成离散的并且可以独立使用的包。端口提供的封装性和独立性更大程度上保证了构件的封装性和可替换性。

        端口被表示成跨坐在构件边界上的小方块——它表示一个穿过构件的封闭边界的洞。供接口和需接口都附着到端口符号上。供接口表示一个可以通过那个端口来请求的服务,需接口表示一个该端口需要从其他构件获得的服务。每个端口都有一个名字,因此可以通过构件和端口名来唯一标识它。

构件名和端口名合在一起唯一地标识了一个被其他构件使用的特定构件的特定端口。

部件也有多重性,因此一个构件实例中的一个部件可能对应于多个实例。

上图表示

有两个用于售票的端口,一个供普通用户使用,另一个供优先用户使用。它们都有相同的

类型为Ticket Sales 的供接口。信用卡处理端口有一个需接口,任何提供该服务的构件都

能满足它的要求。节目端口既有供接口也有需接口。使用Load Attractions接口,剧院可

以把戏剧表演和其他节目录入售票数据库以便售票。利用Booking接口,Ticket Seller构

件可以查询剧院是否有票并真正地售票。

6、内部结构

内部结构(包括端口、部件和连接件)

6.1、部件

构件可以被作为一段单独的代码来实现,构件的内部结构是一些部件,这些部件以及它们之间的连接一起组合成构件的实现

部件的图形描述形式与具名、匿名实例一致

部件 (part)是构件的实现单元。部件有名字和类型。在构件实例中,每个部件有一个或多个实例对应于部件指明的类型。部件在其所在构件内有多重性

上图表明一个编译器构件是由四个部件组成的:一个词法分析器(lexical analyzer)、

一个代码生成器(code generator)、一个语法分析器(parser)和一到三个优化器

(optimizer)。许多编译器的完整版本是由不同层次的优化构成的,在一个给定的版

本中,运行时可以选择一个恰当的优化器。

部件的多重性,在图形展示上必须通过名称来区分,如下图中的normalSales和prioritySales

6.2、连接件

两个端口之间的连线被称作连接件 (connector)。

在整个构件的实例中,它表示一个链或一个暂时链。链是普通关联的实例,暂时链表示两个构件之间的使用关系。暂时链可能由作为操作目标的过程参数或局部变量来提供,而不是普通关联。

连接件有两种表示方式

第一种方式是:如果两个构件明确地捆绑在一起,无论是直接地还是通过端口,则只在它们之间或它们的端口之间画一条线即可。

第二种方式是:如果两个构件相连是由于它们有能兼容的接口,则可以使用“托球-托座”表示法来表明构件之间没有固定的关系,尽管是在构件内部连接的,可以用满足接口的其他构件来代替。

        也可以将内部端口连接到整体构件的外部端口上,这称为委派连接件,因为外部端口的消息被委派给内部端口。这可以用一个从外部端口指向内部端口的箭头来表示。对此可采取两种看法,第一种看法是把内部端口和外部端口同样对待,它已经被移到边界上并且可以通过它进行观察。第二种看法是,任何传到外部端口的消息被立即传送到内部端口,反之亦然。采用哪一种看法无关紧要,在两种情况下它们行为都是相同的。
 

上图显示了一个带有内部端口和不同种类的连接件的例子。在OrderEntry端口上的外部

请求被委派给 OrderTaking 子构件的内部端口来处理,这个构件进而把它的结果输出到它

的OrderHandoff端口。这个端口用“球-插口”图形符号与OrderHandling子构件相连。

这种连接意味着在两个构件之间无需特别的知识,输出可以被连到任何遵从 OrderHandoff

端口的构件上。OrderHandling构件与Inventory构件通信去查询库中的条目。这被描述为

一个直接的连接件,因为没有任何接口被显示,这试图表明二者之间的结合更紧密。一旦

找到了库中的项目,OrderHandling构件就可以访问外部的Credit(信用卡)服务,这由

连到外部端口charging的委派连接件来显示。如果外部信用卡服务有回应

,OrderHandling构件就与Inventory构件上的ShipItems端口通信,来准备订单以备配送

。Inventory构件访问外部FulFillment服务来真正实现订货。
 

构件图展示了构件的结构和潜在的消息路径。构件图本身并不能通过构件展示消息的序列。序列和其他种类的动态信息可以用交互图来表示。

7、常用建模技术

7.1、对结构类建模

        下图显示了结构类 TicketOrder 的设计,这个类包括四个部件和一个普通属性 price。

customer是Person类的一个对象。customer可以有一个或者没有priority(优先级)状态

,因此priority部件的多重性被表示成0..1,从customer到priority的连接件也具有相同

的多重性。有一个或多个预订坐位,seat具有多重性值。由于customer和seat处在同一个

结构类中,在它们之间就没有必要画一个连接件。注意,Attraction 的边框是用虚线画出

的,这说明,这一部件是对一个不属于这个结构类的对象的引用。该引用随着TicketOrder

类的实例被创建和撤销,但是Attraction的实例是独立于TicketOrder类的。Seat部件与

Attraction的引用相连,因为该订单可能包含针对多个 Attraction(节目)的坐位,而每

个预订坐位都和一个特定的节目相关。从连接件的多重性可以看出每个Seat预订都与正好

一个Attraction对象相连。
 

7.2、对API建模

        对于一个正在将构件组装成系统的开发者,会经常想看到把这些部件粘合到一起的应用程

序编程接口(API)。API代表系统中的程序接缝,可以用接口和构件对它建模。

        识别系统中的接缝,将每个接缝建模为一个接口,并收集形成边界的属性和操作。

只显露那些对于在给定语境中进行可视化来说是比较重要的接口特性,隐藏那些不重要的

特性,必要时可以将这些特性保存在接口的规约中作为参考。    

        下图给出了构件Animator的API,可以看到形成这个API 的 4个接口:IApplication、

IModels、IRendring和IScripts。根据需求,其他构件可以使用一个或多个这样的接口。


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

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

相关文章

来自工业界的知识库 RAG 服务(四),FinGLM 竞赛冠军项目详解

背景介绍 在 前一篇文章 中介绍过智谱组织的一个金融大模型 RAG 比赛 FinGLM 以及 ChatGLM反卷总局 团队的项目,这篇文章继续介绍下获得冠军的馒头科技的技术方案。 建议不了解比赛背景信息的可以先查看 来自工业界的知识库 RAG 服务(三),FinGLM 竞赛获…

[YOLOv10涨点改进:注意力魔改 | 轻量级的 Mixed Local Channel Attention (MLCA),加强通道信息和空间信息提取能力]

本文属于原创独家改进:一种轻量级的Mixed Local Channel Attention (MLCA)模块,该模块考虑通道信息和空间信息,并结合局部信息和全局信息以提高网络的表达效果 1.YOLOv10介绍 论文:[https://arxiv.org/pdf/2405.14458] 代码: https://gitcode.com/THU-MIG/yolov10?utm_s…

基于R-Tree的地理空间数据分析加速

几年前,我正在做一个业余项目。我想创建一个 Web 应用程序,推荐当地的特色景点,例如咖啡馆、书店或隐藏的酒吧。我的想法是在地图上显示用户触手可及的所有兴趣点。我的数据集中有数十万个点,我必须巧妙地过滤用户给定范围内的数据…

DVWA - Brute Force

DVWA - Brute Force 等级:low ​ 直接上bp弱口令爆破,设置变量,攻击类型最后一个,payload为用户名、密码简单列表 ​ 直接run,长度排序下,不一样的就是正确的用户名和密码 ​ 另解: 看一下…

3DMAX网格插入插件使用方法讲解

3DMAX网格插入插件使用方法 3DMAX网格插入插件,在选择的面上安门窗、打螺丝、挖洞、插入眼耳口鼻及其它网格模型等可以分分钟搞定!它通过将面选择替换为库中的资源来加快建模过程。非常适合硬网格和有机建模! 【适用版本】 3dMax2013及更高版…

快速欧氏聚类与普通欧氏聚类比较

1、前言 文献《FEC: Fast Euclidean Clustering for Point Cloud Segmentation》介绍了一种快速欧氏聚类方法,大概原理可以参考如下图,具体原理可以参考参考文献。 2、时间效率比较:快速欧氏聚类VS普通欧氏聚类 网上搜集的快速欧式聚类,与自己手写的普通欧式聚类进行对比,…

网络知识:这些特殊的IP地址,具体的用途你都知道吗

目录 一、0.0.0.0 二、255.255.255.255 限制广播地址 三、127.0.0.1 本机地址 四、224.0.0.1 组播地址 五、169.254.x.x 六、10.x.x.x、172.16。x。x~172.31。x。x、192.168。x。x 私有地址 对于计算机网络来说,IP地址是非常重要的概念&#xff0c…

Objective-C 学习笔记 | 协议(property)

Objective-C 学习笔记 | 协议(property) Objective-C 学习笔记 | 协议(property) Objective-C 学习笔记 | 协议(property) iOS 应用经常会用 UITableView 实例来显示数据,但是它本身不包含数据…

采集罗克韦尔AB、西门子等PLC数据发布成HTTP接口

智能网关IGT-DSER集成了多种PLC的原厂协议,方便实现各种PLC的原厂协议转换为HTTP协议的服务端,通过网关的参数配置软件绑定JSON文件的字段与PLC寄存器地址,即可接收来自客户端的GET、PUT和POST命令,解析和打包JSON文件(JSON文件格…

去哪儿网PMO张璐受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 去哪儿网PMO张璐女士受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“数字化助力组织目标落地”。大会将于6月29-30日在北京举办,敬请关注! 议题简要 本次议题将分享去哪儿流程标准化&工具化…

我用chatgpt写了一款程序

众所周知,Chatgpt能够帮助人们写代码,前几天苏音试着完全用Chatgpt写一款Python程序 有一句话我很赞同,未来能代替人的不是AI,是会使用AI的人。 最终,写下来效果还不错,完全提升了我的办公效率。 开发前…

告密者斯诺登:永远不要信任 OpenAI 或其 ChatGPT 等产品|TodayAI

为什么 OpenAI 变得越来越难以信任 OpenAI,一家以开发先进人工智能技术而闻名的公司,正面临越来越多的信任危机。近期,一些令人不安的迹象使人们对这家公司的透明度和安全性产生了质疑。 首先,在 OpenAI 的旧金山办公室外&#…

顺安蜘蛛池四川官网下载

baidu搜索:如何联系八爪鱼SEO? baidu搜索:如何联系八爪鱼SEO? baidu搜索:如何联系八爪鱼SEO? 虽然影视泛目录很火,但超度站群版本自出现以来-直流量稳定,可惜这两年起站全靠域名。但话说回来,咱不能否认,只要用的域名好,做啥泛目录都有好…

湖北省小学毕业学籍照片采集流程及教师手机拍摄方法说明

随着教育信息化的不断推进,学籍管理也越来越规范和便捷。湖北省小学毕业学籍照片采集作为学籍管理的重要组成部分,对于确保学生信息的准确性和完整性具有重要意义。本文将详细介绍湖北省小学毕业学籍照片采集的流程,并提供教师使用手机拍摄照…

如何用优盘加密自己的电脑:人离后自动锁定

看电影的时候,看到有人展示,用优盘加密自己的电脑,人走开的时候拔下优盘,自动上锁。似乎很科幻,其实这样的软件非常多,不论是成品商业用的还是免费的,都非常多,很多版权管理比较强的…

结合gin框架在沙箱环境下实现电脑网站支付和当面支付

文章目录 配置支付宝开放平台编写代码测试电脑网站支付当面扫码支付 配置支付宝开放平台 支付宝开放平台 点击链接,扫码进入后,点击沙箱: 点击沙箱应用,可以看到APPID,接口加签方式选择系统默认密钥就行&#xff0…

前端JS必用工具【js-tool-big-box】学习,打开全屏和关闭全屏

这一小节,我们说一下 js-tool-big-box 工具库中,打开全屏和关闭全屏的方法学习。 我们知道,浏览器想打开全屏,按一下 F11 键就可以了,但一来这个功能不一定所有使用的用户都知道,二来在一些例如大屏的需求…

前端实现获取后端返回的文件流并下载

前端实现获取后端返回的文件流并下载 方法一:使用Axios实现文件流下载优点缺点 方法二:使用封装的Request工具实现文件流下载优点缺点 方法三:直接通过URL跳转下载优点缺点 结论 在前端开发中,有时需要从后端获取文件流&#xff0…

【解决方案】数据采集工作站数据传不上去?

数据采集工作站扮演着至关重要的角色,它们负责收集、处理和传输各种传感器和设备的数据。然而,有时会遇到数据传输失败的问题。本文将详细探讨数据采集工作站数据传不上去的可能原因及其解决方案。(更多了解采集器设备可前往苏州稳联&#xf…

芯片封测从入门到精通

文章目录 📑前言一、作者简介二、书籍亮点三、内容简介四、适读人群 📑前言 在科技日新月异的今天,芯片作为现代电子设备的核心部件,其性能与可靠性直接决定了整个产品的竞争力。而芯片封测,作为确保芯片性能与可靠性…