學號 2017-2018-20172309 《程序設計與數據結構》第8周學習總結

學號 2017-2018-20172309 《程序設計與數據結構》第8周學習總結

教材學習內容總結

  • 後綁定。 - 在程序執行的某個時刻可能會產生一個請求事件,要求執行某段代碼來完成一個方法的調用,這種請求事件稱爲一個方法調用與一個方法定義的綁定。 - 通常狀況下這種綁定發生在編譯階段,但對於多態性引用,這種綁定要延遲到程序運行時才能執行,而且要綁定的方法定義取決於當時引用變量所引用的對象。 - 多態性引用可以隨時隨時間變化指向不一樣類型的對象。 - 在Java中,多態性的引用能夠用兩種方式:繼承方式、接口方式。
  • 在繼承中實現多態性: - 舉個例子吧:
父類: Animal    方法: sleep()、 eat().
  子類: Cow       方法: 1. sleep()     System.out.println("牛在睡覺「」);
                                                  2. eat()   System.out.println("牛在吃草」);
  子類:Sheep     方法: 1.sleep()     System.out.println("羊在睡覺」);      
                                                  2. eat()   System.out.println("羊在吃草」);
  爲了顯示多態性,咱們能夠這樣產生對象 :
   Animal   function  = new  Cow();   Animal function = new Sheep();
  當使用 function.sleep();    function.eat();時
  結果爲: 
          牛在睡覺
          羊在睡覺
          牛在吃草
          羊在吃草
- 在Java中,用父類聲明的一個引用變量能夠指向一個子類對象。若是兩個類具備兩個相同簽名的方法,則這個父類的引用就具備多態性。
  • 在接口中實現多態性:
    • 要點:接口產生的多態是指不一樣類在實現同一個接口的時候有不一樣的實現方式,那麼接口變量在回調接口方法時就能夠產生多種形態。
    • 本身簡單理解:對外提供的都是接口。
    • 接口的思想:例如筆記本電腦與USB接口。 1. 接口的出現擴展了功能 . 2. 接口其實就是暴露出來的規則 . 3. 接口的出現下降了耦合性,解耦.
    • 知識點: 1. 接口名能夠用於聲明對象引用變量。 2. 一個接口引用變量能夠指向實現該接口的任何類的任何對象。 3. 方法的參數是能夠多態性的,使得方法所接受的參數具備靈活性。
  • 排序:
    • 排序分爲選擇法排序插入法排序
    • 要點:以多態性方式實現的排序算法能夠對任何一組可比較的對象進行排序。
    • 選擇排序法:相繼的將各值放在本身最終的位置。
    • 插入排序法:不斷地將一個新元素插入到已排好序的數列子集中。
    • 排序算法的比較:選擇算法時有各類的性能指標,包括算法的建議性、效率及儲存空間需求量。
  • 搜索:
    • 搜索分爲線性搜索二分搜索
    • 線性搜索:將一個目標一次對每個元素進行比較,最終找到目標元素。
    • 二分搜索:每次搜索都能排除1/2的選項,直到搜索中最終的目標元素。
    • 搜索算法的比較:算法的選擇取決於具體的條件:雖然二分搜索的效率明顯高於線性搜索,但二分搜索的要求是已經通過排序。

教材學習中的問題和解決過程

  • 問題1:接口在多態中實現應該怎麼用?
  • 問題1解決方案:就拿PP10.1舉例吧:
  1. 首先給有個接口,接口的格式爲 所以在PP10.1中應該爲
  2. 應該運用接口: 值得注意的是*8應該實現接口中全部的方法**
  • 問題2:在進行排序時,若是是一組int型數據我可以理解,可是像對於例子中的對姓名進行排序應該怎麼理解呢?
  • 問題2解決方案:
  • 問題3:排序算法的比較、搜索算法的比較,比較的是什麼,比較的目的是什麼? -解決方案:
  • 比較內容:
  1. 是穩定性,所謂穩定性,是指值相等的兩個元素在排序先後是否會發生位置的交換。若是不會發生交換,則認爲是穩定的算法;反之,則認爲是不穩定的排序算法。
  2. 是時間複雜度,指執行算法所需的時間長短。簡單說就是算法執行的快慢程序。
  3. 是空間複雜度,指執行算法所佔用的內存大小。
  • 排序算法的比較:
  1. 通常來講最簡單的算法經常是效率最低的算法。由於要想算法簡單,就得使用循環,使用循環就是進行大量的重複的、一次次進行比較的算法,所以繁瑣。我的理解
  2. 效率高不必定算法簡單。
  3. 選擇排序和插入排序都有等同的效率,都是n^2階算法。
  4. 效率相同時,還有另一些東西須要考慮,好比選擇排序法更易理解,所執行的交換操做更少等。
  • 搜索算法的比較:
  1. 不必定是必定須要選擇效率高的算法,算法的選擇取決具體的條件。
  2. 無疑,二分搜索比線性搜索的效率高,可是二分搜索須要對數據進行排序。而線性搜索的實現至關簡單。

代碼調試中的問題和解決過程

  • 問題1:PP10.1 要求是用Payable實現多態性。可是由於對接口的不瞭解,因此無從下手,可是通過看書、請教同窗對接口有了大概的理解。
  • 問題1解決方案: 代碼: 接口Payable Staff員工信息 main函數
  • 問題2:PP10.5 修改Movies程序,將儲存的DVD按名字排序。出現這個問題 它的提示是說接口裏的方法沒有實現,可是我實現了comparable接口中的compareTo()方法,
  • 問題2解決方案:這裏須要實現**public int compareTo(Object obj)**方法其中 我參數沒使用正確: 正確應該爲 代碼: DVD1 Movies DVDCollection

代碼託管

上週考試錯題總結

  • 錯題1:
  • 如今理解:指令超級表明了當前類父類中的某些東西的調用。因爲沒有消息,而僅僅是super(),因此它是父類構造器的調用。
  • 錯題2:
  • 如今理解:Java支持繼承,但不是多重繼承,因此Java類能夠有任意數量的子節點,但只有一個父節點。並且,因爲全部Java類都直接或間接地從對象類繼承,因此全部Java類都有一個雙親類。
  • 錯題3:
  • 如今理解:多態的術語表示變量能夠有多種形式。在通常狀況下,Java被強烈定義爲,一個變量,一旦聲明爲類型,就永遠不能改變爲不一樣的類型。惟一的例外是多態變量能夠是任何類型的派生類(儘管不是在同一時間,變量能夠從一種類型轉換爲另外一種類型)。
  • 錯題4:
  • 如今理解:超保留的單詞提供了一種機制來訪問父類的方法和實例數據(無論它們是否被隱藏)。此外,可使用super來訪問父類的構造器(s)。因此正確的答案是A和B的組合這不是一個選項因此正確的答案是e。
  • 錯題5:
  • 如今理解:派生類能夠從新定義父類的任何實例數據或方法。父類的版本如今是隱藏的,可是能夠經過使用super來訪問,就像在超級。x中同樣。

點評模板:

  • 博客中值得學習的或問題:html

    • 課本總結運用總分總結構。首先在前面進行大概的描述,而後在後面進行詳細的敘述。
    • 每一個版塊都描述、解釋的很是仔細。
    • 排版漂亮,背景換的比換衣服都快。
  • 代碼中值得學習的或問題:java

    • 代碼有關問題記錄過少,說明出現問題時,忘記或沒有相關記錄。
  • 基於評分標準,我給本博客打分:14分。git

點評過的同窗博客和代碼

  • 本週結對學習狀況算法

    • 20172310
    • 結對學習內容
      • 第八章內容,關於多態性的學習以及排序和搜索的有關方法的學習。
      • 關於四則運算的有關知識學習,例如棧、轉換成後綴表達式。
      • 沒有合理安排實際的教訓。
  • 上週博客互評狀況數據結構

其餘(感悟、思考等,可選)

這一章多態很是的難以理解,看過兩三遍課本都不必定徹底的理解。只有通過看了藍墨雲班課之後纔能有個大概的印象,嗯,繼續努力吧!加油。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 075/200 1/1 05/20
第二週 560/500 1/2 13/38
第三週 972/1000 1/4 21/60
第四周 694/1666 1/5 21/90
第五週 1544/3095 1/6 30/90
第六週 600/3627 1/7 30/120
第七週 544/4200 2/9 20/140
第八週 907/5107 2/10 20/160

參考資料

1.Java繼承與封裝 2.經常使用排序算法的計較 3.接口的格式與運用 4.重寫、重載的區別函數

相關文章
相關標籤/搜索