matlab面向对象
一、面向对象编程
1.1 面向过程与面向对象
- 区别:
- 面向过程的核心是一系列函数,执行过程是依次使用每个函数
- 面向对象的核心是对象(类)及其属性、方法,每个对象根据需求执行自己的方法以解决问题

-
对象:单个事务的抽象。也可理解为函数和数据的封装
-
面向对象的必要性:
1.2 对象的基本概念
- 类:一组相关的属性和行为的集合,是一个抽象的概念
- 抽象化:抽象代表现实世界中实体的行为
- 属性:存储在类中的数据和变量
- 方法:事物可以执行的操作或行为
- 初始化:构造一个类并指明固有属性的过程
- 对象:该类事物的具体表现形式,具体存在的个体
1.3 面向对象的三个特征
- 封装
- 一个对象就是一个封装了数据和操作这些数据的代码的实体
- 部分数据和方法只能通过内部访问,避免意外的修改
- 继承
- 可以复用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行拓展
- 提供了从特殊到一般的方法
- 多态
- 一个类实例的相同方法在不同情形有不同表现形式
- 不同的对象可以通过相同的操作来调用
1.4 MATLAB面向对象编程的用法
新建文件的时候直接新建一个类文件,会自动生成一个标准类模板:

classdef untitled%UNTITLED2 此处提供此类的摘要% 此处提供详细说明propertiesProperty1endmethodsfunction obj = untitled(inputArg1, inputArg2)% 构造函数本身obj.Property1 = inputArg1 + inputArg2;endfunction outputArg = method1(obj, inputArg)% 方法outputArg = obj.Property1 + inputArg;endend
end
注意:
- 类名称要和文件名保持一致
- properties关键字:类属性
- methods关键字:方法
- 在methods里必须存在一个与类名相同的函数,这个函数的输出变量就是类产生的对象
1.5 实例
定义一只小狗;属性:名字、年龄;初始化:输入名字;方法1:让它坐下;方法2:询问年龄
classdef dogproperties% 小狗的属性nameageend methodsfunction obj = dog(name, age)% 构造函数obj.name = name;obj.age = age;endfunction sit(obj)% 让小狗坐下fprintf('%s is now sitting.\n', obj.name);endend
end

二、面向对象的基本操作
2.1 类的属性和方法
-
属性
- 属性的默认值 —— 在属性列表中指定
- 常量属性:用Constant声明
- 非独立属性:用Dependent声明,属性值是否取决于其他值
- 隐藏的属性:通过Hidden声明,用于隐藏内部细节,使对象更简洁
-
属性的访问权限
- 语法:(Set / Get)Access = private / protected / public
- private:只有该类的成员方法可以访问
- protected:只有该类的成员方法和该类的子类可以访问
- public:除该类和子类外,在类之外的函数或脚本中也可以访问
-
方法
- 构造函数Constructor
- 构造函数和类的名称相同,用来创建类的实例
- 一个类的定义中只能有一个构造函数
- 构造函数只能有一个返回值,即新创建的对象
- 构造函数Constructor
2.2 类的组合和继承
- 继承是为了提高代码复用性,但也要注重逻辑性

