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

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...

Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...