Download presentation
Presentation is loading. Please wait.
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下載:
Similar presentations