热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

002.UML图

1.前言软件开发里,设计先行的理念非常重要,我自己也很菜,这也是听大佬们说的,实测确实可以提高效率,所以在正

1.前言

软件开发里,设计先行的理念非常重要,我自己也很菜,这也是听大佬们说的,实测确实可以提高效率,所以在正式进入Java之前,先学学UML图,至少把类图画清楚。本文肯定不可能详细,不懂的位置请自行百度。


2.概述

UML目前是2.0版本,总共13种图,其中包图也许可以被忽略,另外三个新增模型是啥玩意我也不知道,结合实际开发,类图和时序图相对来说比较重要。结合书本,后期会补画7个图。

13种图分为静态图动态图。

静态图包括:类图,对象图,用例图,组件图,部署图,包图,复合结构图

动态图包括:时序图(顺序图),通信图(协作图),状态机图,活动图,定时图,交互概观图

工具是Enterprise Architect,自行百度破解版和教程(比较新一点版本的教程很少)


3.画图

--------------------------------------------静态图---------------------------------------------


3.1 用例图

用例图描述系统(完整程序)的各个功能,每个用例代表一个功能模块。主要目的就是帮助开发人员以一种可视化的方式理解系统的需求功能,对具体实现不做任何说明。

组成:用例,角色,角色-用例关系,用例-用例关系。

图:


3.2 类图

类图表示系统中应该包含哪些实体,各实体之间的关系。其中关系主要是三种:关联(组合,聚合),泛化(继承),依赖。

组成:实体(属性,方法),实体-实体关系

图:


3.3 组件图

组件图提供系统的物理视图,目的是显示系统中软件对其他软件组件(如各种库函数)的依赖关系。

组成:组件,接口,端口。组件图中无法描述形状的就是组件,实心圆就是接口,边界上的矩形就是端口(Port)


3.4 部署图

部署图用于描述软件系统如何部署到硬件环境中,用途是显示软件系统不同的组件在何处物理运行,以及它们之间的通信。

组成:组件图组成部分,节点。三维立方体表示节点。

节点是各种计算机资源的通用名称,主要包括处理器(具有计算能力,能够执行程序)和设备(不具有计算能力)两类。

--------------------------------------------动态图---------------------------------------------


3.5 时序图

时序图表示不同对象之间的调用关系,同时还可以显示对不用对象的不同调用。描述了对象之间的交互,重点在于描述“消息”及其时间顺序。

垂直维度和水平维度

总结:绘制时序图主要是帮助开发者对某个用例的内部执行清晰化,当需要考察某个用例内部对象行为时,使用时序图。时序图擅长表现出对象之间的协作顺序,不擅长表现行为的精准定义。(摘自《疯狂JAVA》)(具体看图,暂无)


3.6 活动图

用于描述用例内部的活动或者方法的流程,如果去掉活动图中的并行活动描述(并发),它就变成流程图。

活动图和状态机图都被称为演化图,演化图有5个要素(重要组成部分):


  1. 状态 2.事件 3.动作 4.活动 5.条件

对于引起状态改变的事件主要有两类:内部事件,调用;外部事件,键鼠操作。

圆角矩形表示活动,带箭头实线表示事件,菱形框表示条件

总结:以活动为中心,只有一个开始活动,可以有多个结束活动。具体看图(暂无)


3.7 状态机图

状态机表示某个对象所处的不同状态和该类的状态信息转换信息。只有在系统活动期间具有三个以上的潜在状态的某个对象才需要考虑使用状态机图进行描述。

结合演化图,具体有5个基本元素(元素要素别深究,没意义,都是代表组成部分)


  1. 初始状态  实心圆
  2. 状态之间的转换 带箭头的线段
  3. 状态 圆角矩形
  4. 判断点 空心圆
  5. 一个或多个终止点 包含实心圆的圆

总结:只描述单个对象,只有一个初始状态,可以有多个终结状态。状态要表示对象的关键快照(快照意思就是比较稳定的一个瞬间记录),有重要意义。事件方法要明确。状态机图擅长表现单个对象的跨用例行为。


4.总结

图片暂无,学会用EA,有项目,再来补图。003写注释。


推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路
    本文介绍了FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路。当图表系列较多时,用户希望可以自己设置哪些系列显示,哪些系列不显示。通过调用FR.Chart.WebUtils.getChart("chartID").getChartWithIndex(chartIndex).setSeriesVisible()接口,可以获取需要显示的系列图表对象,并在表单中显示这些系列。本文以决策报表为例,详细介绍了实现方法,并给出了示例。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
author-avatar
mobiledu2402851377
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有