日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

20175212童皓桢 Java实验二-面向对象程序设计实验报告

發(fā)布時(shí)間:2024/4/17 java 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 20175212童皓桢 Java实验二-面向对象程序设计实验报告 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

20175212童皓楨 Java實(shí)驗(yàn)二-面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)驗(yàn)報(bào)告

實(shí)驗(yàn)內(nèi)容

  • 初步掌握單元測(cè)試和TDD
  • 理解并掌握面向?qū)ο笕?#xff1a;封裝、繼承、多態(tài)
  • 初步掌握UML建模
  • 熟悉S.O.L.I.D原則
  • 了解設(shè)計(jì)模式

    實(shí)驗(yàn)步驟

    (一)單元測(cè)試

  • 在IDEA中建一個(gè)項(xiàng)目MyUtil
  • 對(duì)于MyUtil類,建立一個(gè)MyUtilTest1.java的測(cè)試類:
新建一個(gè)test文件夾在根目錄中->右鍵選擇Mark Directory as->Test Sources Root


之后在test文件夾中建立一個(gè)MyUtilTest1.java的測(cè)試類

  • 在文件中輸入如圖代碼并運(yùn)行,測(cè)試結(jié)果如下:

正常情況

邊界情況

異常情況

(二)TDD(Test Driven Devlopment, 測(cè)試驅(qū)動(dòng)開發(fā))

  • 按照教程安裝Juit和JUnitGenerator V2.0
  • 點(diǎn)擊源代碼中的類名MyUtil,選擇Junit3測(cè)試用例,建立一個(gè)MyUtilTest測(cè)試文件

  • 若TestCase是紅色,則引入junit.jar包

  • 輸入如圖測(cè)試代碼并運(yùn)行,如果測(cè)試失敗則出現(xiàn)如圖提示

  • 根提示據(jù)修改源代碼,注意邊界異常情況,修改完善后測(cè)試通過

(三)以TDD方式研究學(xué)習(xí)StringBuffer

  • 按照老師給出的程序輸入
