第五週做業

1. 本週學習總結

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

  • |關鍵詞:|接口|內部類|

    1.2 嘗試使用思惟導圖將這些關鍵詞組織起來。注:思惟導圖通常不須要出現過多的字。

1.3 可選:使用常規方法總結其餘上課內容。

  • 內部類:成員內部類、局部內部類、靜態內部類、匿名內部類
  • 成員內部類:該類依附與外部類而存在,可無條件訪問外部類的全部成員屬性和成員方法
  • 局部內部類:定義在一個做用域或方法中的類,訪問權限僅做用在該域和方法中
  • 靜態內部類:不依賴與外部類,不能使用外部類的非靜態的變量或方法
  • 匿名內部類:爲解決臨時繼承某個類或操做某個接口時創建實例的需求

    2. 書面做業

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

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

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

    注意: 再過幾回課要講Java圖形界面編程,到時候要將該系統升級爲圖形界面。系統的業務邏輯部分應該變化不大,變化較大的地方的是輸入與輸出部分。編碼的時候,請不要將處理輸入(System.in)與輸出(System.out)的代碼與某個業務處理方法綁死。
    參考資料:javascript

    1.1 項目簡介表格:

成員 負責任務 博客地址
陳錦霞 商品 https://www.cnblogs.com/chenjinxia456/
鍾其均 購物車 https://www.cnblogs.com/zhongqijun2468/

1.2 系統經常使用功能框架圖

1.3 系統整體類圖

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

class Cart{//購物車類
    ArrayList<Commodity> shoppinglist = new ArrayList<>();
    private double Totalprice=0;
    private int num=0;
    public boolean addCommodity(Commodity commodity,int num){//
        if(shoppinglist.add(commodity))
            num++;
            return true;
    }
    public double getTotalprice(){//商品總價格
        for(int i;i<num;i++){
             Totalprice += shoppinglist.get(i).getNum() * shoppinglist.get(i).getPrice();
        }
        return Totalprice;
    }
    
    public boolean DeleteCommodity(Commodity commodity) {//刪除商品
        if(shoppinglist.contains(commodity))
        {
            shoppinglist.remove(commodity);
            return true;
        }
        else
            return false;
    }

    public void ClearCart(){//清空購物車 
        shoppinglist.clear();
    } 

}

public class Main5{
    private static Object commodity;

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Cart cart = new Cart();
        int choice=0;
        Commodity flag=null;
        Commodity[] commodity = new Commodity[2];
        commodity[0]=new Commodity("機械鍵盤",598,1);
        commodity[1]=new Commodity("java課本",89,1);
         for(int j = 0; j < 10; j++){
                choice = welcome();
                if(choice == 0) break;
                Scanner sc;
                switch(choice){
                case 1 : 
                    menu1(commodity);
                    System.out.print("選擇:");
                    String Name = sc.next();
                    System.out.println(flag = search1(Name, commodity));
                    System.out.println();
                    break;
                case 2 :
                    System.out.println("所選商品爲: 「" + flag + "」");
                    System.out.print("加入數量:");
                    int num = sc.nextInt();
                    flag.setNum(num);
                    cart.addCommodity(flag, num);
                    System.out.println("加入成功!");
                    System.out.println();
                    break;
                case 3:
                    System.out.println(cart);
                    System.out.println("總價: " + cart.getTotalprice());
                    System.out.println();
            }

        }
            }

    
         public static int welcome(){
                Scanner sc = new Scanner(System.in);
                System.out.println("********歡迎光臨********");
                System.out.println("******1.查找商品*******");
                System.out.println("******2.添加商品*******");
                System.out.println("******3.去購物車*******");
                System.out.println("******0.退出系統*******");
                System.out.print("choice = ");
                int choice = sc.nextInt();
                return choice;
            }
            public static void menu1(Commodity[] commodity){
                for(Commodity i : commodity){
                    System.out.println(i);
                }
            }
            public static Commodity search1(String Name, Commodity[] product){
               
                for(Commodity i :product){
                    if(i.getName().equals(Name))
                        return i;
                }
                return null;
            }
}

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

  • 跟上次比起來就多了一個搜索的功能,而後把登陸類改爲了方法,提供登陸操做的應該是商城。
    有待改進: 用戶進行註冊後,擁有了其購物車,如今沒法對用戶的錢包進行查看和修改,缺乏圖形界面

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

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

  • 改造前:與控制進行了捆綁,若用戶想要操做則必須在控制檯下
  • 改造後:脫離了控制檯,使得程序更有廣泛性能夠用於不一樣環境

    2.2 GuessGame(改造後).java中有抽象方法與非抽象方法,你以爲抽象類中什麼樣的方法應該聲明爲

    abstract,什麼方法不須要聲明爲abstract直接實現便可。
  • 當一個方法沒有具體的實現定義,即沒有方法體只有方法名時,這時方法很抽象,就須要用abstract
  • 當須要在多種界面時運行或者輸入輸出,就能夠把方法抽象化

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

  • 變化的是數據的輸出輸入的方式,改造前只能從控制檯輸入輸出,改造後還能夠從對話框之類的界面輸入輸出
  • 不變的是這個遊戲的功能,依舊是猜數字

    3. Comparable與Comparator

  • Comparable接口一個compareTo方法,能夠用來對實現他的每一個類的對象進行總體排序,當使用Arrays.sort時,會調用compareTo()方法,則能夠對該類型進行排序

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

  • Comparable接口一個compareTo方法,能夠用來對實現他的每一個類的對象進行總體排序,當使用Arrays.sort時,會調用compareTo()方法,則能夠對該類型進行排序

