java第五周作業


一. 本周學習總結

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

  • 接口
  • interface關鍵字
  • 接口的定義和實現
  • has-a
  • 實現Comparable
  • Comparator接口

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

二. 書面作業

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

1.1 項目簡介表格:

購物車系統項目地址

學生 負責任務 博客地址
黃子穎 (類名)Shoppingcart;Taobao;Taobaothings;IAO;Main 黃子穎博客
翁華輝 (類名)User;UserList;Goods;GoodsList;CartInformation; 翁華輝博客
1.2 系統常用功能框架圖

1.3 系統總體類圖

1.4 購物車、商品、系統關鍵代碼截圖(主要截取自己負責的部分)




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

首先有很多增加的部分,寫了用戶注冊和登陸,還增加了購物車中增刪商品的方法,改正了一部分之前錯誤的設計思路,比如直接在購物車中定義商品信息。現在而是改為老師推薦的方法,多寫一個類用來保存商品信息。

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

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

答:改造后時候抽象類抽象方法后的輸入輸出,不和控制台綁定,可以實現更多功能。

2.2 GuessGame(改造后).java中有抽象方法與非抽象方法,你覺得抽象類中什么樣的方法應該聲明為abstract,什么方法不需要聲明為abstract直接實現即可。
  • 應該聲明為abstract:輸入輸出之類的方法、沒有具體內容實現的方法。
  • 不需要聲明為abstract:有具體內容實現的方法。
2.3 重要:在這個例子中,變化的是什么,不變的是什么?嘗試結合abstract等概念進行說明。
  • 變化的:輸入輸出改為抽象類(具體修改內容如下),不和控制台綁定。
    public abstract void print(String text);
    public abstract void println(String text);
    public abstract int nextInt();
  • 不變的:程序的最終結果實現是不變的。

3. Comparable與Comparator

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

答:Arrays.sort()可對所有實現的Comparable接口的對象進行排序,具體排序的邏輯是依靠方法compareTo()
以下是PTA7-1中的compareTo()方法的代碼,Arrays.sort()依靠此方法定義的邏輯進行排序。

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

一個類一旦實現了Comparable,比較的方式就固定了。那如果像PTA 7-2中需要按照姓名或者名字,甚至多種方式來實現呢?這時候Comparable就不適用了,就應該使用Comparator
PTA 7-2中姓名的Comparator代碼如下:

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

public double getArea()
public double getPerimeter()
因為在子類Rectangle,Cirlce中,這兩個方法都有不同的實現,Shape中沒有具體實現,所以需要聲明為abstract。

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

要用Arrays.sort可以排序必須把Shape類上實現Comparable接口,並在其中寫出compareTo方法

	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;
3.5 以3.4你編寫的代碼為例,簡述面向Comparable接口編程、面向父類編程的好處。(注意:一定要結合自己編寫的代碼)

面向Comparable接口編程、面向父類編程的好處:

  • 在此3.4例子中,把Shape類實現了Comparable接口,這樣main函數直接使用Arrays.sort就可以直接進行排序了,而不需要多寫一個繁瑣的函數對其進行排序。
  • 同時Shape類對於Rectangle、Circle來說也是他們的父類,當Rectangle、Circle里的方法進行了修改,因為Rectangle、Circle是面向父類編程所以Shape的代碼是不需要進行修改,這提升了系統的靈活性。

4. 面向接口案例分析

閱讀Case-StudentDao.zip案例

4.1 a.畫出類關系圖。b.StudentDao接口有什么用?
  • 類關系圖如下:

  • StudentDao接口是interface的,他的作用是把下面的三個方法集合起來

	public boolean writeStudent(Student student);
	public Student readStudent(String name);
	public void diplayAllStudent();
4.2 StudenDaoListImpl與StudentDaoArrayImpl有何共同之處?有何區別?
  • 共同點:StudenDaoListImpl與StudentDaoArrayImpl都是接口
    ,都有public Student readStudent(String name)public void diplayAllStudent();public boolean writeStudent(Student student)方法
  • 不同點:雖然有相同的方法,但是其中public Student readStudent(String name)public boolean writeStudent(Student student)具體實現是不一樣的,因為一個使用數組實現,一個是使用列表實現。在StudenDaoListImpl中還多了一個構造函數public StudentDaoArrayImpl(int size)
4.3 結合Test.java中的main函數,簡述面向接口編程的好處。

main函數中使用public Student readStudent(String name)public void diplayAllStudent();public boolean writeStudent(Student student)的時候無需在乎一開始是數組還是List。就像老師在Test.java中加的那個注釋

//往后台寫數據,無需考慮后台是什么(到底是數據庫、文件、數組、List)
//因為這里是面向StudentDao接口

這就是接口編程的好處。

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

  • 面向接口編程的定義:每個層次不是直接向上層提供服務的,是通過定義一組接口,只向上層暴露接口功能。在Test.java中,StudenDaoListImpl與StudentDaoArrayImpl就是兩個接口,main函數直接通過接口來調用其中的方法。
  • 面向接口編程的好處:這對系統的靈活型有好處。下層需要改變的時候,只要接口的關系是不變的,只要修改下層就好了,上層不用改變。在Test.java中,如果StudenDaoListImpl或StudentDaoArrayImpl中的方法需要進行修改,那就直接在StudenDaoListImpl或StudentDaoArrayImpl中進行修改就好了,而main函數不需要進行修改。

三.碼雲及PTA

題目集:面向對象2-進階-多態接口內部類

3.1. 碼雲代碼提交記錄

3.2 截圖PTA題集完成情況圖


3.3 統計本周完成的代碼量

周次 行數 新增行數 文件數 新增文件數
1 115 115 17 17
2 421 306 24 7
3 698 277 30 6
5 1085 387 38 8
6 1497 412 48 10


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM