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