当前位置: 首页 > news >正文

【UML用户指南】-04-从代码到UML的关键抽象

1、关键抽象

声明了一个名为paint的操作,它的实现调用名为drawString的另一个操作,drawString操作负责在指定的位置上打印“Hello,World!”。在通常的面向对象的方式下,drawString是一个名称为g的参数上的一个操作,g的类型是类Graphics。
 

import java.awt.Graphics;class HelloWorld extends java.applet.Applet{public void paint (Graphics g){g.drawString("Hello,World!",10,10);}}

有上述代码实例,生成对应的UML模型

补充Applet和Graphics外部引用类,其中Applet 作为父类,属于泛化关系;Graphics 属于依赖关系(影响元素的变化)

更上层的泛化关系如下图所示,ImageObserver 作为接口元素

包之间的依赖关系,如下图所示,在UML中,包被表示成带有标签的文件夹,包可以被嵌套,邮箱的虚线段描述了包之间的依赖。

例如,HelloWorld 依赖包java.applet,java.applet依赖包java.awt。

2、机制

各部分如何协同工作

顺序图

序列从运行对象Thread开始,它调用Toolkit的一个操作run。对象Toolkit调用它自己的(callbackLoop),然后它调用ComponentPeer的操作handleExpose。对象ComponentPeer调用它的目标操作paint。对象ComponentPeer假设它的目标是Component,但在这种情况下,目标实际是Component的子类(即HelloWorld),因此,HelloWorld的操作paint被多态地处理。
 

3、制品

“Hello,World!”被实现为一个小应用程序(applet),它不是单独存在的,而通常是某个网页的一部分。打开含有该程序的网页,并由一些运行该程序的Thread对象的浏览器机制触发,程序就开始执行了。然而,直接作为网页一部分的并不是类HelloWorld,而是由Java编译器(它把描述该类的源代码转换成可执行的制品)产生的该类的二进制形式。这说明对一个系统存在非常不同的观察角度。所有早先的图描述的是程序的逻辑视图,这里所说的是applet的物理制品的视图。

制品图

逻辑类 HelloWorld 被表示成位于顶部的一个类矩形,这个图中的其他每个图符都表示了系统实现视图中一个UML制品。制品是一种物理表示,如文件。名为hello.java的制品表示了逻辑类HelloWorld的源代码,它是可以由开发环境和配置管理工具操纵的文件。用Java编译器可把这段源代码转换成二进制程序 HelloWorld.class,以使得它适合于在计算机的 Java虚拟机上执行。源代码和二进制程序都表现了(即物理上实现了)逻辑类,这被表示为带着关键字«manifest»的虚线箭头。

制品的图符是名字之上标注了关键字«artifact»的矩形

制品间的依赖用虚箭头表示

相关文章:

【UML用户指南】-04-从代码到UML的关键抽象

1、关键抽象 声明了一个名为paint的操作,它的实现调用名为drawString的另一个操作,drawString操作负责在指定的位置上打印“Hello,World!”。在通常的面向对象的方式下,drawString是一个名称为g的参数上的一个操作,g的类型是类Gr…...