-
实例:有一个车辆类vehicle,现在要创建一个电动车类e_vehicle
-
vehicle.m
classdef vehicle < handle propertiesmakeendproperties(SetAccess=protected)car_miles = 0;endproperties(Hidden)yearendproperties(Dependent)car_kmendmethodsfunction obj = vehicle(year, make)obj.make = make;obj.year = year;endfunction descripe(obj)fprintf('%s made in %d.\n', obj.make, obj.year);endfunction run(obj, miles)obj.car_miles = obj.car_miles + miles;endend end
-
e_vehicle.m
classdef e_vehicle < vehiclepropertiessocendproperties(Constant)soc_per_mile = 1; % 常量属性endmethodsfunction obj = e_vehicle(soc, year, make)obj = obj@vehicle(year, make); % 用@调用父类方法obj.soc = soc;endfunction run(obj, miles)run@vehicle(obj, miles);obj.soc = obj.soc - miles*obj.soc_per_mile;endend end
-
实例化一个e_vehicle对象ev
ev=e_vehicle(95,2020,'yiqi')
-
假设跑了10英里(调用ev的方法run),查看ev的里程
ev.run(10) ev.car_miles
-
跑了10英里后,电量减少了,ev.soc查看从95变成了85
-
2.3 句柄类和实体类
-
handle类是遵循句柄语义的所有类的超类
- 句柄是引用handle类的对象的变量
- 多个变量可以引用同一个对象
-
handle类是抽象类,无法直接创建该类的实例。可使用handle类派生其他类,可以使其实例为句柄对象的具体类
classdef MyHandleClass < handle % 表示MyHandleClass类继承于handle类... end
-
值类(实体类,Value):
- 构造函数返回一个与其赋值变量相关联的对象
- 复制行为会创建一个独立的副本
- 值类对象在方法中修改后需要返回对象本身
-
句柄类:
- 构造函数返回一个句柄对象,该对象是对所创建对象的引用
- 复制的句柄指向同一块内存,不会创建副本
- 函数对作为输入参数传递的句柄对象进行修改后,不必返回该对象
例子:
值类dog_value.m
classdef dog_valueproperties% 小狗的属性nameageend methodsfunction obj = dog_value(name, age)% 构造函数obj.name = name;obj.age = age;endfunction sit(obj)% 让小狗坐下fprintf('%s is now sitting.\n', obj.name);endend
end
句柄类dog_handle.m(代码与值类一样,名称不同而已,定义时加上handle)
classdef dog_handle < handleproperties% 小狗的属性nameageend methodsfunction obj = dog_handle(name, age)% 构造函数obj.name = name;obj.age = age;endfunction sit(obj)% 让小狗坐下fprintf('%s is now sitting.\n', obj.name);endend
end
-
分别创建两种类的实例
-
复制值类dv,会创建一个独立的副本,即dv_copy与dv是相互独立的,互不影响
- 将dv的age修改成10,但是dv_copy的age没改变
-
复制句柄类dh,句柄指向同一块内存,不会创建副本,即修改其中一个的属性就会影响到另外一个
- 修改dh的年龄,dh_copy的年龄也被修改了
-
值类对象在方法中修改后需要返回对象本身
-
在值类dog_value.m中添加一个方法set_age用于修改年龄
-
如下图这样添加是无法修改的,因为值类对象在方法中修改后需要返回对象本身
function set_age(obj, age)% 修改年龄obj.age = age; end
-
正确的是:
- 调用的时候如果只是执行dv.set_age这个方法,dv的age并不会被修改,因为没有返回对象本身
-
-
正确的是
dv = dv.set_age(2)
,这样才能修改dv的agefunction obj = set_age(obj, age) % 修改后需要返回对象本身% 修改年龄obj.age = age; end
-
-
相比之下,句柄类就会更简单一些
-
直接添加如下方法,不需要返回对象本身
function set_age(obj, age)% 修改年龄obj.age = age; end
-
调用方法set_age后,dh对象的age即被修改
-
-
判断对象是否相等
- 对于handle类
- 可以用**==和isequal**判断是否指向同一块内存(句柄复制)
- 可以用isequal判断指向不同内存的对象是否属性一致
- 对于value类
- 不支持使用==判断相等关系,但可以进行运算符重载
- 可以用isequal判断相等关系
- 对于handle类
相关文章:

matlab面向对象
一、面向对象编程 1.1 面向过程与面向对象 区别: 面向过程的核心是一系列函数,执行过程是依次使用每个函数面向对象的核心是对象(类)及其属性、方法,每个对象根据需求执行自己的方法以解决问题 对象:单个…...

01、Cannot resolve MVC View ‘xxxxx前端页面‘
Cannot resolve MVC View ‘xxxxx前端页面’ 没有找到对应的mvc的前端页面。 代码:前端这里引入了 thymeleaf 模板 解决: 需要添加 thymeleaf 的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>s…...

时空智友企业流程化管控系统文件上传漏洞复现
0x01 产品简介 时空智友企业流程化管控系统是一个功能丰富、灵活可定制的企业管理工具。通过该系统,企业能够实现流程的自动化、协同的提升、数据的洞察和决策的优化,从而提高工作效率、管理水平和企业竞争力。 0x02 漏洞概述 时空智友企业流程化管控系…...

