用类表示结构化数据

对象为数据结构

此示例定义了用于存储具有特定结构的数据的类。使用一致的数据存储结构可以更容易地创建对数据进行操作的函数。一个MATLAB®结构体与字段名描述特定的数据元素是组织数据的有效方式。但是,一个类可以定义两种数据存储(属性)和操作,你可以对这些数据(方法)来执行。本实施例说明这些优点。

背景技术用于实施例

对于这个例子,数据代表了拉伸应力/应变测量。这些数据用于计算各种材料的弹性模量。简单地说,应力是施加在材料上的力,应变是产生的变形。它们的比例决定了材料的特性。虽然这种方法过于简化了流程,但对于本例来说,它已经足够了。

数据结构

下表描述数据的结构。

数据

描述

材料

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

将SampleNumber

特定测试样品的数目

强调

表示应力数矢量在测试过程中施加至样品。

应变

表示施加应力对应值处的应变的数字向量。

模量

数限定被测材料,它是由应力和应变数据来计算的弹性模量

TensileData类

这个例子从类的一个简单实现开始,并以这个实现为基础来说明特性如何增强类的有用性。

类的第一个版本只提供数据存储。该类定义为每个所需的数据元素的属性。

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优点结构体

  • 用户可以不小心拼错一个字段名没有得到一个错误。例如,键入以下:

    道明。模=…

    将简单地向结构中添加一个字段。但是,当TD的一个实例是TensileData类。

  • 一类是很容易的重用。一旦你定义的类,你可以很容易地将其与添加新属性的子类扩展。

  • 一类是容易辨认。一个类有一个名称,以便您可以识别与对象谁是功能和Workspace浏览器。类名可以很容易地是指记录一个有意义的名字。

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

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

限制属性为特定值

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

超载disp方法来显示某些性能。

有关此代码的信息,请参见显示TensileData对象

有关超载DISP的一般信息,请参阅重载DISP功能

函数变长度输入宗量情节(td)情节(td.Strain td.Stress,变长度输入宗量{}):标题([“试样应力应变图”...num2str (td.SampleNumber)]) ylabel ('压力(PSI)')xlabel(“应变%”结束

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

方法绘制应力与应变

结束结束

结束对于报表方法classdef

展开类代码

相关话题