7-22-投影片

Download Report

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 !