ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

软件工程6-UML代码分析

2021-06-26 20:01:21  阅读:273  来源: 互联网

标签:关系 依赖 对象 代码 关联 软件工程 数据流 UML


 

1. 概述

用来描述如何使用UML来进行代码分析。

具体的visio的模板详见: \Study\trunk\文档模板和IE收藏夹\visio2019\徐文山_UML.vstx。

2. 静态图

2.1. 静态结构表示

在模板中,指出了三类静态结构的表示图,分别是普通类、接口、枚举。

对于其他结构,比如数组、结构体、抽象类等,可以类似的采用如下方式。

2.2. 静态结构之间的关系

2.2.1. 概述

类与类之间由弱到强关系是:没关系 > 依赖 > 关联 > 聚合 > 组合。

2.2.2. 依赖关系

什么是依赖关系。其用虚线箭头表示,由客户C指向提供者P。表示,当提供者发生改变时,必然对客户产生影响;且提供者对客户是可见的。

依赖可以视为耦合。所谓的耦合,即系统中各模块的关系。

何时使用依赖?在实际使用中,主要分为两种情况。其实泛化、组合、关联也属于依赖,但其有专用的符号,没有必要用依赖。P的成员或其本身对C可见。即P的成员或本身在C中被使用。比如作为C中函数的参数。

在C中调用P的方法。及所谓的静态方法依赖。依赖标签。可以分为以下几类。

*  <<调用>> : C调用P中方法。<>

*  <<创建>> : P的实例由C创建。<>

*  <<访问>> : C可以访问P的成员。<>

*  <<参数>> : P 中的成员或P作为C中方法的参数。<>

2.2.3. 关联关系

关联关系采用有箭头的实线表示。

*  关联关系表示的两端,a..b,表示从a到b,包括a和b。

*  关联关系表示的两端,a..*,表示大于或等于a。

*  UML中包含某个类的对象和指针如何表示?可以在关联标签中表示,如果是指针使用“包含指针”标签;如果使用对象,则使用“包含对象”标签。

*  在关联图中,不管是包含对象还是包含指针,缺省条件下都是1:1的比例。

*  在绘制类图时,经常遇到包含对象或指针的情况,比如类A中有B类的对象。在A的类图中包含B的对象名。在B的类图中,在类名下用()写明所包含的对象名,以示对应。

2.2.4. 依赖关系与关联关系

依赖是客户使用提供者完成某项功能,是动态的。关联是客户和提供者一种静态的关系,比如父子,订单和产品说明等。正如在<<软件建模与设计>>中提到的,关联是一种静态的,结构化的关系。

关联标签直接写,依赖标签使用<<>>标识。

如上图。A类对象包含B类对象。只要类A对象存在,其中的B类对象必然存在,所以是一种静态稳定的关系,采用关联的方式表示。

如上图,A类调用B类的接口创建对象。两个类只有在创建的过程中有关系,创建开始前和创建结束后,两个类之间没有创建关系,采用依赖的方式表达。

关联标签直接写,依赖标签使用<<>>标识。

2.2.5. 关联和聚合

首先,聚合也是一种关联关系。但其是一种整体和部分的关联关系。比如父子关系以一种关联关系,但不是聚合关系。员工团队即是一种关联关系,也是一种聚合关系。

注意这里的整体和部分关系,一定是类对象之间的整体和部分关系,而非具体实现的整体和部分关系。比如汽车类和轮胎类,是整体和部分的关系。如果在汽车类中有一个拖拉机的对象,不能说汽车类和拖拉机类是整体和部分的关系。

2.2.6. 聚合和组合关系

都是整体和部分的关系。聚合部分离开整体仍然具有意义,比如学生是班级的一部分;而组合的部分离开整体,就没有意义,比如手指是手的一部分。

在模板图,组合关系就是复合关系。关于组合关系的特点。在UML与模式应用中16.13中,有一定的论述。

2.2.7. 继承关系和组合关系

仔细区分类的三种容易混淆的关系。

