1. 程式人生 > >201621123021《JAVA程序設計》第五周學習總結

201621123021《JAVA程序設計》第五周學習總結

什麽是 處理 clas private 關鍵詞 main per 活性 over

201621123021《JAVA程序設計》第五周學習總結

1. 本周學習總結

1.1 寫出你認為本周學習中比較重要的知識點關鍵詞

  • 接口、comparator接口、comparable接口、has-a

1.2 嘗試使用思維導圖將這些關鍵詞組織起來。

技術分享

2. 書面作業

1. 面向對象設計大作業(團隊項目,2-3人)

內容:繼續完善上次的大作業。

1.1 項目簡介表格

學生負責任務博客地址
簡卓林 Store git[https://gitee.com/TongCan/ShoppingCart.git]
董明超 Good、ShoppingCart git

1.2 系統常用功能框架圖

技術分享

1.3 系統總體類圖

技術分享

1.4 購物車、商品、系統關鍵代碼截圖

購物車

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;

public class ShoppingCart {
    private ArrayList<Good> goods = new ArrayList<>();
    public void add(Good good){ //購買商品==將商品放入購物車
        goods.add(good);
    }

    @Override
    
public String toString() { return "ShoppingCart{" + "goods=" + goods + "}"; } public BigDecimal sum(){ BigDecimal res = new BigDecimal(0); for (Good good : goods) { res=res.add(good.getPrice()); } return res; }
public void deleteGood(int index){ goods.remove(index-1); } public void deleteGood(Good o){ goods.remove(o); } }

商品

import java.math.BigDecimal;

public class Good {
    private BigDecimal price;
    private String name;
    private int number;
    public Good(BigDecimal price, String name) {
        this.price = price;
        this.name = name;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Good{" +
                "price=" + price +
                ", name=‘" + name + ‘\‘‘ +
                "}";
    }
    //數量編輯
    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }
}

商家

import java.math.BigDecimal;

public class Good {
    private BigDecimal price;
    private String name;
    private int number;
    public Good(BigDecimal price, String name) {
        this.price = price;
        this.name = name;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Good{" +
                "price=" + price +
                ", name=‘" + name + ‘\‘‘ +
                "}";
    }
    //數量編輯
    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }
}

1.5 其他:跟上次的系統比較,系統的設計等有何修改。其他感想。

  • 更上一次系統相比本次系統的功能變得更多,更加強大。通過本次大作業我明白了面向對象的重要性。

2. abstract:閱讀GuessGame抽象類的設計與使用源代碼

2.1 Guess改造前代碼很簡單,而改造後的代碼使用了抽象類、抽象方法,看起來更復雜,這樣的改造到底有什麽好處呢?

  • 使用抽象類、抽象方法能夠使子類更加方便的實現多態。

2.2 GuessGame(改造後).java中有抽象方法與非抽象方法,你覺得抽象類中什麽樣的方法應該聲明為abstract,什麽方法不需要聲明為abstract直接實現即可。

  • 當我們想要一個類實現不同的功能時可以使用抽象類。
  • 當我們想要對類實現特定功能時可以不適用抽象類。

2.3 重要:在這個例子中,變化的是什麽,不變的是什麽?嘗試結合abstract等概念進行說明。

  • 變化的是類從非抽象類變成了抽象類。
  • 不變的是遊戲的猜數字功能並沒有發生改變。

3. Comparable與Comparator

3.1 結合PTA 7-1中你的代碼說明,為什麽某個類實現了Comparable接口,就可以直接使用Arrays.sort對該類型的數組進行排序?

public PersonSortable(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

  • 因為Comparable接口中包含著對於數組的創建,所以可以使用Arrays.sort進行排序。

3.2 結合PTA 7-2 中你的代碼說明,有了Comparable接口為什麽還需要Comparator接口呢?

  • 因為本題需要進行兩種排序方式,一種按照年齡排序,一種按照姓名排序,此時Comparable接口被占用,則還需使用Comparator接口進行比較。

3.3 以前的作業Shape,Rectangle,Cirlce中,Shape類中什麽方法應聲明為abstract?說出原因。

  • Shape重計算周長的函數getPerimeter()和計算面積的函數getArea()應聲明為abstract,因為面積和周長在不同的圖形中實現功能的方法不一樣。

3.4 有很多Shape類型對象如Rectangle、Circle。希望使用Arrays.sort對他們進行排序,請寫出相應代碼。並簡述應在哪個類上實現Comparable接口比較好?

public int CompareTo(Shape o){
    if(this.getPerimeter()-o.getPerimeter()<0)
    return -1;
    else if(this.getPerimeter()-o.getPerimeter()>0)
    return 1;
    else
    return 0;
}
Array.Sort(Shape);

  • 應在Shape中實現Comparable接口比較好,應為不管是周長還是面積都是包含在Shape類中。

3.5 以3.4你編寫的代碼為例,簡述面向Comparable接口編程、面向父類編程的好處。

  • 面向接口編程和面向父類編程可以提高函數的靈活性,如題3.4中我對於面積、周長的比較程序靈活的選擇比較方法。

4. 面向接口案例分析

4.1 a.畫出類關系圖。b.StudentDao接口有什麽用?

技術分享

  • b.StudentDao的作用是作為程序的接口,進行讀、寫、輸出功能。

4.2 StudenDaoListImplStudentDaoArrayImpl有何共同之處?有何區別?

  • 共同之處:都是用來存儲學生信息的類。
  • 區別:StudenDaoListImpl通過列表的方式來存儲數據,而StudentDaoArrayImpl通過數組的方式來存儲數據。

4.3 結合Test.java中的main函數,簡述面向接口編程的好處。

  • 面向接口編程提高了程序了靈活性,如Test.java中數據的後臺來源可能不一樣,但是卻可以正確使用。

5. 什麽是面向接口編程?面向接口編程的好處是什麽?

  • 面向接口編程即不管後臺數據是怎樣的形式,程序都可以對這些數據進行正確的處理,如題目中Test.java,我們有兩個數據後臺一個是List另一個是Array,接口可以對他們進行正確的處理,來實現對學生信息的正確處理。
  • 面向接口編程的好處是提高程序運行的廣度,能夠讓數據對象成為一個集合,然後再進行統一處理。

3.碼雲及PTA

3.1. 碼雲代碼提交記錄

技術分享

3.2 截圖PTA題集完成情況圖

技術分享

技術分享

3.3 統計本周完成的代碼量

周次總代碼量新增代碼量總文件數新增文件數
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 437 437 7 7
5 905 468 13 6

201621123021《JAVA程序設計》第五周學習總結