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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

20175333曹雅坤 实验二 Java面向对象程序设计

發布時間:2025/3/20 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 20175333曹雅坤 实验二 Java面向对象程序设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實驗二 Java面向對象程序設計

實驗內容

1. 初步掌握單元測試和TDD

2. 理解并掌握面向對象三要素:封裝、繼承、多態

3. 初步掌握UML建模

4. 熟悉S.O.L.I.D原則

5. 了解設計模式

根據實驗提交的規則,把實驗為五個部分

面向對象程序設計-1

單元測試
1.在 IDEA中我們把產品代碼放在src目錄中,把測試代碼放在test目錄中,右鍵單擊項目,在彈出的菜單中選擇New->Directory新建一個目錄:test。
2.再右鍵點擊設置環境變量,選擇Mark Directory->Test Sources Root。
3.根據實驗內容代碼進行測試,分別對“正常情況”、“邊界情況”、“異常情況”進行檢驗 。


面向對象程序設計-2

2.TDD(Test Driven Devlopment, 測試驅動開發)
1.這種先寫測試代碼,然后再寫產品代碼的開發方法叫“測試驅動開發”(TDD)。
2.TDD的一般步驟如下:
明確當前要完成的功能,記錄成一個測試列表
快速完成編寫針對此功能的測試用例
測試代碼編譯不通過(沒產品代碼呢)
編寫產品代碼
測試通過


面向對象程序設計-3

對設計模式示例進行擴充,體會OCP原則和DIP原則的應用,初步理解設計模式
用自己的學號%6進行取余運算,根據結果進行代碼擴充:
3:讓系統支持Long類,并在MyDoc類中添加測試代碼表明添加正確.

  • 設計模式初步
    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,依賴倒置原則) 高層模塊不應該依賴于低層模塊。二者都應該依賴于抽象,抽象不應該依賴于細節,細節應該依賴于抽象.
    模式與設計模式
    設計模式有四個基本要素:
    Pattern name:描述模式,便于交流,存檔
    Problem:描述何處應用該模式
    Solution:描述一個設計的組成元素,不針對特例
    Consequence:應用該模式的結果和權衡(trade-offs)
    其他面對對象原則
    "組合替代繼承":這是說相對于繼承,要更傾向于使用組合;
    "笛米特法則":這是說"你的類對其它類知道的越少越好";
    "共同封閉原則":這是說"相關類應該打包在一起";
    "穩定抽象原則":這是說"類越穩定,越應該由抽象類組成";
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=1234567890;}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 LongFactory extends Factory {public Data CreateDataObject(){return new Long();} } class Document {Data pd;Document(Factory pf){pd = pf.CreateDataObject();}public void DisplayData(){pd.DisplayValue();} } //Test class public class MyDoc {static Document d;static Document e;public static void main(String[] args){d = new Document(new IntFactory());d.DisplayData();e=new Document(new LongFactory());e.DisplayData();} }

截圖

面向對象程序設計-4

使用TDD的方式設計關實現復數類Complex

  • 測試代碼
import junit.framework.TestCase; import org.junit.Test;import static junit.framework.TestCase.assertEquals;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, Complex.getRealPart(-1.0));assertEquals(5.0, Complex.getRealPart(5.0));assertEquals(0.0, Complex.getRealPart(0.0));}@Testpublic void testgetImagePart() throws Exception {assertEquals(-1.0, Complex.getImagePart(-1.0));assertEquals(5.0, Complex.getImagePart(5.0));assertEquals(0.0, Complex.getImagePart(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.ComplexSub(c2).toString());assertEquals("-2.0+2.0i", c1.ComplexSub(c3).toString());assertEquals("-3.0 -2.0i", c2.ComplexSub(c3).toString());}@Testpublic void testComplexMulti() throws Exception {assertEquals("3.0 -3.0i", c1.ComplexMulti(c2).toString());assertEquals("-3.0+6.0i", c1.ComplexMulti(c3).toString());assertEquals("-1.0 -3.0i", c2.ComplexMulti(c3).toString());}@Testpublic void testComplexComplexDiv() throws Exception {assertEquals("-1.5 -1.5i", c1.ComplexDiv(c2).toString());assertEquals("1.2+0.6i", c1.ComplexDiv(c3).toString());assertEquals("-0.6 -0.6i", c2.ComplexDiv(c3).toString());} }
  • 產品代碼
import java.text.DecimalFormat;//引入DecimalFormat包取一位整數和一位小數public class Complex {double Real=0;double Imaginary=0;public Complex(){}public Complex(double Real,double Imaginary){this.Real=Real;this.Imaginary=Imaginary;}public double getReal(){return Real;}public double getImaginary(){return Imaginary;}public String toString(){String s = "";double r=Real;double i=Imaginary;if(r==0&&i==0){s="0";}else if(r==0&&i!=0){s=i+"i";}else if(r!=0&&i<0){s=r+""+i+"i";}else if(r!=0&&i==0){s=r+"";}else{s=r+"+"+i+"i";}return s;}public boolean equals(Object obj){//重寫equals方法,使其不用來對比字符序列if(this==obj){return true;}elsereturn false;}DecimalFormat df = new DecimalFormat( "0.0");public Complex ComplexAdd(Complex a){return new Complex(Real+a.getReal(),Imaginary+a.getImaginary());}public Complex ComplexSub(Complex a){return new Complex(Real-a.getReal(),Imaginary-a.getImaginary());}public Complex ComplexMulti(Complex a){double r=Real*a.getReal()-Imaginary*a.getImaginary();double i =Imaginary*a.getReal()+Real*a.getImaginary();return new Complex(Double.valueOf(df.format(r)),Double.valueOf(df.format(i)));}public Complex ComplexDiv(Complex a){double r=(Real * a.Imaginary + Imaginary * a.Real) / (a.Imaginary * a.Imaginary + a.Real * a.Real);double i=(Imaginary * a.Imaginary + Real * a.Real) / (a.Real * a.Real + a.Real * a.Real);return new Complex(Double.valueOf(df.format(r)),Double.valueOf(df.format(i)));} }
  • 截圖

面向對象程序設計-5

  • 類圖

實驗體會
通過這次實驗二,熟悉了代碼的編寫和添加類,并且對uml類圖有了最基本的認識。在實驗中還學習了TDD模式,這種先編寫測試代碼,后編寫實驗代碼在一定程度上降低了編寫的錯誤。在實驗中還是感覺自己能力欠缺,還需要努力學習。

轉載于:https://www.cnblogs.com/Hf-Hf/p/10732944.html

總結

以上是生活随笔為你收集整理的20175333曹雅坤 实验二 Java面向对象程序设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。