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

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

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

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

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

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

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

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

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

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:…

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

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

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

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

linux 别名,Linux中的别名就这么简单,如何使用和创建永久别名?

原标题:Linux中的别名就这么简单,如何使用和创建永久别名?输入文本和记命令是Linux命令行爱好者的缺点之一。如果你需要输入并记住同样长的命令,这可能会降低终端的工作效率。如果您可以用自己的短名称替换长命令,或者…

华为手机如何固定横屏_华为手机如何录屏?原来方法这么简单,手把手教你学会...

很多人都不知道,华为手机到底如何录屏,下面给大家分享4种方法,非常简单,手把手教你学会。一、通知栏录屏从手机顶端往下滑动打开通知栏,这个面板上有很多快捷功能,其中就有【屏幕录制】功能,点击…

程序发出的广播其他程序收不到_RabbitMQ 如何实现对同一个应用的多个节点进行广播...

1.背景了解过RabbitMQ的Fanout模式,应该知道它原本的Fanout模式就是用来做广播的。但是它的广播有一点区别,来回顾下它的含义:Fanout类型没有路由键的概念,只要队列绑定到了改exchange上面,就会接收到所有的消息。使用…

api 创建zookeeper客户端_一文了解 Zookeeper 基本原理与应用场景

Zookeeper 是一个高性能、高可靠的分布式协调系统,是 Google Chubby 的一个开源实现,目前在分布式系统、大数据领域中使用非常广泛。本文将介绍 Zookeeper 集群架构、数据模型、监听机制,以及Zookeeper典型的应用场景等。1. Zookeeper 集群角…

android多个水波球,android球形水波百分比控件代码

本文主要介绍的是一个球形水波的百分比控件,市面上有各种形形色色的百分比控件,我一直觉得水波是最炫的,UI给了我这个机会,然而网上搜了一大堆,不是太复杂,代码太多(反正我是调不出效果来),就是…

c++ 二维数组_【技术篇】C指针与二维数组深度辨析

一、源代码/*第01行*/ CLion 2019.3.4 x64中编写的源代码截图二、深度辨析CLion 2019.3.4 x64中编译的结果截图zippo[4][2]是一个四行二列的int型二维数组①不论一维数组还是二维数组,数组名就是指向数组首个元素的指针,也即数组名就是数组首个元素的…

shiro启动之后页面访问不了_java:shiro入门——4

【7】测试【7.1】启动点击apply然后点击OK【7.2】登录过滤访问http://localhost:8080/platform/home的时候,会被【7.3】角色过滤使用“admin”用户登录,密码:123根据SecurityServiceImpl我们可以知道使用admin账号登录成功之后:此…

oreo另一个意思_记一次有意思的统计(部分大宗商品价格指数相关性统计)

最近闲来无事,对部分大宗商品近十年的价格涨幅做了个统计,发现有些有意思的现象:大多资产价格走势如果放到一个足够长得时间维度里,那其实整体走势是比较一致的;有些资产价格走势高度相关,但是在某个时间段…

android左右耳机声音大小不一样,AirPods左右两边声音大小不同怎么办 单侧无声和两侧音量不同解决方法...

AirPods连接 iPhone 后如果出现了左右两边声音大小不一样,或者单侧无声的问题,可能是软件导致的暂时性故障,也有可能是硬件问题。当耳机音量出现异常时,可以通过以下几种方式尝试恢复。单侧无声和两侧音量不同解决方法&#xff1a…

laravel 任务队列_Laravel5.5之事件监听、任务调度、队列

流程:1.1 创建eventphp artisan make:event UserLoginLoginController.php/*** The user has been authenticated.** param IlluminateHttpRequest $request* param mixed $user* return mixed*/protected function authenticated(Request $request, $user){eve…

pytorch微调bert_小版BERT也能出奇迹:最火的预训练语言库探索小巧之路

选自Medium作者:Victor Sanh机器之心编译参与:魔王过去一段时间,大模型层出不穷。在大家纷纷感叹「大力出奇迹」的时候,作为调用预训练语言模型最流行的库,HuggingFace 尝试用更少的参数量、更少的训练资源实现同等的性…