測試與封裝 5.1
程式開發簡介:
【開發環境】:eclipse
【開發人員】:Ives & 鄭勝斌
【部落格地址】:38鄭勝斌
【開發時間】:2015-04-30
【版本】:5.1
【要求】:
- 封裝
- 測試
【分工】:
Ives:單元測試。介面。自定義異常。
鄭勝斌:封裝 Expression類。
封裝:
概念
1、良好的封裝能夠減少耦合。
3、可以對成員進行更精確的控制。
4、隱藏資訊,實現細節。
步驟:
1 package com.ives; 2 3 import java.awt.EventQueue; 4 5 public class frame { 6 7 private JFrame frame; 8 private JTextField textField; 9 private JTextField textField_1; 10 private JTextField textField_2; 11 private JTextField textField_3; 12 private JTextField textField_4; 13 private JTextField textField_5; 14 15 int a; 16 int b; 17 int op; 18 String Sa; 19 String Sb; 20 int result; 21 Expression expression = new Expression(); 22 private JButton btnNewButton_1; 23 24 25 /** 26 * Launch the application. 27 */ 28 public static void main(String[] args) { 29 EventQueue.invokeLater(new Runnable() { 30 public void run() { 31 try { 32 frame window = new frame(); 33 window.frame.setVisible(true); 34 } catch (Exception e) { 35 e.printStackTrace(); 36 } 37 } 38 }); 39 } 40 41 /** 42 * Create the application. 43 * @throws Yichang 44 */ 45 public frame() throws Yichang { 46 initialize(); 47 } 48 49 /** 50 * Initialize the contents of the frame. 51 */ 52 private void initialize() throws Yichang{ 53 frame = new JFrame(); 54 frame.setBounds(100, 100, 517, 352); 55 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 56 57 JPanel panel = new JPanel(); 58 frame.getContentPane().add(panel, BorderLayout.CENTER); 59 panel.setLayout(null); 60 61 JLabel lblNewLabel = new JLabel("\u56DB\u5219\u8FD0\u7B97\u56685.1"); 62 lblNewLabel.setFont(new Font("微軟雅黑", Font.PLAIN, 30)); 63 lblNewLabel.setBounds(141, 0, 208, 57); 64 panel.add(lblNewLabel); 65 66 textField = new JTextField(); 67 textField.setHorizontalAlignment(SwingConstants.CENTER); 68 textField.setFont(new Font("微軟雅黑", Font.PLAIN, 30)); 69 textField.setBounds(56, 82, 88, 45); 70 panel.add(textField); 71 textField.setColumns(10); 72 73 textField_1 = new JTextField(); 74 textField_1.setHorizontalAlignment(SwingConstants.CENTER); 75 textField_1.setFont(new Font("微軟雅黑", Font.PLAIN, 30)); 76 textField_1.setColumns(10); 77 textField_1.setBounds(220, 82, 88, 45); 78 panel.add(textField_1); 79 80 textField_2 = new JTextField("="); 81 textField_2.setEditable(false); 82 textField_2.setFont(new Font("微軟雅黑", Font.PLAIN, 30)); 83 textField_2.setColumns(10); 84 textField_2.setBounds(318, 82, 36, 45); 85 panel.add(textField_2); 86 87 textField_3 = new JTextField(); 88 textField_3.setHorizontalAlignment(SwingConstants.CENTER); 89 textField_3.setFont(new Font("微軟雅黑", Font.PLAIN, 30)); 90 textField_3.setColumns(10); 91 textField_3.setBounds(371, 82, 88, 45); 92 panel.add(textField_3); 93 94 JButton btnNewButton = new JButton("\u505A\u5B8C\u4E86"); 95 btnNewButton.setFont(new Font("微軟雅黑", Font.PLAIN, 30)); 96 btnNewButton.setBounds(188, 156, 131, 45); 97 panel.add(btnNewButton); 98 99 JLabel lblNewLabel_1 = new JLabel("\u8BA1\u7B97\u7ED3\u679C"); 100 lblNewLabel_1.setFont(new Font("微軟雅黑", Font.PLAIN, 30)); 101 lblNewLabel_1.setBounds(56, 222, 131, 35); 102 panel.add(lblNewLabel_1); 103 104 textField_4 = new JTextField(); 105 textField_4.setFont(new Font("微軟雅黑", Font.PLAIN, 20)); 106 textField_4.setColumns(10); 107 textField_4.setBounds(188, 222, 161, 35); 108 panel.add(textField_4); 109 110 textField_5 = new JTextField(); 111 textField_5.setEditable(false); 112 textField_5.setFont(new Font("微軟雅黑", Font.PLAIN, 30)); 113 textField_5.setText("+"); 114 textField_5.setColumns(10); 115 textField_5.setBounds(159, 82, 44, 45); 116 panel.add(textField_5); 117 118 a = expression.geta(); 119 Sa = String.valueOf(a); 120 textField.setText(Sa); 121 122 b = expression.getb(); 123 Sb = String.valueOf(b); 124 textField_1.setText(Sb); 125 126 btnNewButton_1 = new JButton("\u518D\u6765 "); 127 btnNewButton_1.addActionListener(new ActionListener() { 128 public void actionPerformed(ActionEvent e) { 129 130 } 131 }); 132 btnNewButton_1.setFont(new Font("微軟雅黑", Font.PLAIN, 30)); 133 btnNewButton_1.setBounds(366, 222, 107, 36); 134 panel.add(btnNewButton_1); 135 136 137 btnNewButton.addActionListener(new ActionListener() { 138 public void actionPerformed(ActionEvent arg0){ 139 int n3=Integer.valueOf(textField_3.getText().toString()); 140 result = expression.getaswer(); 141 if(textField_3.getText().equals("")) 142 { 143 String inputValue = JOptionPane.showInputDialog("Please input a value"); 144 n3 = Integer.parseInt(inputValue); 145 } 146 try { 147 if(n3<0) 148 149 throw new Yichang("不可能是負數!"); 150 } catch (Yichang e) { 151 // TODO 自動生成的 catch 塊 152 e.printStackTrace(); 153 } 154 if(result==n3) 155 { 156 textField_4.setText(" 正確"); 157 }else{ 158 textField_4.setText(" 錯誤!答案為"+result); 159 } 160 } 161 }); 162 } 163 }
1 package com.ives; 2 3 class Yichang extends Exception 4 { 5 public Yichang(String msg) 6 { 7 super(msg); 8 } 9 }
測試程式碼如下:
1 package com.ives; 2 import static org.junit.Assert.*; 3 4 import org.junit.Test; 5 6 7 public class ExpressionTest { 8 9 @Test 10 public void testExpression() { 11 int a; 12 Expression test = new Expression(); 13 a = test.getaswer(); 14 assertEquals(a, test.answer); 15 } 16 }
鄭勝斌
1 package com.ives; 2 import java.util.*; 3 4 import com.ives.Input; 5 public class Expression 6 { 7 private int a = (int)(Math.random() * Math.pow(10,2)-1); 8 private int b = (int)(Math.random() * Math.pow(10,2)-1); 9 private int op; 10 static int c;//使用者答案 11 int answer;//答案 12 static Scanner in=new Scanner(System.in); 13 14 public int geta() 15 { 16 return a; 17 } 18 19 public void seta(int a) 20 { 21 this.a = a; 22 } 23 24 public int getb() 25 { 26 return b; 27 } 28 29 public void setb(int b) 30 { 31 this.b = b; 32 } 33 34 public int getaswer() 35 { 36 return answer; 37 } 38 public Expression() 39 { 40 answer = a+b; 41 } 42 public static void main(String[] args){ 43 int answer; 44 Expression expression = new Expression(); 45 46 answer = expression.answer; 47 Input input = new Input(); 48 Expression.c = input.a; 49 /*try{ 50 Expression.c = in.nextInt(); 51 } 52 catch(InputMismatchException e) 53 { System.err.println("\n錯誤! ,請你輸入一個整數"); 54 }*/ 55 if(answer==c) 56 { 57 System.out.print("答對了"); 58 } 59 else System.out.print("答錯了"); 60 //System.out.print("answer="+answer); 61 } 62 }
執行截圖如下:
個人體會:
終於到了這個版塊了。每次寫作業報告我都特別喜歡這個版塊,能夠暢所欲言,為自己代言。哈哈,廢話不多說了,還是說點有用的吧。
Duang!
1、前幾天和鄭童鞋做宿舍裡面討論何謂封裝,何謂單元測試,要怎麼樣去做這次作業的第一個階段的。雖然討論完了都斷網了,不能玩遊戲。但是,真的有充實的感覺,沒有玩遊戲也沒關係,因為學習到了東西。而且和鄭童鞋一起討論交流感覺很愉快,沒有爭吵,不過不知道下個階段會不會爭吵,不過為了知識而爭吵,也是蠻不錯的,很期待,到時候專門更新“做漢堡”來給鄭童鞋做個好吃的漢堡好了。等著我,小斌斌。
2、知道今天,我才發現了其實我們之前討論的封裝沒有討論到它的核心思想。前面都有提到封裝的概念、作用、步驟等等,我就不多說了。我覺得封裝就是把屬性隱藏,不對外分享。外部要訪問只能通過方法。所以每個屬性都應該有一對get,set方法。就好比如你有一座房子,房子裡面的裝飾,傢俱什麼的都隨你擺放,別人不能夠懂你的任何東西,因為他們沒有鑰匙開啟你的門,但是他們可以通過視窗來看到你裡面的擺設。所以一定得留個視窗給別人,不然就會沒意義了哦。
ps: 其實封裝的概念很廣的,助教的那個Code類有爭議,有人說沒有資訊隱藏(沒有定義私有化的變數),所以嚴格不算是封裝,但是有人說它定義了對外介面(公共方法),這樣也算是封裝。嗯,不用糾結概念的。過幾天貼一篇關於“封裝”的博文出來,有興趣的小夥伴可以關注哦!
3、自定義異常類很好玩啊。哈哈。第三點我只是想表達這個!至於怎麼去定義自定義類什麼的教程,請看
4.好充實的一天,寫了一天的部落格。痛並快樂著。
5.對小斌斌說的話:下一個階段的工作可能會複雜那麼一點,但是我相信你,相信我們,相信我。我們會做得更好的,一起加油。
感覺這次的作業報告廢話好多啊。哇哈哈。Happying~~~
---------此次的作業報告到此結束,謝謝老師審閱------------
--------如果以上有什麼錯誤或者不足之處,歡迎指出。--------
PS:長期招募小夥伴一起組成一個團隊學習軟體開發(java), 可以合作開發軟體,也可以討論交流,有志同道合的小夥伴可以發站內訊息。