java @ch8. objects and classes 2010.12.03. outline object-oriented programming 類別的宣告 &...

17
Java@Ch8. OBJECTS AND CLASSES 2010.12.03

Post on 20-Jan-2016

250 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Java @Ch8. OBJECTS AND CLASSES 2010.12.03. Outline Object-Oriented Programming 類別的宣告 & 物件的實作 Defining Classes for Objects 為什麼要物件導向 ? 物件導向的好處

Java@Ch8. OBJECTS AND CLASSES

2010.12.03

Page 2: Java @Ch8. OBJECTS AND CLASSES 2010.12.03. Outline Object-Oriented Programming 類別的宣告 & 物件的實作 Defining Classes for Objects 為什麼要物件導向 ? 物件導向的好處

Outline

• Object-Oriented Programming• 類別的宣告 & 物件的實作• Defining Classes for Objects• 為什麼要物件導向 ?• 物件導向的好處• Constructors• Displaying GUI Components

[Sample code]

Car.java + TestCar.java 、 p.300 Listing 8.5

Page 3: Java @Ch8. OBJECTS AND CLASSES 2010.12.03. Outline Object-Oriented Programming 類別的宣告 & 物件的實作 Defining Classes for Objects 為什麼要物件導向 ? 物件導向的好處

Object-Oriented Programming

(OO 、 OOP 物件導向程式語言 )

Java 比擬為一部電影,要有:

1.導演 : 想劇情2.編劇 : 安排劇中角色、道具、場景的人3.演員 : 舞台上照著劇本實際演出的人

Page 4: Java @Ch8. OBJECTS AND CLASSES 2010.12.03. Outline Object-Oriented Programming 類別的宣告 & 物件的實作 Defining Classes for Objects 為什麼要物件導向 ? 物件導向的好處

西遊記 導演 : 你角色 : 猴子、豬、雲演員 : 孫悟空、小猴子 A 、小猴子 B 、豬八戒、雲 A 、

雲 B

表情位置

孫悟空

表情位置

小猴子 A

表情位置

小猴子 B

顏色位置

雲 A

七十二變

搥背 搥背 飄動

表情位置

豬八戒

吃東西

名稱

屬性

行為

顏色位置

雲 B

飄動

Page 5: Java @Ch8. OBJECTS AND CLASSES 2010.12.03. Outline Object-Oriented Programming 類別的宣告 & 物件的實作 Defining Classes for Objects 為什麼要物件導向 ? 物件導向的好處

小猴子 A

小猴子 B

豬八戒

雲 A雲 B

孫悟空

我會七十二變

我會搥背

我會搥背

我會吃東西

我會飄動我會飄

Page 6: Java @Ch8. OBJECTS AND CLASSES 2010.12.03. Outline Object-Oriented Programming 類別的宣告 & 物件的實作 Defining Classes for Objects 為什麼要物件導向 ? 物件導向的好處

類別的宣告 & 物件的實作 • 物件的實作

猴子 小猴子 A = new 猴子 (); 小猴子 A. 表情 = 大笑 ; 小猴子 A. 位置 = 地上 ; 小猴子 A. 搥背 (); // 開始搥背

• 類別的宣告 :

class 猴子 { 表情 位置 public 搥背 () { 幫別人搥背 ; } }

Page 7: Java @Ch8. OBJECTS AND CLASSES 2010.12.03. Outline Object-Oriented Programming 類別的宣告 & 物件的實作 Defining Classes for Objects 為什麼要物件導向 ? 物件導向的好處

“猴子、豬、雲 “是類別 (class)

“孫悟空、小猴子 A 、小猴子 B 、豬八戒、雲 A 、雲 B”

是由類別實做出來的物件 (object)

“狀態、位置”是類別的屬性 (state 、 properties 、 attribute)

“七十二變、搥背、飄動、吃東西”是類別的行為 (behavior 、 actions)

Page 8: Java @Ch8. OBJECTS AND CLASSES 2010.12.03. Outline Object-Oriented Programming 類別的宣告 & 物件的實作 Defining Classes for Objects 為什麼要物件導向 ? 物件導向的好處

參考程式 : TV.java + TestTV.java ( 課本

p.292~293)

Page 9: Java @Ch8. OBJECTS AND CLASSES 2010.12.03. Outline Object-Oriented Programming 類別的宣告 & 物件的實作 Defining Classes for Objects 為什麼要物件導向 ? 物件導向的好處

Defining Classes for Objects

物件 : 物件代表一個實體, 它是可被清楚分辨出來的 An object has a unique identity, state, and behavior.

