物件导向程式设计.ppt

上传人:本田雅阁 文档编号:3276444 上传时间:2019-08-07 格式:PPT 页数:31 大小:370.02KB
返回 下载 相关 举报
物件导向程式设计.ppt_第1页
第1页 / 共31页
物件导向程式设计.ppt_第2页
第2页 / 共31页
物件导向程式设计.ppt_第3页
第3页 / 共31页
物件导向程式设计.ppt_第4页
第4页 / 共31页
物件导向程式设计.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《物件导向程式设计.ppt》由会员分享,可在线阅读,更多相关《物件导向程式设计.ppt(31页珍藏版)》请在三一文库上搜索。

1、物件導向程式設計,課程定位:學習物件導向分析與設計,以UML與JAVA程式語言練習實作。 課程大綱: 物件導向觀念、定義與建立應用程式 物件導向分析,規範問題的類別與物件的繼承、多型和介面的多重繼承與類別的關聯性 Thread and Multi-Thread Java Swing Design Patten Concept,Object-oriented VS. Procedure-oriented,Object :”物件” ,台語怎麼說? 站在物件的觀點去寫程式。 Procedure-oriented:先想Operation再想Data 先考慮如何去做這件事情,中間過程需要那些data輔助

2、。 Object-oriented:先想Data再想Operation 先想好有那些Data存在,再針對這些data會有那些動作在上面運作。,物件導向技術的三大觀念(1)-物件,定義:提供資料和處理資料程序的封裝(將變數與程序包裝在一起的集合體) 如何從描述的問題中識別出可能物件?是否有 【具體事物】:人、書、電腦、車子 【事件】:定購商品、借書、參加會議、旅遊. 【位置】或【地方】或【結構】:座標、圖書館、長方形. 英文句子中的【名詞】或【名詞子句】 To be continue .,ex:請問下列哪寫是物件?哪些是屬性名稱或屬性值(狀態值)? 5公尺,員工姓名,鐘錶,15公斤,訂購流程,血

3、型,電腦,書,白色,蘋果,電話,圖書館,狗,車子,MP3 Player,興趣。 Ans: 物件:鐘錶,訂購流程,電腦,書,蘋果,電話,圖書館,狗,車子,MP3 Player。 屬性名稱或屬性值(狀態值) : 5公尺,員工姓名, 15公斤,血型,白色,興趣。,物件導向技術的三大觀念(1)-物件,使用特徵來過濾物件: 能夠保留資訊:意即資料(屬性) 需要提供服務:如更改屬性的操作 擁有共通的屬性: 擁有共通的操作: 本質的需求:需要取得其他物件資訊,定單需要取得客戶的地址屬性。 多重屬性:物件擁有的屬性並非只屬於它,可以是一個擴充物件的屬性(即繼承) To be continue,物件導向技術的三

4、大觀念(1)-物件,物件的三種特行: 狀態:意即屬性,如車子的車型,排汽量、色彩等等屬性;程式以變數(variable)來記錄其狀態,每一屬性項目皆有其對應的狀態值(屬性值)。 行為:物件提供的操作服務,如車子可以發動、停車、換檔等操作;程式以程序/方法來表現其行為。 識別字:每一物件皆擁有單獨的識別字。 物件範例:一輛1800cc紅色四門的Altis車子。 識別物件的屬性與行為: 屬性:車型(type)、排汽量(cc)、色彩(color)、幾門(door) 。 行為:發動(starting) 、停車(parking) 、加速(speeding) 、換檔(shift) 。 使用變數儲存屬性目前

5、的狀態,建立方法來模擬行為: 狀態:type=“Altis” 、cc=1800、color=“red” 、door=4。 方法:starting() 、parking() 、speeding() 、shift() 。,物件導向技術的三大觀念(2)-訊息,物件使用訊息來模擬彼此的互動,訊息是物件之間的橋樑,可以啟動另一物件來執行指定的行為。 發送物件(Sender)送出訊息的內容 接收物件名稱 執行的程序(方法) 參數 接收物件回應訊息的內容 傳回值(Return Value) 或不回應 To be Continue.,物件導向技術的三大觀念(2)-訊息,循序操作: 物件送出的訊息有可能在接收物

