Python设计模式 - UML - 组件图(Component Diagram)
简介
组件图又称构建图,用于显示系统各组件及各组件关系的物理视图。
组件图通常包括组件、接口、关系、端口和连接器,用来显示程序代码中相应的模块、源文件或源文件集合之间的依赖和泛化关系。
组件图中的组件通常由类图中的一个或多个类(对象)实现为系统中的模块、源文件、过程文件或可执行文件,最终构成系统的绝大部分功能单元。
组件图建模步骤
- 确定系统有哪些对外接口或端口
- 确定系统要用到哪些组件,识别出系统中的重要模块、库文件、源代码文件、数据表或文件、可执行文件或文档等,将其建模为一个个组件
- 确定系统中各组件的类型、规格、约束和内部接口
- 确定系统中各组件之间、接口之间、组件与接口之间的关系
组件图的元素
组件图中的元素包括组件、接口、关系、端口和连接器,其中组件与组件之间有依赖关系,组件与接口之间有实现关系。
- 组件: 承担具体功能单元的实际文件,一般为lib, jar, dll, exe等格式,遵循接口定义并提供具体的接口实现
- 组件表示法
- 图标表示法
图标表示法 小图标表示法

- 构造表示法

- 组件分类:
- 配置组件:系统中各组件执行时的环境配置文件
- 产品组件:系统运行前的静态源文件,包括模块、源代码文件、源数据文件、链接库文件、可执行文件等
- 过程组件:系统运行时生成的组件,包括动态生成类文件,新增数据文件、日志文件、动态网页等
- 接口:一组操作的集合,声明了组件提供或请求的服务契约,这个契约由实现和使用这个接口的组件共同遵守
从调用从属角度可以把接口分为需求接口和提供接口。
- 需求接口: 也叫需接口,是指组件像其他组件请求服务时要遵循的接口

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

- 关系:实现,依赖, 泛化(具体见组件图的关系部分)
- 端口:属于外部接口,是被封装组件与外界的交互点。实现接口的组件使用端口来收发消息,与外界交互
- 表示法:在UML2.0中表示为小方框

- 与接口关系:需求接口通过端口从外部请求服务,提供接口通过端口向外部提供服务
- 与组件关系:组件之间可以通过端口进行交互,如收发消息
- 连接器:两个组件或两个端口之间的通信关系。UML2.0提供两种类型的连接器
- 代理连接器:外部端口(端口)和内部接口之间的连接器

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

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

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

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

组件图示例
以银行短信客服系统为例

