20175212童皓桢 Java实验二-面向对象程序设计实验报告
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è)試類:
之后在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
- 按照老師給出的程序輸入
- 將方法進(jìn)行重寫,添加返回值,以便于測(cè)試
利用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)
- 設(shè)計(jì)模式有四個(gè)基本要素:
- 其他面對(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,要求如下:
本道練習(xí)題基本考察TDD編碼的節(jié)奏。因?yàn)楸绢}中實(shí)部虛部很容易混淆,導(dǎo)致出錯(cuò)
因此根據(jù)測(cè)試代碼來修改產(chǎn)品代碼的優(yōu)越性得以體現(xiàn)。
- 產(chǎn)品代碼:
- 測(cè)試代碼
- 運(yùn)行結(jié)果截圖
(八)對(duì)實(shí)驗(yàn)二中的代碼進(jìn)行建模
- 代碼如下:
- 創(chuàng)建的UML類圖
實(shí)驗(yàn)中遇到的問題
- 問題一:包名Junit提示錯(cuò)誤
- 解決辦法一:參考同學(xué)的博客,摸索出方法,具體如下:
另外的,如果當(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BeanUtils.copyProper
- 下一篇: Java相关面试题总结+答案(一)