Presentation is loading. Please wait.

Presentation is loading. Please wait.

Java 2012.12.14.

Similar presentations


Presentation on theme: "Java 2012.12.14."— Presentation transcript:

1 Java

2 Outline 為什麼要物件導向? 物件導向的好處 Object-Oriented Programming 類別的宣告&物件的實作
Constructors

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

4 物件導向的好處: 1. 抽象化 ( Abstraction )
思考物件的思維,      用抽象化的思維來思考複雜的程式,      注重物件與外界溝通的行為,      可達到資料隱藏的目的。  2.   封裝 ( Encapsulation ) 將資料包裝在類別內部,      限定特定的函數存取,      使別人無法得知物件內的運作情形。 3.   繼承 ( inheritance ) 將繼有類別的功能, 透過繼承的方式, 將此功能繼承給新的類別使用。 4.   多型 ( polymorphism ) 允許相同名稱的函數針對引數的不同而有不同的處理動作。 5.   動態繫結 ( Dynamic binding ) 將物件的方法函式位址建立成一個虛擬表格(Virtual Table), 在執行階段時,判斷該呼叫哪一個物件的方法函式,      以達到物件多型(polymorphism)的目的。

5 Object-Oriented Programming
(OO 、OOP 物件導向程式語言) Java 比擬為一部電影,要有: 導演: 想劇情 編劇: 安排劇中角色、道具、場景的人 演員: 舞台上照著劇本實際演出的人

6 西遊記 導演: 你 角色: 猴子、豬、雲 演員: 孫悟空、小猴子A、小猴子B、豬八戒、雲A 、雲B 名稱 孫悟空 小猴子A 小猴子B 雲A
表情 位置 表情 位置 表情 位置 顏色 位置 顏色 位置 表情 位置 屬性 七十二變 搥背 搥背 飄動 飄動 吃東西 行為

7 我會飄動 我會飄 雲A 我會七十二變 雲B 我會吃東西 我會搥背 我會搥背 孫悟空 小猴子B 小猴子A 豬八戒

8 類別的宣告&物件的實作 物件的實作 類別的宣告: 猴子 小猴子A = new 猴子(); class 猴子 小猴子A.表情 = 大笑; {
位置 public 搥背() 幫別人搥背; }

9 “猴子、豬、雲 “ 是類別(class) “孫悟空、小猴子A、小猴子B、豬八戒、雲A 、雲B” 是由類別實做出來的物件(object) “狀態、位置” 是類別的屬性(state、properties 、attribute) “七十二變、搥背、飄動、吃東西” 是類別的行為(behavior 、actions)

10 Constructors Constructors play the role of initializing objects.
class Test{ int x,y; } public class NoConstructor{ public static void main(String[] argv){ Test a=new Test(); class Test{ int x,y; Test(){ } public class DefaultConstructor{ public static void main(String[] argv){ Test a=new Test();

11 CONSTRUCTORS 自行定義Constructors
A constructor must have the same name as the class itself. Constructors do not have the return type, not even void.

12 Constructors 建立無參數的 Constructors class Test{ int x,y; Test(){ x=10;
} public class NoArgument{ public static void main(String[] argv){ Test a=new Test(); System.out.println("x= "+a.x); System.out.println("y= "+a.y);

13 Constructors 建立有參數的Constructors class Test{ int x,y;
Test(int initX,int initY){ x=initX; y=initY; } public class WithArgument{ public static void main(String[] argv){ Test a=new Test(30,40); System.out.println("x= "+a.x); System.out.println("y= "+a.y);

14 Constructors-OVERLOADING
class Test{ int x=10,y=20; Test(){ } Test(int initX,int initY){ x=initX; y=initY; Test(int initX){ void show{ System.out.println("x= "+x); System.out.println("y= "+y); public class Overloading{ public static void main(String[] argv){ Test a=new Test(30,50); Test a=new Test(30); Test a=new Test();

15  TV.java + TestTV.java (課本p.327-328)
參考程式:  TV.java + TestTV.java (課本p ) public class TestTV { public static void main(String[] args) { TV tv1 = new TV(); tv1.turnOn(); tv1.setChannel(30); tv1.setVolume(3); TV tv2 = new TV(); tv2.turnOn(); tv2.channelUp(); tv2.volumeUp(); System.out.println(“tv1‘s channel is ”+ tv1.channel+“ and volume level is ” + tv1.volumeLevel); System.out.println("tv2'2 channel is " + tv2.channel +" and volume level is " + tv2.volumeLevel); }

16 public class TV { int channel =1; int volumeLevel=1; boolean on = false; public TV(){ } public void turnOn(){ on=true; public void turnOff(){ on=false; public void setChannel(int newChannel){ if(on && newChannel >= 1 && newChannel <=120){ channel = newChannel; public void setVolume(int newVolumeLevel){ if(on && newVolumeLevel >= 1 && newVolumeLevel <=120){ volumeLevel = newVolumeLevel; public void channelUp(){ if(on && channel <120){ channel++; public void channelDown(){ if(on && channel >1){ channel--; public void volumeUp(){ if(on && volumeLevel <7){ volumeLevel++; public void volumeDown(){ if(on && volumeLevel >1){ volumeLevel--;

17 參考程式:  Car.java + TestTV.java /* Declaration Class */
import javax.swing.*; public class TestCar { public static void main(String[] args) Car car1 = new Car(); car1.speed = 120; car1.position = "Kaohsiung"; car1.drive(); car1.printID(); //呼叫static method Car car2 = new Car(); car2.carID = 200; //修改static variable //Car.printID(); }

18 public class Car { int speed = 0; String position = "Taipei"; static int carID = 100; Car(){ } void drive() //代表drive行為的method { System.out.println("The car is driving in " + position + " with " + speed + "km/hr"); void stop() //代表stop行為的method System.out.println("The car is stopping in " + position + " with 0km/hr"); int OilConsume(int oil) //計算油耗 return oil*10; static void printID() //static method System.out.println("Car ID is : " + carID);

19 practice 撰寫一個程式,其中包含一個類別Dates,並在建構方法中初 始化一個含有7個元素的字串陣列,各個元素對應到星期一 到星期天的英文縮寫,並提供一個方法askDate(),傳入1-7的 數字,傳回對應的英文縮寫 寫一個類別circle,代表一個圓,並提供多種建構方法可以透 過指定圓心座標及半徑或是一個包含此圓的最小正方形來建 立circle物件,同時定義方法可以計算圓周及圓面積

20 Ppt下載:


Download ppt "Java 2012.12.14."

Similar presentations


Ads by Google