UML 图使用心得

在软件开发中,从需求工程到代码工程,都离不开 UML 图的绘制。今天简要总结一下我以往使用 UML 图的一些体会。

很多图,都是由原始需求到代码的一种转换,只是转换的程度不一样。在软件开发过程中,不同的阶段需要不同的 UML 图,在选择使用哪些图时,我们必须理解该图能表达一些什么,即它的主要用途,以及它表达的优势在哪里:

 

用例图

用于需求描述、范围确定。

所含内容:参与角色集合、功能项集合、角色可用功能集合。

如果需要更详细地说明需求,则应该在每一个用例中添加相应的用例规约说明。


鲁棒图

则是系统的初步设计。此图虽然是行为视图,但是比较偏静态。

所含内容:角色、界面对象、控制器、事件、实体(数据存储)。

我认为此图的关注点在于表达控制器,它能让我们更好地理解控制器所涉及到的实体以及设计控制器之前的调用关系。

控制器在 OEA 中可以理解为 Service,而在 DDD 中则可以理解为 DomainService。这些控件器承载了系统中最多的流程性业务逻辑,非常重要。但是在此图中,只能看到 Service 及其涉及到的 Entity,却不能非常详细地表达它们之间的交互规则。

 

类图

在需求分析阶段,在 DDD 方法论中用于描述领域模型。

在设计阶段,则是代码静态结构的设计图。

在反向工程阶段,用于精确描述当前软件的静态结构。


序列图(或协作图)

这两个表等价,一般使用序列图。强调对象间的交互关系,时间顺序关系。

我一般把它用于反向工程,表达、理解当前的代码。非常易用。

有时也用在需求分析阶段,主要是为了表达时序。

 

活动图(或流程图)

具体描述一个控制流,体现控制流的细节。

 

状态图

关注某一事物状态的变化。 

 

部署图

描述系统的物理部署架构。 

 


 

 

以下换一个角度,当在做一个全新的系统时,各阶段绘制不同的图:

需求分析阶段:
用用例图描述整个系统的功能范围。
鲁棒图初步描述某个需求/业务流涉及到的多种对象:界面、控制器、实体。(主要是实体)
如果某一个需求的流程比较复杂,则使用活动图描述。


设计阶段:
使用类图说明类之间的静态结构关系。
使用序列图说明类之间的动态调用时序。
使用活动图描述某种算法。
使用部署图描述物理架构。

 

反向工程
一般则使用类图、序列图来帮助理解现有系统。

 

一篇说 UML 图的文章,里面居然没有一个 UML 图,罪过。(主要是这些图网上一搜一大把,而且贴进来太长了,总是影响整体把握这些图的意义。)

### UML设计的经验与最佳实践 UML是一种用于描述系统静态结构的重要工具,它通过形化的方式展示系统的类及其相互关系。以下是关于UML设计的一些经验最佳实践: #### 1. 明确目标范围 在绘制UML之前,需明确其目的以及所涉及的业务领域或功能模块。这有助于聚焦于核心要素,避免不必要的细节干扰[^1]。 #### 2. 遵循单一职责原则 每个类应该只负责完成一项特定的功能或表示一种实体对象。这种做法可以提高代码可维护性扩展性,并使类更加清晰易懂。 #### 3. 合理定义关联关系 - **继承**: 当子类完全具备父类特性时使用继承关系。 - **聚合/组合**: 表达整体与部分的关系,其中组合意味着更强的生命绑定(即部分随整体销毁),而聚合同则较弱。 - **依赖**: 如果某个方法临时使用另一个类,则建立依赖连接即可[^2]。 #### 4. 使用接口抽象公共行为 对于具有相似操作的不同类型的对象,可以通过定义接口来实现多态支持。这样不仅增强了灵活性还促进了组件间的解耦合度提升。 #### 5. 注重层次分明 复杂的系统往往由多个层组成(如表现层、应用服务层、领域模型层等),因此,在创建类时也应当体现出这些分层逻辑,从而便于理解整个体系架构如何运作。 #### 6. 考虑未来变化的可能性 即使当前版本可能不需要某些额外属性或者方法参数,但从长远来看它们可能是必需品;所以在初期阶段就预留好相应的空间将会减少后期重构的工作量。 ```python class Animal: def speak(self): pass class Dog(Animal): def bark(self): print("Woof!") class Cat(Animal): def meow(self): print("Meow!") def make_sound(animal: Animal): animal.speak() ``` 上述例子展示了简单版动物分类下的声音发出机制,利用了面向对象编程中的继承概念以及函数作为形参传递的实际运用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值