简介

组件图又称构建图,用于显示系统各组件及各组件关系的物理视图。

组件图通常包括组件、接口、关系、端口和连接器,用来显示程序代码中相应的模块、源文件或源文件集合之间的依赖和泛化关系。

组件图中的组件通常由类图中的一个或多个类(对象)实现为系统中的模块、源文件、过程文件或可执行文件,最终构成系统的绝大部分功能单元。

组件图建模步骤

    - 确定系统有哪些对外接口或端口

    - 确定系统要用到哪些组件,识别出系统中的重要模块、库文件、源代码文件、数据表或文件、可执行文件或文档等,将其建模为一个个组件

    - 确定系统中各组件的类型、规格、约束和内部接口

    - 确定系统中各组件之间、接口之间、组件与接口之间的关系

 

组件图的元素

组件图中的元素包括组件、接口、关系、端口和连接器,其中组件与组件之间有依赖关系,组件与接口之间有实现关系。

  • 组件: 承担具体功能单元的实际文件,一般为lib, jar, dll, exe等格式,遵循接口定义并提供具体的接口实现

       - 组件表示法

          - 图标表示法

             

              图标表示法              小图标表示法

                       

  

          - 构造表示法

          

    

       - 组件分类:

           - 配置组件:系统中各组件执行时的环境配置文件

           - 产品组件:系统运行前的静态源文件,包括模块、源代码文件、源数据文件、链接库文件、可执行文件等

           - 过程组件:系统运行时生成的组件,包括动态生成类文件,新增数据文件、日志文件、动态网页等

  • 接口:一组操作的集合,声明了组件提供或请求的服务契约,这个契约由实现和使用这个接口的组件共同遵守

       从调用从属角度可以把接口分为需求接口和提供接口。 

      - 需求接口: 也叫需接口,是指组件像其他组件请求服务时要遵循的接口

      - 提供接口:也叫供接口,是指组件给其他组件提供服务时实现的特性和约束

      

  • 关系:实现,依赖, 泛化(具体见组件图的关系部分)
  • 端口:属于外部接口,是被封装组件与外界的交互点。实现接口的组件使用端口来收发消息,与外界交互

      - 表示法:在UML2.0中表示为小方框

        

      - 与接口关系:需求接口通过端口从外部请求服务,提供接口通过端口向外部提供服务

      - 与组件关系:组件之间可以通过端口进行交互,如收发消息

  • 连接器:两个组件或两个端口之间的通信关系。UML2.0提供两种类型的连接器

      - 代理连接器:外部端口(端口)和内部接口之间的连接器

          

      - 组装连接器:组件之间的连接器。连接器在一个组件的需求接口和另一个组件的提供接口之间建立连接,使得前一个组件能够调用后一个组件提供的服务

        

组件图的关系

组件图中的关系有实现、依赖和泛化,主要涉及组件与组件之间、组件与接口之间、接口与接口之间。

  • 实现:组件与接口之间的关系

  • 依赖:组件与组件之间的关系

      如果两个组件中的两个类存在依赖关系,那么这两个组件之间的关系就可以表示为依赖关系

      

  • 泛化:组件与组件之间、接口与接口之间

      如果两个组件中的两个类之间或两个接口之间存在泛化关系,那么这两个组件之间的关系就可以表示为泛化关系

组件图示例

以银行短信客服系统为例

组件图与相近UML图的区别

  • 组件图与类图区别:组件图与类图在以下几个方面上有显著区别

      - 抽象层次:类图侧重对单个实体和细节逻辑的抽象;组件图侧重对模块化和部署实现的抽象

      - 抽象粒度:类图中以类、接口及它们之间关系为粒度;组件图中以功能单元为粒度,通常是若干个类或接口组成

      - 外部调用:外部调用类图中的类时可以根据其可见性直接调用其属性和操作;外部调用组件图中的组件则只能通过接口访问其操作

      - 可部署性:类图与单个实体和逻辑相对应,组织结构较为分散,不具有可部署性;组件图中的组件本身就是模块化、接近最终实现的功能单元,具有可部署性

  • 组件图与包图区别:组件图与包图在以下几个方面上有显著区别

      - 抽象层次:包图侧重对类、接口及包等元素的容器性抽象;组件图侧重对库文件、源代码文件、可执行文件等的模块化抽象

      - 组织结构:包图侧重静态的、不再改变的文件结构;组件图侧重动态的、随编译/链接/执行过程改变的文件结构

      - 可部署性:包图侧重源文件间的组织关系和层次,不具有可部署性;组件图中的组件本身具有动态可执行性,所以可部署

      - 元素关系:包图元素之间的关系大多是静态包含或关联;组件图元素之间的关系大多是动态调用或实现

