Presentation is loading. Please wait.

Presentation is loading. Please wait.

Course Introduction Class. 1-2 軟體中的類別 (Class ) 類別就是物件的藍圖 (blueprint) 或原型 (prototype) , 裡面定義著物件的變數與方法。 類別 : 具有共同特性的一組物件.

Similar presentations


Presentation on theme: "Course Introduction Class. 1-2 軟體中的類別 (Class ) 類別就是物件的藍圖 (blueprint) 或原型 (prototype) , 裡面定義著物件的變數與方法。 類別 : 具有共同特性的一組物件."— Presentation transcript:

1 Course Introduction Class

2 1-2 軟體中的類別 (Class ) 類別就是物件的藍圖 (blueprint) 或原型 (prototype) , 裡面定義著物件的變數與方法。 類別 : 具有共同特性的一組物件

3 1-3 類別與物件

4 1-4 物件 vs. 類別 類別代表物件的藍圖,物件是真實存在可以使 用的物體。 在軟體的世界中,軟體的物件已是模型化真實 世界的物件或概念,所以物件這個名詞有時候 會拿來對應到類別與實體。

5 1-5 類別程式碼 public class Person { String m_name; boolean m_gender; public void name(){ System.out.print(“ 姓名 -->”+ m_name); } public void gender(){ System.out.print(“ 性別 -->”+ m_gender); } public void name(String name){ m_name=name; } public void gender(boolean gender){ m_gender=gender; }

6 1-6 類別程式碼 public class App{ public static void main(String argv[]){ Person myPerson=new Person(); myPerson.name(“john”); myPerson.gender(true); myPerson.name(); myPerson.gender(); }

7 1-7 設定資料的存取性 位置 private 無修飾 字元 protectedpublic 同一類別  同一套件中的子類別  同一套件,但不是子 類別  不同套件的子類別 ( 之 instance)  不同套件,也不是子 類別 

8 1-8 建構子( Constructor ) 建構子在物件建立時執行 在建構子中初始化( Initialize )相關成員 建構子的名稱必需和類別的名稱相同,建構子可 以有傳入的參數,但不能自訂回傳的型態 。 class Vehicle{// 定義的類別 private int wheel;// 定義一個實體變數 public Vehicle(){// 類別的建構子 wheel = 4; }

9 1-9 參數化的建構子 類別可以定義多個建構子,每一個建構子的參數型 別或參數數量不同 class Vehicle{// 定義的類別 private int wheel;// 定義一個實體變數 Vehicle(){// 類別的建構子 wheel = 4; } Vehicle(int n){// 定義有參數的建構子 wheel = n; } Vehicle newCar1 = new Vehicle();// 實體化一個類別 Vehicle newCar2 = new Vehicle(6);// 實體化一個類別,並傳入參數

10 1-10 模組化 (Modularity) 容易維護 – 原始碼可以獨立維護,不需要牽扯到其他物件 的程式碼 容易整合 – 一個物件可以容易地在系統中傳遞 – 比如:你可以把腳踏車給另外一個人,腳踏車 也可以動作

11 1-11 資訊隱藏 (Information hiding) 資訊保護 – 物件中有一些變數需要被保護,有權限問題或 資料不可以隨便被更改 容易使用,不需要知道實作細節 – 比如:你不需要瞭解打檔的機能怎麼實作,也 可以騎腳踏車

12 1-12 訊息( Message )觀念 物件可以透過訊息與其他物件互動 – 例如:學生要求成績(學生與成績物件) 單一個物件並沒有很大的用處 訊息是啟動物件的工具 在接收物件接到訊息後,就會執行指定的方法, 然後回應訊息給發送物件(也可能不回應),稱 為「傳回值」( Return Value ),

13 1-13 訊息 (Message) 訊息提供兩個重要的功能 – 物件的行為由其方法來表達,訊息的傳遞 (Message passing) 代表串接物件間行為的互動 – 物件不需要在同一個程序 (Process) 或電腦中,也 可以送收訊息

14 1-14 訊息( Message )觀念 - 循序操作 物件送出的訊息後,接收物件可能有兩種反應 – 執行方法後就產生回應訊息 – 觸發另一個訊息,繼續送出一系列訊息給其它 物件,合作來完成整個操作,此稱為「循序操 作」( Sequential Operation )

15 1-15 訊息( Message )過載 物件是依接收的訊息類型來執行不同的方法 – 名稱重用 – 只需訊息不同,足以讓物件辨識,一樣可以執行同名 的方法 例如:執行 Utility 物件的 max() 方法的訊息,如下 所示: Utility.max(23, 45); Utility.max(23, 45, 87); Utility.max(‘a’, ‘z’);

16 1-16 訊息( Message )多形 「多形」( Polymorphism ) – 另一種名稱再用 – 各物件針對同一個訊息 ( 呼 叫同一名稱的方法 ) ,卻擁 有不同的反應 在人類的思維中,對於同一 種工作,就算對象不同,也 會使用同名的操作。 針對不同的物件,卻擁有名 稱一樣的方法,實際執行有 不同的意義 (Semantic) 對於人類來說打球雖然都 是 play() ,但是實際的接收 物件不同,所以會執行到 不同的物件實作

17 Polymorphism Container container = new 水桶 (); Container container = new 杯子 (); Container container = new 碗 (); 不管真實的物件是什麼,我們都可以使用 container.getCapacity() 來得到容積,因為他們 都是容器,但是我們無需知道他們到底是什麼實 體 ( 不需知道是水桶,杯子,還是碗 ) 1-17

18 1-18 類別( Class )繼承 「繼承」( Inheritance ) – 提供了一個自然的重用機制來組織軟體元件 – 例如:學生和老師都是人,可以先定義 Person 類別模 擬人類,然後擴充 Person 類別建立 Student 和 Teacher 類別模擬學生和老師 一個類別繼承其父類別 (superclass) 中所有屬性 與行為

19 1-19 繼承的目的 類別介面重用 – 子類別可以基礎於父類別的所有行為 程式碼重用 程式設計師可以實作某些常用的部分,保留彈性 給其他特殊應用發揮 – 子類別可以發展出自己特殊的行為 將原有的行為覆寫 (Overriding)

20 1-20 類別程式碼 public class Person { String m_name; boolean m_gender; public void name(){ System.out.print(“ 姓名 -->”+ m_name); } public void gender(){ System.out.print(“ 性別 -->”+ m_gender); } public void name(String name){ m_name=name; } public void gender(boolean gender){ m_gender=gender; } ? Why we need this method!!

21 1-21 類別程式碼 public class Student extends Person { String m_ID; public void ID(){ System.out.print(“ 學號 -->”+ m_ID); } public void ID(String ID){ m_ID=ID; }

22 1-22 類別程式碼 public class App{ public void main(String argv[]){ Student myStudent=new Student(); // 如果寫 Person myStudent = new Student(); 呢 ? myStudent.name(“john”); myStudent.gender(true); myStudent.ID(“123456”); myStudent.name(); myStudent.gender(); myStudent.ID(); }

23 1-23 建立資料存取的方法 避免直接存取內部變數 Setter : 設定資料成員的值 public void setWheel(int n){// 設定 wheel 的值 wheel = n; } Getter : 取出資料成員的值 public int getWheel(){// 傳回 wheel 的值 return wheel; }

24 1-24 類別成員的覆寫 (Override) 「覆寫 (Override) 」又稱為「改寫」、「覆蓋」、 「重載」。 在子類別中改寫繼承自父類別的方法 子類別中也可以定義和父類別相同的資料成員。 在子類別中定義和父類別中相同的資料成員時, 父類別中的資料成員會被隱藏 (hide)

25 1-25 物件的多型的重要性 我們有時候希望某個物件被當作 A 類別使用,而 在另一種場合當作 B 類別使用,這就是物件「多 型」的概念。 物件的角色只能在父類別或是子類別中轉換,不 能轉換成沒有繼承關係的其他類別

26 1-26 this 、 super 與遮蔽效應 遮蔽效應:在方法中區域變數會取代全域變數 使用「 this 」來解決問題 class Car{ public int wheel; Car(int wheel){ wheel = wheel;} } class Car{ public int wheel; Car(int wheel){ this.wheel = wheel;} }

27 1-27 this 、 super 與遮蔽效應 this 的使用 – 「 this 」代表物件本身,只能在類別中使用,它是用 來參考物件實體本身,也就是說:「 this 」儲存的是 物件本身的位址。 – 「 this 」常用於方法之中,區別資料成員和參數 。 – 「 this 」也用在建構子中呼叫另一個建構子,以避免 重複撰寫初始資料成員的程式碼 。 使用「 this() 」的方式呼叫另一個建構子的語法只 能使用於建構子中 不可以在建構子中重複的呼叫「 this() 」

28 1-28 super super 的使用 – 「 super 」參考目前類別的父類別,語法如下: – 使用 super() 呼叫父類別的建構子 如果沒有寫 super() , compiler 會自動加上 換句話說,會呼叫 default no-arg constructor – 呼叫父類別建構子的敘述必須寫在子類別建構子的第 一行 super. 成員 ;

29 1-29 this && super Example class Bird { int legs ; public Bird() { } public Bird(int inputleg) { legs = inputleg ; System.out.println("This animal has " + legs + " legs."); } public void eat(int i) { System.out.println("Eating " + i + "Kg " + "food everyday"); } public void move(int i) { System.out.println("Flying speed: " + i + "km/per hour"); } }

30 1-30 Example class Livestock extends Bird { double life; public Livestock(double i) { super(2); // 必須為第一列, 否則編譯失敗 life = i; System.out.println("This animal only has a " + life + "-year life."); this.eat(5); //this 會參照到本身 class 的 attribute, method, 或 constructor this.move(5); this.move("Flying", 50); super.move(80); //super 會參照到 parent class } public Livestock(){} public void move(int i) //overriding parent class, 繼承時才會出現 { System.out.println("Running speed: " + i + "km/per hour"); } public void move(String s, int i) //method overloading { System.out.println(s + " speed: " + i + "km/per hour"); } } public class test { public static void main(String argv[]) { Livestock chicken = new Livestock(1); } }//test.java

31 1-31 this && super Example public class Flower { int petalCount = 0; String s = new String("null"); //String=“null”; Flower(int petals) { petalCount = petals; System.out.println("petalCount= "+ petalCount); } Flower(String ss) { System.out.println( "s=" + ss); s = ss; }

32 1-32 this && super Example Flower(String s, int petals) { this(petals); //this(s); // Can't call two this()! this.s = s; System.out.println("String & int args"); } Flower() { this("hi", 47); System.out.println("default constructor (no args)"); } void print() { //this(11); // Not inside non-constructor! System.out.println("petalCount = " + petalCount + " s = "+ s); } public static void main(String[] args) { Flower x = new Flower(); x.print(); }


Download ppt "Course Introduction Class. 1-2 軟體中的類別 (Class ) 類別就是物件的藍圖 (blueprint) 或原型 (prototype) , 裡面定義著物件的變數與方法。 類別 : 具有共同特性的一組物件."

Similar presentations


Ads by Google