首页 > 其他分享 >Understanding UML in seconds

Understanding UML in seconds

时间:2023-09-13 15:04:47浏览次数:42  
标签:关系 seconds class 关联 对象 UML Understanding public

UML 是一种分析设计语言,也就是一种建模语言。

UML结构解析

UML其结构主要包括以下几个部分:

  • 视图(View)
    多个图形组成的集合;
  • 图(Diagram)
    图的种类有13种图,但常用的也就两种(1.需求用例图,2.开发类图);
  • 模型元素(Model Element)
    如类、对象、消息以及这些概念之间的关系,如关联关系、依赖关系、泛化关系等;
  • 通用机制(General Mechanism)
    UML提供的通用机制为模型元素提供额外的注释、信息和语义(没啥用);

开发类图

类图(Class Diagram)主要用来描述不同的类以及它们之间的关系。

类图的三段式结构为:

类名
类的属性
类的操作

类图示例:

对应的Java示例代码:

观察后发现,示例类图和示例代码的差别不大,无非是类型写在变量后面而已。

UML规定类属性的表示方式为:

UML规定类操作的表示方式为:

注意:如果是构造方法,则无返回类型。

其中:可见性表示该属性对于类外的元素而言是否可见,包括:

  • 公有(public), 在类图中分别用符号 +表示;
  • 私有(private), 在类图中分别用符号 -表示;
  • 受保护(protected),在类图中分别用符号 表示;
    表示这个元素或这个方法对这个类及其子类的其他元素访问。
  • 包可见性,对同一个包中的其他元素可见,在类图中分别用符号 * 表示;
    表示这个元素可以被其所属类的子类以及与其所属类处于同一包中的其他类所访问。

类图间的关系

一共九种关联关系,他们的符号可以记不住,这个没关系,用到再回来查。但是,他们各个图间的关系概念得分辨明晰,不要有含混不明的地方。

  1. 关联关系(有6种)
    • 1.1 双向关联
      • 默认情况下,关联是双向的;
      • 在UML种用一个根实线连接两个类表示。
    • 1.2 单向关联
      • 类的关联关系也可以是单向的,在UML中单向关联用带箭头的实线表示。
    • 1.3 自关联
      • 也是单向关联,只不是关联的是自己;
      • 在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联。
    • 1.4 多重关联
      • 表示两个关联对象在数量上的对应关系(数量关系、数量范围的描述);
      • 在UML中,对象之间的多重性可以直接在关联直线上用一个数字或一个数字范围表示。
    • 1.5 聚合关系(Aggregation)
      • 聚合关系表示整体与部分的关系;
      • 组合关系与聚合关系的区别在于生命周期的管理。在聚合关系中,整体对象和部分对象之间的关联是比较宽松的,部分对象可以独立存在而不受整体对象的控制。
      • 在UML中,聚合关系用带空心菱形的直线表示。
    • 1.6 组合关系(Composition)
      • 组合关系表示类之间整体和部分的关系;
      • 组合关系与聚合关系的区别在于生命周期的管理。在组合关系中,整体对象拥有和管理部分对象的全生命周期
      • 在UML中,组合关系用带实心菱形的直线表示;
  2. 依赖关系
    • 依赖(Dependency)关系是一种使用关系
    • 大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。
    • 在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。
  3. 泛化关系
    • 泛化(Generalization)关系也就是继承关系,用于描述父类与子类之间的关系
    • 在UML中,泛化关系用带空心三角形的直线来表示。
  4. 接口与实现关系
    • 在接口中,通常没有属性,而且所有的操作都是抽象的,只有操作的声明,没有操作的实现;
    • 接口之间也可以有与类之间关系类似的继承关系和依赖关系,但是接口和类之间还存在一种实现(Realization)关系。在这种关系中,类实现了接口,类中的操作实现了接口中所声明的操作。
    • 在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示。

双向关联

  • 双向关联类似 我拥有你,你也拥有我;
  • 在UML种用一个根实线连接两个类表示。