组件图的注意事项

      - 组件粒度适中,既易于分析又不至于数目太庞大

      - 组件图中的元素关系需要与类图及包图中元素关系相对照,避免不一致产生歧义

      - 组件图中的元素名词与来源文件一直,与部署图中的元素一致

      - 组件图如果太过繁杂又不得不标全组件,可以适当拆分成总组件图和几个组件子图

Python设计模式 - UML - 组件图(Component Diagram)的更多相关文章

  1. Python设计模式 - UML - 类图(Class Diagram)

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

  2. Python设计模式 - UML - 通信图(Communication Diagram)

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

  3. Python设计模式 - UML - 定时图(Timing Diagram)

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

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

    简介 包图是对各个包及包之间关系的描述,展现系统中模块与模块之间的依赖关系.一个包图可以由任何一种UML图组成,可容纳的元素有类.接口.组件.用例和其他包等.包是UML中非常常用的元素,主要作用是分类 ...

  5. Python设计模式 - UML - 时序图(Sequence Diagram)

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

  6. Python设计模式 - UML - 活动图(Activity Diagram)

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

  7. Python设计模式 - UML - 状态图(State Machine Diagram)

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

  8. Python设计模式 - UML - 对象图(Object Diagram)

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

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

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

随机推荐

  1. 学会Git玩转GitHub全

    我这个笔记是利用HTML5来写的,所以我现附上代码以及并上照片:  当下@future 2019/4/29 19:55:33 <!DOCTYPE html><html> < ...

  2. js··事件捕捉

    给一个元素绑定事件,普通写法是 obj.onclick=function(){} 这就相当于给obj的onclick属性赋值是一个道理. obj.onclick=function(){} 这种写法有一 ...

  3. Javascript 2.4

    ---恢复内容开始--- 弱类型语言,可以随意修改变量的数据类型 "..."中的字符串包含 " 时需要转义字符  \" '...'中的而字符串包含 ' 时需要转 ...

  4. svn安装时遇到问题总结

    问题1: 一番折腾终于解决了,现将解决方法总结一下: 1.点击Window键+R键,如下图: 2.输入services.msc命令,然后点击“确定”,得到下图: 3.找到并选中“Windows Man ...

  5. [Android]-图片JNI(C++\Java)高斯模糊的实现与比較

    版权声明:本文作者:Qiujuer https://github.com/qiujuer; 转载请注明出处,盗版必究! !! https://blog.csdn.net/qiujuer/article ...

  6. zabbix之 自动发现磁盘io util 监控

    一.iostat Zabbix并没有提供模板来监控磁盘的IO性能,所以我们需要自己来创建一个.iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之 ...

  7. 第二章 C#语法基础(2.1 C#语言的数据类型一)

    C#的数据类型 [案例]本案例实现3位评委给一位选手评分,通过键盘输入各位评委的打分,通过屏幕输出该选手的平均分. [案例目的] (1)掌握变量的定义方式; (2)掌握常用的数据类型; (3)掌握数据 ...

  8. TCP/IP学习20180629-数据链路层-ARP、IP

    1.数据链路层:IP.ARP.RARPARP协议用来找到目标主机的Ethernet网卡Mac地址,IP协议用来承载数据ARP协议找到目标,IP协议传输数据2.IP协议ip协议是TCP/IP协议的核心, ...

  9. centos7如何查找文件?

    参考https://blog.csdn.net/allyli0022/article/details/77989664 一.find 根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为 ...

  10. 如何将maven依赖项打进jar包,将一个完整的项目打进jar包

    目的:我的目的就是将项目所有的文件,包括pom文件中依赖的jar包都打进一个jar包里面. 过程:将下面的内容放到pom文件里面. </dependencies> <build> ...