1 / 48

Object-Oriented Concepts

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.

tarala
Télécharger la présentation

Object-Oriented Concepts

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Object-Oriented Concepts

  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

  3. 第一個 Java Application • Java Application 撰寫流程 • 原始碼撰寫 • 存檔 • 編譯 • 執行

  4. 第一個 Java Application 注意:Java 大小寫有分別 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 } }

  5. 第一個 Java Application • 存檔 • 檔名:HelloWorldApp.java • HelloWorldApp: 習慣上與主類別同名 • .java: 一定要使用 .java 作為附加名

  6. /** * 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 } } 註解 主類別 進入點 程式碼 Java 程式結構

  7. 程式註解 (comment) • 註解格式 • // 我是註解 • /* 我也是註解 */ • /** 我是註解文件 */ • /* 雖然換行 我還是註解 */ • // 我是註解

  8. 註解 • javadoc • 功能:產生說明文件 • 格式: • javadoc HelloWorldApp.java • javadoc –d C:\MyDoc HelloWorldApp.java • 外觀:

  9. /** * 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 程式至少要有一個類別,才能順利執行。

  10. 類別規則 • 主類別名稱要跟檔案名稱大小寫相同 • 且在Java中,大小寫是有差別的 • 主要以英文字、數字、底線組成,不可以數字開頭,也不可以有空白 • 類別內容的開始與結束以{ } 框起來

  11. /** * 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 的進入點名稱為 “main()” 函數

  12. 主方法宣告 • 應用程式會從main這個方法(method)開始執行,一個類別內只能有一個main • 可以有其他的方法(method) • 由命令提示字元來的參數擺在String[] args public static void main(String[] args) {… }

  13. public static void main (String[] args) { 程式碼寫在此處 } 進入點 main: 進入點的函數名稱。一定要取名為 “main” (String[] args): 傳遞給 main 的參數。 void: main 的傳回值。void 代表不傳回任何值。 static: 宣告 main 是一個靜態函數。 public: 宣告 main 函數大家都可以存取。 注意!! Java 每行程式後方都要以分號 “;” 分開。 回到原主題

  14. 函式呼叫 (function call) • System.out • JAVA標準的系統輸出 • 將要印的字印到命令提示字元 • 其他的如 System.out.print (沒有換行) System.out.println("Hello World!");

  15. 編譯程式 • 利用javac這個程式 • 範例: • javac HelloWorldApp.java • 成功的話,不會有任何訊息,並產生HelloWorldApp.class,也就是ByteCode中間碼 (位元程式碼)

  16. 執行程式 • 利用java這個程式 • 範例: • javaHelloWorldApp • 不需要加.class或是.java • 會執行該class中的main函式

  17. 換行字元 • 換行: \n • tab定位: \t • 反斜線: \\ • 雙引號: \” System.out.print(“\”Hello\tWorld!\\\n");

  18. 世界上有兩種程式設計師 • 你想當… • 最厲害的程式設計師 • 寫出最好的程式碼 • 最聰明的程式設計師 • 拿最好的程式碼,組合出更好的程式碼

  19. 程式設計方法 • 「軟體工程」(Software Engineering) • 研究如何建立正確、可執行和良好撰寫風格的程式碼,嘗試使用一些已經驗證過且可行的方法來解決程式的問題。 • 「程式設計」(Programming) • 使用指定的程式語言來解決問題的程式設計方法。

  20. 程式設計方法 • 學習程式設計需要經歷數個學習過程,即四種「程式設計技術」(Programming Techniques),或稱為「程式設計風格」(Programming Styles),如下所示: • 非結構化程式設計(Unstructured Programming)。 • 程序式程式設計(Procedural Programming)與結構化程式設計(Structured Programming)。 • 模組化程式設計(Modular Programming)。 • 物件導向程式設計(Object-Oriented Programming)。

  21. 非結構化程式設計 • 早期的BASIC和組合語言都屬於非結構化程式設計。 • 主要是指不論大小程式都只擁有一個main()方法,而且程式碼是以線性方式依序的執行。

  22. 非結構化程式設計問題 • 在開發大型程式時,會產生的問題: • 重複的動作會產生重複的程式碼 • 如利用goto • 增加程式的複雜度 • 產生一些無用的程式碼片斷 • 資料都屬於「全域」(Global)資料,容易誤改

  23. 程序式與結構化程式設計 • 程序式程式設計是將程式中重複的程式片斷抽出成為「程序」 • (Procedures,或稱為Subroutine、Routine)或「函數」(Functions)。 • 間接將資料宣告成區域變數 (Local Variable)

  24. 程序式與結構化程式設計 • 因為程式已經分割成程序,所以在main()方法的程式碼只是依序呼叫各程序(Procedure Call),來完成任務。 • 整個程式使用流程控制連接各程序,即構化程式設計。

  25. 模組化程式設計 • 模組化程式設計是為了能夠重複使用分割建立的程序 • 將相同功能的函數結合在一起成為獨立的「模組」(Modules),模組是一個處理指定功能的子程式。

  26. 程序型與模組型之差異 • 程序 • 與主程式相依,無法替換 • 移除會影響主程式運作 • 模組 • 具有特定規格的介面與資料結構,可以替換成其他類似功能的模組 • 視情況可以移除,不影響主程式運作,只是會缺少一些功能

  27. 物件導向程式設計 • 物件導向程式設計是一種程式設計的方法,將原來專注於問題的分解,轉換成了解問題本質的資料,也就是「物件」(Object)。 • 程式是由物件組成,物件內含處理的資料和相關程序,物件是使用訊息來溝通合作以解決問題。

  28. 物件導向技術 • 物件導向分析 (OO Analysis) • 了解問題與需求 • 物件導向設計 (OO Design) • 將需求萃取成物件模型(抽象化),或邏輯概念圖 • 物件導向程式 (OO Programming) • 將邏輯設計轉換成實際程式碼

  29. 物件導向程式技術 • 演戲 • 寫好劇本與對白 (分析與描述問題) • 找好演員與道具 (物件) • 開始演! (執行程式) • 每個場景需要哪一些演員與道具上場 • 怎麼演才可以表達出劇情

  30. 抽象資料型態 • 物件導向程式設計的精神是資料抽象化 • 為了在電腦中描述真實世界的各種實體東西 • 透過抽象資料型態建立電腦與真實世界的橋樑 • 程式設計的目的是解決問題,也就是將生活中的真實問題轉換成電腦程式 • 真實問題可能很複雜,必須抽出其重點部分來解決

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

  32. 物件導向的抽象資料型態 • 物件導向程式語言的抽象資料型態,在Java語言就是「類別」(Class)。 • 將具有同一類型資料和介面的物件分成一類 • 將個人基本資料問題抽象化成Person模型,對應真實世界中人的實體 • 內含姓名name、地址address和電話號碼phone等資料 • setPerson()指定個人資料,getName()、getAddress()和getPhone()取出個人資料的操作

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

  34. 物件導向的思維 • 物件導向技術源於1960年代的Simula程式語言,它是Simulation Language的簡稱,這是一種模擬語言,希望使用電腦程式來模擬真實世界的各種處理過程。 • 換句話說,物件導向的思維就是現實生活的思維方式 • 其實大家早已知道,而且一直使用它。

  35. 物件 • 你的四周 • 人, 動物, 植物, 車子等等 • 物件中所包含有 • 狀態 (Stats, 內在資料) • 大小, 形狀, 顏色, 重量等等 • 行為 (Behaviors, 外在操作介面) • 車子可以發動、停車、加速和換擋等等

  36. 從案例中學習識別物件 • 物件導向思維的重點是如何從描述的問題中識別出物件,以便建立問題的模型,可能的方法如下: • 問題中是否有【具體的事物】,例如:人、書、電腦、車子等。 • 問題中是否有【事件】,例如:訂購商品、借書、參加會議、旅遊等。

  37. 從案例中學習識別物件-物件特徵1 • 保留資訊(Retained Information):物件需要能夠保留資訊,所以物件一定擁有一些屬性,即資料。 • 需要提供服務(Needed Service):物件需要能夠提供服務,例如:更改屬性的操作。 • 共通屬性(Common Attributes):所有出現的物件都擁有共通的屬性。

  38. 從案例中學習識別物件-物件特徵2 • 共通操作(Common Operators):所有出現的物件都擁有共通的操作。 • 本質的需求(Essential Requirements):擁有其它外部的實體物件,它需要取得物件的資訊,例如:Order訂單物件需要取得Customer客戶物件的【地址】屬性。 • 多重屬性(Multiple Attributes):物件擁有的屬性並非只屬於它,它可以是一個更大物件的屬性。

  39. 物件導向技術的觀念 • 物件導向技術有三個重要觀念 • 物件:提供資料和處理資料程序的封裝 • 訊息:物件間的溝通方式,建立物件互動和支援多型的觀念 • 類別:將有相同特性的物件,歸納成同一類抽象資料型別

  40. 物件(Object)觀念 • 物件是對應到現實生活的實體或事件,擁有三種特性:狀態、行為、識別字 • 狀態(State) • 物件內部包含的資料 • 可以是一個變數 • 例如:車子的車型、排氣量、色彩和自排或手排等屬性。

  41. 物件(Object)觀念-特性 • 行為(Behavior) • 物件的方法(methods) • 來產生行為 • Java語言是使用方法來實作行為 • 例如:車子可以發動、停車、加速和換擋等。

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

  43. 物件(Object)觀念-特性 • 識別字(Identity) • 每個物件都擁有獨一無二的識別字,用來與其他的物件做區別 • 在記憶體中有個唯一的位址 • Java語言是使用物件參考(Reference)作為物件的識別字。

  44. 物件(Object)觀念-範例 • 使用MySentraCar物件模擬1800cc紅色四門的Sentra車子 • MySentraCar是物件的識別字,有別於眾多其它車輛的物件 • 狀態 • 車型(type)、排氣量(cc)、色彩(color)、幾門(door)。 • 行為 • 發動(starting)、停車(parking)、加速(speeding)、換檔(shift)。

  45. 物件(Object)觀念 • 使用MySentraCar物件模擬車輛時,是使用變數儲存目前的狀態值,建立方法來模擬行為,如下所示: • 變數:type=Sentra、cc=1800、color=red、door=4。 • 方法:starting()、parking()、speeding()、shift()。

  46. Quiz • So many brands and types • BMW, Nissan, Toyota, Lexus, VOLVO, audi, Benz • Toyota • VIOS, Altis, Premio, Yaris, Wish • How to apply OO concepts?

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

  48. Exercises • 以物件導向思考,試圖將生活中的東西以物件導向方式來描述 • 看看以前寫的C code,想想如何用物件導向來改寫?

More Related