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

相关文章

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4