20172305 《程序設計與數據結構》第八週學習總結

20172305 2017-2018-2 《程序設計與數據結構》第八週學習總結

教材學習內容總結

本週內容主要爲書的10.1-10.6的內容:

  • 第十章

    1.後綁定(動態綁定)php

    2.繼承與接口實現的多態性html

    3.排序(選擇排序法和插入排序法)java

    4.搜索(線性搜索和二分搜索)git

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

  • 問題1:後綁定(動態綁定)
  • 問題1解決方案: 沒看到這裏的時候,一直認爲引用變量是什麼類型的,就只能調用相關的方法。因此在每次寫類的時候,都一直盡力於完善有關的方法。動態綁定的執行效率低於早期綁定,可是動態綁定所體現的靈活性是不能比的。程序員

    • 引用變量的類型和該引用變量指向的對象必須是兼容的,但沒必要徹底相同,二者的關係能夠是很靈活的。
  • 問題2:多態性--面對對象的三大特徵之一
  • 問題2的解決方案:java實現運行時多態性的基礎是動態方法的調度,它是一種在運行時而不是在編譯期調用重載方法的機制。多態的存在,能夠對原有代碼的替換、可行的擴充,能夠進行靈活多樣的操做,極大的提升了使用效率,同時經過藍墨雲上視頻內容的講解,對於數據庫內的類型進行修改或是替換到亮一個數據庫裏,咱們總不能把全部數據進行調用,再進行添加吧,因此爲了解決這種問題的發生,咱們能夠在二者之間進行一個多態的應用,就能夠極大的縮短解決事件和解決中產生的問題。web

    • 多態性是指一個引用變量在不一樣時刻能夠指向不一樣類型的對象。經過這種方式調用的方法在不一樣時刻將於不一樣方法實現代碼的綁定。被綁定的方法代碼取決於被引用的對象的類型。
  • 問題3:排序(選擇排序法和插入排序法)
  • 問題3的解決方案:排序的問題是用多態性解決的問題之一。本書介紹了兩種相對簡答的排序方法,我在網上又查出了冒泡排序、希爾排序、快速排序、堆排序等不一樣類型的排序方式(足可見出數據結構原理有多強大,有多燒腦了)數據庫

    • 相同點:相同的排序效果、同等的效率、相似的雙層循環、都執行大約n*n次的操做
    • 不一樣點:排序方法有所不一樣,選擇排序法能夠是兩個數的替換所達到有必定的順序,插入排序法是進行一個個相似順時針的循環進行的排序。選擇排序法所執行的交換操做的次數相對較少,選擇法優於插入法。
  • 問題4:搜索(線性搜索和二分搜索)
  • 問題4的解決方案:線性搜索是以一個端點開始進行「逐一的」、「有順序的」搜索。二分搜索的方式相似高中數學學過的「二分法」,不斷的取中點,一半一半的進行篩選。相比線性搜索,二分搜索的效率更高,但二分搜索有一個弊病,就是數組中的元素必須是有必定的順序的(升序或者降序)對於兩種搜索方式的選擇,數據的搜索量較大的優選二分搜索,搜索的效率不是重要問題的狀況下,咱們能夠選擇線性搜索。編程

    • 被搜索的一組元素稱爲搜索池
    • 對於二分搜索若是是偶數個的元素,咱們在第一次選擇的時候,經過代碼mid = (min + max) / 2就能夠看出,除不開的狀況下會選擇中間兩個數較前一個,做爲中間數,進行二分的

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

  • 問題1:PP10.1
  • 問題1解決方案:10.1的編寫感受很簡單,從繼承的轉換爲接口實現多態,不就是方式的轉變。唉,實際操做的時候就忽然發現無從下手,我試過在StaffMember裏面進行是是實現接口,這樣全部子類均可以使用該方法了,可是Staff的pay()始終是處於劃紅線,我又想過在各個子類裏面分別實現接口,雖然pay()沒有被劃紅線,可是聲明引用變量,並指向子類的時候,又開始劃紅線了。想了想是本身沒有在StaffMember類裏面沒有實現接口,可是若是實現接口的話,這就不算是一種多態吧,兩種很混亂的經過接口實現的多態性,算是本身在嘗試道路上的荊棘吧,在StaffMemberen類實現接口就行,最後在產片代碼中進行聲明接口的引用變量,這樣就能夠在StaffMemberen內進行調用不一樣的對象,以及不一樣類型下的pay()方法,實現接口內內的方法payday()了。
    • 接口:
    • 聲明接口的引用變量:
  • 問題2:PP10.4
  • 問題2解決方案:對於此編程項目,着實費了很多功夫,遞減的順序在一開始就想到了把放在前面的內容放到後面就行了,可是想了想就改一個符號是不太可能吧,因此,本身就不斷在下面改來改去的,可是始終達不到所要求的目的,經過問同窗如何解決的,原來本身最原先的想法是正確的。感受題目騙人,不帶出這種從新編寫的,僅僅修改一個符號就能夠了。
    數組

  • 問題3:PP10.5
  • 問題3解決方案:在編寫此項目的時候,想法很簡單,有了Sorting類就能夠把movies內的名字進行按順序排列了,可是在我使用以後,就會提醒類型不兼容,才發現這二者之間須要搭建一個橋樑才能溝通,想一想本質的緣由,是本身沒有想到模仿10.8--10.10三個代碼之間的聯繫所致使的。只須要在CollectionDVD1裏面搭建一個CampareTo的方法,實現接口Comparable,就好了。這個項目的編寫費了一天半,經過同窗的指導,才真正的頓悟此題。因此,仍是本身的看書不夠細緻致使的。
    • 問題不兼容:
    • 實現的「橋樑」:

