主要内容

表示结构化数据类

对象作为数据结构

这个例子定义了一个类与一个特定的结构来存储数据。使用一致的结构数据存储更容易创建操作数据的函数。一个MATLAB®结构体与字段名称描述特定数据元素是一个有用的方法来组织数据。然而,一个类可以定义数据存储(属性)和可以执行的操作(方法)的数据。这个例子说明了这些优势。

背景的例子

对于这个例子,数据表示拉应力/应变测量。这些数据被用来计算各种材料的弹性模量。简单来说,压力是应用于材料和应变的力产生的变形。他们的比率定义特征的材料。虽然这种方法是一种简化的过程,只要这个例子。

的数据结构

此表描述数据的结构。

数据

描述

材料

字符向量识别材料测试的类型

SampleNumber

一个特定的测试样本的数量

压力

向量的数字代表压力应用于样品在测试期间。

应变

向量的数字表示在外加应力相应的值。

模量

数定义被测材料的弹性模量、应力和应变的计算数据

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结构体:

  • 用户无法不小心拼错一个字段名没有得到一个错误。例如,输入下面的:

    td.Modulus= ...

    只需添加一个字段结构。然而,当它返回一个错误道明的一个实例吗TensileData类。

  • 一个类很容易重用。一旦你已经定义了类,您可以轻松地扩展它的子类添加新属性。

  • 一个类很容易识别。一个类有一个名称,以便您可以识别的对象功能和工作空间浏览器。类名称便于引用记录有意义的名字。

  • 一个类可以验证单个字段值分配时,包括类或值。

  • 一个类可以限制访问字段,例如,允许一个特定的字段读,但不是改变。

限制对特定的值的属性

限制对特定的值的属性通过定义一个属性集访问方法。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)结束

过载disp方法来显示特定的属性。

这段代码的信息,请参阅显示TensileData对象

关于重载disp的一般信息,明白了重载disp函数

函数变长度输入宗量情节(td)情节(td.Strain td.Stress,变长度输入宗量{}):标题([“样本的应力/应变图”,num2str (td.SampleNumber)]) ylabel (“压力(psi)”)包含(“应变%”)结束

过载情节函数接受TensileData对象和应力与应变图。

方法绘制应力和应变

结束结束

结束语句方法classdef

扩展类代码

相关的话题