6、件收到後觸發另一個訊息,繼續送出一系列訊息給其它物件,須要等到其它訊息都執行完畢後,才能取得回應訊息的結果。 名稱再用:過載(Overload)/重載 訊息的方法名稱相同,但是參數個數或資料型態不同,對於接收物件來說,已經足以從訊息判斷出是執行不同的方法。 名稱再用:多型(Polymorphism),物件導向技術的三大觀念(3)類別,定義: 類別(class)是一種分類,將擁有相同特性的物件集合歸類成同一個類別。類別就是物件的藍圖/樣板,可以用來建立物件,其中定義了同種類物件的共同變數(狀態)與程序(行為) 。 Class vs. Instance 類別是一種抽象資料型態,其目的是用來建立物件

7、,使用類別建立的物件稱為類別的個體(Instance) To be continue.,物件導向技術的三大觀念(3)類別,類別架構:繼承(Inheritance) EX: 先定義Person類別來模擬人類,然後擴充Person類別建立Student與Teacher類別來模擬學生和老師,稱為繼承。 Student與Teacher稱為子類別(subclass)或延申類別(derived class) 。 Person稱為父類別(Super class)或基礎類別(Base class) 如果有多個子類別繼承同一個父類別,每一個子類別稱為兄弟類別(sibling Classes) 如果父類別不只一個

8、,稱為多重繼承。,物件導向技術的三大觀念(3)類別,類別關聯性(Relationships) : 類別之間擁有的合作關係 專注於二元結合關係(Binary Association)即兩個類別間的關聯性與相依關係(Dependency) 。 抽象類別:是一種不能完全代表物件的類別,抽象類別並不能用來建立Instance EX: 哺乳類是Mouse,Human,Dog的父類別,我們可以使用Mouse、Human、Dog類別各別建立Instance。 但是我們不會用哺乳類建立一個哺乳類的Instance。,物件導向程式語言 (Object-Oriented Languages),OOL支援三種特性

