48
Object-Oriented Concepts

Object-Oriented Concepts

  • Upload
    tarala

  • View
    55

  • Download
    0

Embed Size (px)

DESCRIPTION

Object-Oriented Concepts. Previous study. How to link “Java SDK” library Using path and Classpath What benefits of “java” Compile to byte-code and interpret byte-code with Java virtual machine. 第一個 Java Application. Java Application 撰寫流程 原始碼撰寫 存檔 編譯 執行. 第一個 Java Application. - PowerPoint PPT Presentation

Citation preview

Page 1: Object-Oriented Concepts

Object-Oriented Concepts

Page 2: Object-Oriented Concepts

1-2

Previous study

• How to link “Java SDK” library– Using path and Classpath

• What benefits of “java”– Compile to byte-code and interpret byte-code

with Java virtual machine

Page 3: Object-Oriented Concepts

1-3

第一個 Java Application

• Java Application 撰寫流程– 原始碼撰寫– 存檔– 編譯– 執行

Page 4: Object-Oriented Concepts

1-4

第一個 Java Application

import java.lang.*;

/**

* HelloWorldApp.java

* Use System.out.println to show “Hello World!” on the screen

*/

public class HelloWorldApp {

public static void main ( String[] args ) {

System.out.println("Hello World!");// Print the string

}

}

注意: Java 大小寫有分別

Page 5: Object-Oriented Concepts

1-5

第一個 Java Application

• 存檔– 檔名: HelloWorldApp.java

• HelloWorldApp: 習慣上與主類別同名• .java: 一定要使用 .java 作為附加名

Page 6: Object-Oriented Concepts

1-6

Java 程式結構

/**

* HelloWorldApp.java 2001/08/01

* Use System.out.println to show “Hello World!” on the screen

*/

public class HelloWorldApp {

public static void main ( String[] args ) {

System.out.println(“Hello World!”); // Print the string

}

}

註解

主類別

進入點 程式碼

Page 7: Object-Oriented Concepts

1-7

程式註解 (comment)

• 註解格式– // 我是註解– /* 我也是註解 */– /** 我是註解文件 */– /* 雖然換行 我還是註解 */– // 我是註解

Page 8: Object-Oriented Concepts

1-8

註解

• javadoc– 功能:產生說明文件– 格式:

• javadoc HelloWorldApp.java• javadoc –d C:\MyDoc HelloWorldApp.java

– 外觀:

Page 9: Object-Oriented Concepts

1-9

主類別

• 藍色粗體字部份即為主類別。• Java 程式至少要有一個類別,才能順利執行。

/**

* HelloWorldApp.java

* Use System.out.println to show “Hello World!” on the screen

*/

public class HelloWorldApp {

public static void main ( String[] args ) {

System.out.println(“Hello World!”); // Print the string

}

}

主類別

Page 10: Object-Oriented Concepts

1-10

類別規則

• 主類別名稱要跟檔案名稱大小寫相同– 且在 Java 中,大小寫是有差別的

• 主要以英文字、數字、底線組成,不可以數字開頭,也不可以有空白

• 類別內容的開始與結束以 { } 框起來

Page 11: Object-Oriented Concepts

1-11

進入點• 藍色粗體字部份即為進入點,為一個程式開始執行的地方。• Java 的進入點名稱為 “ main()” 函數

/**

* HelloWorldApp.java

* Use System.out.println to show “Hello World!” on the screen

*/

public class HelloWorldApp {

public static void main ( String[] args ) {

System.out.println(“Hello World!”); // Print the string

}

}

進入點

Page 12: Object-Oriented Concepts

1-12

主方法宣告

• 應用程式會從 main 這個方法 (method) 開始執行,一個類別內只能有一個 main

• 可以有其他的方法 (method)• 由命令提示字元來的參數擺在 String[] args

public static void main(String[] args) {…

}

Page 13: Object-Oriented Concepts

