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