这个例子定义了一个类,用于存储具有特定结构的数据。使用一致的数据存储结构可以更容易地创建对数据进行操作的函数。一个MATLAB®结构体
使用字段名描述特定的数据元素是组织数据的一种有用方法。但是,类可以定义数据存储(属性)和可以对该数据执行的操作(方法)。这个例子说明了这些优点。
在本例中,数据表示拉伸应力/应变测量。这些数据被用来计算各种材料的弹性模量。简单地说,应力是施加在材料上的力,应变是产生的变形。它们的比例决定了材料的特性。虽然这种方法过于简化了流程,但对于这个示例来说已经足够了。
该表描述了数据的结构。
数据 |
描述 |
---|---|
|
|
|
特定测试样本的编号 |
|
表示在测试过程中施加到样品上的应力的数字矢量。 |
|
表示在施加应力的相应值下应变的数字矢量。 |
|
定义被测材料弹性模量的数字,由应力和应变数据计算得出 |
本示例从类的简单实现开始,并在此实现的基础上构建,以说明特性如何增强类的有用性。
该类的第一个版本仅提供数据存储。该类为每个必需的数据元素定义了一个属性。
classdefTensileData属性材料的应力应变模量结束结束
下面的语句创建一个TensileData
对象并将数据赋给它:
td = TensileData;道明。材料=碳钢的;道明。SampleNumber = 001;道明。应力= [2e4 4e4 6e4 8e4];道明。应变=[。12 .20 .31 .40];道明。模量=平均值(td.应力./td.应变);
治疗TensileData
对象(道明
在前面的语句中),就像你对任何MATLAB结构一样。然而,将专用数据结构定义为类比使用通用数据结构(如MATLAB)有优势结构体
:
通过定义属性集访问方法,将属性限制为特定的值。每当为属性设置值时,MATLAB都会调用set访问方法。
的材料
属性集方法将属性的赋值限制为以下字符串之一:铝
,不锈钢
,或碳钢
.
将这个函数定义添加到方法块中。
classdefTensileData属性材料的应力应变模量结束方法函数obj = set.Material(obj,material)如果(strcmpi(材料,“铝”) | |...strcmpi(材料,“不锈钢”) | |...strcmpi(材料,碳钢的)) obj。材料=材料;其他的错误(“无效材料”)结束结束结束结束
当试图设置材料
属性,MATLAB调用集。材料
方法,然后设置属性值。
如果值与可接受值匹配,则函数将属性设置为该值。set方法中的代码可以直接访问属性,以避免递归调用属性set方法。
例如:
td = TensileData;道明。材料=“铜”;
使用TensileData/set时出错。材料无效材料
将接口简化为TensileData
类,通过添加一个构造函数来实现:
使您能够将数据作为参数传递给构造函数
为属性赋值
构造函数是一个与类同名的方法。
方法函数td = TensileData(材料,样品静压室,应力,应变)如果Nargin > 0 td。材料=material; td.SampleNumber = samplenum; td.Stress = stress; td.Strain = strain;结束结束结束
创建一个TensileData
使用以下语句完全填充数据的对象:
td = TensileData(碳钢的, 1...[2e4 4e4 6e4 8e4],...(。12.20 . 31.40]);
属性的值依赖于其他属性的值,则使用依赖
属性。MATLAB不存储相关属性的值。依赖属性get方法在访问属性时确定属性值。访问可以在显示对象属性时发生,也可以作为显式查询的结果。
TensileData
对象的值不存储模量
财产。的值的构造函数没有输入参数模量
财产。的值模量
:
由压力
而且应变
属性值
的值是否必须更改压力
或应变
属性变更
因此,最好是计算的值模量
属性仅在请求其值时使用。使用属性得到
访问方法计算的值模量
.
的模量
财产取决于压力
而且应变
,所以它依赖
属性是真正的
.把模量
单独的财产属性
块,并设置依赖
属性。
的得到的。模量
方法的值进行计算并返回模量
财产。
属性(依赖)模结束
类中定义属性get方法方法
块只使用默认属性。
方法函数模量= get.模量(obj) ind = find(obj.)菌株> 0);模量= mean(obj.应力(ind)./obj.应变(ind));结束结束
该方法在消除分母数据中的零后,计算应力与应变数据的平均比率。
MATLAB调用得到的。模量
查询属性时,方法。例如,
td = TensileData(碳钢的, 1...[2e4 4e4 6e4 8e4],...(。12.20 . 31.40]);道明。模量
Ans = 1.9005e+005
设置a的值依赖
属性时,类必须实现属性集方法。的显式设置是不需要的模量
财产。但是,set方法使您能够提供定制的错误消息。的模量
方法引用当前属性值,然后返回错误:
方法函数obj = set.Modulus(obj,~) fprintf('%s%d\n','模量是:'obj.Modulus)错误(你不能设置模数属性);结束结束
TensileData
对象的TensileData
类重载disp
方法。此方法控制命令窗口中的对象显示。
的disp
方法的值材料
,SampleNumber
,模量
属性。属性不显示压力
而且应变
属性数据。这些属性包含不容易在命令窗口中查看的原始数据。
的disp
方法使用流
在命令窗口中显示格式化文本。
方法函数disp (td)流(1,…材质:%s\n样本数:%g\n模量:%1.5g\n',……td.Material、td.SampleNumber td.Modulus);结束结束
它是有用的查看应力/应变数据的图表,以确定材料的行为在一个范围内的应用张力。的TensileData
类重载MATLAB情节
函数。
的情节
方法创建应力与应变数据的线性图形,并添加标题和轴标签以生成拉伸数据记录的标准化图形:
方法函数plot(td,varargin) plot(td. strain,td. stress,varargin{:})标题([样品应力/应变图,……num2str (td.SampleNumber)]) ylabel (“压力(psi)”)包含(“应变%”)结束结束
该方法的第一个参数是aTensileData
对象,其中包含数据。
该方法传递一个参数变量列表(变长度输入宗量
)直接到内置的情节
函数。的TensileData
情节
方法允许您传递行说明符参数或属性名-值对。
例如:
td = TensileData(碳钢的, 1...[2e4 4e4 6e4 8e4],[.]12.20 . 31.40]);情节(td,”——+ b”,“线宽”,2)
TensileData
课程简介示例代码 | 讨论 |
---|---|
classdefTensileData
|
值类允许对象的独立副本。有关更多信息,请参见句柄类和值类的比较 |
属性材料试样应力应变结束 |
看到数据结构 |
属性(依赖)模结束 |
计算 有关一般信息,请参见设置和获取依赖属性的方法 |
方法
|
有关方法的一般信息,请参见普通的方法 |
函数td = TensileData(material,samplenum,...应力、应变)如果Nargin > 0 td。材料=material; td.SampleNumber = samplenum; td.Stress = stress; td.Strain = strain;结束结束 |
有关此代码的信息,请参见使用构造函数简化接口. 有关构造函数的一般信息,请参见类构造方法 |
函数obj = set.Material(obj,material)如果(strcmpi(材料,“铝”) | |...strcmpi(材料,“不锈钢”) | |...strcmpi(材料,碳钢的)) obj。材料=材料;其他的错误(“无效材料”)结束结束 |
限制可能的值 有关此代码的信息,请参见将属性限制为特定值. 有关属性集方法的一般信息,请参见属性集方法. |
函数m = get.Modulus(obj) ind = find(obj.)菌株> 0);m = mean(obj.Stress(ind)./obj.Strain(ind));结束 |
计算 有关此代码的信息,请参见模数性质获取方法. 有关属性get方法的一般信息,请参见属性获取方法. |
函数obj = set.Modulus(obj,~) fprintf(“% s % d \ n”,模量是:obj.Modulus)错误(“您无法设置模数属性”);结束 |
为 有关属性集方法的一般信息,请参见属性集方法. |
函数disp (td)流(1,材质:%s\n样本数:%g\n模量:%1.5g\n',...td.Material、td.SampleNumber td.Modulus)结束 |
过载 有关此代码的信息,请参见显示TensileData对象 有关过载disp的一般信息,请参见重载disp函数 |
函数plot(td,varargin) plot(td. strain,td. stress,varargin{:})标题([样品应力/应变图,...num2str (td.SampleNumber)]) ylabel (“压力(psi)”)包含(“应变%”)结束 |
过载 |
结束结束 |
|