280 likes | 568 Views
Java 物件導向程式設計. 國立善化高級中學 蕭嘉民. Java 的特性. 自由軟體:學生可免費取得 。 解譯執行位元組碼,可在 不同的 平台上執行。 電腦網路支援:系統物件可分散儲存於不同的電腦(像是運用RMI機制),充份利用電腦分散式處理的效能。 具有C++語言的部分特性:Java捨棄了容易引起錯誤的指標、運算符過載、多重繼承等特性。. 大綱. 程式編譯與執行環境設定 類別與物件 繼承性 Inheritance 封裝性 Encapsulation 多型性 Polymorphism 多載性 overloading 覆蓋性 Overriding.
E N D
Java物件導向程式設計 國立善化高級中學 蕭嘉民
Java的特性 • 自由軟體:學生可免費取得。 • 解譯執行位元組碼,可在不同的平台上執行。 • 電腦網路支援:系統物件可分散儲存於不同的電腦(像是運用RMI機制),充份利用電腦分散式處理的效能。 • 具有C++語言的部分特性:Java捨棄了容易引起錯誤的指標、運算符過載、多重繼承等特性。
大綱 • 程式編譯與執行環境設定 • 類別與物件 • 繼承性Inheritance • 封裝性Encapsulation • 多型性Polymorphism • 多載性overloading • 覆蓋性Overriding
設定JAVA的工作目錄與環境變數 編輯[系統變數]Path,於[變數值]最後加入C:\Program Files\Java\jdk1.6.0_18\bin ,按下[確定] (路徑依實際安裝jdk版本不同,略有差異)。
類別與物件 屬性(Attribute):例如飛機類別之屬性:載客量、掛載重量、長度、翼展、高度、翼面積、空重、載重、可用載重、最大起飛重量、最高速度、巡航速度、航程、實用升限、爬升率、翼負荷。 方法(Method):例如:飛機類別之方法:起飛、爬升、降落、巡航、雷達導航,顯示油耗等。波音747是飛機物件,具有飛機類別所定義的屬性與方法。 飛機圖片來源:維基百科http://zh.wikipedia.org/wiki/Wiki,圖表設計:蕭嘉民
程序導向與物件導向差異 • 炒泡麵是一種具有金門當地特色的小吃,製作方式分別以使用程序導向與物件導向兩種方式來描述作法。
程序導向 • 1.倒入2杯250cc的水到鍋子中,並以火煮至沸騰。 • 2.水沸騰,在碗裏把蛋攪伴後,蛋汁倒入鍋子中。 • 3.蛋熟了後,將兩包味味麵放入鍋子中,並加以攪伴。 • 4.一碗香茹肉躁(先行炒過),放入鍋子中與麵條一起炒。 • 5.將韭菜2支切成小薄片,放入鍋中。 • 6.將1把茼莪放入鍋中。 • 7.將2匙沙茶醬加入鍋中,並攪伴均勻,蓋上鍋蓋約1分鐘即可。
物件導向 水處理好、雞蛋處理好、味味麵處理好、香茹肉躁處理好、韭菜處理好、茼莪處理好、沙茶醬處理好,蓋上鍋蓋約1分鐘即可。
物件的抽象化說明與實例 圖片來源:維基百科http://zh.wikipedia.org/wiki/Wiki
物件的抽象化說明與實例 地圖是抽象化的一種例子,地圖是真實地形的抽象化結果,上面只需提供使用者所需的資訊(方向、距離、街道名稱),如右上圖之街道地圖。 右下圖之真實地形存在著巨細靡遺的資訊:如某個地方有幾棵樹(種類、高度…)、幾棟建築物(樓高、日式風格、巴洛克風格…)、幾條馬路(寬度、長度、路名…)、各式地形地物等等。 資料來源:取自Google地圖資料
物件導向程式實作方式 • 物件導向程式在實作上有兩種方式,分別是“is a”與“has a ”,繼承是一種is a 或 is a kind of的關係 • “is a”意義上為“是一種” • “has a ”:意義上為“有一個”
物件導向程式實作方式 class plane //飛機類別 { ….. } public fighter extends plane //is a:戰鬥機類別fighter繼承飛機類別 { radar a_radar ; //has a:戰鬥機類別fighter 包含的屬性 missilea_missile ; oil-box a_oilbox; }
物件導向設計-封裝 • 減低了程式設計的複雜性 • 維護物件存取的一致性與安全性-在物件狀態隱藏的過程,程式只能使用一致的方法,來存取物件的內部資料或方法,以保障物件完整與安全。
物件導向設計-多型 • 多型是在繼承關係下,單一物件實體可以被宣告成多種型別 • 多型是為了能開發出可擴充的程式,讓程式開發人員在程式撰寫上更有彈性。多型在不同的情形下,扮演不同的角色,函式在執行的時候,面對不同的型別或物件能有自動相對應的操作及功能。 • Bicycle a_Bicycle = new Bicycle() 使用腳踏車類別的方式,來看待物件a_Bicycle。 • Vehicle b_Bicycle = new Bicycle() 使用交通工具類別的方式,來看待物件b_Bicycle • Bicycle c_Bicycle = new Vehicle ("KHS","摺疊車","black") 建立物件,會造成程式編譯錯誤。從邏輯的觀點來看,如果把所有交通工具看成是腳踏車,這是不合理的。
物件導向設計-多載overloading • 多載,在原始碼中的同一段程式,可以對不同的資料型別或不同的class物件進行操作。如果沒有使用多載,程式必須為了處理不同的騎○○,必須寫出不同的類別方法。 • 騎腳踏車、摩托車、馬,因為處理的訊息相異,動作就不同。 class Person { ... void rideBicycle(Bicycle a_Bicycle) //騎腳踏車 {... } void rideMotorcycle(Motorcycle a_Motorcycle ) //騎摩托車 {... } void rideHorse(Horse a_Horse ) //騎馬 {... } }
物件導向設計-多載overloading 使用多載概念後,Person類別有三個ride()類別方法,可使騎ride動作有一致對應方法,到底該執行一個,是依照傳入的參數型態(Bicycle、Motorcycle、Horse)來做判斷的。 class Person { ... void ride(Bicycle a_Bicycle) //騎腳踏車 {... } void ride(Motorcycle a_Motorcycle ) //騎摩托車 {... } void ride(Horse a_Horse ) //騎馬 {... } }
物件導向設計-覆蓋Overriding • 覆蓋Overriding,子類別透過繼承方式來取代父類別原有的類別方法,程式在執行過程中會執行子類別的方法,而不會執行父類別的方法,透過覆蓋方法,可提高程式的可用性與維持一致性的界面。