201621123028《Java程序设计》第5周学习总结
作業05-繼承、多態、抽象類與接口
1.本周學習總結
1.1寫出你認為本周學習中比較重要的知識點關鍵詞。
關鍵字:接口,interface關鍵字,implements關鍵字,has-a關系,Comparable,abstract。
1.2嘗試使用思維導圖將這些關鍵詞組織起來。注:思維導圖一般不需要出現過多的字。
1.3 可選:使用常規方法總結其他上課內容。
2. 書面作業
PTA題集:面向對象2-進階-多態、接口與內部類
1. 面向對象設計大作業(團隊項目,2-3人)
內容:繼續完善上次的大作業。
注意:再過幾次課要講Java圖形界面編程,到時候要將該系統升級為圖形界面。系統的業務邏輯部分應該變化不大,變化較大的地方的是輸入與輸出部分。編碼的時候,請不要將處理輸入(System.in)與輸出(System.out)的代碼與某個業務處理方法綁死。
作業提交結構如下:
1.1 項目簡介表格:
項目碼云地址(點擊后要求可直接跳到該項目首頁)。
團隊成員表格
| 鄭玉波 | User類,ShoppingCart類 | 鄭玉波的碼云地址 |
| 占恒 | Commodity類,WalMart類 | 占恒的碼云地址 |
1.2 系統常用功能框架圖
提示:在XMind文本方框中,可通過按Shift+Enter將字豎起來。
1.3 系統總體類圖
1.4 購物車、商品、系統關鍵代碼截圖(主要截取自己負責的部分)
因為還沒有學到使用文件,所以現在的登錄與注冊只有大體框架。
1.5 其他:跟上次的系統比較,系統的設計等有何修改。其他感想。
和上次有所不同,在建議下將登錄和注冊作為方法而不是類,且放在了WalMart類中。
2. abstract:閱讀GuessGame抽象類的設計與使用源代碼
Guess改造前代碼很簡單,而改造后的代碼使用了抽象類、抽象方法,看起來更復雜,這樣的改造到底有什么好處呢?
改造之前:
改造之后:
??這樣子改造將所要輸入和輸出的數字抽象化,這樣子就可以不僅僅在控制臺進行這個猜字游戲,如果想在圖形界面等其他地方實現這個游戲就會非常方便,這個程序就非常靈活了。
2.2 GuessGame(改造后).java中有抽象方法與非抽象方法,你覺得抽象類中什么樣的方法應該聲明為abstract,什么方法不需要聲明為abstract直接實現即可。
??顯然輸入輸出這個方法需要聲明為abstract,方便在不同環境下實現。而將所輸入的數字與隨機數字進行比較可以不用聲明為抽象方法,因為不管在什么環境下這個方法都是一樣的。
2.3 重要:在這個例子中,變化的是什么,不變的是什么?嘗試結合abstract等概念進行說明。
??很顯然,運行環境是變化的,在文本下,在控制臺上或者在圖形界面等等,但是這些方法是不變的,都是輸入輸出,比較數字的函數也是相同的。雖然輸入輸出的方法是抽象的,但是當出現了某個類用來告訴我們實現的環境是在哪里時,這幾個方法也變得具體了。正如三生萬象,一個抽象最后會變成很多種的實現。當抽象的方法被用到了,就實現了繼承的思想。
3. Comparable與Comparator
3.1 結合PTA 7-1中你的代碼說明,為什么某個類實現了Comparable接口,就可以直接使用Arrays.sort對該類型的數組進行排序?
??總所周知,Arrays類中的sort方法是可以對對象數組進行排序的,但是這是有前提的,就是所傳入的對象必須實現了接口Comparable(java.lang),而且還要覆蓋compareTo這個方法。
3.2 結合PTA 7-2 中你的代碼說明,有了Comparable接口為什么還需要Comparator接口呢?
??因為用到了Arrays.sort進行排序,而它是對所有實現Comparable的對象進行排序。如果這個時候相對某一個對象進行排序,那僅僅的Comparable是不行的,這時Comparator出場了,它和Comparable不一樣的是,Comparator接口是在一個獨立的類中進行比較的,而且它可以指定排序的順序。
3.3 以前的作業Shape, Rectangle,Cirlce中,Shape類中什么方法應聲明為abstract?說出原因。
方法1abstract double getArea();和abstract double getPerimeter();聲明為抽象方法,因為對于抽象類Shape,可以是很多不同的圖形,但是他們的面積和周長的求法不一樣,所以要定義為抽象的。
3.4 有很多Shape類型對象如Rectangle、Circle。希望使用Arrays.sort對他們進行排序,請寫出相應代碼。并簡述應在哪個類上實現Comparable接口比較好?
應在Shape類類里實現接口比較好。
3.5 以3.4你編寫的代碼為例,簡述面向Comparable接口編程、面向父類編程的好處。(注意:一定要結合自己編寫的代碼)
我在Shape類中實現接口,那么在Rectangle類、Circle類中就能實現Comparable,這樣最后可以直接對Shape使用Array.sort進行排序,增加了許多靈活性。
4. 面向接口案例分析
4.1 a.畫出類關系圖。b.StudentDao接口有什么用?
a.
b.StudentDao接口建立了三個方法,判斷學生信息寫入是否成功,讀取學生的信息和展示全部學生信息。
4.2 StudenDaoListImpl與StudentDaoArrayImpl有何共同之處?有何區別?
公共點是都是實現對學生信息的寫入等,不同點是StudenDaoListImpl是使用了ArrayList來動態實現的,但是StudentDaoArrayImpl是用數組來實現的。
4.3 結合Test.java中的main函數,簡述面向接口編程的好處。
好處:
1.更加抽象,更加面向對象
2.提高編程的靈活性
3.實現高內聚、低耦合,提高可維護性,降低系統維護成本。
這個代碼是來存放學生的信息的,在Test的類里面我們可以不用知道如何實現的,StudenDaoListImpl與StudentDaoArrayImpl兩種不同的結構都能實現寫入并讀取學生的信息,方便了許多,更加的結構化并提高了編程的效率。
5. 什么是面向接口編程?面向接口編程的好處是什么?
結合題目4案例中的Test.java的代碼進行分析。不要百度原封不動照搬!
面向接口的編程方式是面向對象設計的一個原則,使用這種編程思想,我們可以容易地寫出具有可復用性的代碼,這對于代碼的理解和維護具有很大的幫助
都知道接口不允許實例化,也就是說面向接口的編程和面向實現編程不一樣,比如對于汽車所用的輪胎,拿面向實現說,可能就要考慮輪胎的品牌,性能等,會降低編程的靈活和可復用的性能。但是面向接口編程不在乎輪胎的品牌,能轉動就行。這樣就大大增強靈活性和可復用性。
3.碼云及PTA
題目集:面向對象2-進階-多態接口內部類
3.1. 碼云代碼提交記錄
- 在碼云的項目中,依次選擇“統計-Commits歷史-設置時間段”, 然后搜索并截圖
3.2 截圖PTA題集完成情況圖
需要有兩張圖(1. 排名圖。2.PTA提交列表圖)
3.3 統計本周完成的代碼量
需要將每周的代碼統計情況融合到一張表中。
| 1 | 191 | 191 | 18 | 18 |
| 2 | 571 | 380 | 19 | 1 |
| 3 | 1027 | 456 | 20 | 1 |
| 4 | 0 | 0 | 0 | 0 |
| 5 | 1359 | 332 | 25 | 5 |
| 6 | 2061 | 702 | 35 | 10 |
轉載于:https://www.cnblogs.com/bbshenme/p/7701799.html
總結
以上是生活随笔為你收集整理的201621123028《Java程序设计》第5周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的Linux系统入坑之路!!!!
- 下一篇: Java GC垃圾回收机制