例如,顾客(Customer)购买商品(Product)并拥有商品,反之,卖出的商品总有某个顾客与之相关联。因此,Customer类和Product类之间具有双向关联关系,如下图。

public class Customer {
    private Product[] products;
}

public class Product {
    private Customer customer;
}

单向关联

  • 类的关联关系也可以是单向的,就类似 我拥有你,但你不能拥有我;
  • 在UML中单向关联用带箭头的实线表示。

public class Customer {
    private Address address;
}

public class Address {}

自关联

  • 这个也是单向关联,只是指向的不是别人,是自己。
  • 在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联。
  • 例如,一个节点类(Node)的成员又是节点Node类型的对象,

public class Node {
    private Node node;
}

多重性关联

这个应该是最复杂的,需要好好看看;

  • 又称为重数性(Multiplicity)关联关系,表示两个关联对象数量上的对应关系
  • 多重性应用于关联的目标端,说明源类的每个实例与目标类实例的连接个数。除非显式说明,否则关系的多重性就是未指定的。
  • 在UML类图中,关系连线的两端有时会有1..1、*..1等符号,通过下图来做一个说明。

用一个数字或一个数字范围表示, 这里的数字范围一遍指符号,下面有说明表格。
符号说明:

例如:一个界面(Form)可以拥有零个或多个按钮(Button),但是一个按钮只能属于一个界面,因此,一个Form类的对象可以与零个或多个Button类的对象相关联,但一个Button类的对象只能与一个Form类的对象关联,如下图:

对应的Java代码:

public class Form {
  private Button[] buttons; //定义一个集合对象
}
 
public class Button {}

注意: 类之间的多重性有时会直接在关系连线上用一个数字表示,其实这种是不严谨的表示法,
多重性描述的是关系连线的两端,自然要将两端的范围都描述清楚,只写一个数字,会让人不清楚是头还是尾,引起混乱!

聚合关系

  • 是一种描述 整体与成员间的关系;
  • 在聚合关系中,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在;
  • 简而言之,整体死去了,成员还活着
  • 在UML中,聚合关系用带空心菱形的直线表示。

在代码实现聚合关系时,成员对象通常作为构造方法Setter\Getter方法业务方法的参数注入到整体对象中,对应的Java代码片段如下:

public class Car {
	private Engine engine;
 
    //构造注入
	public Car(Engine engine) {
		this.engine = engine;
	}
    
    //设值注入
    public void setEngine(Engine engine) {
      this.engine = engine;
    }
}
 
public class Engine {
	// ...
}

组合关系

  • 是一种描述 整体与成员间的关系;
  • 在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也将不存在,成员对象与整体对象之间具有同生共死的关系
  • 简而言之,整体死去了,成员也死了
  • 在UML中,组合关系用带实心菱形的直线表示;

例如:人的头(Head)与嘴巴(Mouth),嘴巴是头的组成部分之一,而且如果头没了,嘴巴也就没了,因此头和嘴巴是组合关系。

public class Head {
	private Mouth mouth;
 
	public Head() {
		this.mouth = new Mouth(); //实例化成员类
	}

}
 
public class Mouth {
	// ...
}

依赖关系案例

在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。

对应的Java代码:

public class Driver {
  public void drive(Car car){
    car.move();
  }
}

public class Car {
  public void move(){
    // ...  
  }
}

泛化关系案例

在UML中,泛化关系用带空心三角形的直线来表示。

对应的Java代码:

//父类
public class Person (
  protected String name;
  protected int age;

  public void move( ) {
    // ...
  }
  public void say( ) {
    // ...
  }
}

//子类
public class Student extends Person {
  private String teacherNo;

  public void study( ) {
    // ...
  }
}

//子类
public class Teacher extends Person {
  private String teacherNo;

  public void teach() {
    // ...
  }
}

接口与实现关系案例

在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示。

对应的Java代码

public interface Vehicle {
  public void move() 
}

public class Ship implements Vehicle {
  public void move(){
    // ...
  }
}

public class Car implements Vehicle {
  public void move() {
    // ...
  }
}