1-13

進入點

main (String[] args)voidstaticpublic

{程式碼寫在此處

}

main: 進入點的函數名稱。一定要取名為 “ main”

(String[] args): 傳遞給 main 的參數。void: main 的傳回值。 void 代表不傳回任何值。static: 宣告 main 是一個靜態函數。public: 宣告 main 函數大家都可以存取。注意 !! Java 每行程式後方都要以分號 “ ;” 分開。

回到原主題

Page 14: Object-Oriented Concepts

1-14

函式呼叫 (function call)

• System.out– JAVA 標準的系統輸出– 將要印的字印到命令提示字元– 其他的如 System.out.print ( 沒有換行 )

System.out.println("Hello World!");

Page 15: Object-Oriented Concepts

1-15

編譯程式

• 利用 javac 這個程式• 範例:

–javac HelloWorldApp.java• 成功的話,不會有任何訊息,並產生HelloWorldApp.class ,也就是 ByteCode中間碼 ( 位元程式碼 )

Page 16: Object-Oriented Concepts

1-16

執行程式

• 利用 java 這個程式• 範例:

–java HelloWorldApp• 不需要加 .class 或是 .java• 會執行該 class 中的 main 函式

Page 17: Object-Oriented Concepts

1-17

換行字元

• 換行 : \n• tab 定位 : \t• 反斜線 : \\• 雙引號 : \”