( 課本 p.288)

Ex: a student, a desk, a circle, a button.

狀態 : 物件的狀態,藉由 data field 的 current value 來表示 .

行為 : 物件的行為,藉由 method 來定義 .

Page 10: Java @Ch8. OBJECTS AND CLASSES 2010.12.03. Outline Object-Oriented Programming 類別的宣告 & 物件的實作 Defining Classes for Objects 為什麼要物件導向 ? 物件導向的好處

程式練習 :

Car.java + TestCar.java

1. 加入車子”耗油率”的屬性 rate (ex: 公里 / 公升 )

2. 加入計算油耗的 Method

OilConsume(int oil) ( 讓使用者傳入公升數 , 印出車子總共可以跑幾公里 )

Page 11: Java @Ch8. OBJECTS AND CLASSES 2010.12.03. Outline Object-Oriented Programming 類別的宣告 & 物件的實作 Defining Classes for Objects 為什麼要物件導向 ? 物件導向的好處

為什麼要物件導向 ?

• 物件導向是近年來發展出的一套程式設計的開發概念,基於程式撰寫越來越龐大,參予的開發人員更多,程序式的結構 (procedure-oriented) 缺乏效率和可讀性,而且無法有效發展 GUI 軟體,因此發展出的一套具物件概念的語言結構。

• 例: C++ , JAVA

Page 12: Java @Ch8. OBJECTS AND CLASSES 2010.12.03. Outline Object-Oriented Programming 類別的宣告 & 物件的實作 Defining Classes for Objects 為什麼要物件導向 ? 物件導向的好處

物件導向的好處:• 1.   抽象化 ( Abstraction )

思考物件的思維, 用抽象化的思維來思考複雜的程式, 注重物件與外界溝通的行為, 可達到資料隱藏的目的。

• 2.   封裝 ( Encapsulation )

將資料包裝在類別內部, 限定特定的函數存取, 使別人無法得知物件內的運作情形。

• 3.   繼承 ( inheritance )

將繼有類別的功能, 透過繼承的方式, 將此功能繼承給新的類別使用。

• 4.   多型 ( polymorphism )

允許相同名稱的函數針對引數的不同而有不同的處理動作。• 5.   動態繫結 ( Dynamic binding )

將物件的方法函式位址建立成一個虛擬表格 (Virtual Table) , 在執行階段時,判斷該呼叫哪一個物件的方法函式, 以達到物件多型 (polymorphism) 的目的。

Page 13: Java @Ch8. OBJECTS AND CLASSES 2010.12.03. Outline Object-Oriented Programming 類別的宣告 & 物件的實作 Defining Classes for Objects 為什麼要物件導向 ? 物件導向的好處

Constructors

• A constructor must have the same name as the class itself.

• Constructors do not have the return type, not even void.

• Constructors play the role of initializing objects.

Page 14: Java @Ch8. OBJECTS AND CLASSES 2010.12.03. Outline Object-Oriented Programming 類別的宣告 & 物件的實作 Defining Classes for Objects 為什麼要物件導向 ? 物件導向的好處

程式練習 :

1. 在 Car.java 裡面加上一個沒有參 數的 Constructor

2. 並在 Constructor 裡印出車子名稱 3. 最後在 TestCar.java 裡呼叫它

( 參考 p.289 Figure8.3 、 p.290 Listing 8.1)

Page 15: Java @Ch8. OBJECTS AND CLASSES 2010.12.03. Outline Object-Oriented Programming 類別的宣告 & 物件的實作 Defining Classes for Objects 為什麼要物件導向 ? 物件導向的好處

new ClassName(arguments);

• 只有在 class 裡完全沒有定義 constructor 的時候 , Java才會自動產生一個預設的 constructor, 且它沒有argument

• 沒有 argument 的 Constructor, 稱為 no-arg 或是 no-argument constructor

• no-argument constructor 通常沒有 body, 而這種沒有body 的 constructor 叫作 default constructor

Page 16: Java @Ch8. OBJECTS AND CLASSES 2010.12.03. Outline Object-Oriented Programming 類別的宣告 & 物件的實作 Defining Classes for Objects 為什麼要物件導向 ? 物件導向的好處

Displaying GUI Components

JFrame

JButton

JRadioButton

JComboBox

Page 17: Java @Ch8. OBJECTS AND CLASSES 2010.12.03. Outline Object-Oriented Programming 類別的宣告 & 物件的實作 Defining Classes for Objects 為什麼要物件導向 ? 物件導向的好處

程式練習 :

p.300 Listing 8.5