uml 类图_UML-类图

738c161bba223c5eb9e22d796d74ee21.png

概念

Class diagram is UML structure diagram which shows structure of the designed system at the level of classes and interfaces, shows their features, constraints and relationships - associations, generalizations, dependencies, etc.

类图是用于描述类、接口这一层次的图形,他表达了类、接口的功能、约束以及他们之间的关系。

使用场景

类图是适用于面向对象进行建模的场景,通过类图,我们能够知道我们对系统被抽象成了哪些类,以及他们之间的关系。因此,类图适用于使用面向对象的方法进行设计的系统、应用。

对于后端来说,一般类图常用于单一的系统内,对于微服务这类分布式架构的表达,更适用于组件图或者部署图。 对于前端来说,由于 js 的语言特性,以及react、vue 这类组件化框架大行其道,简单的业务场景就不需要使用到类图了,基于面向对象建模反而是过度设计,此时用组件图表达即可。但是当业务复杂到到一定程度,不得不使用面向对象对业务层进行建模时,类图就有意义了。

类图元素

类(class)

类是面向对象的概念,是描述一系列对象共有的功能和约束 对于类来说,功能即类的属性以及方法,约束即属性及方法的可见性。

6f78d2406d4b3eb6602d688b3b1a6c58.png

接口(interface)

接口描述的是功能的合集,一般我们会对功能进行分类,同一类别的功能统一放在一个接口里,用接口来描述功能的抽象,以此来增强接口的可复用性。 比如 cloneable 接口,表述实现了这个接口的类是支持 clone 相关的行为的。接口和类最大的不同在于接口只描述行为,表达的是能力,比如 cloneable 接口,表达的是 clone 的能力,具体怎么 clone (如何实现)是在类的范畴,因此接口的抽象程度更高。

d6503cd60829d90d9287c3ad76e112f4.png

因为接口是一个高度的抽象,因此接口需要有实际的载体,也就是类,所以接口是需要配合类来一起表达才能有实际的含义,因此声明了接口后,还需要表明谁来实现,或者相关的依赖。

968ebf14f86b65226f18bc6bf218f6bd.png

7e2c346d1c70cc7094bff0900b4b0a30.png

类图关系

类的基本元素比较简单,难点在于关系的表达。业务之所以复杂,不是因为业务中可以抽象出多个类,而是类之间的关系,每个类的变动都可能牵扯到其他部分,业务行为正是通过这些”牵扯“组成的。因此我们使用面向对象建模,核心的目的在于让关系变得简单,简单意味着可控,业务行为便可预测。

本章节不会把所有的关系全部说清楚,只会讲到平时开发过程中常见的 5 种关系线,他们的含义以及用法。

依赖(dependency)

两个对象间最弱的关系,表示一个类的某些行为与另一个类有相关性。 敲黑板!依赖关系是行为之间产生关联

A 依赖 B 的三种场景:

class A {function fn(B b) { }function fn2() {B b = new B()}function fn3() {return new B()}
}

1d6b218e946a50300481ed37dc2a136e.png

泛化(generalization)

通常指一个类(或接口)继承另一个类(或接口),并可以增加它自己的新功能的能力。

A 继承类 B 实现 IC 接口:

class A extends B implements IC { }

65856d40158f48d6d2c1a8b85d45c0be.png

关联(association)

二元关系,表示对象与对象之间有持有关系

单向关联关系,A 关联 B :

class A {B b
}
class B { }

46c9a0faff6445858d98fea0bcd751ad.png

双向关联关系,A 与 B 互相关联:

class A {B b
}
class B {A a
}

7ffe399754f743cf9abc7905bc700372.png

聚合(aggression)

含义更明确的单向关联关系,表示群体与个体的关系。群体解散了,个体可能还会存活。 聚合关系强调了对象间生命周期的关系,聚合的对象是有各自独立的生命周期的。

class A {B bconstructor(B _b) {this.b = _b}setB(B b) {this.b = b}
}

4926eb8336277213e453dab37efaccd4.png

组合(composition)

和聚合关系类似,属于更明确的关联关系,表示全体和局部的关系。全体不存在了,局部也不存在了(或没有意义了),和聚合的区别在于声明周期的不同。

