matlab在振动信号处理中的应用_Matlab面向对象程序设计及其在地球物理学中的应用(4)——类的属性
參考資料
徐瀟,李遠. MATLAB面向對象編程——從入門到設計模式(第一版)
程序實現
Matlab 2019a
地球物理局 信息化處 地球物理局 基建處 數值計算科聲明: # 歡迎批評指正,禁止轉載目 錄
石中居士:Matlab面向對象程序設計及其在地球物理學中的應用——目錄?zhuanlan.zhihu.com類的屬性
訪問屬性
我們使用
運算符(成員選擇運算符)來訪問對象的屬性。命令行窗口
>> p1 = Point3D(1.0,2.0,3.0)p1 = Point3D - 屬性:x: 1y: 2z: 3>> p1.xans =1>> p1.yans =2>> p1.zans =3屬性的默認值
在Property模塊中可以直接給屬性賦值,這個就是默認值。
Point3D.m
% 徐瀟,李遠. MATLAB面向對象編程——從入門到設計模式(第一版)P16 % 地球物理局 信息化處 % 地球物理局 基建處 數值計算科 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% classdef Point3D < handle% 這個類用來表示三維坐標軸上的點propertiesx = 1.0; % 定義x坐標y = 2.0; % 定義y坐標z = 3.0; % 定義z坐標end end命令行窗口
>> Point3Dans = Point3D - 屬性:x: 1y: 2z: 3默認值設置也支持表達式。
Point3D.m
% 徐瀟,李遠. MATLAB面向對象編程——從入門到設計模式(第一版)P16 % 地球物理局 信息化處 % 地球物理局 基建處 數值計算科 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% classdef Point3D < handle% 這個類用來表示三維坐標軸上的點propertiesx = cos(pi/6); % 定義x坐標y = sin(pi/6); % 定義y坐標z = tan(pi/6); % 定義z坐標end end命令行窗口
>> Point3Dans = Point3D - 屬性:x: 8.660254037844387e-01y: 4.999999999999999e-01z: 5.773502691896257e-01如果使用表達式,該表達式僅在類定義被裝載時執行一次。如果默認值是表達式,那么它的計算結果最好是固定的。
常量屬性
常量(Constant)屬性是在對象生存周期中,值保持不變的屬性。無論在類的內部或者外部對該屬性進行修改,都會報錯。定義常量屬性需要使用Constant關鍵字。如果不顯式給定常量屬性的值,默認值是empty double。這可以用來封裝一些常用的常量,以便在程序中可以不用創建對象就直接使用類中的常量。比如用A.R 來查詢A類中的常量成員R。
A.m
% 徐瀟,李遠. MATLAB面向對象編程——從入門到設計模式(第一版)P16 % 地球物理局 信息化處 % 地球物理局 基建處 數值計算科 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% classdef A < handleproperties(Constant)R = pi/180;end end命令行窗口
>> A.Rans =1.745329251994330e-02非獨立屬性
假設三維坐標
,到原點的距離 可以表示為 。 值依賴于 ,它就是非獨立的。我們可以在構造函數中設定初始值,但如果對象的
至少有一個改變,則屬性 必須重新計算,所以還得提供一個更新 的方法。這樣做并不方便。我們可以把
聲明為Dependent屬性。對象內部沒有給該屬性分配物理存儲空間,每次該屬性被訪問時,其值被動態計算出來。計算該屬性的方法由一個get方法提供。Point3D.m
% 徐瀟,李遠. MATLAB面向對象編程——從入門到設計模式(第一版)P16 % 地球物理局 信息化處 % 地球物理局 基建處 數值計算科 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% classdef Point3D < handle% 這個類用來表示三維坐標軸上的點propertiesx % 定義x坐標y % 定義y坐標z % 定義z坐標end%%%%%%%% Dependent %%%%%%%%%%%%%%%%%%%%%%%%%%%%%properties(Dependent)rend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%methodsfunction obj = Point3D(x0,y0,z0) % Point3D類的構造函數obj.x = x0;obj.y = y0;obj.z = z0;end%%%%%%%% get 方法 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function r = get.r(obj)r = sqrt(obj.x^2 + obj.y^2 + obj.z^2);disp('get.r called');end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%end end命令行窗口
>> p1 = Point3D(1.0,2.0,3.0); >> p1.r get.r calledans =3.741657386773941e+00>> p1.x = 2.0; % 修改p1.x的值 >> p1.r % 檢查p1.r的值 get.r called % get.r確實被調用了,更新了r值ans =4.123105625617661e+00把
聲明成Dependent屬性,還可以支持dot和向量化操作。如果 是一個矢量或者矩陣,在類的外部,可以對 直接進行矢量操作。p1.r(1:3)如果
是一個結構體,在類的外部,可以使用dot繼續訪問 內部的其它fields。p1.r.otherfields如果要在視圖類代碼中添加一個屬性,記錄GUI在文本編輯框的輸入,該屬性可以設計成Dependent屬性。
View.m
% 徐瀟,李遠. MATLAB面向對象編程——從入門到設計模式(第一版)P16 % 地球物理局 信息化處 % 地球物理局 基建處 數值計算科 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% classdef View < handlepropertieshFighEditend%%%%%%%%%% Dependent %%%%%%%%%%%%%%%%%%%%%%%%properties(Dependent)textend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%methodsfunction obj = View()% 兩個屬性都是對象obj.hFig = figure();obj.hEdit = uicontrol('style','edit','parent',obj.hFig);end%%%%%%% get方法 %%%%%%%%%%%%%%%%%%%%%%%%%function str = get.text(obj)str = get(obj.hEdit,'String');end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%end end命令行窗口
>> obj = View(); >> obj.textans =空的 0×0 char 數組在圖形窗口輸入1.5>> obj.textans ='1.5'隱藏屬性
隱藏(Hidden)效果是在命令行中查看對象信息時,該屬性不會顯示出來。Hidden屬性默認值是False,也就是非隱藏。
A.m
% 徐瀟,李遠. MATLAB面向對象編程——從入門到設計模式(第一版)P16 % 地球物理局 信息化處 % 地球物理局 基建處 數值計算科 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% classdef A < handle%%%%%%% Hidden %%%%%%%%%%%%%%%%%%properties(Hidden)varend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% end命令行窗口
>> obj = A()obj = A (不具有屬性)。如果我們知道該屬性的名字,也是可以正常訪問的。
>> obj.varans =[]如果我們定義的類中有很多屬性和方法,那么可以使用Hidden關鍵字指定那些不希望顯示的屬性和方法,隱藏細枝末節,只保留最重要的內容。
封面:[1]
參考
總結
以上是生活随笔為你收集整理的matlab在振动信号处理中的应用_Matlab面向对象程序设计及其在地球物理学中的应用(4)——类的属性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 越来越没人买了?雷克萨斯国内销量出炉:同
- 下一篇: Redmi 官宣联名《哈利・波特》,打造