资源描述
按一下以編輯母片標題樣式,按一下以編輯母片,第二層,第三層,第四層,第五層,*,第五章物件之間的關聯,Java Objects 徹底研究,第五章物件之間的關聯Java Objects 徹底研究,1,相關與連結,多重度,一對一(1:1),一對多(1:m),多對多(m:m),多重度與連結,相關與連結多重度,2,第五章物件之间的关联课件,3,第五章物件之间的关联课件,4,第五章物件之间的关联课件,5,第五章物件之间的关联课件,6,聚合與組合,聚合,(aggregation)是一種特殊的相關,也稱為組成、由.構成或是擁有的關係,組合,(composition)則是聚合的強制形式,在這種關聯之下,零件不能脫離整體獨自出現,聚合與組合聚合(aggregation)是一種特殊的相關,7,第五章物件之间的关联课件,8,繼承,以新的抽象化概念處理需求變化,(不好的)方法#1:修改 Student 類別,(不好的)方法#2:複製Student 類別以建立 GraduateStudent 類別,正確的方法(#3):利用繼承功能,繼承以新的抽象化概念處理需求變化,9,繼承的本質是is-a,繼承的好處,類別階層結構,Object 類別,繼承真的是一種關聯嗎?,在物件階層裡面避免連鎖效應,衍生類別時的規則:該做哪些事,繼承的本質是is-a,10,第五章物件之间的关联课件,11,繼承的本質是is-a,繼承經常說成兩個類別之間的是一個(is-a)關聯,因為如果 B 類別(GraduateStudent)是從 A 類別(Student)衍生而來的話,那麼 B 真的就,是一個,A 的特例,如果 A 類別可以做的一些事情,提議中的 B 子類別沒辦法做的話,B 就不是 A 合理的子類別,特化,(specialization),泛化,(generalization),繼承的本質是is-a繼承經常說成兩個類別之間的是一個,12,繼承的好處,能明顯減少冗餘程式碼,與沒有繼承功能的語言比起來,子類別簡潔太多了,可以透過繼承功能沿用、擴充已經徹底測試過的程式碼,完全不必修改,最棒的是,即使我們沒有現有類別的原始碼,還是可以從現有類別衍生出新類別,分類是人類整理資訊的自然作法,繼承的好處 能明顯減少冗餘程式碼,13,類別階層結構,節點,(note),衍生而來,(derived from),前輩,(ancestor),後輩,(descendant),根節點,(root note),終端,(terminal),樹葉節點,(leaf node),兄弟,(siblings),類別階層結構 節點(note),14,第五章物件之间的关联课件,15,覆寫,重新利用父類別的特徵:super 關鍵字,衍生類別時的規則:別做哪些事,私有特徵與繼承,繼承與建構子,建構子不會被繼承,以 super(.)重新利用建構子,換掉預設的無參數建構子,關於多重繼承,覆寫,16,第五章物件之间的关联课件,17,第五章物件之间的关联课件,18,衍生類別時的規則:別做哪些事,我們不應該變更一個特徵的語義 也就是它的目的、意義,我們不能實際排除特徵,也不能用忽視特徵的方式排除它們,我們不應該在覆寫方法的時候,試著變更方法的簽名,衍生類別時的規則:別做哪些事我們不應該變更一個特徵的語義,19,第五章物件之间的关联课件,20,總結,相關,指的是類別之間的關聯 也就是兩個類別、型別實體之間可能產生的關聯;而,連結,(link)指的是兩個物件之間的實際關聯。,在 X 類別與 Y 類別之間,我們將,多重度,定義為 X 類別可以有幾個物件實體連結到指定的 Y 類別物件,反之亦然。多重度可能有一對一(1:1)、一對多(1:m)與多對多(m:m)這三種。不管在哪種多重度之下,兩端的物件都可能是必要、或不是必要的。,聚合,是一種特殊的相關性,隱含著包含的關係。,如何透過,繼承,,根據現有類別衍生出新類別,以及在衍生新類別的時候該做哪些事、別做哪些事;具體來說,我們討論了要如何,擴充,一個父類別,並且透過,新增特徵,或,覆載方法,這兩種管道來,特化,父類別。,類別階層結構會如何隨著時間演進,以及要怎麼避免在類別階層結構隨著需求改變的時候造成應用程式之內的連鎖效應。,建構子在繼承情形下的幾個特性。,為何在物件導向語言之內實作多重繼承是件麻煩的工作。,總結相關 指的是類別之間的關聯 也就是兩個類別、型別實體,21,
展开阅读全文