《Java程序设计》实验二 实验报告
實驗二 Java面向對象程序設計
實驗內容
初步掌握單元測試和TDD
理解并掌握面向對象三要素:封裝、繼承、多態
初步掌握UML建模
熟悉S.O.L.I.D原則
了解設計模式
實驗要求
1.沒有Linux基礎的同學建議先學習《Linux基礎入門(新版)》《Vim編輯器》 課程
2.完成實驗、撰寫實驗報告,實驗報告以博客方式發表在博客園,注意實驗報告重點是運行結果,遇到的問題(工具查找,安裝,使用,程序的編輯,調試,運行等)、解決辦法(空洞的方法如“查網絡”、“問同學”、“看書”等一律得0分)以及分析(從中可以得到什么啟示,有什么收獲,教訓等)。報告可以參考范飛龍老師的指導
嚴禁抄襲,有該行為者實驗成績歸零,并附加其他懲罰措施。
請大家先在實驗樓中的~/Code目錄中用自己的學號建立一個目錄,代碼和UML圖要放到這個目錄中,截圖中沒有學號的會要求重做,然后跟著下面的步驟練習。
實驗步驟
(一)單元測試
(1) 三種代碼
·偽代碼可以是中文,自己程序的架構理解
·產品代碼
·編寫MyUtilTest的測試模塊
public class MyUtilTest { public static void main(String[] args) {// 百分制成績是50時應該返回五級制的“不及格”if(MyUtil.percentage2fivegrade(50) != "不及格")System.out.println("test failed!");else System.out.println("test passed!");} }編譯結果如下:
·只有一組輸入的測試是不充分的,我們把一般情況都測試一下,代碼如下:
public class MyUtilTest {public static void main(String[] args) {//測試正常情況if(MyUtil.percentage2fivegrade(55) != "不及格")System.out.println("test failed!");else if(MyUtil.percentage2fivegrade(65) != "及格")System.out.println("test failed!");else if(MyUtil.percentage2fivegrade(75) != "中等")System.out.println("test failed!");else if(MyUtil.percentage2fivegrade(85) != "良好")System.out.println("test failed!");else if(MyUtil.percentage2fivegrade(95) != "優秀")System.out.println("test failed!");else System.out.println("test passed!");} }·代碼運行結果如下:
(2) TDD(Test Driven Devlopment, 測試驅動開發)
(1)a.先寫測試代碼,然后再寫產品代碼的開發方法叫“測試驅動開發”(TDD)。
TDD的一般步驟如下:
·明確當前要完成的功能,記錄成一個測試列表
·快速完成編寫針對此功能的測試用例
·測試代碼編譯不通過(沒產品代碼呢)
·編寫產品代碼
·測試通過
·對代碼進行重構,并保證測試通過(重構下次實驗練習)
·循環完成所有功能的開發
b.基于TDD,我們不會出現過度設計的情況,需求通過測試用例表達出來了,我們的產品代碼只要讓測試通過就可以了。 Java中有單元測試工具JUnit來輔助進行TDD, 紅叉說明代碼存在語法錯誤,原因很簡單,MyUtil類還不存在,類中的percentage2fivegrade方法也不存在,我們在TDDDemo的src目錄中新建一個MyUtil的類,并實現percentage2fivegrade方法
c.測試結果出現了一個綠條(green bar),說明測試通過了。
(2)TDD的編碼節奏是:
增加測試代碼、JUnit出現紅條、修改產品代碼、JUnit出現綠條,任務完成。
(二)面向對象三要素
(1)抽象
(2)封裝、繼承與多態
(三)設計模式初步
(1)S.O.L.I.D原則
面向對象三要素是“封裝、繼承、多態”,任何面向對象編程語言都會在語法上支持這三要素。如何借助抽象思維用好三要素特別是多態還是非常困難的,S.O.L.I.D類設計原則是一個很好的指導:
SRP(Single Responsibility Principle,單一職責原則)
OCP(Open-Closed Principle,開放-封閉原則)
LSP(Liskov Substitusion Principle,Liskov替換原則)
ISP(Interface Segregation Principle,接口分離原則)
DIP(Dependency Inversion Principle,依賴倒置原則)
·范例代碼如下
public abstract class Animal {private String color;public String getColor() {return color;}public void setColor(String color) {this.color = color;}public abstract String shout(); } public class Dog extends Animal{public String shout(){return "汪汪";}public String toString(){return "The Dog's color is " + this.getColor() +", and it shouts "+ this.shout() + "!";} } public class Cat extends Animal{public String shout(){return "喵喵";}public String toString(){return "The Cat's color is " + this.getColor() +", and it shouts "+ this.shout() + "!";} }(四)練習
練習內容:
寫一個類測試編寫的復數類的方法
構造函數,將實部,虛部都置為0
構造函數,創建復數對象的同時完成復數的實部,虛部的初始化
設置實部,設置虛部:復數相加、復數相減、復數相乘
產品代碼:
public class Complex {
protected int a;protected int b;public Complex(int a, int b) {this.a = a;this.b = b; }public String toString() {return this.a + " + " + this.b + "i"; }public static Complex addition(Complex complex1, Complex complex2) {int a = complex1.a + complex2.a;int b = complex1.b + complex2.b;return new Complex(a, b); }public static Complex subtract(Complex complex1, Complex complex2) {int a = complex1.a - complex2.a;int b = complex1.b - complex2.b;return new Complex(a, b); }public static Complex multiplication(Complex complex1, Complex complex2) {int a = complex1.a * complex2.a - complex1.b * complex2.b;int b = complex1.b * complex2.a + complex1.a * complex2.b;return new Complex(a, b); }}
import java.util.Scanner;
public class ComplexMain {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("請輸入兩個復數的實部和虛部:(a+bi、c+di)");
System.out.printf("a =");
int a=scanner.nextInt();
System.out.printf("b =");
int b=scanner.nextInt();
System.out.printf("c =");
int c=scanner.nextInt();
System.out.printf("d =");
int d=scanner.nextInt();
Complex fushu1=new Complex(a,b);
Complex fushu2=new Complex(c,d);
while(true) {
System.out.println("請輸入需要進行的運算:1、ADD 2、SUBTRACT 3、MULTIPLY ");
int choice = scanner.nextInt();
switch (choice) {
case 1:
System.out.println(Complex.addition(fushu1, fushu2));
break;
case 2:
System.out.println(Complex.subtract(fushu1, fushu2));
break;
case 3:
System.out.println(Complex.multiplication(fushu1, fushu2));
break;
}
```
PSP(Personal Software Process)
| 需求分析 | 2 mins | 10% |
| 設計 | 4 mins | 20% |
| 代碼實現 | 8 mins | 40% |
| 測試 | 6 mins | 30% |
| 分析總結 | 10 mins | 50% |
轉載于:https://www.cnblogs.com/20145224kevs/p/5392292.html
總結
以上是生活随笔為你收集整理的《Java程序设计》实验二 实验报告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js事件的相关收集
- 下一篇: 芋泥麻薯小丸子做五十份要多少的材料?