代碼託管

上週考試錯題總結

  • 錯題1:Inheritance through an extended (derived) class supports which of the following concepts?(繼承經過擴展(派生)類來支持下列概念中的哪個?)
    • A.interfaces
    • B.modulary
    • C.information hiding
    • D.code reuse(代碼複用)
    • E.correctness
  • 錯誤解析:經過擴展一個類並繼承它,新類不須要從新實現任何繼承的方法或實例數據,從而節省了程序員的工做量。所以,代碼重用是重用他人代碼的能力,經過擴展它來知足您的需求。經過繼承父類能夠大大的縮減代碼的重複,對於本身選擇接口類的問題,表示本身當時很迷,不知道怎麼回事就選擇了接口。

  • 錯題2:Which of the following is true regarding Java classes?(對於Java類,下面哪一個選項是正確的?)
    • A.All classes must have 1 parent but may have any number of children (derived or extended) classes(全部的類都必須有一個父類,可是可能有任意數量的子類(派生的或擴展的)類。)
    • B.All classes must have 1 child (derived or extended) class but may have any number of parent classes
    • C.All classes must have 1 parent class and may have a single child (derived or extended) class
    • D.All classes can have any number (0 or more) of parent classes and any number of children (derived or extended) classes
    • E.All classes can have either 0 or 1 parent class and any number of children (derived or extended) classes
  • 錯誤解析:Java支持繼承,但不支持多重繼承,所以Java類能夠有任意數量的子元素,但只有一個父類。此外,因爲全部Java類都直接或間接地從對象類繼承,全部Java類都只有一個父類。在作此題的時候,考慮了終極父類--Object類,由於它沒有父類,因此選擇則了E選項,可是,老師說能夠把Object類看做本身是本身的父類的問題,我也表示很無奈。心疼這一分......

  • 錯題3:A variable declared to be of one class can later reference an extended class of that class. This variable is known as(聲明爲一個類的變量稍後能夠引用該類的擴展類。這個變量被稱爲。)
    • A.protected
    • B.derivable
    • C.cloneable
    • D.polymorphic(多態)
    • E.none of the above, a variable declared to be of one class can never reference any other type of class, even an extended class
  • 錯誤解析:術語多態意味着變量能夠有多種形式。在通常狀況下,Java被強烈定義爲,一個變量,一旦被聲明爲一個類型,就永遠不會改變爲另外一種類型。例外的是,多態變量能夠是任何類型的派生類(儘管不是同時,變量能夠從一種類型轉換爲另外一種類型)。多態的問題,在看過第十章以後,明白了此題的答案,經過聲明爲父類的對象,就能夠引用繼承父類的子類的方法,這種靈活的操做就是經過繼承實現的多態。

  • 錯題4:In order to determine the type that a polymorphic variable refers to, the decision is made(爲了肯定多態變量所指的類型,作出了決策。)
    • A.by the programmer at the time the program is written
    • B.by the compiler at compile time
    • C.by the operating system when the program is loaded into memory
    • D.by the Java run-time environment at run time(經過運行時的Java運行環境。)
    • E.by the user at run time
  • 錯誤解析:多態變量能夠包含許多不一樣的類型,可是在程序執行以前,它不知道是哪種類型。在引用變量時,必須作出決策。這個決策是由運行時環境根據變量的最新分配而作出的。這道題也是有關多態的問題,因此看過第十章以後,是動態綁定的問題,效率較早期綁定低,可是動態綁定,體現了多態的靈活性。

  • 錯題5:Using the reserved word, super, one can(使用保留字super,能夠)
    • A.access a parent class'constructor(s)
    • B.access a parent class'methods and instance data
    • C.access a child class'constructor(s)
    • D.access a child class'methods and instance data
    • E.none of the above
  • 錯誤解析:保留字super提供了一種機制,用於訪問父類的方法和實例數據(無論它們是否隱藏)。此外,可使用super來訪問父類的構造函數。正確答案是A和B的組合選項。

  • 錯題6:If you instantiate an Abstract class, the class or object you wind up with(若是您實例化一個抽象類、類或對象會獲得)
    • A.is also an Abstract class
    • B.is a normal class
    • C.is an Interface
    • D.is a reference to an Object
    • E.can't exist you cannot instantiate an Abstract class(不能存在不能實例化一個抽象類)
  • 錯誤解析:您只能實例化具體的類而不是抽象類。可是您能夠擴展抽象類和接口。數據結構

    • 抽象類實際上是能夠實例化的,可是他的實例化方式不是經過new方式來建立對象,而是經過父類的引用來指向子類的實例來間接地實現父類的實例化(由於子類要實例化前,必定會先實例化他的父類。這樣建立了繼承抽象類的子類的對象,也就把其父類(抽象類)給實例化了).可是:接口是不能被實例化的(接口壓根就沒有構造函數)。

  • 錯題7:A derived class has access to all of the methods of the parent class, but only the protected or public instance data of the parent class.(派生類能夠訪問父類的全部方法,但只訪問父類的受保護或公共實例數據。)
    • A.true
    • B.false
  • 錯誤解析:因爲方法也能夠聲明爲私有的,所以派生類沒法訪問任何私有方法。所以,派生類只能訪問父類的受保護和公共方法和實例數據。沒有看到訪問全部方法,因此經過後半句就直接認爲對了。

  • 錯題8:If class AParentClass has a protected instance data x, and AChildClass is a derived class of AParentClass, then AChildClass can access x but can not redefine x to be a different type.(若是類AParentClass有一個受保護的實例數據x,而AChildClass是一個派生類的AParentClass,那麼AChildClass能夠訪問x,但不能從新定義x爲另外一種類型。)
    • A.true
    • B.false
  • 錯誤解析:派生類能夠從新定義父類的任何實例數據或方法。父類的版本如今是隱藏的,可是能夠經過使用super.x來訪問。父類的任何實例數據和方法均可以在子類裏進行重寫或是定義爲不一樣類型。

  • 考試有關繼承的問題,做爲面對對象的三大特徵之一,知識點不少,如何靈活的運用須要不斷的在實踐中學習,在考試以前,就感受本身本章學的不是很好。26道題快錯了三分之一,就和學習第五章和第六章的考試同樣,所以更要下足功夫去學習,去不斷反思本身的學習。爭取在日後的學習過程當中,可以縮短與那些優秀的學生的距離。

