[转]UML之组件图
原文链接:UML之组件图——博客园
原文链接:UML建模(组件图)——腾讯云
原文链接:UML图详解(五)——组件图——360图书馆
基本概念#
组件图即是用来描述组件与组件之间关系的一种UML图。组件图在宏观层面上显示了构成系统某一个特定方面的实现结构。
- 组件图中主要包含三种元素,即组件、接口和关系。
- 组件图通过这些元素描述了系统的各个组件及之间的依赖关系,还有组件的接口及调用关系。此外,组件图还可以使用包来进行组织,使用注解与约束来进行解释和限定。
- 组件图在面向对象设计过程中起着非常重要的作用:它明确了系统设计,降低了沟通成本,而且按照面向对象方法进行设计的系统和子系统通常保证了低耦合度,提高了可重用性。
组件图的组成元素#
组件、接口、组件图中的关系、组件的内部结构。
组件#
- 组件是系统设计的一个模块化部分,它隐藏了内部的实现,对外提供了一组接口。
- 组件是一个封装完好的物理实现单元,它具有自己的身份标示和定义明确的接口。并且由于它对接口的实现过程与外部元素独立,所以组件具有可替换性。
组件在系统中一般存在三种类型,分别为部署组件、工作产品组件和执行组件:
- 配置组件是构成系统所必要的组件,是运行系统时需要配置的组件。
- 工作产品组件主要是开发过程的产物,是形成配置组件和可执行文件之前必要的工作产品,是部署组件的来源。工作产品组件并不直接参与到可执行系统中,而是用来产生系统的中间产品。
- 执行组件代表可运行的系统最终运行产生的运行结果,并不十分常见。
一个ATM机的组件:
- 系统设计的一个模块化部分
- 显示界面
- 读卡机
- 业务操作----查询、取款、转账、挂失
学校教务系统的组件:
- 系统设计的一个模块化部分
- 登录界面、业务动作、层业务实现层
- 学生管理、教师管理、成绩维护、选课
接口#
对于一个组件而言,它有两类接口,提供接口与需求接口:
- 提供接口:又被称为导出接口或供给接口,是组件为其他组件提供服务的操作的集合。
- 需求接口:又被称为引入接口,是组件向其他组件请求相应服务时要遵循的接口。
表示方式:
- 供接口用“棒棒糖”式的图形表示,即由一个封闭的圆形与一条直线组成。
- 需接口用“插座”式的图形表示,即由一个半圆与一条直线组成。
端口#
端口(port)是一个被封装的组件的对外窗口。在封装的组件中,所有出入组件的交互都要通过端口。组件对外可见的行为恰好是它端口的综合。此外,端口是有标识的。别的组件可以通过一个特定端口与另一个组件通信。在实现时,组件的内部组件通过特定的外部端口来与外界交互,因此,组件的每个部件都独立与其他部件的需求。端口允许把组件的接口划分为离散的并且可以独立使用的几部分。端口提供的封装性和独立性更大程度上保证了组件的封装性和可替换性。
组件的内部结构#
在UML 2规范中,组件允许通过嵌套结构来表现组件的内部结构。
子组件之间通过接口建立关系。图中组件边缘的小矩形被称为端口,端口可以理解为组件的入口与出口,组件通过端口与外部元素相互协作。端口上可以添加提供接口或需求接口来使组件得以扩展。
组件图中的关系#
依赖关系:组件与需求接口之间建立依赖关系,组件与组件之间建立依赖关系(说明在运行过程中A在某些行为上依靠组件B的支持)
实现关系:组件与提供接口之间建立实现关系
组件图的建模技术#
对源代码结构建模:
- 识别出感兴趣的源代码文件集合,并建模为组件。
- 如果系统规模较大,使用包对组件进行分组。
- 可以使用约束或注解来表示源代码的作者、版本号等信息。
- 使用接口和依赖关系来表示这些源代码文件之间的关系。
- 检查组件图的合理性,并识别源代码文件的优先级以便进行开发工作。
对可执行程序结构建模:
- 识别出相关的运行组件集合。
- 考虑集合中每个组件的类型。
- 如果系统规模较大,可以使用包对组件进行分组。这里包的使用可以对应于相应文件的文件存储结构。
- 分析组件之间的关系,使用接口和依赖关系建模这些关系。
- 考量建模结果是否实现了组件的各个特性,对建模的结果进行细化。
UML官方例子#
如图在网上商城系统有三个子系统组成:webstore,accounting,warehouses;
WebStore子系统包含三个组员,搜索引擎,购物车,认证系统。搜索引擎组元通过对外提供了一个ProductSearch接口运行其他组件搜索和查看商品,另外这接口是搜索引擎组件使用库存组件提供的Search Inventory接口来实现。购物车组元则把调用订单组元的的Manage Orders接口的功能封装下自己对外提供了onllineShopping接口,认证组元则允许用户创建账号,登陆或者退出,并且绑定订单到具体用户。
accounting子系统对外提供了Manage Orders 和 Manage Customers接口,并且通过代理连接到子系统内部的Orders和customers组元。Orders组元调用了Customers组元的Manager customers接口,Customers调用了Accounts组元的Manager Accounts模块。
Warehouses子系统提了Search Inventory and Manage Inventory组件,并且通过依赖方式是要了Accounting子系统的接口服务。
案例(分析一个已经存在的系统)#
画出下列描述的网上商城组件图:购物车、订单、库存、支付管理组件,使用组件图进行完善。
识别组件:购物车、订单、库存、支付管理。
识别组件之间的关系通过一个现实的例子。
在购买一件商品时,我们首先是浏览商品,了解商品详情。在商品详细页面上,我们可以看到一个“加入购物车”
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!