MATLAB程式设计进阶篇物件导向程式设计.ppt
《MATLAB程式设计进阶篇物件导向程式设计.ppt》由会员分享,可在线阅读,更多相关《MATLAB程式设计进阶篇物件导向程式设计.ppt(38页珍藏版)》请在三一办公上搜索。
1、MATLAB 程式設計進階篇物件導向程式設計,張智星http:/www.cs.nthu.edu.tw/jang清大資工系 多媒體檢索實驗室,15-1 物件導向程式設計,物件導向程式設計(Object Oriented Programming,簡稱 OOP)是目前軟體設計的潮流,一般高階程式語言都支援 OOP 的概念。本章將說明 MATLAB 在 OOP 概念下的撰寫方式,以便簡化軟體的抽象概念、提高程式碼的可讀性與重複使用性,並讓軟體的管理更加系統化。,首先,要能夠建立一個類別(Class),並經由此類別建構出實際的物件(Object),如此才能進而使用物件的各種方法來達成應用程式的最後目的。
2、類別是一個虛擬的概念例如人可以看成是一個類別,包含各種性質的定義(例如名字、性別、身高、體重等)。物件則是實際由類別產生的實體,例如孔子就是由人所產生的實體,此實體就會有確切的名字、性別、身高、體重等性質。MATLAB 建立類別的方式是直接產生一個以“”為開頭的資料夾,所有與此類別相關的函式都放在此資料夾之下。,15-1 物件導向程式設計,你必須將包含此 polynom 的上層目錄加到 MATLAB 的搜尋路徑後,才可以在任意處使用與 polynom 相關的物件或方法。,提示,定義建構函式(Constructor)以便產生多項式物件,此建構函式的名稱必須和類別的目錄名稱一樣(但不包含“”)。以
3、多項式物件而言,建構函式的名稱就是 polynom.m,其內容如下:範例15-1:polynom/polynom.m,15-1 物件導向程式設計,function poly=polynom(vec)%POLYNOM Polynomial class constructor%poly=POLYNOM(vec)creates a polynomial object from vector vec,%containing the coefficients of descending powers of x.if isa(vec,polynom),%若 vec 以經是 polynom 物件,則直接設定
4、成輸出poly=vec;elsepoly.c=vec(:).;%將向量設定成 poly 的係數poly=class(poly,polynom);%將 poly 加持成 polynom 物件end,15-1 物件導向程式設計,如果輸入是一個向量,這就是多項式的係數(降冪排列),我們將此係數設定給 poly.c,最後使用 class 函式將 poly 變數加持成 polynom 物件。如果輸入是一個向量,這就是多項式的係數(降冪排列),我們將此係數設定給 poly.c,最後使用 class 函式將 poly 變數加持成 polynom 物件。,上述程式碼也可以看出,poly 原來是一個結構變數,具
5、有一個欄位 c 來儲存多項式的係數。一旦經由 poly=class(poly,polynom)來將之加持成為物件之後,我們在外部並無法經由 poly 物件來取得 c 欄位值,而必須定義其他方法來取得資料(詳見後述),這也是 OOP 的基本精神:所有物件的性質是無法任意開放給外界環境,而必須經由與此物件相關的特定函式來取得。,15-1 物件導向程式設計,有了此建構函式,就可以建構一個多項式物件,但為了比較能夠優雅地展示此物件的內容,我們可以寫一個函式 display.m 顯示此多項式,內容如下:範例15-2:polynom/display.m,15-1 物件導向程式設計,function dis
6、play(poly)%POLYNOM/DISPLAY Display of a polynomdisp();disp(inputname(1),=)disp();disp(,polyAsString(poly)disp();,上述函式呼叫了另一個函式 polyAsString.m,其功能是將多項式轉為字串形式,便於觀看,程式碼如下:範例15-3:polynom/polyAsString.m,15-1 物件導向程式設計,function s=polyAsString(poly)%POLYNOM/POLYASSTRING String representation of a polynomdegr
7、ee=length(poly.c)-1;s=sprintf(%d*x%d,poly.c(1),degree);for i=degree-1:-1:0coef=poly.c(degree-i+1);if coef=0 s=sprintf(%s+%d*x%d,s,coef,i);,一旦有了建構函式 polynom.m 和顯示函式 display.m 後,就可以直接產生一個多項式物件並顯示此物件,如下:範例15-4:test01.m,elses=sprintf(%s-%d*x%d,s,-coef,i);endend,15-1 物件導向程式設計,p=polynom(3 4 2 1),p=3*x3+4*
8、x2+2*x1+1*x0,由使用者所定義的類別,事實上是屬於 MATLAB 資料類別階層的一部份,MATLAB資料類別階層如下:其中的 user classes 就是由使用者定義的類別,它繼承了 structure 類別的相關特性。由上述資料類別階層,我們可以瞭解資料類別之間的從屬關係。,15-1 物件導向程式設計,一般而言,支援 OOP 的程式語言大略都有下述基本功能:函式及運算元的重載(Function and operator overloading):根據特定的類別或物件,你可以產生各種方法。對應這些方法的函式名稱可以和 MATLAB的內建函式一樣,但MATLAB會根據輸入參數的資料型
9、態,來決定呼叫哪一種函式。資料和方法的封裝(Encapsulation of data and methods):所有物件的性質,並無法從外界直接取得或修改,必須經由此物件所提供的方法,才能取得或修改此物件的性質。這樣可以保證物件的完整性,不會誤遭讀取或修改。此外,物件的方法也只適用於物件本身,確保不會誤用。,15-1 物件導向程式設計,繼承(Inheritance):類別可以有繼承關係,例如人是一種類別,而學生則是人的子類別,因此學生類別可以繼承人類別的性質和方法。善用繼承,可讓我們對真實世界的描述更加完善。聚合(Aggregation):我們可以使用聚合的概念來定義某些類別,經由這種類別所
10、產生的物件,可以包含其他物件。例如,學生所修的課程,就可以由聚合來定義。,15-1 物件導向程式設計,一般的加、減、乘、除等四則運算只能用在數值資料,但既然創造了多項式物件,就應該要定義這一些同樣適用於多項式操作的基本運算方式。欲達此目的,我們可以藉由定義幾個特殊的函式,來使一般運算元能夠重載(Overloading)到其他物件。,15-2 運算元的重載,首先,定義多項式的加法,可由 plus.m 函式來達成,內容如下:範例15-5:polynom/plus.m此函式首先檢查輸入參數是否為多項式物件,若不是,先將之轉成多項式物件。這樣的作法讓我們能夠混和多項式和向量來進行加法。,15-2 運算
11、元的重載,function r=plus(p,q)%POLYNOM/PLUS Implement p+q for polynoms.p=polynom(p);q=polynom(q);k=length(q.c)-length(p.c);r=polynom(zeros(1,k)p.c+zeros(1,-k)q.c);,多項式的剪法,則可由 minus.m 函式來達成,內容如下:範例15-6:polynom/minus.m,15-2 運算元的重載,function r=minus(p,q)%POLYNOM/MINUS Implement p-q for polynoms.p=polynom(p);
12、q=polynom(q);k=length(q.c)-length(p.c);r=polynom(zeros(1,k)p.c-zeros(1,-k)q.c);,有了這兩個函式之後,我們就可以來測試多項式的加減法,如下:範例15-7:polyPlusMinus01.m,15-2 運算元的重載,p=polynom(3 4 2 1);q=polynom(-1,2);r=p+qs=r+2,3,r=3*x3+4*x2+1*x1+3*x0s=3*x3+4*x2+3*x1+6*x0,接著可以賦予乘法與除法能夠針對多項式物件進行運算,所需定義的函式是 mtimes.m 及 mrdivide.m,內容分別列出如
13、下:範例15-8:polynom/mtimes.m,15-2 運算元的重載,function r=mtimes(p,q)%POLYNOM/MTIMES Implement p*q for polynoms.p=polynom(p);q=polynom(q);r=polynom(conv(p.c,q.c);,範例15-9:polynom/mrdivide.m,15-2 運算元的重載,function q,r=mrdivide(a,b)%POLYNOM/MRDIVIDE Implement a/b for polynoms.a=polynom(a);b=polynom(b);q,r=deconv(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 程式 设计 进阶 物件 导向
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5439241.html