201621123021《JAVA程序設計》第五周學習總結
阿新 • • 發佈:2017-10-21
什麽是 處理 clas private 關鍵詞 main per 活性 over
2.2
3.3 以前的作業
3.4 有很多Shape類型對象如
4.1 a.畫出類關系圖。b.
4.2
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); } @Overridepublic 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 StudenDaoListImpl
與StudentDaoArrayImpl
有何共同之處?有何區別?
- 共同之處:都是用來存儲學生信息的類。
- 區別:
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程序設計》第五周學習總結