public static void main(String [] args){StringBuffer buffer = new StringBuffer();buffer.append('S');buffer.append("tringBuffer");System.out.println(buffer.charAt(1));System.out.println(buffer.capacity());System.out.println(buffer.length());System.out.println(buffer.indexOf("tring"));System.out.println("buffer = " + buffer.toString());
  • 將方法進(jìn)行重寫,添加返回值,以便于測(cè)試
public class StringBufferDemo{StringBuffer buffer = new StringBuffer();public StringBufferDemo(StringBuffer buffer){this.buffer = buffer;}public Character charAt(int i){return buffer.charAt(i);}public int capacity(){return buffer.capacity();}public int length(){return buffer.length();}public int indexOf(String buf) {return buffer.indexOf(buf);} }
  • 利用API查出并猜測(cè)charAt(int i),indexOf(String s),capacity(),length()四種方法的功能。


  • 利用JUnit進(jìn)行測(cè)試,并輸入如圖測(cè)試代碼,test passed!

(五)設(shè)計(jì)模式初步

  • S.O.L.I.D原則
    • SRP(Single Responsibility Principle,單一職責(zé)原則):決不要有一個(gè)以上的理由修改一個(gè)類
    • OCP(Open-Closed Principle,開放-封閉原則):軟件實(shí)體(類,模塊,函數(shù)等)應(yīng)該對(duì)擴(kuò)充開放,對(duì)修改封閉。
    • LSP(Liskov Substitusion Principle,Liskov替換原則)
      • 子類必須可以被其基類所代
      • 使用指向基類的指針或引用的函數(shù),必須能夠在不知道具體派生類對(duì)象類型的情況下使用它
    • ISP(Interface Segregation Principle,接口分離原則):客戶不應(yīng)該依賴他們并未使用的接口
    • DIP(Dependency Inversion Principle,依賴倒置原則)
      • 高層模塊不應(yīng)該依賴于低層模塊。二者都應(yīng)該依賴于抽象
      • 抽象不應(yīng)該依賴于細(xì)節(jié)。細(xì)節(jié)應(yīng)該依賴于抽象
  • 模式與設(shè)計(jì)模式
    • 設(shè)計(jì)模式有四個(gè)基本要素:
      • Pattern name:描述模式,便于交流,存檔
      • Problem:描述何處應(yīng)用該模式
      • Solution:描述一個(gè)設(shè)計(jì)的組成元素,不針對(duì)特例
      • Consequence:應(yīng)用該模式的結(jié)果和權(quán)衡(trade-offs)
  • 其他面對(duì)對(duì)象原則
    • "組合替代繼承":這是說相對(duì)于繼承,要更傾向于使用組合;
    • "笛米特法則":這是說"你的類對(duì)其它類知道的越少越好";
    • "共同封閉原則":這是說"相關(guān)類應(yīng)該打包在一起";
    • "穩(wěn)定抽象原則":這是說"類越穩(wěn)定,越應(yīng)該由抽象類組成";

(六)對(duì)MyDoc類進(jìn)行擴(kuò)充,讓其支持Byte類,初步理解設(shè)計(jì)模式

題目 :對(duì)設(shè)計(jì)模式示例進(jìn)行擴(kuò)充,體會(huì)OCP原則和DIP原則的應(yīng)用,初步理解設(shè)計(jì)模式,讓系統(tǒng)支持Byte類,并在MyDoc類中添加測(cè)試代碼表明添加正確,提交測(cè)試代碼和運(yùn)行結(jié)的截圖,加上學(xué)號(hào)水印

// Server Classes abstract class Data {abstract public void DisplayValue(); } class Integer extends Data {int value;Integer() {value=100;}public void DisplayValue(){System.out.println (value);} } class Byte extends Data {byte value;Byte(){value=127;}public void DisplayValue(){System.out.println(value);} } abstract class Factory {abstract public Data CreateDataObject(); } class IntFactory extends Factory {public Data CreateDataObject(){return new Integer();} } class ByteFactory extends Factory {public Data CreateDataObject(){return new Byte();} } class Document {Data pd;Document(Factory pf){pd = pf.CreateDataObject();}public void DisplayData(){pd.DisplayValue();} } public class MyDoc {static Document d;static Document e;public static void main(String[] args) {e=new Document(new ByteFactory());e.DisplayData();} }
  • 運(yùn)行結(jié)果:

(七)以TDD的方式開發(fā)一個(gè)復(fù)數(shù)類Complex

  • 任務(wù):以TDD的方式開發(fā)一個(gè)復(fù)數(shù)類Complex,要求如下:
// 定義屬性并生成getter,setter double RealPart; double ImagePart; // 定義構(gòu)造函數(shù) public Complex() public Complex(double R,double I)//Override Object public boolean equals(Object obj) public String toString()// 定義公有方法:加減乘除 Complex ComplexAdd(Complex a) Complex ComplexSub(Complex a) Complex ComplexMulti(Complex a) Complex ComplexDiv(Complex a)

本道練習(xí)題基本考察TDD編碼的節(jié)奏。因?yàn)楸绢}中實(shí)部虛部很容易混淆,導(dǎo)致出錯(cuò)


因此根據(jù)測(cè)試代碼來修改產(chǎn)品代碼的優(yōu)越性得以體現(xiàn)。

  • 產(chǎn)品代碼:
public class Complex{private double a;private double b;public Complex(double a, double b) {this.a = a;this.b = b;}public static double getRealPart(double a) {return a;}public static double getImagePart(double b) {return b;}public Complex ComplexAdd(Complex c) {return new Complex(a + c.a, b + c.b);}public Complex ComplexSub(Complex c) {return new Complex(a - c.a, b - c.b);}public Complex ComplexMulti(Complex c) {return new Complex(a * c.a - b * c.b, a * c.b + b * c.a);}public Complex ComplexDiv(Complex c) {return new Complex((a * c.b + b * c.a)/(c.b * c.b + c.a * c.a), (b * c.b + a * c.a)/(c.b * c.b + c.a * c.a));}public String toString() {String s = " ";if (b > 0)s = a + "+" + b + "i";if (b == 0)s = a + "";if (b < 0)s = a + " " + b + "i";return s;} }
  • 測(cè)試代碼