*  继承关系:一般和特殊的关系,比如多边形和四边形。

*  组合关系:整体和部分的关系。A为整体,B为部分。那么任何B的对象必然属于一个A对象。比如手指和手的关系。

2.3. 类图的visio绘制

*  类图分析中,如果是STL,采用接口类,<<接口>>修改为<>表示。比如<>表示。

2.4. 静态图的绘制次序

在绘制类图时,按照从下到上的顺序进行。箭头指向下面的类或对象。下面为基结构或被依赖的结构,上面为顶层结构。这个也符合代码的阅读次序。

3. 活动图

3.1. 数据流图

什么是数据流图?系统是一个网络系统,是多个功能的流程合成的一个网络系统。如果直接去观察这个网络系统,会感觉到非常乱。所谓的数据流图,是针对某个功能的流程图,是从这个网络系统提取出来的。如果需要针对这个功能开发的话,数据流图是非常必要的。

关于数据流图的思考。经过UML相关资料的查阅,只能用活动图来表示。在活动图中,有两点需要标注。

*  对于处理动作而已需要表明类:: 模块或模块名称。以便定位。

*  在方向线中,标识数据的名称。

3.1.1. 引脚和对象的区别

*  引脚即所谓的数据流,其通过模块的输入输出参数进行数据的传输。

*  数据对象,通过其他方式进行传输的数据流。以长方形的方式表示。

*  如果不区别引脚和数据对象,可以在方向线中直接标注数据名称。

3.2. Visio绘制

*  数据流图中的模块为最底层的实现模块。在<>的第28章,提到了这一点。

*  名称和模块之间以:相隔。

*  在活动图中,如何让引脚嵌入到活动框中?两种方法:1 移动引脚。2 移动动作框边缘。

3.3. 具体实例

4. 序列图

4.1. 几个图例表示

下面为循环图中几个逻辑块的表达,参考visio2016的表示。

关于循环和条件图的用法如下图。

图 ‑:顺序图的循环表示方法,visio2016中的循环片段

图 ‑:顺序图的if else表示方法,visio2016中的备用片段

图 ‑:顺序图的if表示法,visio2016中可选片段

图 ‑:顺序图中子顺序图的表示方法

图 ‑:包括顺序图的框图

4.2. 发给自身消息的绘制

*  采用嵌套的活动条表示发给自身的消息。

*  开始,从原活动条到嵌套活动条。

*  结束。从嵌套活动条到原活动条。没有必要像以前标注"返回"二字。

在<>中的15.4,提到了这一点。

4.3. 序列图Visio绘制

*  关于顺序图返回线的标注问题。看了一些资料,只标注了返回值。个人认为标注模块名:返回值。因为表上模块名称,更加有利于是UML图的阅读。

*  序列图异步调用的返回仍然使用普通的返回图例。

*  从A想B发送消息,调用的是B的模块。UML模式与应用中的图15-1可以说明这个问题。

5. 包图

5.1. 包图

包图是什么?根据相关书籍的内容,包是具有相同属性和具有内聚性的软件元素的组合。具体表现为工程、目录、文件、命名空间等。

在文档中利用UML中的包图描述多个软件项目之间的关系,用于指定各个目录之间的关系为以后的软件开发提供信息。

在包图中使用数据流,因为在表达包之间的数据流向时,这种方法更加直观有效,值的注意。

6. UML并行分析

资料汇总:

*  用<>的2.8并发协作图。

*  图解Java多线程设计模式。

*  Java高并发编程详解:多线程与架构设计 

*  UML与模式应用的活动图描述。

*  <<软件建模与设计>>第18章。

*  <>的第22章~28章。

*  关于软件系统的实时分析问题。在资料<<用UML设计并发 实时 分布式应用>>中的图17.1,提到了定时图表(时间注释的序列图表)。采用序列图,但必须是时间注释的。这一条非常值的可取。值得参考。

 

标签:关系,依赖,对象,代码,关联,软件工程,数据流,UML
来源: https://blog.csdn.net/great_sea/article/details/118253584

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有