9、封裝(Encapsulation) 是將資料和程序組合起來成為類別進而建立物件。 繼承(Inheritance) 是物件的再利用,當定義好一個類別後,其他類別可以繼承這個類別的資料和方法,並且新增或取代繼承物件的資料和方法。 多型(Polymorphism) 類別如果需要處理各種不同資料型態,並不需要針對不同的資料型態建立不同的類別,可以直接繼承基礎類別,繼承此類別建立同名方法處理不同的資料型態,因為方法的名稱相同,只是程式碼不同,所以也稱為同名異式,類別與物件建立流程(1) 類別宣告(如何分辨下列變數?) 個體變數(Instance variable) 與個體方法 (Instance met

10、hod) 類別變數(static/class variable) 與類別方法(static/class method) 類別圖圖示:(+ : public, - : private, # : protected, : package),Java的類別與物件 封裝,類別名稱,屬性,操作,Java的類別與物件 封裝,類別與物件建立流程(2) 宣告物件變數(object variable) EX: Student joe, jane, current; 宣告Student類別的變數joe, jane, current,是一種區域變數(Local Variable),資料型態為Reference Da

11、ta Type(指標)。 建立物件個體 使用new運算子依照類別範本來建立物件,傳回的是指向此物件的參考指標,此過程稱為實體化(Instantiation) 。 EX: joe = new Student(); 注意:joe的值並不是物件本身,而是參考到此物件的指標。 存取個體變數 呼叫個體方法 練習:http:/mail.tajen.edu.tw/reler/object/Ch10_2_1.java,Java的類別與物件 封裝,類別與物件建立流程(3-1) 資訊隱藏: 將個體變數宣告成Private,透過宣告成public的個體方法來進行個體變數的存取。 EX:個體變數的設定:上述Stude

12、nt類別新增setName() 、setAddress() 、 setAge() 個體方法,用來設定個體內部的變數值。,Java的類別與物件 封裝,類別與物件建立流程(3-2) 資訊隱藏: 將個體變數宣告成Private,透過宣告成public的個體方法來進行個體變數的存取。 EX:個體變數的取得:上述Student類別新增getName() 、getAddress() 、 getAge() 個體方法,用來取得個體內部的變數值。,Java的類別與物件 封裝,類別與物件建立流程(4) 類別的建構子:希望在建立物件的同時,能夠初始個體變數值,我們需要使用類別的建構子(constructor) 建構

13、子的特性: 建構子與類別同名:ex, 類別Student的建構子方法名稱為Student() 。 建構子沒有回傳值,也不用加上void。 建構子支援方法的過載(Overload) :就是擁有多個同名的建構子,各建構子擁有不同的參數型態與個數。,Java的類別與物件 封裝,Java建構子是一種沒有傳回值的方法,其程式碼的撰寫方式和其他成員方法相同。例如:Student類別的建構子,如下所示: public Student(String n, String a, int v) 上述建構子方法名稱和類別同名。在UML類別圖的建構子是位在方法清單的開頭,我們只需在前面加上模板型態 (Stereotyp

14、e)。,Java的類別與物件 封裝,Java的類別與物件 封裝,使用this參考物件本身: 例如:建構子或方法的參數與個體變數名稱相同時,就可以使用this關鍵字指明是存取個體變數。 在類別的成員方法和建構子可以使用this關鍵字參考物件本身的成員方法和變數,如下所示: public Student(String name,String address,int age) this.name = name; this.address = address; if ( validAge(age) ) this.age = age; else this.age = 20; ,在物件中使用類別(Stat

15、ic)變數與方法,類別(static)變數:掌握某一類別物件的共同特徵,該變數內容為同類別物件所共用,任何一個個體更改該變數內容則所有同類別物件會一體適用。 所有物件都是使用同一份類別變數和呼叫同一個類別方法。類別變數儘量用類別方法來存取。 例如:Student類別擁有: 類別變數teacherNo、count和類別方法getStudentCount(), 其宣告如下: class Student public static String teacherNo = “T100“; private static int count = 0; . public static int getStude

16、ntCount() return count; ,在物件使用類別變數與方法 -UML類別圖,在UML類別圖的類別範圍(Class Scope)屬性或方法需要加上底線,Student類別圖示,如右圖所示: 範例程式: http:/mail.tajen.edu.tw/reler/object/Ch10_6_1.java,在物件使用類別變數與方法 -UML類別與物件圖,Java程式Ch10_6.java建立的UML類別和物件圖,如下圖所示:,Comparison of variables,方法的過載(OverLoad),過載(Overload)是指同樣一個名稱賦予它兩個以上的意義。因為物件是依據接收

17、的訊息來執行不同的方法,因此物件只要能夠辨識不同的訊息,就算是同名方法,也一樣可以正確執行指定的方法。過載可適用於下列方法: 類別方法的過載 個體方法的過載 建構子的過載 this關鍵字與建構子過載,(OverLoad)(1)類別方法的過載,參數型態不同 Java方法只需參數資料型態不同,就可以建立過載方法,如下所示: static int cube(int num) static double cube(double num) 上述2個同名方法只有參數的資料型態不同。 參數個數不同 如果Java方法的參數個數不同,也可以建立過載方法,如下所示: static int getMin(int a

18、, int b) static int getMin(int a, int b, int c) 上述同名方法的參數個數分別為2和3。,(OverLoad)(1)類別方法的過載,注意:方法傳回值並非訊息內容,因此不同資料型態的傳回值,並不能產生不同訊息。 過載方法不可以只有不同的回傳值! 例如:(錯誤) static int square(double no) static double square(double no) (正確) static int square(int no) static double square(double no),(OverLoad)(2)個體方法的過載,如同類

19、別方法的過載允許(1)參數型態不同,(2)參數個數不同。 例如: class Date private int day,month,year; public void setDate(int day,int month, int year) this.day = day; this.month = month; this.year = year; public void setDate(int day, int month) this.day = day; this.month = month; this.year = 2006; ,(OverLoad)(3)建構子的過載,Java類別宣告的建

20、構子也支援過載,我們可以建立多個同名的建構子方法,只需擁有不同的參數型態或個數即可。 例如 class Date private int day,month,year; public Date() day=1; month=1; year = 1970; public Date(int day, int month, int year) this.day=day; this.month=month; this.year = year; ,(OverLoad)(4) this關鍵字與建構子過載,在Java類別宣告的個體方法和建構子,都可以使用this關鍵字來參考物件本身的個體方法和變數。 如果在

21、建構子使用this,我們更可建立簡潔的多個建構子過載方法。 例如: class Date private int day, month, year; public Date() this(1, 1, 2103); public Date(int d) this(d, 1, 2103); public Date(int d, int m) this(d, m, 2103); public Date(int day, int month, int year) this.day=day; this.month=month; this.year = year; ,練習:請下載下列程式碼: http:/mail.tajen.edu.tw/reler/object/Ch13_1_2.java 增加setDate過載方法可以辨識一個參數(指定日) ,與沒有參數(不指定) 。 執行setDate(10)與setDate()並顯示以下的資訊: ”指定日月: 10/9/2006”; “不指定 : 1/9/2006”;,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1