import junit.framework.TestCase; import org.junit.Test;public class ComplexTest extends TestCase {Complex c1 = new Complex(0, 2);Complex c2 = new Complex(-1, -1);Complex c3 = new Complex(1,1);@Testpublic void testgetRealPart() throws Exception {assertEquals(-3.0, Complex.getRealPart(-3.0));assertEquals(3.0, Complex.getRealPart(3.0));assertEquals(0.0, Complex.getRealPart(0.0));}@Testpublic void testgetImagePart() throws Exception {assertEquals(-3.0, Complex.getImagePart(-3.0));assertEquals(3.0, Complex.getImagePart(3.0));assertEquals(0.0, Complex.getImagePart(0.0));}@Testpublic void testComplexAdd() throws Exception {assertEquals("-1.0+1.0i", c1.ComplexAdd(c2).toString());assertEquals("1.0+3.0i", c1.ComplexAdd(c3).toString());assertEquals("0.0", c2.ComplexAdd(c3).toString());}@Testpublic void testComplexSub() throws Exception {assertEquals("1.0+3.0i", c1.ComplexSub(c2).toString());assertEquals("-1.0+1.0i", c1.ComplexSub(c3).toString());assertEquals("-2.0 -2.0i", c2.ComplexSub(c3).toString());}@Testpublic void testComplexMulti() throws Exception {assertEquals("2.0 -2.0i", c1.ComplexMulti(c2).toString());assertEquals("-2.0+2.0i", c1.ComplexMulti(c3).toString());assertEquals("0.0 -2.0i", c2.ComplexMulti(c3).toString());}@Testpublic void testComplexComplexDiv() throws Exception {assertEquals("-1.0 -1.0i", c1.ComplexDiv(c2).toString());assertEquals("1.0+1.0i", c1.ComplexDiv(c3).toString());assertEquals("-1.0 -1.0i", c2.ComplexDiv(c3).toString());}}
  • 運(yùn)行結(jié)果截圖

(八)對(duì)實(shí)驗(yàn)二中的代碼進(jìn)行建模

  • 代碼如下:
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() + "!";} }
  • 創(chuàng)建的UML類圖

實(shí)驗(yàn)中遇到的問題

  • 問題一:包名Junit提示錯(cuò)誤
  • 解決辦法一:參考同學(xué)的博客,摸索出方法,具體如下:
File -> Project Struct... -> Libraies -> 點(diǎn)擊加號(hào) -> Java -> 選擇IDEA目錄下的Lib中的junit-4.12 ->選擇ok

另外的,如果當(dāng)時(shí)安裝是通過Toolbox,IDEA的安裝目錄則很有可能被隱藏,因此需搜索junit-4.12找到具體路徑后,在管理員權(quán)限下解除隱藏才能選擇。

  • 問題二:單元測(cè)試時(shí)提示找不到main方法。

  • 解決辦法二: 嘗試修改測(cè)試類名與JUnit測(cè)試類名不同,即可解決。

感悟和體會(huì)

  • 利用API可以查詢并學(xué)習(xí)使用一些功能強(qiáng)大的類和方法。
  • 并跟隨TDD方法的節(jié)奏設(shè)計(jì)出偽代碼、產(chǎn)品代碼和測(cè)試代碼,有利于自己的程序除了正確性,在更高層面不容易出錯(cuò)
  • 之后可以考慮更加改善測(cè)試單元的寫法,比如測(cè)試?yán)佑捎?jì)算機(jī)窮舉生成。

參考博客

https://www.cnblogs.com/Vivian517/p/6741501.html#YI

轉(zhuǎn)載于:https://www.cnblogs.com/thz666/p/10717261.html

總結(jié)

以上是生活随笔為你收集整理的20175212童皓桢 Java实验二-面向对象程序设计实验报告的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。