20182327 2019-2020-1 《數據結構與面向對象程序設計》第五週學習總結

20182327 2019-2020-1 《數據結構與面向對象程序設計》第五週學習總結

教材學習內容總結

  • 一、繼承
    繼承是從已有類派生一個新類的過程
    繼承的目的之一是複用已有的軟件
    繼承在父類與子類之間創建了is-a的關係
    類的繼承格式
    class 父類{};
    class 子類 extends 父類{};
    interface 父類{};
    class 子類 implements 父類{};
    super和this
    super:能夠經過super來實現對父類的訪問,用來引用當前對象的父類
    this:指向本身的引用html

  • 二、抽象類的子類將對從父類繼承的抽象方法提供具體定義——方法重寫特殊狀況
    可見性
    私有成員也被子類繼承,但不能經過名字直接引用。不過能夠間接引用他們。
    設計繼承
    每次派生操做都應是一個is-a關係。子類應該是更具體的父類對象
    設計類層次是爲了複用,或是未來能夠複用
    在問題域中標出類和對象時,找出他們的共性。共性處於越高層次,越能保持一致性,進行維護。
    適當地重寫方法來知足子類性能
    按需給子類添加新的變量,但不要隱藏繼承的任何變量
    容許每一個類管理它本身的數據。因此使用super引用來調用構造方法,能夠用它調用被重寫的方法
    設計類層次來知足應用需求,須要注意未來如何使用
    即便目前並不使用,也要適當地在子類重寫toString和equals這類的通常方法,以便未來派生的類不會出現問題
    使用抽象類來爲類層次中的具體類指定一個公共類接口
    謹慎使用可見性修飾符,在派生類中提供不違背封裝原則訪問便可。java

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

  • 問題1:靜態變量和靜態方法有什麼區別?
  • 解答:
    一、靜態變量有兩種狀況:
    靜態變量是基本數據類型,這種狀況下在類的外部沒必要建立該類的實例就能夠直接使用
    靜態變量是一個引用。這種狀況比較特殊,主要問題是因爲靜態變量是一個對象的引用,那麼必須初始化這個對象以後才能將引用指向它。
    所以若是要把一個引用定義成static的,就必須在定義的時候就對其對象進行初始化。
    二、靜態方法:與類變量不一樣,方法(靜態方法與實例方法)在內存中只有一份,無 論該類有多少個實例,都共用一個方法。
    靜態方法與實例方法的不一樣主要有:
    靜態方法能夠直接使用,而實例方法必須在類實例化以後經過對象來調用。git

  • 問題2:迭代器
  • 問題2解決方案:
    迭代器(Iterator)
    迭代器是一種設計模式,它是一個對象,它能夠遍歷並選擇序列中的對象,而開發人員不須要了解該序列的底層結構。迭代器一般被稱爲「輕量級」對象,由於建立它的代價小。Java中的Iterator功能比較簡單,而且只能單向移動:使用方法iterator()要求容器返回一個Iterator。第一次調用Iterator的next()方法時,它返回序列的第一個元素。注意:iterator()方法是java.lang.Iterable接口,被Collection繼承。使用next()得到序列中的下一個元素。使用hasNext()檢查序列中是否還有元素。使用remove()將迭代器新返回的元素刪除。程序員

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

  • 問題一:凱撒密碼的程序須要在主函數帶參運行。
  • 問題一解決方法:換位思考,編了個test程序驗證。算法

  • 問題二:加密(解密)算法與加密(解密)密鑰有什麼區別
  • 問題二解決方法::密鑰使用的背景是開放式環境,也就是說,若算法公開,解密的關鍵就在於雙方使用相同或對稱的密鑰。簡單來講,密鑰是一種參數(它是在明文轉換爲密文或將密文轉換爲明文的算法中輸入的數據)
    加密算法是明文轉換成密文的變換函數,是算法。設計模式

  • 問題三:在System.out.println()中想要打印字符型,可是卻打印出了它的ASCII碼值。
  • 問題三解決辦法:使用String.valueOf('字符')的方法,就能將字符型以字符串形式返回。數據結構

    代碼託管

