Transcript 7-22-投影片
JAVA 物件和類別 李宥頡 [email protected] 2014-7-22 物件和類別 物件 (Object) • 在真實世界中,物件可視為是物體,例如: 人是一個物件、車子 是一個物件、電腦也是一個物件,每個物件都有其對應特徵和 行為。 • 在程式設計領域中的物件,是使用程式技巧模擬真實世界中的 物件而得到的程式碼與資料。 • 由於真實世界中的物件各有其特徵、行為等諸多特性,因此模 擬真實世界中的物件,就必需使用程式碼與資料來模擬出物件 的各種特徵、行為。物件導向程式設計必先對物件的特徵和行 為分類,物件的特徵以屬性來描述,物件的行為以方法 (Methods)描述,並用程式碼來加以模擬。 • 所以「物件」就是指具有屬性和方法的資料。以下說明構成物 件的要素有那些: 2 物件和類別 一. 物件具有屬性(Property) • 在電腦領域中有不少地方使用Attribute來代表 「屬性」,不過一般在物件導向程式語言中大 部份是使用Property這個單字。通常描述一個 物件,都會針對物件的外觀、特質加以描述 • 例如:David的身高是180公分,代表David是一個物件的物件名 稱,身高(tall)是屬性名稱,180是身高屬性的屬性值(單位為公分)。 • 在java程式中則以下列方式來描述David的身高: David.tall=180; • 物件名稱和屬性名稱中間使用點號加以區隔。一個物件的屬性 不止一個,例如 David 還有「體重」、「出生日期」、「血型」 等其它屬性名稱,物件有了屬性後,就可完整描述物件的各項特 質。譬如:標籤控制項的屬性視窗中列出該控制項的許多屬性名 稱,程式中描述物件的屬性值設定寫法如下: 3 物件和類別 二. 物件具有方法(Method) • 每個物件除具有特徵還有「行為」,像人會走路、車子會跑,更重要 的是物件之間可以透過這些行為進行互動 • 例如開車的時候用手轉動方向盤、車子就會轉彎,這些動作 稱為「方法」 • 例如:將一部車子 (Car1) 移動 (Move) 到座標為 (100, 200) 的 位置。在 Java中的表示方法為: Car1.Move(100, 200); • 物件的方法還可附帶參數,其中 100 表示X座標、200表示Y座標。 已介紹過System.out是個類別物件,println是其方法,欲在螢幕上 顯示 “Hello World !” 其寫法如下: System.out.println(“Hello World !”); 4 物件和類別 • 有一點要特別留意的是,在物件的方法中,通常使用參數來簡化 方法的數目,例如要設計一個讓車子排檔(gear)的方法,你可以 這樣做: Car1.Gear(); • 如果上述汽車的排檔的方法有三種,那麼方法就要寫三種,若方法 一多豈不是要寫更多的方法: Car1.Gear1(); // 一檔 Car1.Gear2(); // 二檔 Car1.Gear3(); // 倒檔 • 若在方法中能夠加上參數只要使用一種方法便可解決上面問題: Car1.Gear(Forward,1); // 使用往前 排檔1 Car1.Gear(Forward,2); // 使用往前 排檔2 Car1.Gear(Backward,1); // 使用往後 排檔1 • 操作車子排檔只用一個 Gear 方法,至於往前或往後、使用哪個 5 排檔都使用參數來指定。 物件和類別 三. 物件要能被識別(Identify) • 同類別的物件,在程式執行時必須能夠清楚辨別到底是存取 哪個物件的屬性或執行哪個物件方法,否則程式執行時無法 分辨出是哪個物件的屬性或方法。 • 譬如:要命令一號車前進、二號車後退,就必須在下達命令 時,能夠分辨出到底對哪個物件下達命令。 • 譬如:下面兩個敘述分別使用Car1 和 Car2 當一號車和二號 車的物件名稱,Forward() 和 Backward()為兩個物件的方法 ,哪個物件使用哪個方法,中間使用點號隔開就能清楚地識 別,此時C# 對不同 Car1 和 Car2 物件會分別配置不同記憶體 空間來使用: Car1.Fordward(); // 前進 Car2.Backward(); // 倒退 6 物件和類別 類別 (Class) • 類別是用來對物件做分門別類,以數學角度來看類別就像是 一個集合,所以類別是一群具有相同性質物件的集合。 • 類別是一種設計的方法,相當於一個模板(template),物件 就是根據類別的設計方法(模板)所製作出來的成品。 • 簡言之,類別就是建構某些相似物件的藍圖,物件可視為依 類別的描述所建構出來的一個類別的實體(Instances)。 • 類別只是用來描述這些類似物件的屬性、方法,類別本身並 不是實際的物件。 7 物件和類別 類別 (Class) • 例如:腳踏車、越野車、三輪車、轎車、公車等都是實際存在 的物件,都屬於車子這個類別。 • 他們都有屬性(輪子、方向盤、煞車裝置… ) 和執行方法(會跑、 會停、會轉彎….)。 • ”車子” 這個類別只是用來描述腳踏車、越野車、三輪車、轎車、 公車這四種車子統稱定義 ”車子” 這種類別含有哪些屬性和方法, 但”車子”這個類別卻無法執行方法,因為它只是一種描述而已, 實際上是不存在,只有由 ”車子” 類別所衍生出來的物件 (腳踏車、 越野車、三輪車、轎車、公車等)才可以真正執行方法。 8 物件和類別 • 程式設計觀點,類別只是一種抽象的資料型別,物件則是屬於 該種資料型別的實體變數。 • 例如:在 Java的 int 可看做是整數類別,卻無法直接用 int類別 來做加減運算(方法),例如: int A; // 宣告變數A是一個整數 int B; // 宣告變數B是一個整數 A = 10; // 正確 B = A + 5; // 正確 int = 20; // 錯誤 • 由上面得知:類別(int) 可透過宣告來衍生出物件 (A & B), 但類別本身卻不是物件,也不可用來執行。 • 假設腳踏車物件和摩托車物件都是由同一類別(車子)衍生而來, 卻代表不同的個體。 • 一般也將同個類別所衍生出來物件叫做該類別的 Instance (實體、個體或執行個體)。 9 物件和類別 10 物件和類別 11 Practice 宣告一個類別: Man 擁有成員: height, weight 擁有方法: printMan() ↓ 顯示身高體重 12 物件和類別 13 物件和類別 14 Practice 15 HOMEWORK 定義一個Emplyee員工類別,該類別的成員如下: • Public int Salary薪水屬性 – 可用來設定員工薪水,最小值20000,最大值40000 • Ename變數 – 用來設定員工的姓名 • Public void PrintData()方法 – 顯示員工的姓名,薪水資訊 • delegate void ShowError()事件 – 當員工Salary薪水屬性設定錯誤時,會觸發此事件,並顯示”薪 水必須介於20000到40000之間 16 Thanks for your attention !