3.2 結合PTA 7-2 中你的代碼說明,有了Comparable接口爲何還須要Comparator接口呢?

  • Comparable:只能以固定的形式進行排序 而Comparator:可根據須要建立多種排序方式

    3.3 之前的做業Shape, Rectangle,Cirlce中,Shape類中什麼方法應聲明爲abstract?說出緣由。

  • Rectangle,Cirlce都 IS Shape,都要進行求周長和求面積的計算,,這些是他們共有的行爲,但這些行爲在Rectangle,Cirlce中的具體實現又不同,這時咱們須要把這些行爲抽離出來造成一份共有的協議。

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

  • 在Shape上實現Comparable接口比較好,由於是多態
    只給出關鍵代碼:

3.5 以3.4你編寫的代碼爲例,簡述面向Comparable接口編程、面向父類編程的好處。(注意:必定要結合本身編寫的代碼)

  • 面向Comparable接口編程,它的實現類只須要對該接口的compareTo方法重寫,就能夠實現咱們要的功能

    在題目3中要對兩種圖形進行排序,父類Shape實現接口,就能夠重寫compareTo方法和使用ArrayList.sort排序java

    4. 面向接口案例分析

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

  • 提供了三個抽象的方法,分別是writeStudent()、readStudent()和diplayAllStudent(),分別用來寫入學生信息,讀取學生信息和展現全部學生的信息

    4.2 StudenDaoListImpl與StudentDaoArrayImpl有何共同之處?有何區別?


    private List<Student> students = new ArrayList<Student>();是StudenDaoListImpl中的語句,可看出StudenDaoListImpl使用ArrayList來存放學生的信息,而StudentDaoArrayImpl是利用數組來存放學生的信息。查看ArrayList的源代碼發現實際上ArrayList又是利用數組實現的編程

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

  • 接口也是定義了一個協議,跟繼承不一樣的是,實現接口的條件是知足HAS-A便可。接口中的方法都是抽象的,要在其實現類中去具體的實現,不一樣的類可能具體實現的細節不一樣,是更加面向對象的一種體現。

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

    結合題目4案例中的Test.java的代碼進行分析。不要百度原封不動照搬!

    ⑴ 面向接口編程可使得全部實現接口的對象都擁有共同的行爲,使代碼與接口相關聯,而不須要考慮具體的實現類。數組

  • 好處:面向接口編程能夠將接口與實現相分離,從而大大提升程序的靈活性。

    3.碼雲及PTA

    3.1. 碼雲代碼提交記錄

    在碼雲的項目中,依次選擇「統計-Commits歷史-設置時間段」, 而後搜索並截圖

3.2 截圖PTA題集完成狀況圖

3.3 統計本週完成的代碼量

周次 總行數 新增行數 總文件數 新增文件數
1 73 73 3 3
2 468 468 91 9
3 411 411 27 9
4 503 503 42 13
5 608 608 25 22
相關文章
相關標籤/搜索