【UML】第9篇 类图

news2024/9/25 3:28:53

目录

一、类图的概念

二、类图的主要作用

三、类图的构成

3.1 类的名称

3.2 抽象类(Abstract Class)


一、类图的概念

类图是UML模型中静态视图。它用来描述系统中的有意义的概念,包括具体的概念、抽象的概念、实现方面的概念等。静态视图包括类图和对象图。

类图(Class Diagram)是描述类、接口、协同以及他们之间关系的图,用来显示系统中这些概念的静态结构。

类图是其它图的基础。我们可以在类图的基础上,使用状态图、协作图、组件图和配置图等。

二、类图的主要作用

类图的主要作用包括:

  1. 描述系统的结构化设计,显示出类、接口以及它们之间的静态结构和关系。
  2. 简化对系统的理解,是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。

类图以反映类的结构(属性、操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法。

建模的内容包括:

  1. 对系统的词汇进行建模
  2. 对简单的协作进行建模
  3. 对逻辑数据库模式进行建模

三、类图的构成

在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 属性开始,不再重新命名目录。)

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

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

相关文章

Halcon识别瓶盖字体,极坐标转换

Halcon识别瓶盖字体,极坐标转换 read_image (Image, D:/image/bilibili/photo/检测字符.png) ***转为灰度图 rgb1_to_gray (Image, GrayImage) threshold (GrayImage, Regions, 115, 255) get_image_size (GrayImage, Width, Height) *****填充 fill_up (Regions, …

算法基础之二分图的最大匹配

二分图的最大匹配 核心思想&#xff1a;匈牙利算法 : 寻找有没有可重新连接的路 #include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N 510 , M 100010;int h[N],e[M],ne[M],idx;int match[N]; //记录与j匹配的iint n…

《大观》期刊杂志发表投稿方式

《大观》杂志刊登文化、文学、艺术、民俗、影视等领域的理论研究文章&#xff0c;杂志内容丰富&#xff0c;雅俗共赏&#xff0c;集权威性、实用性、前瞻性与专业性于一体&#xff0c;具有很高的学术价值和社会影响力。是广大专家、学者、教师 、学子发表论文、交流信息的重要平…

HarmonyOS:Neural Network Runtime对接AI推理框架开发指导

场景介绍 Neural Network Runtime 作为 AI 推理引擎和加速芯片的桥梁&#xff0c;为 AI 推理引擎提供精简的 Native 接口&#xff0c;满足推理引擎通过加速芯片执行端到端推理的需求。 本文以图 1 展示的 Add 单算子模型为例&#xff0c;介绍 Neural Network Runtime 的开发流…

Linux线程——死锁

什么是死锁 死锁是一组相互竞争资源的线程因为他们之间得到互相等待导致“永久“阻塞的现象&#xff1b;&#xff08;你等我 我等你 你不放我也不放 就导致“永久“阻塞的现象&#xff09; 死锁是指两个或两个以上的进程在执行过程中&#xff0c;由于竞争资源或者由于彼此通信…

【AntDesign】如何设置Form表单初始值以及会出现的问题

方法一&#xff1a;使用 setFieldsValue() 方法&#xff08;推荐&#xff09; 首先&#xff0c;解构出form实例 const [form] Form.useForm()然后&#xff0c;将该实例与Form绑定 <Form form{form} ...>...</Form>恰当时机&#xff0c;调用setFieldsValue()方法…

Python (十二) NumPy操作

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

IDEA中也能用Postman了,这款插件平替

Postman是大家最常用的API调试工具&#xff0c;那么有没有一种方法可以不用手动写入接口到Postman&#xff0c;即可进行接口调试操作&#xff1f;今天给大家推荐一款IDEA插件&#xff1a;Apipost Helper&#xff0c;写完代码就可以调试接口并一键生成接口文档&#xff01;而且还…

基于Tkinter制作简易的CAN bootloader上位机

文章目录 1.前言2.测试设备3.上位机3.1 参考资料3.2 上位机主要功能3.3 上位机发送流程 升级测试例程分享 1.前言 之前基于S32K144EVB和Tkinter编写了一个简易的串口bootloader上位机&#xff0c;链接如下&#xff1a; 基于Tkinter制作简易的串口bootloader上位机 (qq.com) …

Python之json模块和pickle模块详解

json模块和pickle模块的用法 在python中&#xff0c;可以使用pickle和json两个模块对数据进行序列化操作。 其中&#xff1a; json可以用于字符串或者字典等与python数据类型之间的序列化与反序列化操作。 pickle可以用于python特有类型与python数据类型之间的序列化与反序…

【软件工程】软件工程复习题库2023

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; SpringCloud MybatisPlus JVM 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 软件工程复习题库 一、选择题二、填空题三、判断题四…

E : DS查找—二叉树平衡因子

Description 二叉树用数组存储&#xff0c;将二叉树的结点数据依次自上而下,自左至右存储到数组中&#xff0c;一般二叉树与完全二叉树对比&#xff0c;比完全二叉树缺少的结点在数组中用0来表示。 计算二叉树每个结点的平衡因子&#xff0c;并按后序遍历的顺序输出结点的平衡…

SpringBoot基于gRPC进行RPC调用

SpringBoot基于gRPC进行RPC调用 一、gRPC1.1 什么是gRPC&#xff1f;1.2 如何编写proto1.3 数据类型及对应关系1.4 枚举1.5 数组1.6 map类型1.7 嵌套对象 二、SpringBoot gRPC2.1 工程目录2.2 jrpc-api2.2.1 引入gRPC依赖2.2.2 编写 .proto 文件2.2.3 使用插件机制生产proto相关…

延迟消息队列的几种实现方案,哪种更适合业务,要看具体情况分析

延迟消息队列的几种实现方案&#xff0c;延迟消息怎么实现&#xff0c;很多人可能一想到的是rabbitmq的死信队列来实现&#xff0c;但是一旦引入mq的话&#xff0c;就依赖这个中间件&#xff0c;另外维护成本&#xff0c;开发成本都很大&#xff0c;那有么有简单点的实现方式呢…

ubuntu推送本地仓库到coding

本教程提供在ubuntu系统下推送本地仓库到coding的指令&#xff0c;用于查阅 一、主要步骤有&#xff1a; 0.初始化仓库 git init 1.添加远程仓库 git remote add origin https://coding.git #修改自己仓库链接 &#xff08;命名仓库别名为origin&#xff09; 2.提交代码…

服务器解析漏洞有哪些?IIS\APACHE\NGINX解析漏洞利用

解析漏洞是指在Web服务器处理用户请求时&#xff0c;对输入数据&#xff08;如文件名、参数等&#xff09;进行解析时产生的漏洞。这种漏洞可能导致服务器对用户提供的数据进行错误解析&#xff0c;使攻击者能够执行未经授权的操作。解析漏洞通常涉及到对用户输入的信任不足&am…

那些令人惊叹的awk简略写法

​​​​​​​awk是一门美妙的语言&#xff0c;被称为unix命令行工具皇冠上的明珠。它有很多简略写法&#xff0c;用好了可以用极少的代码快速解决问题。 下面就列举一些令人惊叹的awk简略写法&#xff1a; awk {sub(/pattern/, "foobar")} 1 # 无论替换是否成功&…

一步步教你创建酒店预订小程序

如果你想为你的酒店或旅馆创建一个预订小程序&#xff0c;这篇文章将为你提供详细的步骤和指南。我们将按照以下顺序进行&#xff1a; 一、进入乔拓云网后台 首先&#xff0c;打开乔拓云网的官方网站&#xff0c;点击右上角的“登录”按钮&#xff0c;登录成功后&#xff0c;点…

基于vue与three.js,监听FPX(Stats类使用)

第一步&#xff0c;引入stats类并new出来 import Stats from three/examples/jsm/libs/stats.module.js; data(){return {stats : new Stats(),} } 第二步&#xff0c;添加dom mounted() {this.init3D();this.animate();window.addEventListener("keydown", this.…

【大数据面试】Flink面试题附答案

目录 ✅Flink介绍、特点、应用场景 ✅Flink与Spark Streaming的区别 ✅Flink有哪些部署模式 ✅Flink架构 ✅怎么设置并行度&#xff1f; ✅什么是算子链&#xff1f; ✅什么是任务槽&#xff08;Task Slots&#xff09;&#xff1f; ✅任务槽和并行度的关系 ✅Flink作…