欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    MATLAB程式设计进阶篇物件导向程式设计.ppt

    • 资源ID:5439241       资源大小:258.99KB        全文页数:38页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    MATLAB程式设计进阶篇物件导向程式设计.ppt

    MATLAB 程式設計進階篇物件導向程式設計,張智星http:/www.cs.nthu.edu.tw/jang清大資工系 多媒體檢索實驗室,15-1 物件導向程式設計,物件導向程式設計(Object Oriented Programming,簡稱 OOP)是目前軟體設計的潮流,一般高階程式語言都支援 OOP 的概念。本章將說明 MATLAB 在 OOP 概念下的撰寫方式,以便簡化軟體的抽象概念、提高程式碼的可讀性與重複使用性,並讓軟體的管理更加系統化。,首先,要能夠建立一個類別(Class),並經由此類別建構出實際的物件(Object),如此才能進而使用物件的各種方法來達成應用程式的最後目的。類別是一個虛擬的概念例如人可以看成是一個類別,包含各種性質的定義(例如名字、性別、身高、體重等)。物件則是實際由類別產生的實體,例如孔子就是由人所產生的實體,此實體就會有確切的名字、性別、身高、體重等性質。MATLAB 建立類別的方式是直接產生一個以“”為開頭的資料夾,所有與此類別相關的函式都放在此資料夾之下。,15-1 物件導向程式設計,你必須將包含此 polynom 的上層目錄加到 MATLAB 的搜尋路徑後,才可以在任意處使用與 polynom 相關的物件或方法。,提示,定義建構函式(Constructor)以便產生多項式物件,此建構函式的名稱必須和類別的目錄名稱一樣(但不包含“”)。以多項式物件而言,建構函式的名稱就是 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 物件,則直接設定成輸出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 原來是一個結構變數,具有一個欄位 c 來儲存多項式的係數。一旦經由 poly=class(poly,polynom)來將之加持成為物件之後,我們在外部並無法經由 poly 物件來取得 c 欄位值,而必須定義其他方法來取得資料(詳見後述),這也是 OOP 的基本精神:所有物件的性質是無法任意開放給外界環境,而必須經由與此物件相關的特定函式來取得。,15-1 物件導向程式設計,有了此建構函式,就可以建構一個多項式物件,但為了比較能夠優雅地展示此物件的內容,我們可以寫一個函式 display.m 顯示此多項式,內容如下:範例15-2:polynom/display.m,15-1 物件導向程式設計,function display(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 polynomdegree=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*x2+2*x1+1*x0,由使用者所定義的類別,事實上是屬於 MATLAB 資料類別階層的一部份,MATLAB資料類別階層如下:其中的 user classes 就是由使用者定義的類別,它繼承了 structure 類別的相關特性。由上述資料類別階層,我們可以瞭解資料類別之間的從屬關係。,15-1 物件導向程式設計,一般而言,支援 OOP 的程式語言大略都有下述基本功能:函式及運算元的重載(Function and operator overloading):根據特定的類別或物件,你可以產生各種方法。對應這些方法的函式名稱可以和 MATLAB的內建函式一樣,但MATLAB會根據輸入參數的資料型態,來決定呼叫哪一種函式。資料和方法的封裝(Encapsulation of data and methods):所有物件的性質,並無法從外界直接取得或修改,必須經由此物件所提供的方法,才能取得或修改此物件的性質。這樣可以保證物件的完整性,不會誤遭讀取或修改。此外,物件的方法也只適用於物件本身,確保不會誤用。,15-1 物件導向程式設計,繼承(Inheritance):類別可以有繼承關係,例如人是一種類別,而學生則是人的子類別,因此學生類別可以繼承人類別的性質和方法。善用繼承,可讓我們對真實世界的描述更加完善。聚合(Aggregation):我們可以使用聚合的概念來定義某些類別,經由這種類別所產生的物件,可以包含其他物件。例如,學生所修的課程,就可以由聚合來定義。,15-1 物件導向程式設計,一般的加、減、乘、除等四則運算只能用在數值資料,但既然創造了多項式物件,就應該要定義這一些同樣適用於多項式操作的基本運算方式。欲達此目的,我們可以藉由定義幾個特殊的函式,來使一般運算元能夠重載(Overloading)到其他物件。,15-2 運算元的重載,首先,定義多項式的加法,可由 plus.m 函式來達成,內容如下:範例15-5:polynom/plus.m此函式首先檢查輸入參數是否為多項式物件,若不是,先將之轉成多項式物件。這樣的作法讓我們能夠混和多項式和向量來進行加法。,15-2 運算元的重載,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);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,內容分別列出如下:範例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(a.c,b.c);q=polynom(q);r=polynom(r);,有了這些函式之後,就可以對多項式進行加減乘除等四則運算了,請見下列範例:範例15-10:polynom/mrdivide.m,15-2 運算元的重載,p=polynom(1,1);q=polynom(1,2);r=(p+1)*(q+2)a,b=r/1,1,r=1*x2+6*x1+8*x0a=1*x1+5*x0b=0*x2+0*x1+3*x0,在前述範例中,使用 mrdivide.m 用來定義右除(例如 p/q)也可以使用 mldivide.m 來定義左除(例如pq)此外,還可以使用 mpower.m來定義冪方,例如pn。MATLAB 運算元與物件函式之間的對應關係,請見下,15-2 運算元的重載,15-2 運算元的重載,常用在多項式的操作包含求值、求根、微分、積分等,這些操作我們都可以看成是多項式物件的方法(Methods)。每一個方法都對應到 polynom 目錄下的一個函式。這些函式只能應用於我們所定義的多項式物件。,15-3 物件的方法,一個最簡單的方法,就是要取用多項式物件的係數,可以靠下列函式來完成:範例15-11:polynom/polyCoef.m經由此函式(或方法),外部世界才能取得一個多項式物件的係數。,15-3 物件的方法,function c=polyCoef(p)%POLYNOM/POLYCOEF Convert polynom object to coefficient vector.c=p.c;,若要計算多項式的值,我們可以採用下列函式:範例15-12:polynom/polyval.m在上述函式中,我們直接呼叫 MATLAB 原有的函式 polyval 來計算多項式的值,15-3 物件的方法,function y=polyval(p,x)%POLYNOM/POLYVAL POLYVAL(p,x)evaluates p at the points x.y=polyval(p.c,x);,MATLAB 能夠根據資料型態的不同來呼叫不同的函式,這也是屬於函式重載功能的體現欲測試此方法,請見下例範例:範例15-13:polyval01.m,15-3 物件的方法,p=polynom(1 2 3);x=polyval(p,1)y=polyval(p,1 2 3 4),x=6y=6 11 18 27,提示,在上述範例中,MATLAB 採用 y=polyval(p,1 2 3 4)的方式來呼叫多項式物件 p 的方法polyval,但在一般支援OOP的程式語言(如 C+或 JavaScript)中,對應的呼叫方式應該是 y=p.polyval(1 2 3 4),僅供參考比較。,利用類似的方式,也可以求取多項式的根(roots.m)、微分(polyder.m)、積分(polyint.m)另一個常用的功能,就是對多項式畫圖,這可由下列的 plot.m 函式來達成:範例15-14:polynom/plot.m,15-3 物件的方法,function plot(p,range)%POLYNOM/PLOT PLOT(p)plots the polynom p.if nargin2range=max(abs(roots(p)*-1 1;end,在上述函式中,range 是描點作圖的範圍,若不給定,此函式也會自動決定一個範圍來進行作圖。,x=linspace(range(1),range(2);y=polyval(p,x);plot(x,y);title(polyAsString(p)grid on,15-3 物件的方法,以下範例可用來測試此 plot 函式:範例15-15:polyPlot01.mMATLAB 命令視窗輸入methods polynom,就可以看到由 polynom 類型所擁有的各種方法。,15-3 物件的方法,p=polynom(1-4-1 4);range=-1.2,4.2;subplot(3,1,1);plot(p,range);p2=polyder(p);subplot(3,1,2);plot(p2,range);p3=polyder(p2);subplot(3,1,3);plot(p3,range);,類別可以有繼承關係例如人是一種類別,而學生是另一種類別。由於學生是人特例,因此我們可將人看成是基本類別(Base Class),而學生則是衍生類別(Derived Class)。因此學生類別可以繼承人類別的性質和方法。善用繼承,可以讓我們使用簡單的方式來描述真實世界的各種關係。檢視我們的範例程式目錄,可以看到兩個目錄:person 和 student,其中 person 是描述人的類別,而 student 則是描述學生的類別。,15-4 類別的繼承,建構人的物件,範例如下:範例15-16:person01.m,15-4 類別的繼承,p1=person(王建民,男,1.93,95)p2=person(姚明,男,2.26,134)fprintf(王建民的 BMI=%gn,bmi(p1);fprintf(姚明的 BMI=%gn,bmi(p2);,p1:姓名=王建民,性別=男,身高=1.93 m,體重=95 kgp2:姓名=姚明,性別=男,身高=2.26 m,體重=134 kg王建民的 BMI=25.504姚明的 BMI=26.2354,接著有一個 student 類別,這是 person 類別的衍生類別,所以它繼承了所有 person 類別的性質和方法繼承的關係主要是規範在 student 的建構函式,如下:範例15-17:student/student.m,15-4 類別的繼承,function S=student(name,gender,height,weight,department,year)%STUDENT Student class constructorP=person(name,gender,height,weight);%Bbase classS.department=department;%student 特有的性質S.year=year;%student 特有的性質S=class(S,student,P);%定義 S 為 student 物件,且繼承P 的類別,在上述建構函式中,student 類別共包含六個性質(name,gender,height,weight,department,year)前四個性質(name,gender,height,weight)是繼承自 person 類別,而後兩個性質(department,year)則是 student 類別特有的性質。由於 student 繼承 person,因此 student 也可以使用所有 person 的方法,範例如下:範例15-18:student01.m,15-4 類別的繼承,s1=student(張庭碩,男,1.84,68,工業設計系,3)fprintf(張庭碩的 BMI=%gn,bmi(s1);,s1:姓名=張庭碩,性別=男,身高=1.84 m,體重=68 kg張庭碩的 BMI=20.0851,15-4 類別的繼承,如果檢視 student 目錄,可以發覺此類別沒有定義任何方法。但由於 student 繼承 person,因此在上述範例中,student 物件 s1 會自動選用 person 的顯示方法。同時也可以呼叫 bmi()函式來計算 s1 物件的 BMI 值,此函數定義於 person 目錄之下。,物件的某一個性質可以是另一種物件,這就是所謂的聚合(Aggregation)若檢視範例程式目錄,可以看到另一個目錄 team,此類別用來定義對伍,其建構函式如下:範例15-19:team/team.m,15-5 物件的聚合,function t=team(name,event,person1,person2,person3,person4)%TEAM team class constructort.name=name;t.event=event;,由上述建構函式可以看出,每一支隊伍必須有名稱(name)、參加項目(event),以及四位隊員。這四位隊員即是由 person 類別所產生的物件,換句話說,team 物件的 member 性質指向四個 person 物件,這就是 OOP 之聚合的體現。,t.member(1)=person1;t.member(2)=person2;t.member(3)=person3;t.member(4)=person4;t=class(t,team);%將 t 加持成 team 物件,15-5 物件的聚合,組合四個高手以形成一個夢幻隊伍,來參加2008北京奧運的400公尺接力賽,範例如下:範例15-20:team01.m,15-5 物件的聚合,p1=person(王建民,男,1.93,95);p2=person(姚明,男,2.26,134);p3=person(劉翔,男,1.88,74);p4=person(朱木炎,男,1.73,59);myTeam=team(Greater China,2008 Olympics,4x100,p1,p2,p3,p4),myTeam:名稱=Greater China,項目=2008 Olympics,4x100,隊員=王建民 姚明 劉翔 朱木炎,

    注意事项

    本文(MATLAB程式设计进阶篇物件导向程式设计.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开