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

歡迎訪問 生活随笔!

生活随笔

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

java

实验二《Java面向对象程序设计》实验报告

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

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

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

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

    (一)單元測(cè)試

    1.三種代碼:偽代碼、測(cè)試代碼、產(chǎn)品代碼
    需求:在一個(gè)MyUtil類中解決一個(gè)百分制成績轉(zhuǎn)成“優(yōu)、良、中、及格、不及格”五級(jí)制成績的功能。
    偽代碼:
  • 百分制轉(zhuǎn)五分制: 如果成績小于60,轉(zhuǎn)成“不及格” 如果成績?cè)?0與70之間,轉(zhuǎn)成“及格” 如果成績?cè)?0與80之間,轉(zhuǎn)成“中等” 如果成績?cè)?0與90之間,轉(zhuǎn)成“良好” 如果成績?cè)?0與100之間,轉(zhuǎn)成“優(yōu)秀” 其他,轉(zhuǎn)成“錯(cuò)誤”

    之后用java語言編程MyUtil.java

    public class MyUtil{public static String percentage2fivegrade(int grade){//如果成績小于60,轉(zhuǎn)成“不及格”if (grade<0)return "錯(cuò)誤";else if (grade < 60)return "不及格";//如果成績?cè)?0與70之間,轉(zhuǎn)成“及格”else if (grade < 70)return "及格";//如果成績?cè)?0與80之間,轉(zhuǎn)成“中等”else if (grade < 80)return "中等";//如果成績?cè)?0與90之間,轉(zhuǎn)成“良好”else if (grade < 90)return "良好";//如果成績?cè)?0與100之間,轉(zhuǎn)成“優(yōu)秀”else if (grade <=100)return "優(yōu)秀";//其他,轉(zhuǎn)成“錯(cuò)誤”elsereturn "錯(cuò)誤";} }

    再寫一個(gè)測(cè)試代碼MyUtilTest.java來檢驗(yàn)產(chǎn)品代碼
    測(cè)試三種情況
    1.正常情況
    2.錯(cuò)誤情況(負(fù)數(shù),超過100的數(shù))
    3.邊界情況(0,60,70,80,90,100)
    測(cè)試代碼:

    import junit.framework.TestCase; import org.junit.Test;public class MyUtilTest extends TestCase {@Testpublic void testNormal() {assertEquals("不及格", MyUtil.percentage2fivegrade(55));assertEquals("及格", MyUtil.percentage2fivegrade(65));assertEquals("中等", MyUtil.percentage2fivegrade(75));assertEquals("良好", MyUtil.percentage2fivegrade(85));assertEquals("優(yōu)秀", MyUtil.percentage2fivegrade(95));}@Testpublic void testExceptions(){assertEquals("錯(cuò)誤", MyUtil.percentage2fivegrade(105));assertEquals("錯(cuò)誤", MyUtil.percentage2fivegrade(-55));}@Testpublic void testBoundary(){assertEquals("不及格", MyUtil.percentage2fivegrade(0));assertEquals("及格", MyUtil.percentage2fivegrade(60));assertEquals("中等", MyUtil.percentage2fivegrade(70));assertEquals("良好", MyUtil.percentage2fivegrade(80));assertEquals("優(yōu)秀", MyUtil.percentage2fivegrade(90));assertEquals("優(yōu)秀", MyUtil.percentage2fivegrade(100));} }

    測(cè)試通過截圖

    2.測(cè)試驅(qū)動(dòng)開發(fā)TDD(測(cè)試代碼->產(chǎn)品代碼)
    測(cè)試StringBufferDemo類的方法有charAt()、capacity()、indexOf()、length():
    char charAt(int index)返回此序列中指定索引處的 char 值。
    int capacity()返回當(dāng)前容量。
    int indexOf(String str)返回第一次出現(xiàn)的指定子字符串在該字符串中的索引。
    int length()返回長度(字符數(shù))。
    代碼:

    public class StringBufferDemo {public static void main(String [] args){StringBuffer buffer = new StringBuffer(20);buffer.append('S');buffer.append("tringBuffer");System.out.println(buffer.charAt(1));System.out.println(buffer.capacity());System.out.println(buffer.indexOf("tring12345"));System.out.println("buffer = " + buffer.toString());System.out.println(buffer.length());} }

    測(cè)試代碼:

    import junit.framework.TestCase; import org.junit.Test;public class StringBufferDemoTest extends TestCase {StringBuffer a = new StringBuffer("StringBuffer");StringBuffer b = new StringBuffer("StringBufferStringBuffer");StringBuffer c = new StringBuffer("StringBufferStringBufferStringBuffer");@Testpublic void testcharAt() throws Exception{assertEquals('S',a.charAt(0));assertEquals('n',a.charAt(4));assertEquals('u',a.charAt(7));}public void testcapacity() throws Exception{assertEquals(28,a.capacity());assertEquals(40,b.capacity());assertEquals(52,c.capacity());}public void testlength() throws Exception{assertEquals(12,a.length());assertEquals(24,b.length());assertEquals(36,c.length());}public void testindexOf() throws Exception{assertEquals(0,a.indexOf("Str"));assertEquals(5,a.indexOf("gBu"));assertEquals(6,b.indexOf("Buf"));assertEquals(7,b.indexOf("uff"));assertEquals(9,c.indexOf("fer"));assertEquals(10,c.indexOf("erS"));} }

    測(cè)試通過截圖:

    (二)對(duì)設(shè)計(jì)模式示例進(jìn)行擴(kuò)充,讓其支持Long類

    要求支持Long類,這樣需Document類修改構(gòu)造方法,這違背了OCP原則,。封裝、繼承、多態(tài)解決不了問題,需要添加:
    class Long extends Data
    class LongFactory extends Factory
    代碼:

    abstract class Data {abstract public void DisplayValue(); } class Integer extends Data {int value;Integer() {value=100;}public void DisplayValue(){System.out.println (value);} } class Long extends Data {long value;Long(){value=2017530999;}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 LonFactory extends Factory {public Data CreateDataObject(){return new Long();} } class Document {Data pd;Document(Factory pf){pd = pf.CreateDataObject();}public void DisplayData(){pd.DisplayValue();} } public class MyDoc {static Document e;public static void main(String[] args) {e=new Document(new LonFactory());e.DisplayData();} }

    運(yùn)行通過截圖

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

    方法:

    getA(int a);返回實(shí)部 getB(int b);返回虛部 ComplexAdd(Complex c);實(shí)現(xiàn)復(fù)數(shù)相加 ComplexMinus(Complex c);實(shí)現(xiàn)復(fù)數(shù)相減 ComplexMulti(Complex c);實(shí)現(xiàn)復(fù)數(shù)相乘 ComplexDiv(Complex c);實(shí)現(xiàn)復(fù)數(shù)相除

    代碼:

    public class Complex { //a + biprivate double a;private double b;public Complex(){ //構(gòu)造方法,置0this.a = 0;this.b = 0;}public Complex(double a, double b) { //構(gòu)造方法,初始化一個(gè)復(fù)數(shù)this.a = a;this.b = b;}public double getA(){ //獲取實(shí)部return this.a;}public double getB(){ //獲取虛部return this.b;}public double setA(double a){ //設(shè)置實(shí)部this.a = a;return a;}public double setB(double b){ //設(shè)置虛部this.b = b;return b;}Complex ComplexAdd(Complex c){//復(fù)數(shù)相加double a = c.getA();double b = c.getB();double newA = a + this.a;double newB = b + this.b;Complex Result = new Complex(newA,newB);return Result;}Complex ComplexMinus(Complex c){//復(fù)數(shù)相減double a = c.getA();double b = c.getB();double newA = a - this.a;double newB = b - this.b;Complex Result = new Complex(newA,newB);return Result;}Complex ComplexMulti(Complex c){//復(fù)數(shù)相乘double a = c.getA();double b = c.getB();double newA = a * this.a;double newB = b * this.b;Complex Result = new Complex(newA,newB);return Result;}Complex ComplexDiv(Complex c){//復(fù)數(shù)相乘double a = c.getA();double b = c.getB();double newA = a / this.a;double newB = b / this.b;Complex Result = new Complex(newA,newB);return Result;}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; import static org.junit.Assert.*;public class ComplexTest extends TestCase {Complex c1 = new Complex(0, 3);Complex c2 = new Complex(-1, -1);Complex c3 = new Complex(2,1);@Testpublic void testgetRealPart() throws Exception {assertEquals(-1.0, new Complex().setA(-1.0));assertEquals(5.0, new Complex().setA(5.0));assertEquals(0.0, new Complex().setA(0.0));}@Testpublic void testgetImagePart() throws Exception {assertEquals(-1.0, new Complex().setB(-1.0));assertEquals(5.0, new Complex().setB(5.0));assertEquals(0.0, new Complex().setB(0.0));}@Testpublic void testComplexAdd() throws Exception {assertEquals("-1.0+2.0i", c1.ComplexAdd(c2).toString());assertEquals("2.0+4.0i", c1.ComplexAdd(c3).toString());assertEquals("1.0", c2.ComplexAdd(c3).toString());}@Testpublic void testComplexSub() throws Exception {assertEquals("-1.0 -4.0i", c1.ComplexMinus(c2).toString());assertEquals("2.0 -2.0i", c1.ComplexMinus(c3).toString());assertEquals("3.0+2.0i", c2.ComplexMinus(c3).toString());}@Testpublic void testComplexMulti() throws Exception {assertEquals("-0.0 -3.0i", c1.ComplexMulti(c2).toString());assertEquals("0.0+3.0i", c1.ComplexMulti(c3).toString());assertEquals("-2.0 -1.0i", c2.ComplexMulti(c3).toString());}@Testpublic void testComplexComplexDiv() throws Exception {assertEquals("-0.0 -3.0i", c2.ComplexDiv(c1).toString());assertEquals("-0.0 -3.0i", c2.ComplexDiv(c1).toString());assertEquals("-2.0 -1.0i", c2.ComplexDiv(c3).toString());} }

    測(cè)試截圖

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

    1.Junit的包安裝上之后無法使用。
    解決辦法:最開始只裝了一個(gè)junit.jar的包,沒有裝另外一個(gè)junit-4.12.jar的包導(dǎo)致無法使用

    2.UML軟件不會(huì)使用
    解決辦法:參考教程:https://blog.csdn.net/luansha0/article/details/82260678

    PSP

    步驟耗時(shí)百分比
    需求分析30min10%
    設(shè)計(jì)30min10%
    代碼實(shí)現(xiàn)110min36.7%
    測(cè)試70min23.3%
    分析總結(jié)60min20%

    感悟

    不知道怎么回事,老師的博客圖片不能顯示,對(duì)我做實(shí)驗(yàn)造成了極大的困擾,后來參照著20175306王佳爍、20175313張黎仙同學(xué)的博客上面的步驟才得以完成,再此謝謝二位前輩!
    參考博客
    20175306王佳爍:https://www.cnblogs.com/wjs123456/p/10700936.html
    20175313張黎仙:https://www.cnblogs.com/xiannvyeye/p/10720425.html

    轉(zhuǎn)載于:https://www.cnblogs.com/20175309lyh/p/10733744.html

    總結(jié)

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

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