学过Java编程的都知道什么是Package,Package在Java编程语言中是一种包机制,这种包机制可以把若干个程序模块或包(在Java语言中,单个的程序模块也称为类)组织起来,构成一个具有层次结构的子系统。Package实际上对应了系统的层次结构。

UML的包图模型类似Package结构,不同的是UML包图模型仅描述Package高层次的模块间关系,对于较低层的模块一般不涉及,这些较低层的模块一般通过设计类图来描述。UML包图属于高层设计模型。

当我们使用包图模型设计一个复杂系统时。首先要将系统进行功能分解,把一个大的系统划分为多个子系统。然后将整个系统作为一个包,划分的子系统作为子包放置在系统包内,包允许多层嵌套,建议最多两层,嵌套多层的包会增加较多的编码工作量,系统架构也会变得复杂。下图是图书馆借书系统的包图模型。

图 1 图书馆借书系统的包图模型

在包图中主要使用两个符号。

一个是带标题的矩形框,它表示主系统或子系统(也可以说主包或分包),标题填入主系统或子系统的名称,最外层的方框是主系统,子系统被放置在主系统方框之内,表示这些子系统是主系统的一部分。

一个是带箭头的虚线,表示包与包之间存在依赖关系,箭头的尾部表示被依赖的包,而头部是独立的包。例如在上图中,读者管理子系统需要通过图书管理子系统获取可借阅的图书,同时又需要从系统维护子系统中获取登录读者的权限,因此读者管理子系统依赖于图书管理子系统和系统维护子系统。另外,图书管理子系统也依赖于系统维护子系统。

包的依赖性表示一个包中的结构或代码依赖于另一个包。例如读者管理子系统在查询可借阅图书时,会调用图书管理子系统的图书查询方法获取图书列表信息。包之间的依赖关系会导致被依赖包的代码发生变动时,依赖包也要进行相应地修改。

那么我们如何判断两个子系统之间存在依赖关系呢?我们来看生活中的一个场景。

假设一个人赚了很多钱,他想把赚来的钱存到银行,他需要到银行把这笔钱存上。注意这时这个存钱的人就和银行产生了关系,他需要银行帮他把钱存起来,还能赚取利息。很显然这个人的存钱行为需要银行的协助来完成,也可以说这个人的存钱行为依赖于银行。这就是人和银行的依赖关系,人要存钱赚取利息就会依赖于银行。

图 2人的存钱行为依赖于银行

我们再来看一个空调系统的例子。空调对温度的调节依靠两个子系统,一个子系统是温度控制子系统,一个子系统是空调启动控制子系统。温度控制子系统用于感知周围环境的温度,根据用户设置的温度情况,向空调启动控制子系统发出启动或关闭空调的指令,从而调节空调周围的环境温度。因此说温度控制子系统和空调启动控制子系统是存在依赖关系的,空调启动控制子系统依赖于温度控制子系统,因为它需要等待温度控制器发出的启动和关闭信号。

图 3 空调系统的温控原理图

上图是空调系统的温控原理图,从图中可以看出,空调启动控制子系统依赖于温度控制子系统,它需要等待温度控制子系统发出的信号。下图是绘制的该系统的包图。

图 4 空调温控系统包图

现在我们结合前面学过的包图的知识,来绘制人脉项目系统包图。包图可以使用Visio工具的UML静态结构图来绘制,包图的主要图形符号见下表。

系统分析员和系统设计师根据人脉系统的前期调研,把人脉系统划分为用户子系统、名片子系统和数据库子系统三个子系统。下图是绘制的系统包图。

图 5 人脉系统包图

在上面的包图中,名片子系统和用户子系统是依赖于数据库子系统的,因为它们都需要从数据库中存取数据。名片子系统也依赖于用户子系统,因为它需要从用户子系统中获取用户的信息,并与名片数据关联起来。

包图是UML建模语言用于从较高层次描述系统结构的模型。在实际的系统设计中,如果已经绘制了系统结构图和系统流程图,可以不用绘制包图。包图的优势在于可以和Java编程语言的Package对应起来,再结合详细的设计类图,可以提供很好的代码自动生成机制。

