人類真實世界類別特性

Download Report

Transcript 人類真實世界類別特性

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地圖資料
範例程式1:實作如何由類別建立物件
物件導向設計-繼承
物件導向設計-繼承
物件導向程式實作方式
物件導向程式在實作上有兩種方式,分別
是“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 包含的屬性
missile a_missile ;
oil-box a_oilbox;
}
範例程式2:實作inheritance.java 類別繼承
物件導向設計-封裝
減低了程式設計的複雜性
維護物件存取的一致性與安全性-在物件
狀態隱藏的過程,程式只能使用一致的方
法,來存取物件的內部資料或方法,以保
障物件完整與安全。
範例程式3:實作daughter.java 說明封裝性
物件導向設計-多型
 多型是在繼承關係下,單一物件實體可以被宣告成多種型別
 多型是為了能開發出可擴充的程式,讓程式開發人員在程式撰寫上更有
彈性。多型在不同的情形下,扮演不同的角色,函式在執行的時候,面
對不同的型別或物件能有自動相對應的操作及功能。
 Bicycle a_Bicycle = new Bicycle()
使用腳踏車類別的方式,來看待物件a_Bicycle。
 Vehicle b_Bicycle = new Bicycle()
使用交通工具類別的方式,來看待物件b_Bicycle
 Bicycle c_Bicycle = new Vehicle ("KHS","摺疊車","black")
建立物件,會造成程式編譯錯誤。從邏輯的觀點來看,如果把所有交通工具看
成是腳踏車,這是不合理的。
範例程式4:實作Polymorphism.java多型性說明
多型範例練習
物件導向設計-多載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 ) //騎馬
{... }
}
範例程式5:實作範例程式Overloading.java多載
物件導向設計-覆蓋Overriding
覆蓋Overriding,子類別透過繼承方式來取
代父類別原有的類別方法,程式在執行過
程中會執行子類別的方法,而不會執行父
類別的方法,透過覆蓋方法,可提高程式
的可用性與維持一致性的界面。
範例程式6:實作範例程式
overriding_son.java覆蓋
謝謝各位指教