主要内容

用类表示结构化数据

对象作为数据结构

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

示例背景

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

数据结构

该表描述了数据的结构。

数据

描述

材料

字符标识被测材料类型的矢量

SampleNumber

特定测试样本的编号

压力

表示在测试过程中施加到样品上的应力的数字矢量。

应变

表示在施加应力的相应值下应变的数字矢量。

模量

定义被测材料弹性模量的数字,由应力和应变数据计算得出

TensileData类

本示例从类的简单实现开始,并在此实现的基础上构建,以说明特性如何增强类的有用性。

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

classdefTensileData属性材料的应力应变模量结束结束

创建实例并分配数据

下面的语句创建一个TensileData对象并将数据赋给它:

td = TensileData;道明。材料=碳钢的;道明。SampleNumber = 001;道明。应力= [2e4 4e4 6e4 8e4];道明。应变=[。12 .20 .31 .40];道明。模量=平均值(td.应力./td.应变);

类与结构的优点

治疗TensileData对象(道明在前面的语句中),就像你对任何MATLAB结构一样。然而,将专用数据结构定义为类比使用通用数据结构(如MATLAB)有优势结构体

  • 用户不可能不小心拼错字段名而不报错。例如,输入以下内容:

    道明。模=…

    会简单地将字段添加到结构中。但是,当道明的实例TensileData类。

  • 类易于重用。一旦定义了类,就可以很容易地使用添加新属性的子类来扩展它。

  • 类很容易识别。类具有名称,以便您可以使用而且函数和工作区浏览器。类名可以方便地引用具有有意义名称的记录。

  • 类可以在分配时验证各个字段值,包括class或value。

  • 类可以限制对字段的访问,例如,允许读取特定的字段,但不允许更改。

将属性限制为特定值

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

过载disp方法来显示某些属性。

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

有关过载disp的一般信息,请参见重载disp函数

函数plot(td,varargin) plot(td. strain,td. stress,varargin{:})标题([样品应力/应变图...num2str (td.SampleNumber)]) ylabel (“压力(psi)”)包含(“应变%”结束

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

应力与应变图的绘制方法

结束结束

结束语句方法classdef

扩展类代码

相关的话题