标签:关系,seconds,class,关联,对象,UML,Understanding,public
From: https://www.cnblogs.com/mysticbinary/p/17695993.html

相关文章

  • 关于Kubernetes-v1.23-pod-生命周期-postStart-preStop-terminationGracePeriodSecond
    我们在一个pod的yaml配置文件中,有时会看到,terminationGracePeriodSeconds选项,与containers:同级,一般可以放于spec:下面即可是当pod,变为删除的状态后,会给pod一个宽限期,让pod去执行一些清理或者销毁操作另外还有两个选项,postStart,preStop,这两个是位于lifecycle,属于pod生命周期......
  • UML介绍
    一、什么是UML统一建模语言(UnifiedModelingLanguage,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言二、UML能够做什么帮助建立软件开发过程中的各种......
  • UML类关系图记不住?一篇搞定
    前言背景为什么要看UML,最近小编在准备架构师考试不得不再拾起来回顾看一看这块内容,毕竟谁也不会和考试的重点部分过意不去。之前也接触过这块的内容,总是搞混,关联关系用实线、泛化关系用实现空心箭头 ......表示,老记混淆。刚开始怀着只要干不坏,就往死里干心里记忆,结果打脸来的太......
  • 统一建模语言UML
    “统一建模语言UML”课程教学大纲UnifiedModellingLanguageCourseOutline32学时2学分一、本课程的性质、目的、任务本课程以介绍面向对象的统一建模语言UML为主,目的是了解面向对象技术的基本概念,掌握面向对象的分析和设计方法,以及与面向对象技术相关的一些软件开发技术,同......
  • 【ICML2022】Understanding The Robustness in Vision Transformers
    来自NUS&NVIDIA文章地址:[2204.12451]UnderstandingTheRobustnessinVisionTransformers(arxiv.org)项目地址:https://github.com/NVlabs/FAN一、MotivationCNN使用滑动窗的策略来处理输入,ViT将输入划分成一系列的补丁,随后使用自注意力层来聚合补丁并产生他们的表示,ViT的......
  • 微服务发布到docker后,一直重启Restarting (1) 2 seconds ago.
     使用dockerlogs加容器的ID命令,就可以查看该容器的启动的具体信息了。dockerlogsc59ba37a2508看一下日志:根据具体的报错信息来处理就可以了。  ......
  • Proj CDeepFuzz Paper Reading: An Extensive Study on Pre-trained Models for Progr
    Abstract1.Intro2.Background2.1ProgramUnderstandingandGenerationTasks2.2NL-PLPre-TrainedModels3.TheExtensiveStudy3.1SubjectsandDataset3.2ResearchQuestionsRQ1:Howdopre-trainedmodelsperformforprogramunderstandingandgene......
  • mysql报错:The last packet successfully received from the server was 51,384,505 mi
    这个报错是MySQL连接超时导致的。当MySQL客户端在一段时间内没有收到来自服务器的数据包时,会触发这个错误。产生这个错误的可能原因有:1.网络问题:可能是网络连接不稳定或延迟过高,导致数据包在传输过程中丢失或延迟。2.MySQL服务器负载过高:如果MySQL服务器负载过高,无法及......
  • UML类图
    UML图有很多种,但是并非必须掌握所有的UML图,才能完整系统分析和设计工作。一般说来,在UML图中,只要掌握类图、用例图、时序图的使用,就能完成大部分的工作。也就是说,掌握UML的20%,就能做80%的事情。对于程序员来说,最频繁使用的莫过于类图。因此,这里我们只讲解UML类图。至于其它UML图,请......
  • 用 plantUML 快速绘制 UML 图
    用plantUML快速绘制UML图UML(统一建模语言)是一种用于软件开发中的可视化建模语言,它可以帮助我们描述系统的结构、行为和交互等方面。UML包括了多种不同的图,例如类图、时序图、用例图等,每种图都有自己的符号和规则。但是,要用传统的绘图工具来画UML图,可能会比较繁琐和耗时,而......