【UML用户指南】-13-对高级结构建模-包

目录

1、名称

2、元素

3、可见性

4、引入与引出


用包把建模元素安排成可作为一个组来处理的较大组块。可以控制这些元素的可见性,使一些元素在包外是可见的,而另一些元素要隐藏在包内。也可以用包表示系统体系结构的不同视图。

狗窝并不复杂:有四面墙,其中一面墙上有一个能让狗通过的洞,还有一个顶棚。在搭一个狗窝时,实际上只需要一小堆木材,仅此而已。

房屋比较复杂。墙、天花板和地板组成了较大的抽象体,称之为房间。甚至可以把这些房间组成更大的组块,如公共区、卧室区、工作区等。这些较大的组可能并不表明它们本身就是与物理房屋有关系的任何事物,而可能只是给出的在逻辑上有关的屋中一些房间的名称,当谈论怎样使用这幢房屋时就使用这些名称。

在UML中,把组织模型的组块称之为包。包是用来把元素组织成组的通用机制。包有助于组织模型中的元素,使得更容易理解它们。包也允许控制对包的内容的访问,从而控制系统体系结构中的接缝。

1、名称

每个包都必须有一个有别于其他包的名称。名称(name)是一个文字串。单独的名称叫做简单名(simple name),限定名(qualified name)是以包所位于的外围包的名称作为前缀的包名。

用双冒号(::)分隔包名。通常在图形中仅显示包名

如图所示。就像类那样,可以绘制用标记值或附加的分栏作为修饰的包,以显示包的细节。

2、元素

包可以拥有其他元素,这些元素可以是类、接口、构件、结点、协作、用况和图,甚至可以是其他包。拥有是一种组成关系,这意味着元素被声明在包中。如果包被撤销了,则元素也要被撤销。一个元素只能被一个包所拥有。

包形成了一个命名空间,这意味着在一个包的语境中同一种元素的名称必须是唯一的。例如,同一个包不能拥有两个名为Queue 的类,

但这种情况是允许的:在 P1 包中有一个名为Queue的类,而在P2包中又有另一个(不同的)名为Queue的类。实际上,类P1::Queue和类P2::Queue是不同的类,这可以由它们各自的路径名区别开来。不同种类的元素可以有相同的名称。
 

3、可见性

 可见性表明一个类对于在同一包内声明的其他类是可见的,但是对于那些在其他包中声明的类是不可见的。通过在类名前加前缀“~”符号来表示包的可见性。

可以通过在元素的名称前面加一个适当的可视符号,来描述包所拥有的元素的可见性。公共的(public)元素用“+”号作为名称的前缀,如上图中的OrderForm。包的各公共部分一同构成包的接口。

像类一样,可以用“#”号或“-”号作为元素的名称的前缀指明元素是受保护的(protected)或私有的(private)。受保护的元素仅对从这个包继承的包可见私有的元素在这个包外部完全不可见

4、引入与引出

假设有两个名称分别为A和B的并列的类。因为二者是对等的,A能看见B,B也能看见A,因此它们可以相互依赖。如果二者正好可以组成一个小系统,那么确实就不需要任何种类的包装机制了。

现在设想有几百个这样并列的类,对所能编织的错综复杂的关系网没有任何限制,而且又没有什么办法能理解如此庞大且未加组织的一群类。要使简单的、无约束的访问不至于按比例地增加,这对于大系统而言是一个非常现实的问题。对于这种情景,需要某种受控的包装机制来组织抽象。

现在假设A放在一个包中,B放在另一个包中,而且这两个包是并列的。再假设A和B在各自的包中都被声明为公共的。这是一种非常不同的情形。虽然A和 B都是公共的,但是一个类被另一个包中的类访问需要限定名。然而,如果A的包引入B的包,A就可以直接看见B,但若没有限定名那么B还是看不见A。引入关系把来自目标包中的公共元素添加到进行引入的包的公共命名空间中。

在UML中,用由衍型import修饰的依赖对引入关系建模。通过把抽象包装成有含义的组块,然后用引入关系控制对它们的访问,就能够控制大量抽象的复杂性。

使用了两个衍型,即引入(import)和访问(access)

引入把目标包的内容增加到源包的公共命名空间中,因而不必对名称进行限定。这样就允许

出现原本为保持模型形式良好而必须避免的命名冲突。

访问把目标包的内容增加到了源包的私有命名空间里。所不同的情况是假如第三个包引入源包,就不能再引出已经被引入的目标包元素。

包的公共部分称为它的引出(export)

上图中,包GUI引出两个类,它们是Window和Form。EventHandler没有被GUI引出,EventHandler是包的受保护的部分。