結對與互評

點評(方藝雯)

  • 博客中值得學習的或問題:
    • 知識點記錄的很詳細,還有配圖,圖文結合。
    • 沒有什麼問題,很完美的博客。
  • 代碼中值得學習的或問題:
    • 問題分析的很細緻,針對虛擬機和IDEA之間的問題。
  • 基於評分標準,我給本博客打分:15分。
    • 得分狀況以下: - 正確使用Markdown語法(加1分)
    • 模板中的要素齊全(加1分)
    • 教材學習中的問題和解決過程, 六個問題加6分
    • 代碼調試中的問題和解決過程, 三個問題加3分
    • 感想,體會不假大空的加1分
    • 點評認真,能指出博客和代碼中的問題的加1分
    • 代碼規範加1分
    • 有動手寫新代碼的加1分

點評(王禹涵)

  • 博客中值得學習的或問題:
    • 知識點記錄的很詳細的特別詳細。
    • 問題分析並能把網頁上的知識點進行截圖,配有網頁連接就更好了。
    • 沒有什麼太大的問題,很完美的博客。
  • 代碼中值得學習的或問題:
    • 代碼的問題,沒什麼問題,但願繼續保持就行。
  • 基於評分標準,我給本博客打分:11分。
  • 得分狀況以下:
    • 正確使用Markdown語法(加1分)
    • 模板中的要素齊全(加1分)
    • 教材學習中的問題和解決過程, 三個問題加3分
    • 代碼調試中的問題和解決過程, 二個問題加2分
    • 感想,體會不假大空的加1分
    • 點評認真,能指出博客和代碼中的問題的加1分
    • 代碼規範加1分
    • 有動手寫新代碼的加1分

互評對象

  • 本週結對學習狀況
    20172304方藝雯
    20172323王禹涵

  • 結對學習內容:第十章(繼承的問題)
    • 1.後綁定(動態綁定)

    • 2.繼承與接口實現的多態性

    • 3.排序(選擇排序法和插入排序法)

    • 4.搜索(線性搜索和二分搜索)

感悟

學習第十章的時候,經過老師給的書上例題代碼,能夠省去很多時間去理解多態性有關的知識點,可是,本週發佈了一個感受很好作的(實則並非的)一個小組項目-四則運算的編寫,可是細細思考了一下,忽然發現,本週好忙啊~~關於多態性的問題尚未深刻思考的同時還要編寫項目的UML類圖。好在還有一個五一小假能夠忙裏偷閒!

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 136/136 1/1 15/15
第二週 570/706 1/2 20/35
第三週 613/1319 1/3 23/58
第四周 1249/2568 1/5 30/88
第五週 904/3472 1/6 30/118
第六週 540/4012 1/7 30/118
第七週 826/4838 1/7 30/178
第八週 925/5763 2/9 45/223

參考資料

相關文章
相關標籤/搜索