System.out.print(“\”Hello\tWorld!\\\n");

Page 18: Object-Oriented Concepts

1-18

世界上有兩種程式設計師

• 你想當…

• 最厲害的程式設計師– 寫出最好的程式碼

• 最聰明的程式設計師– 拿最好的程式碼,組合出更好的程式碼

Page 19: Object-Oriented Concepts

1-19

程式設計方法

• 「軟體工程」( Software Engineering )– 研究如何建立正確、可執行和良好撰寫風格的

程式碼,嘗試使用一些已經驗證過且可行的方法來解決程式的問題。

• 「程式設計」( Programming )– 使用指定的程式語言來解決問題的程式設計方

法。

Page 20: Object-Oriented Concepts

1-20

程式設計方法

• 學習程式設計需要經歷數個學習過程,即四種「程式設計技術」( Programming Techniques ),或稱為「程式設計風格」( Programming Styles ),如下所示:– 非結構化程式設計( Unstructured Programming )。

– 程序式程式設計( Procedural Programming )與結構化程式設計( Structured Programming )。

– 模組化程式設計( Modular Programming )。– 物件導向程式設計( Object-Oriented Programming )。

Page 21: Object-Oriented Concepts

1-21

非結構化程式設計

• 早期的 BASIC 和組合語言都屬於非結構化程式設計。

• 主要是指不論大小程式都只擁有一個main() 方法,而且程式碼是以線性方式依序的執行。

Page 22: Object-Oriented Concepts

1-22

非結構化程式設計問題

• 在開發大型程式時,會產生的問題:–重複的動作會產生重複的程式碼– 如利用 goto

•增加程式的複雜度• 產生一些無用的程式碼片斷

–資料都屬於「全域」( Global )資料,容易誤改

Page 23: Object-Oriented Concepts

1-23

程序式與結構化程式設計

• 程序式程式設計是將程式中重複的程式片斷抽出成為「程序」– ( Procedures ,或稱為Subroutine 、 Routine )或「函數」( Functions )。

– 間接將資料宣告成區域變數 (Local Variable)

Page 24: Object-Oriented Concepts

1-24

程序式與結構化程式設計

• 因為程式已經分割成程序,所以在 main() 方法的程式碼只是依序呼叫各程序( Procedure Call ),來完成任務。

• 整個程式使用流程控制連接各程序,即構化程式設計。

Page 25: Object-Oriented Concepts

1-25

模組化程式設計

• 模組化程式設計是為了能夠重複使用分割建立的程序– 將相同功能的函數結合在一起成為獨立的「模組」

( Modules ),模組是一個處理指定功能的子程式。

Page 26: Object-Oriented Concepts

1-26

程序型與模組型之差異

• 程序– 與主程式相依,無法替換– 移除會影響主程式運作

• 模組– 具有特定規格的介面與資料結構,可以替換成其他類似功能的模組

– 視情況可以移除,不影響主程式運作,只是會缺少一些功能

Page 27: Object-Oriented Concepts

1-27

物件導向程式設計

• 物件導向程式設計是一種程式設計的方法,將原來專注於問題的分解,轉換成了解問題本質的資料,也就是「物件」( Object )。

• 程式是由物件組成,物件內含處理的資料和相關程序,物件是使用訊息來溝通合作以解決問題。

Page 28: Object-Oriented Concepts

1-28

物件導向技術

• 物件導向分析 (OO Analysis)–了解問題與需求

• 物件導向設計 (OO Design)– 將需求萃取成物件模型 (抽象化 ) ,或邏輯概念圖

• 物件導向程式 (OO Programming)– 將邏輯設計轉換成實際程式碼

Page 29: Object-Oriented Concepts

1-29

物件導向程式技術

• 演戲– 寫好劇本與對白 ( 分析與描述問題 )–找好演員與道具 ( 物件 )– 開始演 ! ( 執行程式 )

• 每個場景需要哪一些演員與道具上場•怎麼演才可以表達出劇情

Page 30: Object-Oriented Concepts

1-30

抽象資料型態

• 物件導向程式設計的精神是資料抽象化– 為了在電腦中描述真實世界的各種實體東西– 透過抽象資料型態建立電腦與真實世界的橋樑

• 程式設計的目的是解決問題 ,也就是將生活中的真實問題轉換成電腦程式

• 真實問題可能很複雜,必須抽出其重點部分來解決

Page 31: Object-Oriented Concepts

1-31

抽象化目的

• 將問題轉換成模型的方式稱為「抽象化」( Abstraction ),在電腦技術中,其主要的目的是定義問題的二個屬性:– 資料( Data ):問題影響的資料。– 操作( Operators ):問題產生的動作。

Page 32: Object-Oriented Concepts

1-32

物件導向的抽象資料型態

• 物件導向程式語言的抽象資料型態,在 Java 語言就是「類別」( Class )。– 將具有同一類型資料和介面的物件分成一類

• 將個人基本資料問題抽象化成 Person 模型,對應真實世界中人的實體– 內含姓名 name 、地址 address 和電話號碼 phone等資料

– setPerson() 指定個人資料, getName() 、 getAddress() 和getPhone() 取出個人資料的操作

Page 33: Object-Oriented Concepts

1-33

抽象資料型態與物件導向

• 物件導向程式設計的精神是資料抽象化– 每一個物件屬於一種抽象資料型態– 物件導向將問題的資料和該資料的相關操作一起思考

Page 34: Object-Oriented Concepts

1-34

物件導向的思維

• 物件導向技術源於 1960年代的 Simula 程式語言,它是 Simulation Language 的簡稱,這是一種模擬語言,希望使用電腦程式來模擬真實世界的各種處理過程。

• 換句話說,物件導向的思維就是現實生活的思維方式– 其實大家早已知道,而且一直使用它。

Page 35: Object-Oriented Concepts

1-35

物件

• 你的四周–人 , 動物 , 植物 , 車子等等

• 物件中所包含有–狀態 (Stats, 內在資料 )

• 大小 , 形狀 , 顏色 , 重量等等– 行為 (Behaviors, 外在操作介面 )

•車子可以發動、停車、加速和換擋等等

Page 36: Object-Oriented Concepts

1-36

從案例中學習識別物件

• 物件導向思維的重點是如何從描述的問題中識別出物件,以便建立問題的模型,可能的方法如下:– 問題中是否有【具體的事物】,例如:人、書、電腦、車子等。

– 問題中是否有【事件】,例如:訂購商品、借書、參加會議、旅遊等。

Page 37: Object-Oriented Concepts

1-37

從案例中學習識別物件 - 物件特徵 1

• 保留資訊( Retained Information ):物件需要能夠保留資訊,所以物件一定擁有一些屬性,即資料。

• 需要提供服務( Needed Service ):物件需要能夠提供服務,例如:更改屬性的操作。

• 共通屬性( Common Attributes ):所有出現的物件都擁有共通的屬性。

Page 38: Object-Oriented Concepts

1-38

從案例中學習識別物件 - 物件特徵 2

• 共通操作( Common Operators ):所有出現的物件都擁有共通的操作。

• 本質的需求( Essential Requirements ):擁有其它外部的實體物件,它需要取得物件的資訊,例如: Order訂單物件需要取得Customer客戶物件的【地址】屬性。

• 多重屬性( Multiple Attributes ):物件擁有的屬性並非只屬於它,它可以是一個更大物件的屬性。

Page 39: Object-Oriented Concepts

1-39

物件導向技術的觀念

• 物件導向技術有三個重要觀念– 物件:提供資料和處理資料程序的封裝– 訊息:物件間的溝通方式,建立物件互動和支援多型的觀念

– 類別: 將有相同特性的物件,歸納成同一類抽象資料型別

Page 40: Object-Oriented Concepts

1-40

物件( Object )觀念

• 物件是對應到現實生活的實體或事件,擁有三種特性:狀態、行為、識別字– 狀態( State )

• 物件內部包含的資料– 可以是一個變數– 例如:車子的車型、排氣量、色彩和自排或手排等屬性。

Page 41: Object-Oriented Concepts

1-41

物件( Object )觀念 -特性

• 行為( Behavior )– 物件的方法 (methods)

• 來產生行為– Java 語言是使用方法來實作行為– 例如:車子可以發動、停車、加速和換擋等。

Page 42: Object-Oriented Concepts

1-42

物件的狀態與行為 (變數與方法 )

Page 43: Object-Oriented Concepts

1-43

物件( Object )觀念 -特性

• 識別字( Identity )– 每個物件都擁有獨一無二的識別字,用來

與其他的物件做區別• 在記憶體中有個唯一的位址

–Java 語言是使用物件參考( Reference )作為物件的識別字。

Page 44: Object-Oriented Concepts

1-44

物件( Object )觀念 - 範例

• 使用 MySentraCar 物件模擬 1800cc紅色四門的Sentra車子– MySentraCar 是物件的識別字,有別於眾多其它車輛的物件

• 狀態– 車型( type )、排氣量 (cc) 、色彩 (color) 、幾門 (door) 。

• 行為– 發動( starting )、停車( parking )、加速

( speeding )、換檔( shift )。

Page 45: Object-Oriented Concepts

1-45

物件( Object )觀念

• 使用 MySentraCar 物件模擬車輛時,是使用變數儲存目前的狀態值,建立方法來模擬行為,如下所示:– 變數:type=Sentra 、 cc=1800 、 color=red、 door=4 。

– 方法:starting() 、 parking() 、 speeding() 、 shift() 。

Page 46: Object-Oriented Concepts

Quiz

• So many brands and types– BMW, Nissan, Toyota, Lexus, VOLVO, audi,

Benz– Toyota

• VIOS, Altis, Premio, Yaris, Wish

• How to apply OO concepts?

1-46

Page 47: Object-Oriented Concepts

Example1

• 今天上課講的整數與人的例子• 解開 Example1.zip• Javac *.java• Java Example1

1-47

Page 48: Object-Oriented Concepts

Exercises

• 以物件導向思考,試圖將生活中的東西以物件導向方式來描述

• 看看以前寫的 C code,想想如何用物件導向來改寫?

1-48