UML静态图之包图详解

发布时间:2026/6/5 15:03:28

UML静态图之包图详解 这张是一张标准UML包图Package Diagram用来描述一个购物系统中各个模块包之间的依赖关系。一、核心元素包Package图里的每个矩形带小标签都是一个包模块代表系统中一个独立的功能单元Web Shopping/Mobile Shopping/Phone Shopping/Mail Shopping不同渠道的购物入口模块Payment支付模块Shopping Cart购物车模块Customer客户模块Inventory库存模块二、包图里的标准关系逐个解释1. «use»使用依赖 / Usage Dependency含义表示一个包的元素需要用到另一个包的元素是最常见的包依赖关系。例子Web Shopping→ «use» →PaymentWeb购物模块需要调用支付模块的功能。Mail Shopping→ «use» →Shopping Cart邮件购物模块需要使用购物车模块。2. «merge»包合并 / Package Merge含义表示将多个包的定义合并到一个公共的命名空间常用于复用和扩展模型。例子所有渠道模块Web/Mobile/Phone/Mail都 «merge» 到一起表示它们共享相同的基础定义形成一个统一的“购物渠道”概念。3. «access»私有导入 / Private Import含义表示一个包私有地导入另一个包的元素导入的元素不会暴露给外部。例子Payment→ «access» →Shopping Cart支付模块内部使用购物车模块的元素但不会把这些元素暴露给其他包。4. «import»公共导入 / Public Import含义表示一个包公共地导入另一个包的元素导入的元素会成为当前包的公共元素外部包可以直接访问。例子Payment→ «import» →Customer支付模块公开导入客户模块的元素外部包可以直接使用这些元素。Shopping Cart→ «import» →Inventory购物车模块公开导入库存模块的元素。三、整体逻辑这个系统的模块关系渠道层Web/Mobile/Phone/Mail Shopping所有购物入口它们都依赖支付和购物车模块并且共享基础定义通过«merge»。业务模块层Payment、Shopping Cart核心业务模块依赖底层的客户和库存模块。基础模块层Customer、Inventory提供客户和库存的基础数据被上层模块导入和使用。四、一句话总结这张包图的核心目的是清晰展示系统模块的划分明确模块间的依赖、导入、复用关系让你一眼看懂哪个模块依赖哪个模块、依赖的方式是什么1. «use» 使用最常见UML 含义A 包使用B 包但不导入B 包只是调用功能。代码示例// 包AWebShoppingpackagecom.shopping.web;// 注意这里【没有 import 支付包】publicclassWebOrder{publicvoidpay(){// 直接调用但不导入com.payment.PaymentService.process();}}特点没有 import 语句只是依赖、调用、使用不把对方类引入自己命名空间2. «import» 公共导入公共导包UML 含义A 包公开导入B 包外部能通过 A 访问 B。代码示例// 包APaymentpackagecom.payment;// 公共导入 Customer 包importcom.customer.*;publicclassPaymentService{publicvoidpay(){// 直接用不用写全路径CustomercustomernewCustomer();}}特点有 import导入的类对外可见别人可以通过 Payment 包看到 Customer 类3. «access» 私有导入内部导包UML 含义A 包私有导入B 包只有自己能用外部看不见。代码示例// 包APaymentpackagecom.payment;// 私有导入access 语义importcom.inventory.Inventory;publicclassPaymentService{// 只能在内部用 InventoryprivatevoidcheckStock(){Inventory.check();}}特点导包了但对外隐藏外部包不能通过 Payment 访问 Inventory相当于私有依赖4. «merge» 合并扩展/复用UML 含义把 B 包的功能合并到 A 包A 直接扩展 B。最常用于多个渠道共用一套基础购物逻辑代码示例// 基础包BaseShoppingpackagecom.base;publicclassBaseCart{voidaddItem(){}}// WebShopping 包 merge 合并 BaseShoppingpackagecom.web;// merge 继承 全功能合并importcom.base.BaseCart;publicclassWebCartextendsBaseCart{// 直接拥有 BaseCart 的所有功能}特点合并 完全继承 扩展子包拥有父包全部能力用于通用功能抽取、多渠道复用«use»我用你但不导入你依赖调用«import»我公开导入你大家都能看见«access»我私有导入你只有我自己能用«merge»我合并你把你的功能变成我的功能«import»公共导入被导入的元素成为导入包的公共成员外部可见。«access»私有导入被导入的元素仅在导入包内部可见外部不可见。«import» 我借用你你还是你我还是我«merge» 我合并你你变成我我扩展你 UML 包图Package Diagram核心组成部分结合你提供的 Servlet 2.5 包图UML 包图的标准组成可分为核心元素、关系元素、辅助元素三大类每类都有明确的定义和作用下面是结构化拆解一、核心元素包图的主体1. 包Package包图最基础的容器用于分组管理语义相关的UML元素类、接口、子包等是包图的核心单元。图形表示带标签的矩形上方小矩形标注包名下方大矩形展示包内元素也可仅画小矩形元素单独列出。示例图中的javax.servlet、javax.servlet.http就是两个顶级包分别封装了通用Servlet核心和HTTP协议扩展的所有元素。作用实现模块化、分层解耦清晰划分系统的架构边界如核心层、扩展层。2. 包内的模型元素包的内容是包图承载的业务/技术逻辑主体常见类型包括类/接口/抽象类如图中的Servlet接口、HttpServlet抽象类、Cookie类异常类如图中的ServletException、UnavailableException子包包内可嵌套子包实现更细粒度的分层本图未展示嵌套其他UML元素枚举、协作、用例等Servlet包图中未涉及二、关系元素包与元素、元素与元素的连接用于描述包之间、包内元素之间的依赖、继承等逻辑关系是包图的“骨架”。1. 包之间的关系关系类型图形表示核心含义本图示例导入/访问Import/Access虚线箭头箭头指向被导入包一个包可以访问另一个包的公共元素实现包间依赖javax.servlet.http依赖javax.servlet通过虚线箭头体现HTTP包复用核心包的通用接口合并Merge虚线箭头带构造型将一个包的内容合并到另一个包用于模型扩展本图未使用嵌套 containment 包内包含子包无额外箭头包的层级结构父包包含子包本图为平级包无嵌套2. 包内元素的关系复用UML通用关系包图中包内元素的关系与类图完全一致用于描述元素间的逻辑关联关系类型图形表示核心含义本图示例泛化继承Generalization空心三角箭头箭头指向父类/接口子类继承父类/接口的属性和方法HttpServlet→GenericServlet、HttpServletRequest→ServletRequest实现Realization空心三角虚线箭头箭头指向接口类实现接口的方法GenericServlet实现Servlet、ServletConfig接口依赖Dependency虚线箭头箭头指向被依赖元素一个元素的变化会影响另一个元素Filter依赖FilterChain、HttpServlet依赖HttpServletRequest关联Association实线箭头/无箭头连线元素间的结构关联HttpSession与HttpSessionEvent的关联实现接口Interface realization带空心圆的实线棒棒糖表示法类实现特定接口Cookie实现Cloneable、Serializable接口三、辅助元素包图的标注与说明1. 构造型Stereotype用于对元素/关系进行语义扩展用 标注明确元素的类型。示例图中所有接口都标注了interface明确其为接口类型而非普通类。2. 约束与标注接口实现标注如Serializable、Cloneable用空心圆标注说明类实现了该接口。依赖说明部分依赖关系用use标注明确“使用”依赖如ServletContext被ServletRequest使用。包版本/命名空间包图左上角可标注包的版本如图中的《API》Java Servlet 2.5明确规范版本。3. 注释与说明用于补充包图的额外信息如图右上角的uml-diagrams.org是来源标注不影响模型逻辑。四、结合Servlet包图的完整组成对照组成部分对应图中内容包javax.servlet、javax.servlet.http包内元素Servlet、HttpServlet、Filter、Cookie、ServletException等所有接口/类/异常包间关系javax.servlet.http对javax.servlet的依赖虚线箭头元素间关系泛化HttpServlet→GenericServlet、依赖Filter→FilterChain、实现GenericServlet实现Servlet等辅助元素interface构造型、Serializable/Cloneable接口标注、use依赖标注、《API》Java Servlet 2.5版本标注五、包图的核心设计原则补充高内聚、低耦合包内元素语义高度相关包间依赖尽可能少如Servlet核心包与HTTP扩展包的分层开闭原则包的职责单一扩展包依赖核心包核心包不反向依赖扩展包无循环依赖包之间不能出现双向依赖如A依赖BB又依赖A分层清晰按架构分层划分包如核心层、业务层、视图层符合系统架构逻辑 延伸包图与类图的区别维度包图Package Diagram类图Class Diagram核心粒度包模块/子系统为核心元素是包类/接口为核心元素是类核心作用描述系统的架构分层、模块依赖描述类的结构、属性、方法、类间关系抽象层级高层架构视图低层实现视图

相关新闻