【UML】第9篇 类图
目录
一、类图的概念
二、类图的主要作用
三、类图的构成
3.1 类的名称
3.2 抽象类(Abstract Class)
一、类图的概念
类图是UML模型中静态视图。它用来描述系统中的有意义的概念,包括具体的概念、抽象的概念、实现方面的概念等。静态视图包括类图和对象图。
类图(Class Diagram)是描述类、接口、协同以及他们之间关系的图,用来显示系统中这些概念的静态结构。
类图是其它图的基础。我们可以在类图的基础上,使用状态图、协作图、组件图和配置图等。
二、类图的主要作用
类图的主要作用包括:
- 描述系统的结构化设计,显示出类、接口以及它们之间的静态结构和关系。
- 简化对系统的理解,是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。
类图以反映类的结构(属性、操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法。
建模的内容包括:
- 对系统的词汇进行建模
- 对简单的协作进行建模
- 对逻辑数据库模式进行建模
三、类图的构成
在UML中,一个类通常由名称(Name)、属性(Attribute)和操作(Operation)构成。除此之外,类的构成还包含类的职责(Responsibility)、约束(Constraint)和注释(Note)等信息。
类图一般如下图所示:
也有只表达类名、或者单独加上属性或者方法(操作)的模式。
3.1 类的名称
类的名称应该是一个名词,类名应该准确清晰的反映出问题域中的概念。按照UML的约定,类的名称中的每个词的首字母应大写,且使用正体名称来表示可实例化的类,使用斜体名称表示抽象的类。
包的名字,可以在类名字的下面,换行,加上(from Animals),或者类名的前面,直接加上双冒号,表达命名空间,以区别类。如
Animals::Dog
3.2 抽象类(Abstract Class)
抽象类,用斜体字表示,是不可以直接被实例化的,可实例化的类与抽象类的区别如下。
1. 定义
- 可实例化的类:是一个具体的类,其实例化对象表示现实世界中的具体实体。它包含了实现其功能的完整方法。
- 抽象类:是一个特殊的类,不能被直接实例化。它通常包含抽象方法和/或具体方法。抽象方法是没有具体实现的方法,其实现由继承抽象类的子类提供。
2. 主要区别
- 实例化能力:可实例化的类可以直接创建对象,而抽象类不能被直接实例化。
- 方法实现:可实例化的类包含完整的方法实现,而抽象类可能包含没有实现的抽象方法。
- 设计目的:可实例化的类通常代表具体的实体或概念,而抽象类主要用于定义接口和提供部分实现,作为其他类的基类。
- 继承:当一个类继承自抽象类时,它必须实现该抽象类中的所有抽象方法(除非它自己也是抽象类)。而继承自具体类时,可以选择性地重写父类的方法。
3. 代码例子
// 可实例化的类
public class Car { public void drive() { System.out.println("Driving the car."); }
} // 抽象类
public abstract class Vehicle { public abstract void move(); // 抽象方法,没有具体实现
}
再看实例化的过程:
// 抽象类
public abstract class Vehicle { public abstract void move(); // 抽象方法,没有具体实现
} // 继承抽象类的具体类
public class Car extends Vehicle { // 实现抽象方法 @Override public void move() { System.out.println("Driving the car."); } // 添加具体类自己的方法 public void honk() { System.out.println("Beep beep!"); }
} // 主类,进行实例化操作
public class Main { public static void main(String[] args) { // 创建 Car 类的实例 Car myCar = new Car(); // 调用 Car 类的方法 myCar.move(); // 输出 "Driving the car." myCar.honk(); // 输出 "Beep beep!" }
}
给出一段Python的语法实现:
复制代码
# 抽象基类
from abc import ABC, abstractmethod class Vehicle(ABC): @abstractmethod def move(self): pass # 抽象方法,没有具体实现 # 继承抽象基类的具体类
class Car(Vehicle): # 实现抽象方法 def move(self): print("Driving the car.") # 添加具体类自己的方法 def honk(self): print("Beep beep!") # 主程序,进行实例化操作
if __name__ == "__main__": # 创建 Car 类的实例 my_car = Car() # 调用 Car 类的方法 my_car.move() # 输出 "Driving the car." my_car.honk() # 输出 "Beep beep!"
在上述示例中,Car
是一个可实例化的类,因为它提供了drive
方法的具体实现。而 Vehicle
是一个抽象类,因为它包含了一个没有实现的抽象方法 move
。任何继承 Vehicle
的类都必须提供 move
方法的具体实现。
总之,可实例化的类和抽象类在面向对象编程中都有其特定的用途。可实例化的类代表具体的实体和操作,而抽象类主要用于定义和组织接口以及提供部分实现。
(未完待续,后续文章将从3.3 属性开始,不再重新命名目录。)
相关文章:
【UML】第9篇 类图
目录 一、类图的概念 二、类图的主要作用 三、类图的构成 3.1 类的名称 3.2 抽象类(Abstract Class) 一、类图的概念 类图是UML模型中静态视图。它用来描述系统中的有意义的概念,包括具体的概念、抽象的概念、实现方面的概念等。静态视…...
I.MX6ULL启动详解:Boot配置、Bootable image启动头的组成
本篇文章来了解一下I.MX6ULL的启动方式,实际上之前我介绍了NXP的跨界MCU RT1170的启动方式:I.MX RT1170启动详解:Boot配置、Bootable image头的组成,两个芯片虽然一个是Cortex-M,一个是Cortex-A,但是都是来…...
隐藏通信隧道技术——防御SSH隧道攻击的思路
隐藏通信隧道技术——防御SSH隧道攻击的思路 在内网中建立一个稳定、可靠的数据通道,对渗透测试工作来说具有重要的意义。应用层的隧道通信技术主要利用应用软件提供的端口来发送数据。常用的隧道协议有SSH、HTTP/HTTPS和DNS。 SSH协议 在一般情况下ÿ…...
UE-近战战斗系统学习笔记一
文章目录 一、介绍1)选择paragon资产下载2)用UE 5.0版本创建额外项目迁移到5.1版本的项目3)由于后面要装备武器和盾牌,所以引入一个空手人物模型 二、创建目标系统1)用导入的角色资产代替UE默认的人物第三人称角色资产…...
使用 Layui 的 template 模块来动态加载select选项
可以使用 Layui 的 template 模块来动态加载选项,如下所示: <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>Layui 动态模板示例</title><link rel"stylesheet" href"pat…...
《数据分析-JiMuReport》积木报表详细入门教程
积木报表详细入门教程 一、JimuReport部署入门介绍 积木报表可以通过源码部署、SpringBoot集成、Docker部署以及各种成熟框架部署,具体可查看积木官方文档 当前采用源码部署,首先下载Jimureport-example-1.5.6 1 jimureport-example目录查看 使用ID…...
React面试题:React.Component和React.PureComponent的区别?
回答思路:什么是PureComponent-->Component更新过程-->PureComponent更新过程-->PureComponent的优点 什么是PureComponent:pure:纯净的,即为纯组件,可以用来优化React程序,减少render函数执行的…...
力扣:203. 移除链表元素(Python3)
题目: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 来源:力扣(LeetCode) 链接:力扣(LeetCode)官网 …...
微信小程序-选择和分割打开地图选择位置的信息
一、 前言 废话不多说,单刀直入。 本文要实现的功能是微信小程序中打开地图选择位置,以及将返回的位置信息分割。 例如返回的位置信息是:广东省深圳市龙岗区xxxxx小区 分割后变成: {province: "广东省",city: "深…...
Flink Table API 与 SQL 编程整理
Flink API总共分为4层这里主要整理Table API的使用 Table API是流处理和批处理通用的关系型API,Table API可以基于流输入或者批输入来运行而不需要进行任何修改。Table API是SQL语言的超集并专门为Apache Flink设计的,Table API是Scala和Java语言集成式…...
华为OS与麒麟OS:华为自研操作系统的对决
导言 在移动操作系统领域,华为OS和麒麟OS代表了华为在自主研发方面的努力。本文将深入探讨这两个操作系统的特点、竞争关系以及它们在用户体验、生态系统建设等方面的差异。 1. 背景与起源 华为OS的诞生: 华为OS是华为公司为应对外部环境而自主…...
Java解决比特维位计数
Java解决比特维位计数 01 题目 给你一个整数 n ,对于 0 < i < n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n 1 的数组 ans 作为答案。 示例 1: 输入:n 2 输出:[0,1,1] 解释&a…...
【深度学习目标检测】九、基于yolov5的路标识别(python,目标检测)
YOLOv5是目标检测领域一种非常优秀的模型,其具有以下几个优势: 1. 高精度:YOLOv5相比于其前身YOLOv4,在目标检测精度上有了显著的提升。YOLOv5使用了一系列的改进,如更深的网络结构、更多的特征层和更高分辨率的输入图…...
PyCharm添加自动函数文档注释
目录 1、背景2、开启PyCharm自动函数文档注释 1、背景 规范的函数文档注释有助于他人理解代码,便于团队协作、提高效率。但如果我们自己手写函数文档注释将非常耗时耗力。PyCharm安装后默认没有开启自动化函数文档注释,需要我们开启 2、开启PyCharm自动…...
数字图像处理 基于Numpy、PyTorch在频率空间中建模运动模糊
一、简述 运动模糊在图像中很常见,它会降低图像的价值,因为它会破坏图像中包含的数据。在计算机视觉中,通常通过使用许多不同的模糊增强来训练神经网络以适应这种模糊。建模模糊或图像退化的概念来自图像恢复,这是逆转退化影响的过程,以便人类或算法可以辨别原始捕获的数据…...
海康威视对讲广播系统 RCE漏洞复现(CVE-2023-6895)
0x01 产品简介 Hikvision Intercom Broadcasting System是中国海康威视(Hikvision)公司的一个对讲广播系统。 0x02 漏洞概述 Hikvision Intercom Broadcasting System 3.0.3_20201113_RELEASE(HIK)版本存在操作系统命令注入漏洞,该漏洞源于文件/php/ping.php的参数jsonda…...
【优化】Springboot 修改 tomcat连接池
【优化】Springboot 修改 tomcat连接池 factory.setTomcatProtocolHandlerCustomizers(tomcatProtocolHandlerCustomizers); 可以更换为 虚拟线程连接池 package org.config.init;import org.apache.catalina.Context; import org.apache.catalina.core.AprLifecycleListener…...
百度侯震宇:AI原生与大模型将从三个层面重构云计算
12月20日,2023百度云智大会智算大会在北京举办,大会以「大模型重构云计算,Cloud for AI」为主题,深度聚焦大模型引发的云计算变革。 百度智能云表示,为满足大模型落地需求,正在基于「云智一体」战略重构…...
【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解
之前我们已经学习的Spring、SpringMVC、Mabatis、Maven,详细讲解了Spring、SpringMVC、Mabatis整合SSM的方案和案例,上一节我们学习了SpringBoot的开发步骤、工程构建方法以及工程的快速启动,从这一节开始,我们开始学习SpringBoot…...
麒麟V10 ARM 离线生成RabbitMQ docker镜像并上传Harbor私有仓库
第一步在外网主机执行: docker pull arm64v8/rabbitmq:3.8.9-management 将下载的镜像打包给离线主机集群使用 在指定目录下执行打包命令: 执行: docker save -o rabbitmq_arm3.8.9.tar arm64v8/rabbitmq:3.8.9-management 如果懒得打包…...
AI创作系统ChatGPT商业运营网站系统源码,支持AI绘画,GPT语音对话+DALL-E3文生图
一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…...
剑指offer题解合集——Week1day5
剑指offerWeek1 周五:重建二叉树 题目链接:重建二叉树 输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。注意:二叉树中每个节点的值都互不相同; 输入的前序遍历和中序遍历一定合法; 数据范围 树中节点数量…...
Redis设计与实现之数据库
目录 一、数据库 1、数据库的结构 2、 数据库的切换 3、 数据库键空间 4、键空间的操作 添加新键 删除键 更新键 取值 其他操作 5、 键的过期时间 6、过期时间的保存 7、设置生存时间 8、过期键的判定 9、 过期键的清除 定时删除 惰性删除 定期删除 10、过期…...
如何在Eclipse中安装WindowBuilder插件,详解过程
第一步:找到自己安装eclipse的版本,在Help-关于eclipse里面,即Version 第二步:去下面这个网站找到对应的 link(Update Site),这一步很重要,不然版本下载错了之后还得删除WindowBuil…...
node.js mongoose schemaTypes
目录 官方文档 简介 SchemaType 示例 配置SchemaType规则 通用规则 特定schemaType规则 String Number Date Map monggose会根据shcemaType将文档值转换成指定的类型 官方文档 Mongoose v8.0.3: SchemaTypes 简介 SchemaTypes是在使用Mongoose时,用于…...
论文解读:On the Integration of Self-Attention and Convolution
自注意力机制与卷积结合:On the Integration of Self-Attention and Convolution(CVPR2022) 引言 1:卷积可以接受比较大的图片的,但自注意力机制如果图片特别大的话,运算规模会特别大,即上图中右边(卷积)会算得比较快…...
【Spring】15 ApplicationContextAware 接口
文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动 4. 应用场景总结 Spring 框架提供了许多回调接口,用于在 Bean 的生命周期中执行特定的操作。ApplicationContextAware 接口是其中之一,它允许 Bean 获取对 A…...
Android 版本控制工具--Git
要在Android中使用Git,需要进行以下步骤: 安装Git:首先在你的开发环境中安装Git。在Windows中,你可以从官方网站(https://git-scm.com/downloads)上下载Git的可执行文件并进行安装。在Mac上,你可…...
Wireshark高级网络安全分析
第一章:Wireshark基础及捕获技巧 1.1 Wireshark基础知识回顾 1.2 高级捕获技巧:过滤器和捕获选项 1.3 Wireshark与其他抓包工具的比较 第二章:网络协议分析 2.1 网络协议分析:TCP、UDP、ICMP等 2.2 高级协议分析:HTTP…...
llvm后端之DAG设计
llvm后端之DAG设计 引言1 核心类设计2 类型系统2.1 MVT::SimpleValueType2.2 MVT2.3 EVT 3 节点类型 引言 llvm后端将中端的IR转为有向无环图,即DAG。如下图: 图中黑色箭头为数据依赖;蓝色线和红色线为控制依赖。蓝色表示指令序列化时两个节…...
建站行业现状探讨/优化网站有哪些方法
隐式意图在很多app中应用广泛,使用隐式意图不仅可以启动自己程序中的Activity,还可以启动其他程序中的Activity,使得程序之间可以共享某种功能。以下将对于用过的setAction()的方法作以归纳整理,持续更新… 1、android.intent.ac…...
wordpress音乐网/百度首页优化排名
目录 线程同步 Event Event练习 Lock:锁机制 加锁、解锁 锁的引用场景 非阻塞锁使用 可重入锁RLock Condition【用于生成者,消费者模型中】 上例中,程序本身不是线程安全的,程序逻辑有很多瑕疵,但是可以很好的…...
wordpress 发帖机/中国十大广告公司排行榜
前言 由于项目需要迁移到新环境,minio的数据也需要进行迁移,使用Rclone成功搞定。 关于Rclone是什么官网已有,这里不再赘述。 官网地址 中文网站 Rclone的使用 下载安装rclone curl https://rclone.org/install.sh | sudo bash 如果提示 …...
wordpress url绝对路径/win10系统优化软件哪个好
1、判空函数 说明:使用指定的替换值替换 NULL。 语法:ISNULL ( check_expression , replacement_value ) 参数: check_expression:将被检查是否为 NULL 的表达式。check_expression 可以为任何类型。 replacement_value࿱…...
wordpress 付费剧集网站/桂林市天气预报
通信技术发展数十年我们的生活也发生了翻天覆地的变化1G-5G,承载了多少回忆和未来...文案:ZHY制作:胖胖背锅:毒少来源: 科技每日推送-END-【文章版权归原作者所有,其内容与观点不代表Unitimes立 场。翻译文…...
门户网站采用较多的模式是/阿里指数官网入口
实际上一个人有没有的房产运,在八字命理中是有信息显示的。有者买了就赚,有者买了就亏,有者无缘无故会获得一套或几套房子,有者一生与房产无缘,有者即使有良产万顷,最后也会变卖一空。那么如何从八字中断你…...