一个包引出的部分,对于那些可见到该包的其他包的内容是可见的。

Policies显式地引入包GUI。因此,对于类GUI::Window和类GUI::Form,包Policies的内容使用简单名Window和Form就能访问它们。然而,由于GUI::EventHandler是受保护的,因此它是不可见的。由于包Server没有引入GUI,Server中的内容必须用限定名才能访问GUI的公共内容,例如,GUI::Window。类似地,由于 Server 中的内容是私有的,GUI 的内容无权访问Server中的任何内容,即使用限定名也不能访问它们。

引入和访问依赖是传递的。在本例中,Client引入 Policies,Policies引入 GUI,所以Client就传递地引入了GUI。因此,Client的内容可以访问Policies的引出,同样可以访问GUI的引出。如果Policies是访问GUI,而不是引入它,则Client不能把GUI中的元素添加到自己的命名空间,但是仍然能通过限定名(如GUI::Window)引用它们。

在类和包之间有一个重要的区别:

类是从问题中或解中所发现的事物的抽象,

包是用于组织模型中的事物的机制。

包在系统运行时不出现,它们完全是组织设计的机制。

例如,上图显示了一组包,它们把信息系统设计视图中的类组织成一个标准的三级体系结构。

包 User Services 中的元素提供了呈现信息和收集数据的可视化界面。

包Data Services中的元素负责维护、访问和修改数据。

包 Business Services中的元素为另两个包的元素搭桥,并包含了管理用户请求(为了执行业务上的任务)的所有类和其他元素,包括支配数据操纵策略的业务规则。

视图是对系统的组织和结构的投影,它关注系统的一个特定方面。

该定义有两个含义:

第一个含义是,可以把系统分解成若干几乎正交的包,每个包表达了一组体系结构上的重大决策。例如,可以有设计视图、交互视图、实现视图、部署视图和用况视图。

第二个含义是,这些包都拥有与相应视图密切相关的所有抽象。例如,模型中的所有构件都属于代表实现视图的包。然而,包可以引用其他包拥有的元素。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序题+贪心

排序力扣题 一&#xff1a;合并区间 56. 合并区间 方法一&#xff1a;先排序再合并 如图&#xff0c;把区间按照起点从小到达排序&#xff0c;如果起点相同那么按照终点小的优先排序 然后每次记录一个区间&#xff0c;访问下一个区间&#xff1a; 如果下一个区间的起点<前…

Hexo+Github搭建个人博客教程

hexo官网&#xff1a;https://hexo.io/zh-cn/ butterfly 主题设置&#xff1a;https://butterfly.js.org/ GitHub地址&#xff1a;https://github.com/jerryc127/hexo-theme-butterfly 基础命令 初始化博客命令&#xff1a;hexo init “文件名” 开启本地服务&#xff08;本…

支付交易——在线支付系统基本概念

摘要 本文聚集于实战&#xff0c;只讲解最实用的知识点&#xff0c;至于支付起源、在线支付发展历程等科普知识&#xff0c;感兴趣的读者可参考其它优秀的支付类书籍或网络上其它优秀的文章。本章内容对大部分专业概念进行了极致简化&#xff0c;以便更好地帮助读者入门。实际…

XSS(跨站脚本攻击)

1.什么是xss XSS全称&#xff08;Cross Site Scripting&#xff09;跨站脚本攻击&#xff0c;为了避免和CSS层叠样式表名称冲突&#xff0c;所以改为了 XSS&#xff0c;是最常见的Web应用程序安全漏洞之一,XSS是指攻击者在网页中嵌入客户端脚本&#xff0c;通常是JavaScript编写…

Word中插入Mathtype右编号,调整公式与编号的位置

当你已经将mathtype内置于word后&#xff0c;可以使用右编号快速插入公式 但是往往会出现公式和编号出现的位置或之间的距离不合适 比如我在双栏下插入公式&#xff0c;会发现插入的公式与编号是适用于单栏的 解决办法&#xff1a; 开始->样式->MTDisplayLquation -&g…

【Python Cookbook】S02E04 文本模式的匹配和查找 match()、search()、findall() 以及 捕获组和 + 的含义

目录 问题解决方案讨论 问题 本文讨论一些按照特定的文本模式进行的查找和匹配。 解决方案 如果想要匹配的只是简单文字&#xff0c;通常我们使用一些内置的基本字符串方法即可&#xff0c;如&#xff1a;str.find()&#xff0c;str.startwith()&#xff0c;str.endswith() …

电脑存储设备,固态硬盘介绍,usb接口