class A {B bconstructor() {this.b = new B()}
}

e40c911cca5c8bbf4d5f315ed2b6f98d.png

小结

我们讲的 5 种关系,都属于二元关系,区别在于使用的时机与生命周期的不同。依赖与关联的区别在于依赖仅是在行为上会使用到另一个类,而关联则是需要持有对象,会影响对象的生命周期。 聚合与组合是提出了更明确含义的关联关系,区别在于聚合的对象,生命周期是各自独立的,组合的对象,生命周期跟随整体。

要注意的是,关系是对现实事务的表达,因此关系本身也是有语义的。为了方便理解,我们使用对象声明周期的影响来区分依赖与关联,聚合与组合,但是这个只是充分非必要条件,不能狭隘的通过生命周期来反推关系

449956cd73992afa20ccedf20240505e.png

总结

  • UML的类图是从程序逻辑层面上来表达系统设计的方法
  • 类图是一种静态图,描述的是系统的静态结构
  • 依赖关系,表达的是基于对象行为上的关联
  • 关联关系,表达的是对象间的持有关系,影响对象的生命周期
  • 聚合关系表达的是群体和个体的关系,删除了群体,可能不影响个体的生命周期
  • 组合关系表达的是整体和局部的关系,删除了整体,局部随之消亡

思考题

  • 企业与员工是什么关系?
  • 企业与个人是什么关系?
  • 工厂类与被生成的类是什么关系?如果是支持缓存的工厂类呢?ML

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牙齿间隙变大怎么办_牙齿之间的间隙越来越大怎么办?

无论我们是否发现牙齿与牙齿之间有很大的裂缝问题,这不仅影响到面部的美观,而且对正常的饮食、咀嚼疲劳也有一定的影响。随着我国生活条件的改善,人们对生活质量的要求也越来越高,同时也开始关注自己的口腔状况,牙齿问…

python读取文件中的内容_python 读取文件夹中的文件内容

