Python设计模式 - UML - 包图(Package Diagram)

时间:2022-10-15 12:49:37

简介

包图是对各个包及包之间关系的描述,展现系统中模块与模块之间的依赖关系。一个包图可以由任何一种UML图组成,可容纳的元素有类、接口、组件、用例和其他包等。包是UML中非常常用的元素,主要作用是分类、容纳其他元素。包与包之间的关系有泛化、细化和依赖,主要取决于包内部成员之间的关系。

包图建模步骤

    - 分析系统的模型元素,运用分层设计把概念、语义和逻辑上相近的元素包含在同一个包中

    - 对于每个包,分析包内每个元素的可访问属性,并标识出该元素的可见性

    - 确定包与包中元素之间的泛化、细化、依赖关系,相应处理重载、多重性及导入等关系

    - 分析包结构,对包进行refine, merge等操作

包图中的元素

包图中可以容纳很多元素,如类、接口、组件、注释等,这些元素在相应的UML图中都有涉及,这里主要介绍包元素。

  • 包名的位置:UML中使用文件夹的图标来表示包,包名可以放在第一栏,也可以放在第二栏

       放在第一栏

Python设计模式 - UML - 包图(Package Diagram)

放在第二栏

Python设计模式 - UML - 包图(Package Diagram)    Python设计模式 - UML - 包图(Package Diagram)

  • 包名的格式:每个包都有一个字符串格式的包名唯一标识该包,其中包名的格式有两种:

    - 简单包名

Python设计模式 - UML - 包图(Package Diagram)

    - 带路径包名

Python设计模式 - UML - 包图(Package Diagram)

  • 可见性

      '+': public:对所有包可见

      '-': private:对本包之外不可见

      '#': protected:对本包的子包可见

  • 传递性:包与包之间的关系和可见性具有具有传递性

      - 关系传递:如果包A和包B之间存在关系,包B和包C之间存在关系,那么包A和包C之间也存在关系          

      - 可见性传递:根据包与包之间依赖关系的不同传递可见性

            - <<import>>因为添加为公有元素的原因所以可见性可以传递

            - <<access>>的可见性由于添加为私有元素的原因可见性不可传递

  • 构造特性:和类的构造性相似,就是在包名关键字旁加入<<xxx>>作为补充说明,UML提供了5种构造型来描述包的特性

      - <<system>>: 表示该包代表一个系统

      - <<subsystem>>: 表示该包代表一个子系统

      - <<facade>>: 表示该包是由其他包构成的一个视图

      - <<stub>>: 表示该包是一个代理包,该代理包为其他包提供公共服务

      - <<framework>>:表示该包代表一个框架

包图类的关系

  • 泛化:继承关系,跟类之间的泛化关系相似,表明是一个包家族

Python设计模式 - UML - 包图(Package Diagram)

  • 细化:一个包中有另一个包中的所有元素,则第二个包是第一个包的细化

Python设计模式 - UML - 包图(Package Diagram)

  • 依赖:一个包中引用到了另一个包,箭头从输入方包指向输出方包

     

      <<use>>:一种默认的包依赖关系,表示客户包中的元素以某种方式使用着提供者包中的公共元素

Python设计模式 - UML - 包图(Package Diagram)

      <<import>>:最普遍的包依赖关系,表示提供者包中的公共元素被添加为客户包中的公共元素

Python设计模式 - UML - 包图(Package Diagram)

      <<access>>:表示提供者包中的公共元素被添加为客户包中的私有元素

Python设计模式 - UML - 包图(Package Diagram)

      <<merge>>:表示提供者包中的元素被扩展为客户包中的元素

Python设计模式 - UML - 包图(Package Diagram)

      <<trace>>:表示一个包的历史版本发展为另一个包的进化版本

Python设计模式 - UML - 包图(Package Diagram)

包图的高级特性

  • 分层:根据职责分层,目的是为了解耦。双向箭头表示相互依赖。

  Python设计模式 - UML - 包图(Package Diagram)

  • 嵌套:包里面是可以有包的。但应尽量避免使用多层嵌套包,2-3层就好

Python设计模式 - UML - 包图(Package Diagram)

包图示例

以书店在线订购系统为例

Python设计模式 - UML - 包图(Package Diagram)

包图的注意事项

    - 若包被撤销,则其中的元素也会被撤销掉

    - 合理最小化包之间的依赖

    - 合理最小化每个包中public, protected元素的个数及最大化private元素个数

    - 避免包之间的循环依赖

    - 根据类之间的依赖关系对包进行分层、分组、合并、细化

    - 包之间关系遵循高内聚、低耦合的特性

