基于MATLAB的數據結構與算法線性表部分
基于MATLAB《數據結構與算法》延邊大學 信息管理專業(13級) 崔基哲線性表部分的 MATLAB編程 ?MATLAB 類的定義 ?Class創建舉例 ?用class創建雙向鏈表類的建立:class類的建立:class1.1 類文件夾當要創建一個類時,我們應該將確認類文件放在什么位置。matlab為我們提供了兩種方法:1. 在matlab路徑下創建一個文件夾,然后在文件夾中創建一個單獨的自包含的類定義2. 在matlab路徑下,創建一個@+類名的文件夾,在其中創建一個類,同時我們可以將類的定義分散在多個文件中,也即該文件夾下都是該類的定義;和其他高級語言(java)類似,matlab還允許我們將這些類組織成包包為packages包文件夾的父文件夾必須在matlab路徑下,但是包文件夾不必。包文件夾以‘+’開頭,可以包含多個類定義或者其他的包。一個包文件夾定義了一個新的命名空間,所以我們可以重用類名。引用包中的類或者函數時需要包含包名稱,例如packagefld1.ClassNameA(), packagefld2.packageFunction()。 其他更多 Class Folders? 更多細節可參考matlab幫助中的Class Folders部分 (在搜索框中輸入Class搜索)。1.2 類定義 要創建一個類,matlab會自動幫我們生成一個類框架,一般如下:classdef (attribute1 = value,...) classname(< superclass_name) properties PropName end methods methodName end events EventName endend Class的定義方法 類名必須要與文件名相同,第一個括號中聲明類的屬性,類似于java中的public等關鍵詞,更詳細的解釋可參考:Class Attributes。第二個括號指明類是否需要繼承父類,類似于java中的extends關鍵字或者C++中的‘:’。matlab支持多重繼承,更詳細的解釋可參考:Creating Subclasses —Syntax and Techniques。在實現鏈表的過程中,我們需要繼承handle類。完整的一個類模塊如下圖:完整的一個類模塊如下圖 關于classdef與handle? classdef是定義類名,后面的<是表示繼承,Matlab允許多重繼承,繼 承自handle類,handle類定義了很多關于object的處理函數,例如 addListener以及notify還有delete等對對象的函數,是一個抽象類 關于properties? properties類似于java或C++中的成員變量, 我們也可以給其設定各種訪問屬性,更詳 細的解釋可參考:Defining Properties。 關于Class中的methods? methods就是具體的函數實現。有很多種不同類型的函數,下面簡要介紹:? 普通函數(Ordinarymethods)。我們實現的大部分都是普通函數,它負責完成該類 要完成的主要任務。? 構造函數(Constructormethods)。和其他高級語言類似,也必須是類名,用來給 屬性賦值。唯一不同是它必須返回它創建的對象。更詳細的解釋可參考:Class Constructor Methods。? 析構函數(Destructormethods)。名字必須是delete,用來釋放空間。更詳細的解 釋可參考:Handle Class Delete Methods。? 屬性訪問函數(Propertyaccess methods)。類似于其他高級語言中的set、get函數。 更詳細的解釋可參考:Controlling PropertyAccess。? 靜態函數(Staticmethods)。類似于其他高級語言中的靜態函數,通過類對象進行 訪問。? 轉換函數(Conversionmethods)。是對其他類構造函數的重載,可以將自己定義類 的對象轉換成重載構造函數類的對象。更詳細的解釋可參考:Converting Objects to Another Class。? 抽象函數(Abstractmethods)。無需解釋,用來在子類中繼承的函數 創建類的簡單舉例? 類是一種數據類型,與普通的數據類型不同的是類不僅包含數據,還 包含對數據的操作,類把數據和數據操作方法封裝在一起,作為一個 整體參與程序的運行。? 類具有課繼承性,創建一個新的類的時候,可以在一個基類中添加成 員派生出新類。類的變量和類的實例是不同的,類的實例是動態分配 的內存區域,通常稱類的實例維“對象”,同一個類可以有不同的實 例存在,他們各自有自己的數據,但是數據操作方法是相同的。? 類的變量可以看作是一個指針,指向類的實例。 舉例:建立一個類? 建立一個類? 通常一個類應該包含四個基本的成員函數: 構造函數 ―― 與類名相同,可以在其中完成成員初始化的工作; 顯示函數 ―― 名為display,用于顯示成員的數據; 賦值函數 ―― 名為set,用于設置類成員的數值; 取值函數 ―― 名為get,用于讀取類成員的函數。 與C++的類不同的是,MATLAB的類不需要特別的析構函數。如果類 用到了一些特殊的內容需要釋放的話,可以編寫一個成員函數,比如 classclear,用包來釋放所占用的資源。 舉例:建立一個類 下面用一個簡單的例子類介紹一些類如何使用。 定義一個名為list的類, 它有兩個數據成員x和y, 希望通過一個成員函數prod()來獲取x和y的乘積。 舉例:建立一個類? 類名: list 成員變量:x,y 成員函數: list:構造函數 display:顯示函數 get:取值函數 set:賦值函數 prod:計算函數 現在就來建立它。 舉例:建立一個類第一步:(1) 在工作目錄上建立一個子目錄(以筆者的習慣為例):cd E:\MyProgram\matlab7\chap4mkdir @list 類名前面要加上一個字符'@’,對于這樣形式的目錄里所有保存的M文件,MATLAB都認為是類的成員函數。 舉例:建立一個類第二步:(2) 編寫5個成員函數的M文件保存在E:\MyProgram\matlab7\chap4\@list 目錄下: 舉例:建立一個類第二步:函數list.m% list.mfunction d = list(x,y)d.x=x;d.y=y;d=class(d,'list'); % display.mfunction display(d)fprintf('list class:\n');fprintf('x=%d\n',d.x);fprintf('y=%d\n',d.y); 舉例:建立一個類第二步:函數get.m% get.mfunction val = get(d,prop_name)switch prop_name case 'x' val=d.x; case 'y' val=d.y; otherwise error([prop_name,'is not a valid list property']);end 舉例:建立一個類第二步:%set.mfunction d = set(d,varargin) % 該函數的定義在后面的章節再詳細講解argin=varargin;while length(argin)>=2, prop=argin{1}; val=argin{2}; argin=argin(3:end); switch prop case 'x' d.x=val; case 'y' d.y=val; otherwise error('Asset properties:x,y'); endend 舉例:建立一個類第三步:在MATLAB命令行中進行如下操作:cd E:\MyProgram\matlab7\chap4 d = list(11,22) list class:x=11y=22 prod(d) ans = 242 d = set(d,'x',7);get(d,'x') ans = 7 prod(d) ans = 154 舉例:創建類? 類成員變量的賦值 本例中,類的成員變量是在構造函數中賦值的。MATLAB中,類成員 變量都是private的,必須在成員函數中訪問,因此就不能箱struct那樣, 用d.x和d.y等形式訪問其成員變量了。訪問時編個專門的成員函數get 就行了。另外,成員函數的調用跟普通的函數一樣。注意在get和set 函數中,成員變量是以字符串的形式指定的,要通過字符串比較的辦 法進行區分,然后對輸出變量進行賦值。本例中的set函數支持同時對 兩個成員變量賦值,因此用到了不定長輸入產生表varargin,例如: d = set(d,'x',12) % 只對其中一個成員變量賦值 list class: x=12 y=22 d = set(d,'x',23,'y',34) % 同時對兩個成員變量賦值 list class: x=23 y=34 在類中引用方法:實現方法函數類的方法(class methods)是指M文件編寫的以類的對象作為輸入產生的函數。一個特定的類的方法通常要保存在這個類的目錄中。如上一小節中 @list 的方法函數存儲在 @list路徑下。對方法汗的調用方式和對普通函數的調用方式是相同的,其命令格式為:[輸出1,輸出2,…] = 方法名稱(對象名,參數1,參數2,…);但是必須注意,方法函數中如果對類的成員變量進行了改變,就必須將改變后的類變量作為輸出變量返回,否則在原工作空間中的類變量的成員變量不能得到更新。例如:d = list(10,20);set(d,'x',23,'y',34); d list class:x=10y=20 可以
|
- 關 鍵 詞:
- 基于MATLAB的數據結構與算法線性表部分 ppt、pptx格式 免費閱讀 下載 天天文庫

關于本文