UML很难理解?如何掌握UML的方法全部给你了
Posted 发哥讲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UML很难理解?如何掌握UML的方法全部给你了相关的知识,希望对你有一定的参考价值。
现在已经是2021年了,作为一个基本的Java程序员,如果你连UML都不知道,那就弱爆了。
为什么需要呢?
最最最重要的就是可以做为系统分析设计过程使用的表示和体现工具。简单清晰明了!!
好处十分的多:
1,UML统一了各种方法对不同类型的系统、不同开发阶段以及不同内部概念的不同观点,从而有效的消除了各种建模语言之间不必要的差异。2,UML建模能力比其它面向对象建模方法更强。它不仅适合于一般系统的开发,而且对并行、分布式系统的建模尤为适宜。
UML是将系统可视化、让规格和设计文档化的表现方法,它是Unified Modeling Language(统一建模语言)的简称。
UML里面常用Java中的“字段(field)”取代UML中的“属性(attribute)”,用Java中的“方法”取代UML中的操作(operation)。
熟悉以下几个之后,就可以在日常使用没有任何问题。
1、类图(类与层次结构)
2、接口与实现
3、聚合
4、可见性:访问控制
5、类的关联
6、时序图(处理流程与对象间的协作)
1、类图
类图(Class Diagram)用于表示类、接口、实例等之间相互的静态关系。虽然名字叫做类图,但是图中并不只有类。
类与层次关系,如图所示:
以上图示为ParentClass和ChildClass俩个类之间的关系,其中的空心箭头表明俩者之间的关系,箭头由子类指向父类,换言之表示继承(extends)。
ParentClass是ChildClass的父类,反过来说,ChildClass是ParentClass的子类。父类也称为基类或超类,子类也称为派生类或继承类。
图中的长方形表示类,长方形内部被横线自上而下的分为了三个区域:
类名
字段名
方法名
有时,图中除了会写出类名、字段名和方法名等信息外,还会写出其他信息(可见性、方法的参数和类型等)。反之,有时图中也会省略不必关注的内容(因此,我们无法确保一定可以根据类图生成源程序)。
记忆总结:
abstract类(抽象类)的名字以斜体方式显示。
static字段(静态字段)的名字带有下划线。
abstract方法(抽象方法)的名字以斜体方式显示。
static方法(静态方法)的名字带有下划线。
含有abstract:以斜体方式显示,表示抽象类或抽象方法。
含有static:带有下划线,表示静态字段或静态方法。
Java术语与C++术语(小知识):
Java中的字段相当于C++中的成员变量,而Java中的方法相当于C++中的成员函数。
箭头的方向(小知识):
UML中规定的箭头方向是从子类指向父类。可能会有人认为子类是以父类为基础的,箭头从父类指向子类会更合理,这样是错误的。
关于这一点,按照以下方法去理解有助于理解。在定义子类时需要通过extends关键字指向父类。因此,子类一定知道父类的定义,而反过来,父类并不知道子类的定义。只有在知道对方的信息时才能指向对方,因此箭头方向是从子类指向父类。
2、接口与实现
UML以<<interface>>表示Java的接口
接口与实现类,如图所示:
该图表示了PrintClass类实现了Printable接口,其中接口名称为斜体。带有空心三角的虚线箭头代表了接口与实现类的关系,箭头从实现类指向接口。换言之,这是表示实现(implement)的箭头。
3、聚合
在UML中,我们使用带有空心菱形的实现表示聚合关系,因此可以进行联想记忆,将聚合关系想象为在菱形的器皿中带有其他物品。
我们通常将“持有”关系成为聚合(aggregation)。只要在一个类中持有另外一个类的实例---无论是一个还是多个---他们之间就是聚合关系。就程序上而言,无论是使用数组、java.util.ArrayList还是其他实现方式,只要是在一个类中持有另外一个类的实例,他们之间就是聚合关系。
聚合关系,如图所示:
该图展示了Color(颜色)、Fruite(水果)和Basket(果篮)这三个类之间的关系。Basket类中的fruites字段是可以存放Fruite类型数据的数组,在一个Basket类的实例中可以持有多个Fruite类的实例;Fruite类中的color字段是Color类型,一个Fruite类中的实例中只能有一个Color类的实例。通俗地说就是在篮子中可以放入多个水果,每个水果都有其自身的颜色。
4、可见性(访问控制)
在UML中可以通过在方法名和字段名前面加上记号来表示可见性。
“+”号表示public的方法和字段,可以从类外部访问这些方法和字段,访问最大。
“#”号表示protected方法和字段,能够访问这些方法和字段的只能是该类自身、该类的子类以及同一个包中的类。
“~”号表示只有同一包中的类才能访问的方法和字段。
“-”号表示private方法和字段,无法从类外部访问这些方法和字段。
标识出可见性的类图如下:
可见性分为:private、default(默认省略)、protected、public
5、类的关联
可以在类名前面加上黑三家(▶)表示类之间的关联关系。
关联关系,如图所示:
6、时序图
UML的时序图(sequence diagram)用来表示程序在工作时其内部方法的调用顺序,以及事件的发生顺序。
类图中表示的是“不因时间流逝而发生变化的关系(静态关系)”,时序图则与之相反,表示的是“随时间发生变化的东西(动态行为)”。
处理流与对象间的协作,时序图。例子如下图所示:
右侧是时序图,左侧是与之对应的代码片段。
在长方形内部写有类名,类名更在冒号(:)之后,并带有下划线。冒号之前也可以表示出实例名如:server:Server。
每个实例都带有一条向下延伸的虚线,称其为生命线。可理解为时间从上向下流逝,上面是过去,下面是未来。生命线仅存在实例的生命周期内。
在生命线上,有一些细长的长方形,他们表示实例处于某种活动中。
横方向上有许多箭头,请先看带有open字样的箭头。黑色实现箭头(
)表示方法的调用,这里表示client调用server的open方法。当server的open方法被调用后,server实例处于活动中,因此open箭头处画出了一个细长的长方形。
而在open箭头画出的长方形下面,还有一条指向client实例的虚线箭头(
),他表示返回open方法。在上图中,画出了所有的返回箭头,但是有些时序图也会省略返回箭头。
由于程序控制已经返回至client,所以表示server实例处于活动状态的长方形就此结束了。
接着,client实例会调用server实例的print方法。不过这次不同的是在print方法中,server会调用device实例的write方法。
这样,就将多个对象之间的行为用图示的方式展示出来了。时序图的阅读顺序是沿着生命线从上至下阅读。然后当遇到箭头是,我们可以顺着箭头所指的方向查出对象间的协作。
发哥讲
以上是关于UML很难理解?如何掌握UML的方法全部给你了的主要内容,如果未能解决你的问题,请参考以下文章