上週考試錯題總結

  • 錯題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
    錯誤解析:經過擴展一個類並繼承它,新類不須要從新實現任何繼承的方法或實例數據,從而節省了程序員的工做量。所以,代碼重用是重用他人代碼的能力,經過擴展它來知足您的需求。經過繼承父類能夠大大的縮減代碼的重複,對於本身選擇接口類的問題,表示本身當時很迷,不知道怎麼回事就選擇了接口。ide

  • 錯題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

  • 錯題9
    Aside from permitting inheritance, the visibility modifier protected is also used to
    A. permit access to the protected item by any class defined in the same package
    B. permit access to the protected item by any static class
    C. permit access to the protected item by any parent class
    D. ensure that the class cannot throw a NullPointerException
    E. define abstract elements of an interface
    正確答案: A 個人答案: B
    解析:受保護的可見性修飾符用於以受保護的方式控制對項目的訪問。保護是訪問限於當前類(如私人項目),同一包中的類或此類的擴展類。

結對及互評

評分標準

  1. 正確使用Markdown語法(加1分):
    • 不使用Markdown不加分
    • 有語法錯誤的不加分(連接打不開,表格不對,列表不正確...)
    • 排版混亂的不加分
  2. 模板中的要素齊全(加1分)
    • 缺乏「教材學習中的問題和解決過程」的不加分
    • 缺乏「代碼調試中的問題和解決過程」的不加分
    • 代碼託管不能打開的不加分
    • 缺乏「結對及互評」的不能打開的不加分
    • 缺乏「上週考試錯題總結」的不能加分
    • 缺乏「進度條」的不能加分
    • 缺乏「參考資料」的不能加分
  3. 教材學習中的問題和解決過程, 一個問題加1分

  4. 代碼調試中的問題和解決過程, 一個問題加1分

  5. 本週有效代碼超過300分行的(加2分)
    • 一週提交次數少於20次的不加分
  6. 其餘加分:
    • 週五前發博客的加1分
    • 感想,體會不假大空的加1分
    • 排版精美的加一分
    • 進度條中記錄學習時間與改進狀況的加1分
    • 有動手寫新代碼的加1分
    • 課後選擇題有驗證的加1分
    • 代碼Commit Message規範的加1分
    • 錯題學習深刻的加1分
    • 點評認真,能指出博客和代碼中的問題的加1分
    • 結對學習狀況真實可信的加1分
  7. 扣分:
    • 有抄襲的扣至0分
    • 代碼做弊的扣至0分
    • 遲交做業的扣至0分

點評模板:

  • 博客中值得學習的或問題:
    • 同窗們已經有意識的碰見錯誤就截圖,給後面寫博客的各類方便不少,我一直忘記只能從新敲一遍。
  • 代碼中值得學習的或問題:
    • 條條大路通羅馬,好多同窗能夠曲線思惟弄出代碼,聽他們講解後真的很佩服。
  • 基於評分標準,我給本博客打分:11分。得分狀況以下:正確使用Markdown語法+1.教材學習中的問題和解決過程+2.代碼調試中的問題和解決過程+2.感想,體會不假大空+1.錯題學習深刻+1.點評認真,能指出博客和代碼中的問題+1.結對學習狀況真實可信+1.課後題有驗證+1,進度條有記錄+1.

  • 本週結對學習狀況
  • 上週博客互評狀況

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

  • 每節課的考試讓我十分吃不消,不僅是英語單方面的問題,Java也有許多問題亟待解決,由於課本版本不一樣,找起知識點來比較麻煩。
  • 國慶在無盡的代碼實驗中抽空看了閱兵,感受祖國強大了,我打代碼也有信心了。這個國慶打了前面幾周代碼量的總和,好多同窗好牛,本身好菜,各類把打好的代碼推翻重來,參考別人代碼改來改去把本身的程序變成了四不像,運行不了,本週更加熟悉了運行一個目的堆了四五個程序的Java常態,繼續虛心學習吧。
  • 實驗做業愈來愈難,我愈來愈菜,隨時gg。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 200/200 2/2 20/20
第二週 350/500 2/4 24/38
第三週 512/1000 3/7 22/60
第四周 1158/1300 4/9 35/90
第五週 2905/3000 4/5 24/24

參考資料

相關文章
相關標籤/搜索