简介 存储设备分为两大类主存和辅存&#xff0c;另外还有专门提供存储服务的网络存储 主存储器 随机存取存储器&#xff08;RAM, Random Access Memory&#xff09; 特点&#xff1a;高速、易失性存储器&#xff0c;断电后数据丢失。用途&#xff1a;临时存储正在使用的数据…

【Oracle生产运维】数据库服务器负载过高异常排查处理

说明 在Oracle数据库运维工作中&#xff0c;经常会遇到Oracle数据库服务器平均负载&#xff08;load average&#xff09;突然异常升高&#xff0c;如果放任不管&#xff0c;严重的情况下会出现数据库宕机、服务器重启等重大故障。因此&#xff0c;当发现数据库服务器平均负载…

log4j日志打印导致OOM问题

一、背景 某天压测&#xff0c;QPS压到一定值后机器就开始重启&#xff0c;出现OOM&#xff0c;好在线上机器配置了启动参数-XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/**/**heapdump.hprof。将dump文件下载到本地&#xff0c;打开Java sdk bin目录下的jvisualvm工具&a…

事业单位——被逆袭篇

目录 一、结果 二、考试 三、时间 四、复习 五、总结 一、结果 图1&#xff1a;2024年浙江广播电视集团下属浙江省中波发射管理中心公开招聘笔面试结果 准考证号笔试面试总成绩排名备注107016070.866.48310702416555.44107134390.871.681入围107146869.869.08210715406454.…

电影推荐系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;免费电影管理&#xff0c;付费电影管理&#xff0c;电影论坛管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;付费电影&#x…

Java:111-SpringMVC的底层原理(中篇)

这里续写上一章博客&#xff08;110章博客&#xff09;&#xff1a; 现在我们来学习一下高级的技术&#xff0c;前面的mvc知识&#xff0c;我们基本可以在67章博客及其后面相关的博客可以学习到&#xff0c;现在开始学习精髓&#xff1a; Spring MVC 高级技术&#xff1a; …

Spring Boot 项目启动时在 prepareContext 阶段做了哪些事?

概览 如果你对Spring Boot 启动流程还不甚了解&#xff0c;可阅读《Spring Boot 启动流程详解》这篇文章。如果你已了解&#xff0c;那就让我们直接看看prepareContext() 源码。 private void prepareContext(ConfigurableApplicationContext context, ConfigurableEnvironme…

邻接矩阵深度优先遍历

深度优先遍历&#xff0c;就是一条路&#xff0c;走到底&#xff0c;然后再走下一个岔路。 下面代码就主要使用递归来进行&#xff0c;当然也可以借助栈来实现。 private void traverse(char v, boolean[] visited) {int index _getIndexOfV(v);//获取v顶点在vertexS字符数组…

synchronized 的底层实现

用户态与内核态 JDK 早期&#xff0c;synchronized 叫做重量级锁&#xff0c; 因为申请锁资源必须通过 kernel&#xff08;指大多数操作系统的核心部分&#xff09;&#xff0c;系统调用。 ;hello.asm ;write(int fd, const void *buffer, size_t nbytes)section datamsg db …

Spring Boot整合Redis实现发布/订阅功能

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

selenium非全新的方式同时启动多个浏览器又互不影响的一种实现方法,欢迎讨论!

最近在做模拟浏览器批量定时自动点击实现批量操作功能&#xff0c;主要使用selenium&#xff0c;但是发现selenium直接调用本地浏览器&#xff0c;启动的是一个全新的&#xff08;与手动打开的不一致&#xff09;&#xff0c;网站可以检测到&#xff0c;每次都要双重验证(密码登…

AI服务器相关知识

在当今社会&#xff0c;人工智能的应用场景愈发广泛&#xff0c;如小爱同学、天猫精灵等 AI 服务已深入人们的生活。随着人工智能时代的来临&#xff0c;AI 服务器也开始在社会各行业发挥重要作用。那么&#xff0c;AI 服务器与传统服务器相比&#xff0c;究竟有何独特之处&…

收音机的原理笔记

1. 收音机原理 有线广播&#xff1a;我们听到的声音是通过空气振动进行传播&#xff0c;因此可以通过麦克风&#xff08;话筒&#xff09;将这种机械振动转换为电信号&#xff0c;传到远处&#xff0c;再重新通过扬声器&#xff08;喇叭&#xff09;转换为机械振动&#xff0c…

物联网概念

物联网 物联网简介物联网体系结构物联网体系结构定义物联网体系结构设计原则物联网体系结构四层物联网体系结构感知控制层数据传输层数据处理层应用决策层 物联网关键技术感知标识技术网络与通信技术云计算技术安全技术 已有物联网相关应用架构无线传感器网络的体系结构EPC/UID…