Python设计模式 - UML - 组件图(Component Diagram)

时间:2023-12-06 16:48:32

简介

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

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

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

组件图建模步骤

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

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

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

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

 

组件图的元素

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

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

       - 组件表示法

          - 图标表示法

             

              图标表示法              小图标表示法

Python设计模式 - UML - 组件图(Component Diagram)                        Python设计模式 - UML - 组件图(Component Diagram)

  

          - 构造表示法

          Python设计模式 - UML - 组件图(Component Diagram)

    

       - 组件分类:

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

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

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

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

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

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

Python设计模式 - UML - 组件图(Component Diagram)

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

Python设计模式 - UML - 组件图(Component Diagram)

      

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

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

        Python设计模式 - UML - 组件图(Component Diagram)

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

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

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

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

          Python设计模式 - UML - 组件图(Component Diagram)

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

        Python设计模式 - UML - 组件图(Component Diagram)

组件图的关系

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

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

Python设计模式 - UML - 组件图(Component Diagram)

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

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

      Python设计模式 - UML - 组件图(Component Diagram)

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

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

Python设计模式 - UML - 组件图(Component Diagram)Python设计模式 - UML - 组件图(Component Diagram)

组件图示例

以银行短信客服系统为例

Python设计模式 - UML - 组件图(Component Diagram)

组件图与相近UML图的区别

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

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

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

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

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

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

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

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

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

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

组件图的注意事项

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

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

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

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