Python设计模式 - UML - 包图(Package Diagram)的更多相关文章

  1. Python设计模式 - UML - 类图&lpar;Class Diagram&rpar;

    简介 类图是面向对象分析和设计的核心,用来描述系统各个模块中类与类之间.接口与接口之间.类与接口之间的关系,以及每个类的属性.操作等特性,一般在详细设计过程中实施. 类图本身就是现实世界的抽象,是对系 ...

  2. Python设计模式 - UML - 组件图&lpar;Component Diagram&rpar;

    简介 组件图又称构建图,用于显示系统各组件及各组件关系的物理视图. 组件图通常包括组件.接口.关系.端口和连接器,用来显示程序代码中相应的模块.源文件或源文件集合之间的依赖和泛化关系. 组件图中的组件 ...

  3. Python设计模式 - UML - 通信图&lpar;Communication Diagram&rpar;

    简介 通信图表示对象之间的消息往来,是表述时序图中信息交互的另一种UML图,介绍完时序图就要对照学习一下通信图,二者是一体两面的. 通信图和时序图可以相互转换,二者的侧重点不同,通信图侧重哪些对象发送 ...

  4. Python设计模式 - UML - 定时图&lpar;Timing Diagram&rpar;

    简介 定时图也是一种交互图,用来描述对象或实体随时间变化的状态或值,及其相应的时间或期限约束.定时图应用较广,并不局限于软件工程领域. 定时图侧重与时间线相关的值或状态的改变,这些改变可能来自于收到消 ...

  5. Python设计模式 - UML - 时序图&lpar;Sequence Diagram&rpar;

    简介 时序图表示参与者与对象之间.对象与对象之间的动态交互过程及时序关系. 时序图详细而直观地展示了对象随时间变化的状态.调用关系和消息时序,时序图中的主要元素有:参与者(Actor), 对象(Obj ...

  6. Python设计模式 - UML - 活动图&lpar;Activity Diagram&rpar;

    简介 活动图描述从一个活动到另一个活动的执行顺序.约束条件.引用对象及状态结果等方面的控制流,适用于对业务用例.工作流程或程序实现建模. 活动图建模步骤 - 确定活动图的范围和边界,对哪些工作流.哪些 ...

  7. Python设计模式 - UML - 状态图&lpar;State Machine Diagram&rpar;

    简介 状态图主要用于描述对象在其生命周期中各种状态.状态之间的转换过程.触发状态转换的各种事件(条件)及执行的动作. 状态图构建步骤 - 找出适合用状态图描述的类.确定类中需要做状态图的重要对象 - ...

  8. Python设计模式 - UML - 对象图&lpar;Object Diagram&rpar;

    简介 对象图和类图的基本概念是类似的,可以看作类图在系统某一时刻的镜像,显示了该时刻系统中参与交互的各个对象以及它们之间的关系. 对象图的元素包括对象.链接.包,元素之间的关系和类图相似. 对象图建模 ...

  9. Python设计模式 - UML - 总览

    说到设计模式就不得不涉及建模思想,说到建模思想自然而然会应用UML,目前业界开源的UML工具很多,用起来也非常便捷.近几年来随着软件应用领域开发模式转向快速迭代试错,UML在敏捷开发,尤其是web及m ...

随机推荐

  1. 数据库多对多关联表(Python&amp&semi;MySQL)

    Python Python对MySQL数据库操作使用的是sqlalchemy这个ORM框架 #一本书可以有多个作者,一个作者又可以出版多本书 from sqlalchemy import Table, ...

  2. 【linux】文字提取

    提取IP地址: 方法①: ifconfig eth3|grep Bcast|cut -d ":" -f2|cut -d " " -f1 ifconfig: 显示 ...

  3. 转&period;&period;&period;&period;导入excel错误:外部表不是预期的格式 解决方案

    环境:win7+iis7+Office2007 在asp.net网站中导出Excel文件后,再把文件导入到数据库中. 读取Excel文件时,打开连接出错. 错误为:外部表不是预期的格式 解决:检查了一 ...

  4. PHP的几种排序算法的比较

    这里列出了几种PHP的排序算法的时间比较的结果,,希望对大家有所帮助 /* * php 四种排序算法的时间与内置的sort排序比较 * 3000个元素,四种算法的排序所用的时间比较 * 冒泡排序 85 ...

  5. Caused by&colon; org&period;xml&period;sax&period;SAXParseException&semi; lineNumber&colon; 1&semi; columnNumber&colon; 1&semi; Content is not allowed in

    1.错误描述 严重: Exception sending context initialized event to listener instance of class org.springframe ...

  6. git&lpar;三&rpar; 使用github

    1.创建仓库 ① 注册github账户,登录后,点击"New respository ". ② 在新页面中,输入项目的名称,勾选'readme.md',点击'create repo ...

  7. 通过JSP网页连接MySQL数据库,从MySQL数据库中读出一张表并显示在JSP网页中

    1.安装所需软件 ①安装java和tomcat,建立JSP网页最基础的软件②安装MySQL数据库(下载地址:https://www.mysql.com/)③安装Navicat Premium来查看数据 ...

  8. 字节数组与String类型的转换

    还是本着上篇文章的原则,只不过在Delphi中string有点特殊! 先了解一下Delphi中的string 1. string = AnsiString = 长字符串,理论上长度不受限制,但其实受限 ...

  9. mongodb导出数据表命令之mongoexport

    mongoexport导出文件格式支持csv和json,不同的是csv格式必须显示的指定要导出的字段,如: mongoexport -d rbac -c rbacs -o d:/web/rbac.cs ...

  10. Spring Boot干货系列:(三)启动原理解析

    Spring Boot干货系列:(三)启动原理解析 2017-03-13 嘟嘟MD 嘟爷java超神学堂 前言 前面几章我们见识了SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说 ...