- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是面向对象编程的新手,我想使用MATLAB OOP在MATLAB中编写代码。我有一个基本的问题:在MATLAB的OOP pdf(https://www.mathworks.com/help/pdf_doc/matlab/matlab_oop.pdf)中读到,使用类作为结构化数据比使用MATLAB结构更好。我的问题是:
我有A类,在A类的属性中,我想定义两个结构,名为doctor_info和Patient_info。从OOP角度来看,我应该使用A类属性中的Doctor和Patient类的对象,还是最好使用结构而不定义class Patient和Doctor类。如果最好定义两个类别的医生和患者,那么A类的伪代码是什么?
PS .:我搜索了很多关于matlab opp,堆栈交换和网络的信息,但找不到答案。在堆栈交换中,我在C ++中发现了一个相关问题,但答案不满足我:How to define an object from Class A in Class B
非常感谢你的帮助
最佳答案
从Matlab OOP的角度来看,struct
或自定义类的选择在很大程度上取决于特定的应用程序以及对可维护性,可扩展性,性能等的考虑。
我喜欢structs
,因为相对于自定义类,我发现它们的重量极轻,并且由于可以即时添加字段,因此非常灵活。
当涉及复杂的应用程序时,会想到structs
的一些缺点:
字段是动态添加的:我知道我被列为加号,但这是一个加号,必须谨慎使用。 Matlab会很乐意在分配时将拼写错误的字段'geuss'添加到包含struct
的guess
中,并且一切都会好起来,直到没有。自定义对象不会发生这种情况,因为只能通过从dynamicprops
继承并显式调用addprop
(我认为)来动态添加属性。
所有字段都是可见的,并且可以分配给所有人。如果该应用程序旨在供不太熟练的用户使用,则隐藏某些信息或限制/限制分配变量或值可能会有所帮助或可能需要。
创建字段后,struct
中的字段不能对struct
的数据进行操作;在我看来,这是OOP成为主导编程范例之一的主要原因之一:拥有可以存储数据的东西(对象)并使其返回结果而无需关心其计算方式(如只要是正确的)。
但是,由于自定义类提供了所有增加的功能,因此也有开销。 Matlab的OOP模型的性能正在提高,但是我认为struct
仍会像原始数据容器一样依靠原始性能。
而且,如果您不需要电源,则可以毫无问题地避免使用它。
使用自定义类可以获得的另一件重要的事情是可以自动在实例之间更新信息的引用。为了说明这一点并希望间接解决您的第二个问题,请考虑以下MedicalChart
类
classdef MedicalChart < handle
properties
doctor_info = [];
patient_info = [];
end
methods
function MC = MedicalChart(doc,pat)
if (nargin ~= 0)
MC.doctor_info = doc;
MC.patient_info = pat;
end
end
end
end
>> doctor.name = 'Joe' ;
>> doctor.phone = '555-0100';
>> patient.name = 'Bob' ;
>> mc = MedicalChart(doctor,patient);
>> mc.doctor_info.phone
ans =
555-0100
MedicalChart
实例。
struct
doctor
可以毫无问题地重复使用,以创建所有这些医疗图表,但需要在每个实例中复制所有医生的信息。
MedicalCharts
重新创建所有
struct
。
Doctor
继承的
handle
类的Dr. Joe实例,我们可以避免重新创建所有实例以及重复数据的需要:
classdef Doctor < handle
properties
name
phone
end
methods
function doc = Doctor(name,phone)
if (nargin ~= 0)
doc.name = name;
doc.phone = phone;
end
end
end
end
MedicalChart
:
>> DrJoe = Doctor('Joe','555-0100');
>> patient.name = 'Bob';
>> mc = MedicalChart(DrJoe,patient);
>> mc.doctor_info.phone
ans =
555-0100
handle
继承的,因此一次内存中只有一个
DrJoe
实例。
mc
中自动访问:
>> DrJoe.phone = '555-0111';
>> mc.doctor_info.phone
ans =
555-0111
structs
根本做不到。
DrJoe
效果很好,因为
mc
创建了
DrJoe
的本地副本。
Doctor
跟踪
MedicalCharts
的存在,并将其作为
destructor的一部分从其中删除。我认为这里不需要这样做,但我想我会提到它。)
关于matlab - 在Matlab中B类的属性中使用A类的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30518280/
在 Matlab 中,您可以选择创建新的“示例”脚本文件以及脚本、函数、类等。创建它们时,它们会获得一个脚本图标。 它们与其他标准脚本文件的处理方式有何不同? 是否有关于这些示例脚本类型的预期用途的文
我正在运行一个不是我自己编写的大 m 文件,它依赖于某些子函数。我想知道是否在所有嵌套函数的任何地方都使用了特定函数(在我的例子中是函数 eig.m(计算特征值))。有没有快速的方法来做到这一点? 亲
Matlab中有一个函数叫 copulafit .我怎样才能看到这个函数背后的代码?许多 Python 的 numpy 和 scipy 函数在 Github 上很容易开源,但由于某种原因我在 Gith
我定义了一个抽象基类measurementHandler < handle它定义了所有继承类的接口(interface)。这个类的两个子类是a < measurementHandler和 b < me
假设有一个矩阵 A = 1 3 2 4 4 2 5 8 6 1 4 9 例如,我有一个 Vector 包含该矩阵每一列的“类”
我有一个在后台运行的 Matlab 脚本。随着计算的进行,它会不断弹出进度栏窗口。这很烦人。 问题是我没有自己写 Matlab 脚本,这是一段很长很复杂的代码,我不想搞砸。那么如何在不修改 Matla
有没有办法从一个 matlab 程序中检测计算机上正在运行多少个 matlab 进程? 我想要恰好有 n 个 matlab 进程在运行。如果我的数量太少,我想创建它们,如果数量太多,我想杀死一些。您当
我正在测试我们在 Matlab 中开发的一个独立应用程序,当时我注意到它的内存使用量(根据 Windows 任务管理器)达到了 16gb 以上的数倍峰值。我决定在编译版本后面的脚本上使用 profil
我面临着一个相当棘手的问题。在 Matlab 中,命令 S = char(1044) 将俄语字母 д 放入变量 S。但是 disp(S) 返回空白符号,尽管内容实际上是正确的: >> S = char
我在这行 MATLAB 代码中遇到内存不足错误: result = (A(1:xmax,1:ymax,1:zmax) .* B(2:xmax+1,2:ymax+1,2:zmax+1) +
我正在寻找一种在 MATLAB 中比较有限顺序数据与非确定性顺序的方法。基本上,我想要的是一个数组,但不对包含的元素强加顺序。如果我有对象 a = [x y z]; 和 b = [x z y]; 我希
我有一个由 1 和 0 组成的二维矩阵。 mat = [0 0 0 0 1 1 1 0 0 1 1 1 1 1 0 0 1 0 0 0 1 0 1 1 0 0 1]; 我需
我可以在 Matlab 中用一组 x,y 点绘制回归线。但是,如果我有一组点(如下图),假设我有四组点,我想为它们绘制四条回归线……我该怎么做?所有的点都保存在 x,y 中。没有办法将它们分开并将它们
我正在尝试使用以下代码在 MATLAB 中绘制圆锥体。但是,当 MATLAB 生成绘图时,曲面中有一个间隙,如下图所示。谁能建议关闭它的方法? clearvars; close all; clc; [
我有一个 map称为 res_Map,包含一组不同大小的数组。我想找到用于存储 res_Map 的总内存。 正如您在下面看到的,看起来 res_Map 几乎不占用内存,而 res_Map 中的各个元素
有没有办法在 MATLAB 中组合 2 个向量,这样: mat = zeros(length(C),length(S)); for j=1:length(C) mat(j,:)=C(j)*S;
已结束。此问题不符合 Stack Overflow guidelines 。它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答它。 关闭 5 年前
我正在尝试将MatLab中的t copula适配到我的数据,并且我的功能是: u = ksdensity(range_1, range_1,'function','cdf'); v = ksdens
大家好,我目前正在尝试使用论文“多尺度形态学图像简化”中的 SMMT 运算符 Dorini .由于没有订阅无法访问该页面,因此我将相关详细信息发布在这里: 请注意,我将相关文章的部分内容作为图片发布。
我在MATLAB中编写代码,需要使用一个名为modwt的函数,该函数同时存在于两个我同时使用的工具箱(Wavelet和WMTSA)中。问题在于,一个版本仅返回一个输出,而另一个版本则返回三个输出。我应
我是一名优秀的程序员,十分优秀!