java程序面向对象show,20165309 实验二 Java面向对象程序设计
2017-2018-2 20165309實(shí)驗(yàn)二《Java面向?qū)ο蟪绦蛟O(shè)計(jì)》實(shí)驗(yàn)報(bào)告
一、實(shí)驗(yàn)內(nèi)容
1. 初步掌握單元測(cè)試和TDD
2. 理解并掌握面向?qū)ο笕?#xff1a;封裝、繼承、多態(tài)
3. 初步掌握UML建模
4. 熟悉S.O.L.I.D原則
5. 了解設(shè)計(jì)模式
二、實(shí)驗(yàn)步驟
(一)單元測(cè)試
1.三種代碼:偽代碼、測(cè)試代碼、產(chǎn)品代碼
需求:在一個(gè)MyUtil類中解決一個(gè)百分制成績(jī)轉(zhuǎn)成“優(yōu)、良、中、及格、不及格”五級(jí)制成績(jī)的功能。
先用自然語(yǔ)言寫出從意圖層面來(lái)解決問(wèn)題的偽代碼:
百分制轉(zhuǎn)五分制:
如果成績(jī)小于60,轉(zhuǎn)成“不及格”
如果成績(jī)?cè)?0與70之間,轉(zhuǎn)成“及格”
如果成績(jī)?cè)?0與80之間,轉(zhuǎn)成“中等”
如果成績(jī)?cè)?0與90之間,轉(zhuǎn)成“良好”
如果成績(jī)?cè)?0與100之間,轉(zhuǎn)成“優(yōu)秀”
其他,轉(zhuǎn)成“錯(cuò)誤”
然后用Java語(yǔ)言將偽代碼“翻譯”成產(chǎn)品代碼MyUtil.java。
寫測(cè)試代碼MyUtilTest.java來(lái)檢驗(yàn)產(chǎn)品代碼:
JUnit測(cè)試用例:
正常情況
錯(cuò)誤情況(負(fù)數(shù),超過(guò)100的數(shù))
邊界情況(0,60,70,80,90,100)
在項(xiàng)目上右鍵選擇New->Directory建目錄test,右鍵單擊test目錄,在彈出的菜單中選擇Mark Directory as->Test Sources Root來(lái)設(shè)置SOURCEPATH環(huán)境變量。
測(cè)試通過(guò)的截圖如下:
完善產(chǎn)品代碼。
測(cè)試代碼和最終的產(chǎn)品代碼在代碼鏈接里。
2.測(cè)試驅(qū)動(dòng)開發(fā)TDD(測(cè)試代碼->產(chǎn)品代碼)
在新目錄下創(chuàng)建StringBufferDemo類, 鼠標(biāo)單擊類名旁出現(xiàn)的燈泡狀圖標(biāo),在彈出的菜單中Create Test。
測(cè)試StringBufferDemo類的方法charAt()、capacity()、indexOf()、length():
char charAt(int index)返回此序列中指定索引處的 char 值。
int capacity()返回當(dāng)前容量。
int indexOf(String str)返回第一次出現(xiàn)的指定子字符串在該字符串中的索引。
int length()返回長(zhǎng)度(字符數(shù))。
測(cè)試結(jié)果如下:
(二)對(duì)設(shè)計(jì)模式示例進(jìn)行擴(kuò)充,讓其支持Long類
如果要求支持Long類,Document類要修改構(gòu)造方法,這違反了OCP原則。封裝、繼承、多態(tài)解決不了問(wèn)題,這時(shí)就需要設(shè)計(jì)模式了:
class Long extends Data
class LongFactory extends Factory
在MyDoc類中添加測(cè)試代碼: public class MyDoc {
static Document d;
public static void main(String[] args) {
d = new Document(new LongFactory());
d.DisplayData();
}
}
運(yùn)行結(jié)果如下:
代碼在碼云鏈接里。
(三)以TDD的方式開發(fā)一個(gè)復(fù)數(shù)類Complex
偽代碼: Complex類要輸出實(shí)部、虛部,并按照a+bi的形式輸出復(fù)數(shù)。
Complex類中有兩個(gè)變量,實(shí)部A和虛部B。
方法:
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ù)相除
toString(int a,int b);將復(fù)數(shù)輸出成a+bi的格式。
測(cè)試結(jié)果:
產(chǎn)品代碼和測(cè)試代碼在碼云鏈接。
(四)面向?qū)ο笕?/p>
抽象
封裝、繼承與多態(tài)
使用UML對(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 Cat extends Animal {
public String shout() {
return "喵喵";
}
public String toString() {
return "The Cat's color is " + this.getColor() +", and it shouts "+ this.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() + "!";
}
}
UML圖(由網(wǎng)頁(yè)P(yáng)rocessOn制作)
三、實(shí)驗(yàn)中遇到的問(wèn)題及解決
問(wèn)題1:當(dāng)時(shí)安裝IDEA的時(shí)候選擇的都是默認(rèn)路徑,而且也不算是經(jīng)常用,所以沒有找到Junit jar 包。
解決1:右鍵桌面上的IntelliJ IDEA Ultimate,點(diǎn)進(jìn)屬性里面,復(fù)制地址再粘到“+”就方便找到了~
問(wèn)題2:對(duì)StringBuffer的了解不夠。
解決2:可以參考學(xué)習(xí)這個(gè)網(wǎng)址:www.runoob.com/java/java-stringbuffer.html。
解決3:long型的范圍是-2147483648~2147483647
問(wèn)題4:在設(shè)計(jì)實(shí)現(xiàn)復(fù)數(shù)類時(shí)不知道怎么去拼接字符串。
解決4:嘗試concat()方法后仍存在問(wèn)題,突然又意識(shí)到可以直接+....
四、實(shí)驗(yàn)收獲
這次的實(shí)驗(yàn)讓我學(xué)會(huì)了如何去寫測(cè)試代碼,也讓我規(guī)范了編寫代碼的習(xí)慣。跟著老師的博客教程和藍(lán)墨云上的要求去做的同時(shí),我也意識(shí)到了自己對(duì)一些基礎(chǔ)方面的知識(shí)還不夠熟悉...得認(rèn)真看書才是。
步驟
耗時(shí)
百分比
需求分析
15min
12.5
設(shè)計(jì)
20min
16.7
代碼實(shí)現(xiàn)
40min
33.3
測(cè)試
25min
20.8
分析總結(jié)
20min
16.7
總結(jié)
以上是生活随笔為你收集整理的java程序面向对象show,20165309 实验二 Java面向对象程序设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python中加减乘除是什么数据类型_p
- 下一篇: java美元兑换,(Java实现) 美元