看thinking in java的时候发现有个题的答案不确定结果, 于是下载答案看下,结果是这个样子的,这样要怎么才能找到相对应的答案?于是我就着手写了一个快速遍历的脚本(我这里只是单纯的找了出来, 没有把找到的文件单独拿出…

C语言编程日志,用C语言打印日志(Log)

用C语言打印日志(Log)直接上源代码。log.h 文件:/** log.h **/#ifndef __LOG_H__#define __LOG_H__#include "stdio.h"#include "string.h"#include "stdlib.h"#include "time.h"#include "stdarg.h"#include &q…

binlog数据库不写入binlog_京东智联云MySQL数据库如何保障数据的可靠性?

MySQL作为当前最流行的关系型数据库,在各个行业的系统中扮演着最重要的角色。随着大家对数据价值认可的逐步加深,数据的可靠性是最常被问到的一个问题。MySQL是如何保证数据可靠性的?京东智联云RDS-MySQL又做了哪些优化和新特性来保证用户数据…

在职高学C语言程序设计,中职学校C语言程序设计教学方法.doc

中职学校C语言程序设计教学方法中职学校C语言程序设计的教学方法摘 要:计算机专业中,C语言是一门基础的程序设计课,但学习《C语言程序设计》相对职高学生来说难度较大,但它却是很实用的一门课程,同时又是我省计算机对口…

js和python哪个好_Python与Node.JS:哪一个比较适合您的项目?

在进行新项目时选择正确的编程语言可能是程序员经常做出的比较艰巨的决定之一。这个挑战背后的原因是,每个新项目都会遇到一个独特的问题,并且在编程世界中,没有任何行业的大师。 不同的编程语言都有其长处和短处,这使其适用于某些…

typescript的类型描述_一文学懂TypeScript的类型

你将学到什么阅读本文后,你应该能够理解以下代码的含义:interface Array{concat(...items: Array): T[];reduce(callback: (state: U, element: T, index: number, array: T[]) >U,firstState?: U): U;}如果你认为这段代码非常神秘 —— 那么我同意你…

equation在c语言中是什么意思,MathType出现此对象创建于Equation中的问题怎么办

使用MathType出错的窗口:MathType程序停止工作提醒窗口:解决方法如下:1.打开Word文件,在Word菜单中选择“工具”——“模板和加载项”,将会跳出一个模板和加载项的对话框。在Word菜单中选择“工具”——“模板和加载项…

python messagebox弹窗退出_python 弹窗提示警告框MessageBox的实例

需要安装pywin32模块,pip install pywin32 ##pip install pywin32 import win32api,win32con ##提醒OK消息框 win32api.MessageBox(0, "这是一个测试提醒OK消息框", "提醒",win32con.MB_OK) ##是否信息框 win32api.MessageBox(0, "这是一个…

gradle是否可以编译c语言,build.gradle按条件编译与cmake配置

在build.gradle里面通过productFlavors就可以方便的实现不同的编译方案。flavorDimensions定义维度flavorDimensions 从单词字面理解知道是 “风味维度”,是需要结合 “产品风味(即productFlavors)” 来一起使用的。flavorDimensions 的使用会定义出维度&#xff0c…

post请求改成body_post请求body格式

在PostMan中用Post方式,Body有form-data,x-www-form-urlencoded,raw,binary四种。其中raw又分以下7种。现在来区分一下:form-data是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。…

windows多用户 文件夹不共享_手把手教你如何使用Tekla多用户

Tekla有多用户模式,对于大模型需要多人合作很有用,可以多人同时建模互不干扰,下面简单说下多用户建立过程。 首先需要参与模型的计算机处于同一局域网内,一般来说公司都有局域网,或者办公室内就是一个小局域网&#xf…

roads 用户体验标准_世界智能大会与ROAD用户体验报告

近期由国家发展和改革委员会、科学技术部、工业和信息化部、国家互联网信息办公室等共同举办的2020年第四届世界智能大会在天津云上展开,超过百余位智能科技领域的知名专家和企业家参与了大会过程,其中车联网领域专家关于5G车联网”推进中国特色的车路协…

android 组件路由框架,XRouter:组件化路由框架

添加jitpack仓库allprojects {repositories {...maven { url https://jitpack.io }}}添加依赖:dependencies {//kotlin 使用kapt编译时依赖注解,Java使用annotationProcessorkapt com.github.roger1245.XRouter:xrouter-compiler:1.0.2api com.github.ro…

hystrix原理_面试必问的SpringCloud实现原理图

引言面试中面试官喜欢问组件的实现原理,尤其是常用技术,我们平时使用了SpringCloud还需要了解它的实现原理,这样不仅起到举一反三的作用,还能帮助轻松应对各种问题及有针对的进行扩展。以下是《Java深入微服务原理改造房产销售平台…

android 图片跑马灯动画,ImageView 图片循环跑马灯的效果

不解释了 直接上代码了main.xml布局文件,记住必须用RelativeLayout将ImageView重叠android:orientation"vertical" android:layout_width"fill_parent"android:layout_height"fill_parent" android:id"id/rl">android:…

Rust Trait

Rust 第16节 Trait Trait 告诉编译器 某种类型具有那些并且可以与其他类型共享的功能 它的本质就是 不同类型具有的相同行为 声明一个trait 关键字 trait;只有方法签名,没有方法实现 pub trait Animal {// trait 的声明,一个trait中可以有多个方法fn say(&s…

c++ string类的常用方法_【常用类方法】Object

Object类的知识点总结概述:1. Object类是所有其他类的父类2. Object类只有一个构造方法,这也是为什么所有子类在调用构造方法时都会默认先调用父类的无参构造方法3. Object类没有成员变量方法:1. public int hashCode()2. public final Class…

android 收获地址管理,android UiAutomator添加收货地址的用例

本人在学习UiAutomator的时候,遇到添加收获地址的测试用例,这里的地址的地区是一级一级选择的。所以写了一个随机选择的方法。分享出来,供大家参考。public void addAdress() throws UiObjectNotFoundException {login();waitForResourceIdAn…

python注释以符号什么开始_python注释以什么符号开始

python注释以什么符号开始,注释,中文,代码,批量,符号 python注释以什么符号开始 易采站长站,站长之家为您整理了python注释以什么符号开始的相关内容。 python中的注释有多种,有单行注释,多行注释,批量注释,中文注释也…