UML在项目实施中的使用心得(详细设计阶段)

2024-04-20 00:08

本文主要是介绍UML在项目实施中的使用心得(详细设计阶段),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

3.详细设计阶段

在业务需求分析阶段使用Use Case图、Sequence图(有时候也使用Activity图的泳道图)描述清楚业务范围及业务流程,在概要设计阶段使用deployment图、component图、Sequence图、StateMachine图、Activity图描述清楚技术架构、部署方式、内外接口、主要流程后。在国内的项目中,很可能不需要详细设计,强大的中国程序猿已经可以直接开始开发了。中国的程序猿个个都有极强的创造精神,而且有相当一部分不大喜欢别人把详细设计做的太细,以便发挥下自己的创造力(初级设计能力)。我有朋友做日本公司的外包,详细设计不但详细到类级别,甚至每个方法都还有伪代码,这种感觉确实是太不能发挥自己的主观能动性了。不过仁者见仁,智者见智,因为一个初级的程序猿如果先是看别人的设计,然后再开始自己的设计,也许学习曲线就不会那么陡峭,日子也会过的舒服一点儿也未可知。


3.1Class图

类是面向对象最核心的要素(没有之一),因此详细设计阶段的第一要素是类。

类怎么设计类呢?按照UML的标准,要抽出来需求描述中的”名词“考虑是否要做一个对象,动作考虑是对象间的关系,我认为这句话以及相应的例子只是为了描述对象是什么,对象之间的关系是什么, 但是实际上是无法这样使用的:

1.一个需求文档可能动辄几百页,这么分析下去要死人的;

2.需求文档可能也不见得写的那么规范;

3.根据系统架构、需求,设计者心中已经有了合适的设计模式,而为了适应一个设计模式要建立的类,也不是通过需求文档逐句的挖掘能挖掘出来的。

所以说到底,如果说写需求文档的人可以不需要太懂技术,主要精力用于和客户讨论,进而把控需求的范围(SoW,Scope of Work)、梳理清楚相关的业务流程的话,那么写概要设计文档的就要有总体的架构能力,而写详细设计的人就得是超人,是一个从底层开发人员上去的,对设计模式、算法都精通的人,才能写出优秀的详细设计文档。有时候也很感慨,其实写需求文档的人(这个角色一般叫做BA,Business Analyst),写概要设计的人(这个一般叫架构师,Solution Architect,System Architect,System Analyst...)可能当年就没有搞明白设计模式、算法等计算机技术领域(这里的算法也指技术、工程域的算法,不包括计算科学家们搞的算法)相对”难“的东西,数年后最后摇身一变,工资比做详细设计、优秀的编码人员的工资还高出一大截,最后逼得有那么一批人心不甘情不愿的也走上了架构师、需求分析师的道路,做着其实不大喜欢做的活(这两个职位与人打交道要远多于程序猿与详细设计人员了)。Engineer的本意是说这是一门艺术,所以编程本身也是一门艺术,希望未来能看到越来越多的牛X的程序猿,拿的跟架构师、系统分析师不相上下的工资,做一个快乐的Engineer吧。


类图概要:

类图以反映类的结构(属性、操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法
类图中的“类”与面向对象语言中的“类”的概念是对应的,是对现实世界中的事物的抽象
类图中的事物包括:类、接口、抽象类、模板类

类的关系包括:关联关系(又可分为聚合关系、组合关系)、泛化关系、实现关系、依赖关系。

关联关系的映射







下面是个形而上的例子,根据use case直接能生成类图,在实际系统中太难了:



3.2 Object图

可以使用对象图来描述某种状态下,系统中活跃的对象及其关系:



3.3 Package图(包图)

包对c++可以理解为命名空间,对java可以直接理解为package,是在component之下在文件之上的一个层面。



3.4 Sequence图

  Sequence图的描述见"UML在项目实施中的使用心得(需求分析阶段)",与需求分析阶段和概要设计阶段不同的是,此时的sequence图可以与代码对应起来:


信息亭发Request (count, performance)消息给售票中心,表示调用售票中心类的Request (count, performance)操作,来查询演出的信息。

售票中心发Show Available(seat-list)消息给信息亭,表示调用信息亭类中的Show Available(seat-list)操作,给出可用的座位表。

3.5 Communication 图(通信图,协作图)

协作图的描述见"UML在项目实施中的使用心得(概要设计阶段)",与概要设计阶段不同的是,此时的协作图是可以与代码级的类对象对应起来。

3.6 Activity图(活动图)

描述见"UML在项目实施中的使用心得(概要设计阶段)",与概要设计阶段不同的是,此时的活动图是可以与代码级的类对应起来。

3.7 State Machine图(状态机图,状态图)

描述见"UML在项目实施中的使用心得(概要设计阶段)",与概要设计阶段不同的是,此时的状态图是可以与代码级的类以及类中的成员变量、成员函数对应起来。


3.8包与Component的关系
包与component的关系可以使用”复合结构图”,将构件、包、类关系全部合在一起展示,但是更简单的方法是用表格列出来包与构件的关系即可。


总结:在业务需求分析阶段使用功能框图、Use Case图、Sequence图逐级分析业务项及业务流程,在概要设计阶段确定系统架构,使用Deployment图、Component图确定部署、对外提供接口、内部接口等主要信息,  Sequence图、Activity图、StateMachine图细化一些关键流程,这两个阶段UML中的Thing都可以理解为更粗粒度的对象。到了详细设计阶段,除了Use Case图、Deployment图,其他图全部都会用上,且是此时的对象是代码级别的对象。



这篇关于UML在项目实施中的使用心得(详细设计阶段)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/918812

相关文章

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本