物件導向系統實務. * 複習物件導向程式設計 * 如何與使用者互動?何謂傾聽者 (Listener) * 範例程式 : 剪刀石頭布遊戲.

Slides:



Advertisements
Similar presentations
1 生物計算期末作業 暨南大學資訊工程系 2003/05/13. 2 compare f1 f2  只比較兩個檔案 f1 與 f2 ,比完後將結果輸出。 compare directory  以兩兩比對的方式,比對一個目錄下所有檔案的相 似程度。  將相似度很高的檔案做成報表輸出,報表中至少要.
Advertisements

Divide-and-Conquer. 什麼是 divide-and-conquer ? Divide 就是把問題分割 Conquer 則是把答案結合起來.
Introduction to Java Programming Lecture 13 Classes I OO Programming.
第七章 抽樣與抽樣分配 蒐集統計資料最常見的方式是抽查。這 牽涉到兩個問題: 抽出的樣本是否具有代表性?是否能反應出母體的特徵?
學習C++的基本語法 認識關鍵字與識別字的不同 學習程式碼偵錯的流程 學習如何提高程式的可讀性
Teacher : Ing-Jer Huang TA : Chien-Hung Chen 2015/6/3 Course Embedded Systems : Principles and Implementations Weekly Preview Question CH3.5 ~ CH /10/31.
3Com Switch 4500 切VLAN教學.
Reference, primitive, call by XXX 必也正名乎 誌謝 : 部份文字取於前輩 TAHO 的文章.
期末專題 - 吊人頭遊戲 第 35 組 組員 : 電機系 49841XXXX XXX 電機系 49841OOOO OOO.
What is static?. Static? 靜態 ? class Test { static int staticX; int instanceX; public Test(int var1, int var2) { this.staticX = var1; this.instanceX =
Review of Chapter 3 - 已學過的 rules( 回顧 )- 朝陽科技大學 資訊管理系 李麗華 教授.
建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。
消費者物價指數反映生活成本。當消費者物價指數上升時,一般家庭需要花費更多的金錢才能維持相同的生活水準。經濟學家用物價膨脹(inflation)來描述一般物價持續上升的現象,而物價膨脹率(inflation rate)為物價水準的變動百分比。
JAVA 程式設計與資料結構 第二章 JAVA 程式基本概念及操作. 第一個程式 /* * 這是第一個程式 (FirstP.java) */ class FirstP{ public static void main(String args[]){ System.out.println("Whatever.
STAT0_sampling Random Sampling  母體: Finite population & Infinity population  由一大小為 N 的有限母體中抽出一樣本數為 n 的樣 本,若每一樣本被抽出的機率是一樣的,這樣本稱 為隨機樣本 (random sample)
1. 假設以下的敘述為一未提供 “ 捷徑計算 ” 能力的程式段,試用程 式設計的技巧,使此敘述經此改 寫的動作後,具有與 “ 捷徑計算 ” 之 處理方法相同之處理模式。 if and then E1 else E2 endif.
例外處理. 內 容 大 綱 例外的產生 捕捉例外 丟出例外 例外的產生 (1/4) 一般常見的執行時期錯誤包括整數除法分母為 0(divide by zero) ,陣列索引值越限 (array index out of range) ,輸入輸出錯誤 (I/O error) 、檔案 不存在或無法存取.
JAVA 程式設計與資料結構 第十四章 Linked List. Introduction Linked List 的結構就是將物件排成一列, 有點像是 Array ,但是我們卻無法直接經 由 index 得到其中的物件 在 Linked List 中,每一個點我們稱之為 node ,第一個 node.
第 18 章 名稱空間與例外處理 18-1 名稱空間 18-1 名稱空間 18-2 例外處理 18-2 例外處理.
McGraw-Hill/Irwin © 2003 The McGraw-Hill Companies, Inc.,All Rights Reserved. 肆 資料分析與表達.
Monte Carlo Simulation Part.2 Metropolis Algorithm Dept. Phys. Tunghai Univ. Numerical Methods C. T. Shih.
JAVA 程式設計與資料結構 第十章 GUI Introdution III. File Chooser  File Chooser 是一個選擇檔案的圖形介面, 無論我們是要存檔還是要開啟檔案,使 用這個物件都會讓我們覺得容易且舒適。
長訊科技 EVRCOM Voice Mail System 使用者操作說明及流程. 自動總機 -- 來電語音轉接服務流程 ( 範例流程 )
第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍 7-4 VB.NET 常用的內建函數 7-4 VB.NET 常用的內建函數 7-5 遞迴函數 7-5.
Chapter 13 塑模靜態觀點:物件圖 Static View : Object Diagram.
Introduction to Java Programming Lecture 17 Abstract Classes & Interfaces.
24-6 設定開始與結束場景中的 程式 最後我們要替這個遊戲收個尾, 幫它把開始 的等待畫面跟結束畫面處理一下。
最新計算機概論 第 5 章 系統程式. 5-1 系統程式的類型 作業系統 (OS) : 介於電腦硬體與 應用軟體之間的 程式,除了提供 執行應用軟體的 環境,還負責分 配系統資源。
3-3 使用幾何繪圖工具 Flash 的幾何繪圖工具包括線段工具 (Line Tool) 、橢圓形工具 (Oval Tool) 、多邊星形 工具 (Rectangle Tool) 3 種。這些工具畫出 來的幾何圖形包括了筆畫線條和填色區域, 將它們適當地組合加上有技巧地變形與配 色, 不但比鉛筆工具簡單,
: Happy Number ★ ? 題組: Problem Set Archive with Online Judge 題號: 10591: Happy Number 解題者:陳瀅文 解題日期: 2006 年 6 月 6 日 題意:判斷一個正整數 N 是否為 Happy Number.
: Playing War ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11061: Playing War 解題者:陳盈村 解題日期: 2008 年 3 月 14 日 題意:在此遊戲中,有一類玩家一旦開始攻擊, 就會不停攻擊同一對手,直到全滅對方或無法再.
資料庫程式設計與系統管理 SQL Server 2005 Express 第六章 進階資料庫設計.
: Ahoy, Pirates! ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11402: Ahoy, Pirates! 解題者:李重儀 解題日期: 2008 年 8 月 26 日 題意:有一個海盜島有 N 個海盜,他們的編號 (id)
短缺,盈餘與均衡. 遊戲規則  老師想出售一些學生喜歡的小食。  老師首先講出價錢,有興趣買的請舉手。
Fugacity Coefficient and Fugacity
: Multisets and Sequences ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11023: Multisets and Sequences 解題者:葉貫中 解題日期: 2007 年 4 月 24 日 題意:在這個題目中,我們要定義.
:Nuts for nuts..Nuts for nuts.. ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 10944:Nuts for nuts.. 解題者:楊家豪 解題日期: 2006 年 2 月 題意: 給定兩個正整數 x,y.
從此處輸入帳號密碼登入到管理頁面. 點選進到檔案管理 點選「上傳檔案」上傳資料 點選瀏覽選擇電腦裡的檔案 可選擇公開或不公開 為平台上的資料夾 此處為檔案分類,可顯示在展示頁面上,若要參加 MY EG 競賽,做品一律上傳到 “ 98 MY EG Contest ” 點選此處確定上傳檔案.
資料結構實習-一 參數傳遞.
6-2 認識元件庫與內建元件庫 Flash 的元件庫分兩種, 一種是每個動畫專 屬的元件庫 (Library) ;另一種則是內建元 件庫 (Common Libraries), 兩者皆可透過 『視窗』功能表來開啟, 以下即為您說明。
法律系 系所科助之血淚辛酸史 劉蕙綺. 系上推行困難處 ( 學期初 ) 傳統習慣:法律系以教科書為主 很多老師沒有電子檔案 專、兼任老師使用平台的意願 因老師多為資深老師,因此在使用電腦部 份可能比較需要幫助 通常學生知道訊息的來源是藉由 BBS 或者 是系上的系板,使用意願會降低.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2008.
公用品.  該物品的數量不會因一人的消費而受到 影響,它可以同時地被多人享用。 角色分配  兩位同學當我的助手,負責:  其餘各人是投資者,每人擁有 $100 , 可以投資在兩種資產上。  記錄  計算  協助同學討論.
Teacher : Ing-Jer Huang TA : Chien-Hung Chen 2015/6/25 Course Embedded Systems : Principles and Implementations Weekly Preview Question CH 2.4~CH 2.6 &
函式 Function Part.2 東海大學物理系‧資訊教育 施奇廷. 遞迴( Recursion ) 函式可以「呼叫自己」,這種動作稱為 「遞迴」 此程式的執行結果相當於陷入無窮迴圈, 無法停止(只能按 Ctrl-C ) 這給我們一個暗示:函式的遞迴呼叫可以 達到部分迴圈的效果.
演算法 8-1 最大數及最小數找法 8-2 排序 8-3 二元搜尋法.
逆向選擇和市場失調. 定義  資料不對稱 在交易其中,其中一方較對方有多些資料。  逆向選擇 出現在這個情況下,就是當買賣雙方隨意在 市場上交易,與比較主動交易者作交易為佳 。
845: Gas Station Numbers ★★★ 題組: Problem Set Archive with Online Judge 題號: 845: Gas Station Numbers. 解題者:張維珊 解題日期: 2006 年 2 月 題意: 將輸入的數字,經過重新排列組合或旋轉數字,得到比原先的數字大,
第 17 章 樣板 17-1 樣板的基礎 17-1 樣板的基礎 17-2 樣板函數 17-2 樣板函數 17-3 樣板類別 17-3 樣板類別 17-4 非型態參數的樣板類別 17-4 非型態參數的樣板類別 17-5 樣板類別的繼承 17-5 樣板類別的繼承 17-6 特化樣板與靜態成員 17-6 特化樣板與靜態成員.
What is Computer.
概念性產品企劃書 呂學儒 李政翰.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2009.
5 重複迴圈 5.1 增減運算符號 增量運算符號 減量運算符號
第 6 章 迴圈結構 6-1 計數迴圈 6-1 計數迴圈 6-2 條件迴圈 6-2 條件迴圈 6-3 巢狀迴圈 6-3 巢狀迴圈 6-4 While/End While 迴圈 6-4 While/End While 迴圈 6-5 跳出迴圈 6-5 跳出迴圈 6-6 VB.NET 的錯誤處理 6-6 VB.NET.
Teacher : Ing-Jer Huang TA : Chien-Hung Chen 2015/6/30 Course Embedded Systems : Principles and Implementations Weekly Preview Question CH7.1~CH /12/26.
函式 Function 東海大學物理系‧資訊教育 施奇廷. 函式簡介 當程式越來越大、越複雜時,程式的維護、 除錯會變得更困難,此時必須引入函式來 簡化程式或將程式分段,將程式重複的部 分改寫為函式,將程式「模組化」 這種作法有下列優點:節省程式發展的時 間、邏輯容易瞭解、程式容易除錯、可分 工合作完成程式.
Visual C++重點複習.
1 Introduction to Java Programming Lecture 3 Mathematical Operators Spring 2008.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2010.
Introduction to Java Programming Lecture 16 Super and Sub Classes.
: Finding Paths in Grid ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11486: Finding Paths in Grid 解題者:李重儀 解題日期: 2008 年 10 月 14 日 題意:給一個 7 個 column.
:Problem E.Stone Game ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 10165: Problem E.Stone Game 解題者:李濟宇 解題日期: 2006 年 3 月 26 日 題意: Jack 與 Jim.
著作權所有 © 旗標出版股份有限公司 第 14 章 製作信封、標籤. 本章提要 製作單一信封 製作單一郵寄標籤.
幼兒行為觀察與記錄 第八章 事件取樣法.
1 Introduction to Java Programming Lecture 3 Mathematical Operators Spring 2009.
VHDL語法(3).
: How many 0's? ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 11038: How many 0’s? 解題者:楊鵬宇 解題日期: 2007 年 5 月 15 日 題意:寫下題目給的 m 與 n(m
McGraw-Hill/Irwin © 2003 The McGraw-Hill Companies, Inc.,All Rights Reserved. 肆 資料分析與表達.
1 柱體與錐體 1. 找出柱體與錐體的規則 2. 柱體的命名與特性 3. 柱體的展開圖 4. 錐體的命名與特性 5. 錐體的展開圖
> Polymorphism. Polymorphism - 2 多型的功能 多型提供了「介面與實作分離」的一個重 要性,能將 what (是什麼)自 how (怎麼 做)之中抽離。 多型( polymorphism )除去型別之間的耦 合關係。
Presentation transcript:

物件導向系統實務

* 複習物件導向程式設計 * 如何與使用者互動?何謂傾聽者 (Listener) * 範例程式 : 剪刀石頭布遊戲

* 宣告一類別 A ( 我們曾經將類別比喻為自訂資料型態 ) class A { …… } * 宣告一物件 x, 是一個 A 類別的物件 ( 我們曾經將物件看成是一 個變數 ) A x = new A();

* 在撰寫 Java 程式時,經常會有臨時繼承某個類別或實作某個 介面並建立實例的需求,由於這類子類別或介面實作類別只 使用一次,不需要為這些類別定義名稱,這時可以使用匿名 內部類別來解決這個需求。匿名內部類別的語法為: new 父類別 () | 介面 () { // 類別本體實作 }; * 所以, 我們可以將上一頁宣告一個 A 類別的物件 x, 寫成 x = new A() { … };

* Java 是單一繼承,也就是 class B1 {…} class B2 {…} class B3 extends B1 {…} 類別 B3 只能繼承 B1 或是 B2 其中一個,不可以同時繼承 B1 和 B2 * 抽象類別( abstract class ):只要類別中,有一個方法是抽 象方法(有方法名稱,但是無方法的內容),就必須宣告為 抽象類別 * 介面 (interface) :為了可以實踐多重繼承, Java 中用 interface 來處理,在 interface 中,所有的方法都只有名稱, 沒有方法的實作內容

* 一個抽象類別不可以宣告物件,所以,抽象類別通常是當作 父類別被別人繼承,而繼承的子類別要實作父類別中的抽象 方法。 * 可以想像一下,父類別中有一動作是吃食物 () ,在子類別中,就 要分別定義吃食物 (){……} * 而一個類別要多重繼承時,要用下列語法: class C implements interface1, interface2, interface3

* WindowListener is interface which force you to override all of the methods, while WindowAdapteris implementation of WindowListener and you only need to override the method(s) that you interest to deal with. WindowListenerWindowAdapter * WindowListener is interface which mean you cant instantiation the WindowListener, while WindowAdapter is concrete class that you can use new operator to instantiation. * When you use WindowAdapter, the code is more clean where your class only override the method(s) that you want. For example:

* WindowListener public class CloseListener implements WindowListener { // im not interest on this event, but still need to override public void windowOpened(WindowEvent e) { } // im not interest on this event, but still need to override public void windowClosing(WindowEvent e) { public void windowClosed(WindowEvent e) { System.exit(0); } // im not interest on this event, but still need to override public void windowIconified(WindowEvent e) { } // im not interest on this event, but still need to override public void windowDeiconified(WindowEvent e) { } }

* WindowAdapter While using adapter the code is cleaner: // at Jframe class addWindowListener(new CloseListener()); // reusable Close Listener public class CloseListener extends WindowAdapter public void windowClosed(WindowEvent e) { System.exit(0); } } Or addWindowListener(new WindowAdapter() public void windowClosed(WindowEvent e) { System.exit(0); } });

1. package com.example.ch03_01_scissorstonepaper; import android.app.Activity; 4. import android.os.Bundle; 5. import android.view.Menu; 6. import android.view.View; 7. import android.widget.Button; 8. import android.widget.TextView;

9. public class MainActivity extends Activity { 10. Button btnScissor, btnStone, btnPaper, btnAgain; 11. TextView txtComPlayer, txtPlayer,txtResult; 12. int comPlayer; 13. int player; 15. protected void onCreate(Bundle savedInstanceState) { 16. super.onCreate(savedInstanceState); 17. setContentView(R.layout.activity_main); 18. btnScissor = (Button)findViewById(R.id.btnScissor); 19. btnStone = (Button)findViewById(R.id.btnStone); 20. btnPaper = (Button)findViewById(R.id.btnPaper); 21. btnAgain = (Button)findViewById(R.id.btnAgain); 22. txtComPlayer = (TextView)findViewById(R.id.txtComPlayer); 23. txtPlayer = (TextView)findViewById(R.id.txtPlayer); 24. txtResult = (TextView)findViewById(R.id.txtResult); 25. btnScissor.setOnClickListener(scissorOnClickListener); 26. btnStone.setOnClickListener(stoneOnClickListener); 27. btnPaper.setOnClickListener(paperOnClickListener); 28. btnAgain.setOnClickListener(againOnClickListener); 29. }

30. Button.OnClickListener scissorOnClickListener = new Button.OnClickListener( ) 31. { public void onClick(View v) 32. { // 設定玩家的出拳 33. player = 0; 34. txtPlayer.setText(" 剪刀 "); 35. comPlayer = (int)(Math.random()*3); 36. switch(comPlayer) 37. { case 0: 38. txtComPlayer.setText(" 剪刀 "); 39. break; 40. case 1: 41. txtComPlayer.setText(" 石頭 "); 42. break; 43. case 2: 44. txtComPlayer.setText(" 布 "); 45. } 46. if(player == comPlayer) 47. txtResult.setText(" 平手 "); 48. else 49. if((player+1)%3 == comPlayer) 50. txtResult.setText(" 電腦勝 "); 51. else 52. txtResult.setText(" 玩家勝 "); 53. } 54. };

55. Button.OnClickListener stoneOnClickListener = new Button.OnClickListener() 56. { public void onClick(View v) 57. { // 設定玩家的出拳 58. player = 1; 59. txtPlayer.setText(" 石頭 "); 60. comPlayer = (int)(Math.random()*3); 61. switch(comPlayer) 62. { case 0: 63. txtComPlayer.setText(" 剪刀 "); 64. break; 65. case 1: 66. txtComPlayer.setText(" 石頭 "); 67. break; 68. case 2: 69. txtComPlayer.setText(" 布 "); 70. } 71. if(player == comPlayer) 72. txtResult.setText(" 平手 "); 73. else 74. if((player+1)%3 == comPlayer) 75. txtResult.setText(" 電腦勝 "); 76. else 77. txtResult.setText(" 玩家勝 "); 78. } 79. }

80. Button.OnClickListener paperOnClickListener = new Button.OnClickListener() 81. { public void onClick(View v) 82. { // 設定玩家的出拳 83. player = 2; 84. txtPlayer.setText(" 布 "); 85. comPlayer = (int)(Math.random()*3); 86. switch(comPlayer) 87. { case 0: 88. txtComPlayer.setText(" 剪刀 "); 89. break; 90. case 1: 91. txtComPlayer.setText(" 石頭 "); 92. break; 93. case 2: 94. txtComPlayer.setText(" 布 "); 95. } 96. if(player == comPlayer) 97. txtResult.setText(" 平手 "); 98. else 99. if((player+1)%3 == comPlayer) 100. txtResult.setText(" 電腦勝 "); 101. else 102. txtResult.setText(" 玩家勝 "); 103. } 104. };

105. Button.OnClickListener againOnClickListener = new Button.OnClickListener() 106. { public void onClick(View v) 107. { 108. txtComPlayer.setText(" 還沒有出拳 "); 109. txtPlayer.setText(" 還沒有出拳 "); 110. txtResult.setText(" 勝負未定 "); 111. } 112. }; public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present getMenuInflater().inflate(R.menu.main, menu); 119. return true; 120. } 121. }

* 三個按鈕的類別相同,是否可以用陣列?? Button [] btn = new Button[3]; * 有了陣列的好處: * 可以使用迴圈 * 可以將類似的 onClick() 方法整合為一個

// 省略套件的程式碼 1. public class MainActivity extends Activity { 2. Button btn[] = new Button[3]; 3. Button btnAgain; 4. TextView txtComPlayer, txtPlayer,txtResult; 5. int comPlayer; 6. int player; 8. protected void onCreate(Bundle savedInstanceState) { 9. super.onCreate(savedInstanceState); 10. setContentView(R.layout.activity_main); 11. btn[0] = (Button)findViewById(R.id.btnScissor); 12. btn[1] = (Button)findViewById(R.id.btnStone); 13. btn[2] = (Button)findViewById(R.id.btnPaper); 14. btnAgain = (Button)findViewById(R.id.btnAgain); 15. txtComPlayer = (TextView)findViewById(R.id.txtComPlayer); 16. txtPlayer = (TextView)findViewById(R.id.txtPlayer); 17. txtResult = (TextView)findViewById(R.id.txtResult); 18. btn[0].setOnClickListener(playerOnClickListener); 19. btn[1].setOnClickListener(playerOnClickListener); 20. btn[2].setOnClickListener(playerOnClickListener); 21. btnAgain.setOnClickListener(againOnClickListener); 22. } 你可以將這裡改成迴圈嗎?

1. Button.OnClickListener playerOnClickListener = new Button.OnClickListener() 2. { public void onClick(View v) 3. { Button b = (Button)v; 4. // 設定玩家的出拳 5. if(b.getText().toString().equals(" 剪刀 ")) 6. { player = 0; 7. txtPlayer.setText(" 剪刀 "); 8. } 9. else 10. if(b.getText().toString().equals(" 石頭 ")) 11. { player = 1; 12. txtPlayer.setText(" 石頭 "); 13. } 14. else 15. { player = 2; 16. txtPlayer.setText(" 布 "); 17. } 18.

19. comPlayer = (int)(Math.random()*3); 20. switch(comPlayer) 21. { case 0: 22. txtComPlayer.setText(" 剪刀 "); 23. break; 24. case 1: 25. txtComPlayer.setText(" 石頭 "); 26. break; 27. case 2: 28. txtComPlayer.setText(" 布 "); 29. } 30. if(player == comPlayer) 31. txtResult.setText(" 平手 "); 32. else 33. if((player+1)%3 == comPlayer) 34. txtResult.setText(" 電腦勝 "); 35. else 36. txtResult.setText(" 玩家勝 "); 37. } 38. }; 39.

5. if(b == btn[0]) 6. { player = 0; 7. txtPlayer.setText(" 剪刀 "); 8. } 9. else 10. if(b == btn[1]) 11. { player = 1; 12. txtPlayer.setText(" 石頭 "); 13. } 14. else 15. { player = 2; 16. txtPlayer.setText(" 布 "); 17. }

* 請為遊戲做一個新功能,可以計算電腦的贏率 * 請將畫面中的[再來一局]按鈕做以下功能 1. 將文字區內的文字還原到一開始的畫面 2. 將電腦的贏率歸零