【已解决】Authenticator:无法添加账户请验证激活代码是否正确以及您的设备是否已为此应用启用推送通知
问题: 小米手机的Authenticator添加微软账户扫描QR码提示:无法添加账户请验证激活代码是否正确以及您的设备是否已为此应用启用推送通知 解决办法: 1、在通知管理中允许Authenticator所有通知。 2、在手机设置-账户与同步里找到谷歌基础服…...
聊聊springboot tomcat的maxHttpFormPostSize
序 本文主要研究一下spring boot tomcat的maxHttpFormPostSize参数 parseParameters tomcat-embed-core-9.0.37-sources.jar!/org/apache/catalina/connector/Request.java /*** Parse request parameters.*/protected void parseParameters() {parametersParsed true;Para…...

java并发:synchronized锁详解
背景: 在java多线程当中,我们总有遇到过多个线程操作一个共享数据时,而这个最后的代码执行结果并没有按照我们的预期一样得到正确的结果。此时我们就需要让代码执行在操作共享变量时,要等一个线程操作完毕时,另一个线程…...

Unity 之NavMeshAgent 组件(导航和路径寻找的组件)
文章目录 **作用**:**属性和方法**:**用途**:**注意事项**: NavMeshAgent 是Unity引擎中用于导航和路径寻找的组件。它可以使游戏对象在场景中自动找到可行走的路径,并在避免障碍物的情况下移动到目标位置。 以下是关于…...

装箱和拆箱
1. 概念 装箱 将值类型转换成等价的引用类型 装箱的步骤 拆箱 将一个已装箱的引用类型转换为值类型,拆箱操作需要声明拆箱后转换的类型 拆箱的步骤 1)获取已装箱的对象的地址 2)将值从堆上的对象中复制到堆栈上的值变量中 2. 总结 装箱和拆箱…...
等保测评--安全通信网络--测评方法
安全子类--安全架构 a)应保证网络设备的业务处理能力满足业务高峰期需要; 一、测评对象 路由器、交换机、无线接入设备和防火墙等提供网络通信功能的设备或相关组件 二、测评实施 1) 应核查业务高峰时期一段时间内主要网络设备(一般包括核心交换机、汇聚交换机、边界路…...
统计学补充概念11-tsne
概念 t-SNE(t-distributed Stochastic Neighbor Embedding)是一种非线性降维技术,用于可视化高维数据在低维空间中的分布。与主成分分析(PCA)等线性降维方法不同,t-SNE专注于保留数据点之间的局部相似性关…...

Linux_11_系统启动和内核管理
目录 1 C entOS 6 的启动管理1.1 Linux 组成1.2 内核设计流派1.3 CentOS 6启动流程1.3.1 CentOs 6 启动流程1.3.1 硬件启动POST1.3.2 bootloader 启动/引导加载器1.3.2.1 grub 功能和组成1.3.2.2 CentOS 6 grub 安装1.3.2.3 grub legacy 管理 1.3.3 加载 kernel1.3.4 init 初始…...
【从零学习python 】65. Python正则表达式修饰符及其应用详解
文章目录 正则表达式修饰符进阶案例 正则表达式修饰符 修饰符描述re.I使匹配对大小写不敏感re.M多行匹配,影响 ^ 和 $re.S使 . 匹配包括换行在内的所有字符 示例代码如下: import reprint(re.search(rL, hello)) # None# 不区分大小写,可…...

QA2
1. import shutil 是什么意思? 在 Python 中,import shutil 是导入标准库 shutil 的语句。shutil 提供了一些用于复制文件和文件夹、移动文件和文件夹、以及执行其他文件操作的函数。 通过导入 shutil,你可以使用其中的函数来处理文件和文件…...
centos7卸载docker
要在CentOS 7上干净地卸载Docker,可以执行以下步骤: 停止Docker服务: sudo systemctl stop docker移除所有Docker容器和镜像。这将删除所有相关数据,包括容器、镜像以及存储卷等。请注意,这将不可逆转地删除数据。 …...

【计算机视觉】递归神经网络在图像超分的应用Deep Recursive Residual Network for Image Super Resolution
DRCN: Deeply-Recursive Convolutional Network for Image Super-Resolution 总结 这篇文章是第一次将之前已有的递归神经网络(Recursive Neural Network)结构应用在图像超分辨率上。为了增加网络的感受野,提高网络性能,引入了深度递归神经网络&#x…...

Centos 7 安装系列(8):openGauss 3.0.0
安装依赖包: yum -y install libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core readline-devel openssl-devel sqlite-devel libnsl 安装插件: yum install -y bzip2 net-tools为什么要安装这两个? 安装bzip2 是…...
NOIP真题讲解 传球游戏 接水问题
传球游戏 说明 上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,…...

《论文阅读18》 SSD: Single Shot MultiBox Detector
一、论文 研究领域: 2D目标检测论文:SSD: Single Shot MultiBox Detector ECCV 2016 数据集 论文链接论文github 二、论文概要 SSD网络是作者Wei Liu在ECCV 2016上发表的论文。对于输入尺寸300x300的网络 使用Nvidia Titan X在VOC 2007测试集上达到74…...
NOIP2016普及组第四题 魔法阵
魔法阵 题目描述 六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法能量。 大魔法师有m个魔法物品,编号分别为1,2,…,m。每个物品具有一个魔法值,我们用Xi表示编号为i的物品的魔法值。每个魔法值Xi是不超过n的正整数&…...

uniapp-滑块验证组件wo-slider
wo-slider是一款支持高度自定义的滑块验证组件,采用uniapp-vue2编写 采用touchstart、touchmove、touchend事件实现的滑块组件,支持H5、微信小程序(其他小程序未试过,可自行尝试) 可到插件市场下载尝试: https://ext.…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...