组件图与相近UML图的区别
- 组件图与类图区别:组件图与类图在以下几个方面上有显著区别
- 抽象层次:类图侧重对单个实体和细节逻辑的抽象;组件图侧重对模块化和部署实现的抽象
- 抽象粒度:类图中以类、接口及它们之间关系为粒度;组件图中以功能单元为粒度,通常是若干个类或接口组成
- 外部调用:外部调用类图中的类时可以根据其可见性直接调用其属性和操作;外部调用组件图中的组件则只能通过接口访问其操作
- 可部署性:类图与单个实体和逻辑相对应,组织结构较为分散,不具有可部署性;组件图中的组件本身就是模块化、接近最终实现的功能单元,具有可部署性
- 组件图与包图区别:组件图与包图在以下几个方面上有显著区别
- 抽象层次:包图侧重对类、接口及包等元素的容器性抽象;组件图侧重对库文件、源代码文件、可执行文件等的模块化抽象
- 组织结构:包图侧重静态的、不再改变的文件结构;组件图侧重动态的、随编译/链接/执行过程改变的文件结构
- 可部署性:包图侧重源文件间的组织关系和层次,不具有可部署性;组件图中的组件本身具有动态可执行性,所以可部署
- 元素关系:包图元素之间的关系大多是静态包含或关联;组件图元素之间的关系大多是动态调用或实现
组件图的注意事项
- 组件粒度适中,既易于分析又不至于数目太庞大
- 组件图中的元素关系需要与类图及包图中元素关系相对照,避免不一致产生歧义
- 组件图中的元素名词与来源文件一直,与部署图中的元素一致
- 组件图如果太过繁杂又不得不标全组件,可以适当拆分成总组件图和几个组件子图
Python设计模式 - UML - 组件图(Component Diagram)的更多相关文章
- Python设计模式 - UML - 类图(Class Diagram)
简介 类图是面向对象分析和设计的核心,用来描述系统各个模块中类与类之间.接口与接口之间.类与接口之间的关系,以及每个类的属性.操作等特性,一般在详细设计过程中实施. 类图本身就是现实世界的抽象,是对系 ...
- Python设计模式 - UML - 通信图(Communication Diagram)
简介 通信图表示对象之间的消息往来,是表述时序图中信息交互的另一种UML图,介绍完时序图就要对照学习一下通信图,二者是一体两面的. 通信图和时序图可以相互转换,二者的侧重点不同,通信图侧重哪些对象发送 ...
- Python设计模式 - UML - 定时图(Timing Diagram)
简介 定时图也是一种交互图,用来描述对象或实体随时间变化的状态或值,及其相应的时间或期限约束.定时图应用较广,并不局限于软件工程领域. 定时图侧重与时间线相关的值或状态的改变,这些改变可能来自于收到消 ...
- Python设计模式 - UML - 包图(Package Diagram)
简介 包图是对各个包及包之间关系的描述,展现系统中模块与模块之间的依赖关系.一个包图可以由任何一种UML图组成,可容纳的元素有类.接口.组件.用例和其他包等.包是UML中非常常用的元素,主要作用是分类 ...
- Python设计模式 - UML - 时序图(Sequence Diagram)
简介 时序图表示参与者与对象之间.对象与对象之间的动态交互过程及时序关系. 时序图详细而直观地展示了对象随时间变化的状态.调用关系和消息时序,时序图中的主要元素有:参与者(Actor), 对象(Obj ...
- Python设计模式 - UML - 活动图(Activity Diagram)
简介 活动图描述从一个活动到另一个活动的执行顺序.约束条件.引用对象及状态结果等方面的控制流,适用于对业务用例.工作流程或程序实现建模. 活动图建模步骤 - 确定活动图的范围和边界,对哪些工作流.哪些 ...
- Python设计模式 - UML - 状态图(State Machine Diagram)
简介 状态图主要用于描述对象在其生命周期中各种状态.状态之间的转换过程.触发状态转换的各种事件(条件)及执行的动作. 状态图构建步骤 - 找出适合用状态图描述的类.确定类中需要做状态图的重要对象 - ...
- Python设计模式 - UML - 对象图(Object Diagram)
简介 对象图和类图的基本概念是类似的,可以看作类图在系统某一时刻的镜像,显示了该时刻系统中参与交互的各个对象以及它们之间的关系. 对象图的元素包括对象.链接.包,元素之间的关系和类图相似. 对象图建模 ...
- Python设计模式 - UML - 总览
说到设计模式就不得不涉及建模思想,说到建模思想自然而然会应用UML,目前业界开源的UML工具很多,用起来也非常便捷.近几年来随着软件应用领域开发模式转向快速迭代试错,UML在敏捷开发,尤其是web及m ...
随机推荐
- 熟悉基本的Linux文件系统命令
修改配置是以后工作中必然经历的,要做好基础工作,两天的学习也说明了在Linux系统中修改配置的重要性,多看多学习. 每周总结学习和经验到网站上,坚持1w个小时,加油! Linux的安装环境 cen ...
- 备忘:EBS参考链接
帮助手册查阅网址http://docs.oracle.com/cd/V46499_01/current/html/docset.html 官方 http://www.oracleappshub.co ...
- 【SpringBoot】搜索框架ElasticSearch介绍和整合SpringBoot
========================12章 搜索框架ElasticSearch介绍和整合SpringBoot ============================= 加入小D课堂技术交 ...
- C++对象的构造、析构与拷贝构造
今天下午在研究虚函数的时候遇到了一个问题,觉得很有意思,记录一下. 先看代码: class Base { public: Base(int value) { m_nValue = value; cou ...
- tcpdump抓包常用参数和用法
tcpdump 与wireshark Wireshark(以前是ethereal)是Windows下非常简单易用的抓包工具.但在Linux下很难找到一个好用的图形化抓包工具.还好有Tcpdump.我们 ...
- 一 Struts框架(上)
Struts2 是基于MVC的WEB框架 经过六年多的发展,Struts1已经成为了一个高度成熟的框架,不管是稳定性还是可靠性都得到了广泛的证明.市场占有率超过20%,拥有丰富的开发人群,几乎已经成为 ...
- jlet
项目地址 : https://github.com/kelin-xycs/jlet jlet jlet 一个 javascript 的 小 Lib 本来想写一个 javascript 的 小 Lib ...
- Firebug 没死,活在 Firefox DevTools 中
伯乐在线转注:2016年12月7日有一条<Firebug 宣布停止开发更新>的资讯,不少朋友误认为以后用不到 Firebug 了.其实在 2015 年 Firebug 已经在着手整合到 F ...
- ADS1.2和JlinkV8 erro starting external process,Process error code 87(0x57)参数错误
ADS1.2和JlinkV8 erro starting external process,Process error code 87(0x57)参数错误 网上的大致说法是说这个跟W7有关 说是将I ...
- 黄聪:OTP动态密码_Java代码实现
OTP认知 动态口令(OTP,One-Time Password)又称一次性密码,是使用密码技术实现的在客户端和服务器之间通过共享秘密的一种认证技术,是一种强认证技术,是增强目前静态口令认证的一种非常 ...