(2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少

LoRA Learns Less and Forgets Less 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 1. 引言 2. 背景 3. 实验设置 3.2 使用编码和数学基准测试来衡量学习(目标域…...

【Java】面向对象的三大特征:封装、继承、多态

封装 什么叫封装? 在我们写代码的时候经常会涉及两种角色: 类的实现者 和 类的调用者。 封装的本质就是让类的调用者不必太多的了解类的实现者是如何实现类的, 只要知道如何使用类就行了,这样就降低了类使用者的学习和使用成本&a…...

请问Java8进阶水平中,常用的设计模式有哪些?

设计模式通常被分为三大类:创建型(Creational)、结构型(Structural)和行为型(Behavioral)。以下是这20个设计模式的分类: 创建型(Creational)设计模式&#…...

力扣--最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 输入:nums [-2,1,-3,4,-1,2,1,-5,4] 输出:…...

C# 中的字符与字符串

简介 在C#编程语言中,字符和字符串是处理文本数据的基础。字符是单个的字母或符号,而字符串是字符的集合。本篇博客将详细介绍C#中的字符类型 char 和字符串类型 string,以及它们的基本操作。 字符类型 char char 类型在C#中用于表示单个字…...

TPM之VMK密封

本篇文章主要介绍基于TPM的Bitlocker全盘加密时,VMK密钥的密封(Seal)流程,至于TPM、Bitlocker、密钥保护器、VMK密钥等这些东西是什么,这里不做解释,需要自己脑补一下(╮(╯▽╰)╭)…...

Fastjson 反序列化漏洞[1.2.24-rce]

漏洞复现环境搭建请参考 http://t.csdnimg.cn/vSaaw kali切换jdk版本请参考 Kali安装JAVA8和切换JDK版本的详细过程_kali安装jdk8-CSDN博客 漏洞原理 Fastjson提供的com.sun.rowset.JdbcRowSetImpl类下的dataSourceName方法支持传入一个RMI/LDAP源,支持远程调用。…...

【面试宝藏】Go基础面试题其一

探索Go语言:特性、用法与最佳实践 Go语言(Golang)自发布以来迅速成为开发者社区中的热门选择。本文将探讨Go语言的优势、数据类型、包管理、类型转换、并发处理、同步机制、通道特性及其使用中的注意事项等内容,并回答一些常见的…...

python如何安装pyqt4

第一步,下载.whl文件,地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyqt4,这里可以下载不同的python版本对应的包。 第二步,选择一个目录,将下载好的文件放到该目录下,然后cmd下&#xff…...

调用上传文件接口出现格式错误

一、造成这种错误的可能有很多 1.检查一下传递格式 2.检查一下接口要求的格式 二、举个例子 这两个有什么区别? 那就是json、和form-data,一定要看仔细接口 如果还是按照json的方式去传就会报错 三、更改header里Content-Type的类型 json等的heade…...

leetcode148. 排序链表,归并法,分治的集大成之作

leetcode148. 排序链表 题目链接 给你链表的头结点 head ,请将其按升序排列并返回排序后的链表。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4] 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5] 示例 3&…...

一维时间序列信号的小波模极大值分解与重建(matlab R2018A)

数学上称无限次可导函数是光滑的或没有奇异性,若函数在某处有间断或某阶导数不连续,则称函数在此处有奇异性,该点就是奇异点。奇异性反映了信号的不规则程度,因为信号的奇异点和突变部分往往携带者重要信息,因此信号的…...

五分钟“手撕”栈

实现代码放开头,供大家学习与查阅 目录 一、实现代码 二、什么是栈 三、栈的常见操作 底层实现是链表。 入栈 出栈 四、Stack的使用 五、栈的习题 第一题 第二题 第三题 第四题 第五题 第六题 第七题 六、栈、虚拟机栈、栈帧的区别 目录 一、…...

MAC也能玩转3A大作 Crossover使用指南 crossover运行战地5

众所周知,在Mac上你本不该玩游戏。但是如果你实在犯了这个瘾了,你可以使用Parallel Desktop来运行所有Windows程序。但是繁重的虚拟机对磁盘容量提出了较高的要求,(可能虚拟机用了大概半年就会到60-80GB这样的大小)&am…...

docker私有镜像仓库的搭建及认证

简介: docker私有镜像仓库的搭建及认证 前言 在生产上使用的 Docker 镜像可能包含我们的代码、配置信息等,不想被外部人员获取,只允许内 网的开发人员下载。 Docker 官方提供了一个叫做 registry 的镜像用于搭建本地私有仓库使用。在内部网…...

simCSE句子向量表示(1)-使用transformers API

SimCSE SimCSE: Simple Contrastive Learning of Sentence Embeddings. Gao, T., Yao, X., & Chen, D. (2021). SimCSE: Simple Contrastive Learning of Sentence Embeddings. arXiv preprint arXiv:2104.08821. 1、huggingface官网下载模型 官网手动下载:pri…...

网络运维的重要性

一、介绍 网络运维,英文名为Network Operations (NetOps),指的是负责维护和管理企业或组织内部网络设备和系统的团队或个人。网络运维的主要目标是确保网络的稳定运行和高效性能,以满足企业或组织的需求。 网络运维工作涵盖了多个方面&…...

还不会使用多线程优化代码执行效率?codefun教你在业务场景中使用CompletableFuture进行优化!

业务场景 我们先来从场景入手,具体的业务是这样的:我们需要从某的省的id去查询这个省份所有的县区,至于什么是县区呢?在DB中我们是这样定义的,也就是字段level 3 的时候,就代表一个县的信息,然后呢&#…...

数据结构-堆(带图)详解

前言 本篇博客我们来仔细说一下二叉树顺序存储的堆的结构,我们来看看堆到底如何实现,以及所谓的堆排序到底是什么 💓 个人主页:普通young man-CSDN博客 ⏩ 文章专栏:数据结构_普通young man的博客-CSDN博客 若有问题 评…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制&#xff0…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来&#xf…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求&#xff…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

Android15默认授权浮窗权限

我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

爬虫基础学习day2

# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

浅谈不同二分算法的查找情况

二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况&#xf…...