系统架构——掌握和使用UML包图模型相关推荐

  1. 第13章 逻辑架构和UML包图

    逻辑架构和层 逻辑架构是软件类的宏观组织结构,它将软件类组织为包(或命名空间).子系统和层等. 层是对类.包或子系统的分组,具有对系统主要方面加以内聚的职责.通常包括:1.用户界面.2.应用逻辑和领域 ...

  2. [跟我学UML] UML包图中的包引入和包合并

    缩略语     UIS     UML Infrastructure Specification   UML基础结构规范     UML    Unifed Modeling Language     ...

  3. java 包图_九步实现UML包图创建

    本文和大家一起讨论一下UML包图的概念,包是一个UML结构,它使得你能够把诸如用例或类之类模型元件组织为组.包被描述成文件夹,可以应用在任何一种UML图上. UML包图简介 一个"包图&qu ...

  4. 系统架构-UML 包图

    经过了一个上午的讨论,对于UML的包图(系统架构图)又有了更深一层的理解. 第一个图: 简单解释:UI:界面层,BLL:业务逻辑层:DAL:数据处理层.FUN:封装了常用业务逻辑. 此图不合理原因: ...

  5. [跟我学UML] UML包图中的包和命名空间

    本文基于UML规范,介绍了包图中的包和命名空间.此外,通过举例来帮助读者加深理解. ...请打开附件阅读全文. 转载于:https://blog.51cto.com/yunli/186628

  6. 系统架构设计师-软件开发模型(构件组装模型)

    随着软构件技术的发展,人们开始尝试利用软构件进行搭积木式的开发,即构件组装模型.在构建组装模型中,当经过需求分析定义出软件功能后,将对构件的组装结构进行设计,将系统划分成一组构件的集合,明确构件之间的 ...

  7. (软考笔记) —— 系统架构设计师 - UML建模与架构文档化

    文章目录 UML建模与架构文档化 UML 现状与发展 UML起源 UML 体系结构演变 UML 的应用与未来 UML基础 概述 用例和用例图 交互图 类图和对象图 状态和活动图 状态图 活动图 构件图 ...

  8. UML的九种图+包图

    UML的九种图:用例图,类图,对象图,状态图,活动图,序列图,协作图,构件图,部署图.外加包图. (一).用例图 1.定义:由参与者(Actor).用例(Use Case)以及它们之间的关系构成的用于 ...

  9. 亿万级图数据库 Nebula Graph 的数据模型和系统架构设计

    Nebula Graph:一个开源的分布式图数据库.作为唯一能够存储万亿个带属性的节点和边的在线图数据库,Nebula Graph 不仅能够在高并发场景下满足毫秒级的低时延查询要求,还能够实现服务高可 ...

  10. 【软件工程】订货系统的UML类图

    [软件工程]绘制状态转换图 1. 绘制内容 2. 数据流图 1. 绘制内容 研究教材第2章给出的订货系统的例子,考察在这个系统中有哪些类,建立订货系统的对象模型.用UML类图表示.对例子中描述不清楚的 ...

最新文章

  1. 清理Mac上的软件容易吗?
  2. Dubbo的静态服务
  3. poj 1664 放苹果 DPDFS
  4. redis(19)--事务
  5. 好看的扁平化大气IT个人简历网页模板
  6. 二开微信表情包小程序魔改版源码
  7. Unity间隔或延迟固定的时间让物体移动一下,绘制线条
  8. 多线程Thread和Runnable
  9. 教材推荐 PRML_模式识别与机器学习
  10. 华为ensp中AC下发配置
  11. 军犬舆情每日热点:台湾海峡发生6.2级地震;泉州通报碳九泄漏事件处理结果
  12. Vue+TS Echarts股票图
  13. 粒子群算法理解+求解01背包问题
  14. 第34次中国互联网络发展状况统计报告
  15. 第16届全国大学生智能汽车竞赛——百度智慧交通赛项技术方案公开
  16. 八大经典排序算法(java版)
  17. 手机网页图片自适应大小 background-size css 图片全屏 背景尺寸设置
  18. 使用RestTemplate:报错Could not extract response: no suitable HttpMessageConverter found for response typ
  19. Revit API 开发(12): Revit 文件存储结构
  20. 新版本idea shit+shit存在搜索历史记录

热门文章

  1. 开源一个 Python 中文数据结构和算法教程
  2. 获取域名服务器信息吗,获取域名的WHOIS信息
  3. 中国大侠vs生化战士(转)
  4. day2-requests和bs4
  5. Android之HttpURLConnection应用实例:武大教务系统获取课表
  6. 用Asp.net 就能轻松实现铁道部的订票系统
  7. android 解压jar,解压和打包Jar - 海阔天空玩世不恭的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. Android Studio开发手机APP(一)
  9. 解决tensorflow2.x中使用tf.contrib.slim包时出现的No module named:tensorflow.contrib 问题
  10. 利用urllib读取JSON,然后将JSON解析为Python对象 —— python学习笔记