日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java】《基于Java的面向对象范式》学习笔记分享

發布時間:2025/3/15 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java】《基于Java的面向对象范式》学习笔记分享 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 面向對象的世界觀里,類有兩種職責:數據職責和行為職責,這兩種職責并存于類中。
  • 類和對象都是職責的體現,不同的是一個抽象一個具體。
  • 面向對象編程是有職責的對象之間的協作。
  • 不同的視角:結構化方法→行為視角、數據為中心方法→數據視角、面向對象方法→職責視角。
  • 想要解決一個問題,我們會希望在問題空間找到一種建模的方式,然后將問題空間的問題轉化為解空間的答案。
  • 對象是一種建模方法,它既表示客觀世界的問題空間中某個具體的事物,又表示軟件系統解空間的基本元素。
  • 沒有行為的類,可以被設計為某個其他類的屬性。
  • 類是描述相同事物的集合,它以概要的方式描述了相同事物集合中的所有元素,但卻允許類中的每個實體元素可以在非本質特征上變化。
  • 為什么不要重復造輪子?因為輪子的設計已經足夠應對變更了(瘋狂暗示軟件復用)。
  • 代碼提交前必須進行單元測試。單元測試針對于軟件設計的最小單位方法展開正確性檢驗。
  • 單元測試有兩種情況:獨立且與其他方法無關(獨立測試即可);半獨立且只與同類中的方法有依賴關系(先測被依賴的方法)。
  • 一種好的類設計方案:
  • 封裝可以將將潛在的變更與外界隔離開來。
  • 封裝具有三原則:將數據與操作數據的行為放在一起;用職責驅動的設計原則來決定數據和行為在一起;職責要具有完備性。
  • 關于類設計完備性的說明。
    完備性是一個數學上的概念,下面舉例說明:
    比如我們有一個水杯,它只進水不出水就是不完備的……
    特殊情況下,設計可能不能是完備的,比如會計打發票,就算打錯了,可以紅沖處理掉但不可能把已發生的支付過程取消掉……
  • 靜態不能訪問非靜態。
  • 一個對象的整體協議可能會分為多個內聚的邏輯行為組。劃分后的每個邏輯行為組就描述了對象的一個獨立職責,體現了對象的一個獨立角色。如果一個對象擁有多個行為組,就意味著該對象擁有多個不同的職責,需要扮演多個不同的角色。每個角色都是對象的一個職責的體現,所有的角色是對象所有職責的體現。理想的單一職責對象應該僅僅扮演一個角色。
  • 職責的分配原則:覆蓋到所有重要的方面,尋找需要執行的動作以及需要維護和生成的信息。
  • 單一職責的實施:當發現兩變化同時要求我們修改這個類時,就要考慮拆分這個類。
  • 一組對象共同協作履行整個應用軟件的責任。
  • 系統職責的劃分可以是從小到大,將小職責聚合為大職責;也可以是從大到小,將大職責分配給小對象。自底向上和自頂向下往往是同時使用的。
  • 對于一個對象來說,它可以與四種對象協作:它自身、任何以參數形式傳入的對象、被該對象直接創建的對象、其所持有的對象引用。總結就是:一個對象可以和能拿到引用的對象協作。
  • 面向對象程序設計的一些關系:
    一般關系:依賴
    對象層次的關系:連接、關聯
    類層次的關系:繼承、實現
  • 依賴體現了一種物理關系,因為這種依賴關系不僅僅體現在類和類之間,甚至可以存在于其他的軟件工程元素之間。
    我們可以說,一個類依賴于另一個類,一個對象依賴于另外一個對象,一個用例依賴于另外一個用例,一個包依賴于另外一個包,總之依賴表達了一種物理上的連接。
  • 連接表達了對象與對象之間的一種連接,它是一種表達一種聯系的具體的實例。
  • 關聯體現了對象與對象之間的一種邏輯關系,可分為:普通關聯、聚合、組合。
  • 關系的強度:依賴 < 普通關聯 < 聚合 < 組合
  • 依賴是一種“…uses a…”關系,就是某個對象的功能依賴于另外的某個對象,而被依賴的對象僅僅作為一種工具在使用,該對象不持有被依賴對象的引用。UML中依賴關系表現為[虛線+魚骨箭頭]。
  • 關聯是一種“…has a…”關系,就是某個對象會長期持有另一個對象的引用,而二者的關聯往往也是相互的。關聯的兩個對象彼此之間沒有任何強制性的約束,只要是二者同意,可以隨時解除關系或進行關聯,它們在生命周期上沒有任何約定。被關聯的對象還可以被別的對象關聯,所以被關聯對象是可以共享的。關聯可以是單向的也可以是雙向的,可以是普通關聯也可以是可導航關聯。
  • 關聯的多重性通過一條實線來表達,可接魚骨箭頭表示方向性。
  • 聚合是一種“…owns a…”關系,是一種強版本的關聯,它暗含一種所屬關系以及生命周期關系。UML中聚合關系中間一條實線,一端是指向所有方的空心菱形,另一端是指向被所有方的魚骨箭頭。被聚合的對象還可以被別的對象關聯,所以被聚合對象是可以共享的。
  • 組合是一種“…is a part of…”關系,是一種最強版本的關聯,它直接要求包含對象對被包含對象的擁有以及被包含對象生命周期的關系。UML中組合關系中間一條實線,一端是指向所有方的實心菱形,另一端是指向被所有方的魚骨箭頭。被組合的對象還可以被別的對象關聯,所以被聚合對象是可以共享的,然而絕不存在兩個包含對象對同一個被包含對象的共享。
  • 組合不但把關聯到的對象作為一個成員變量,并在此處new了一個對象。這一點是非常重要的。
  • 可修改性有三重含義:狹義可修改性(對已有實現的修改不影響到其他實現)、可擴展性(對新的實現的擴展不影響到已有的其他實現)、靈活性(實現動態配置)。
  • 繼承的由來:利用泛化關系實現代碼重用和抽象等。備注:泛化≠繼承。
  • 可以繼承什么、可以覆蓋什么:
    子類繼承了父類所有的成員變量和成員方法。
    子類可以增加父類的成員變量和成員方法。
    子類可以覆蓋父類的成員方法。
    子類不可以覆蓋父類的成員變量。
  • 繼承是一種“…is a…”關系,“A is B, B is C → A is C”。
  • 編譯時,編譯器根據引用變量的類型(而不是引用變量指向的類型)決定能否調用某個方法;執行時,JVM依據實際引用變量指向對象的類型決定實際哪個方法被調用。這就是所謂“編譯時類型”和“運行時類型”的區別,即所謂“編譯時類型”是我們的Java代碼中定義的變量類型,“運行時類型”看的是這個對象到底是什么類型(被new成了什么),這是學習多態時必須理解的。如此,我們就對SuperClass obj = new SubClass();有了更深刻的理解。
  • 多態通過分離“做什么”和“怎么做”,從另一個角度將接口和實現分離開來。多態不僅能夠改善代碼的組織結構和可讀性,還能創建“可擴展”的程序,即無論在項目最初創建時,還是在需要添加新功能時,都可以進行擴充。
  • 多態使得系統更容易理解,其作用之一就是消除類型之間的耦合關系。多態方法調用允許一種類型表現出與其他相似類型之間的區別,只要他們都是從同一基類導出來的。這種區別是根據方法行為的不同而表示出來的,雖然這些方法都可以通過同一個基類來調用。
  • 多態的意思是多種形式,多種形式的意思是可以出現不同的計算類型,并且在運行的時候動態的確定正確的計算。
  • 多態是指一個多個方法使用同一個名字卻有多種解釋,當使用這個名字去調用方法時,系統將選擇重載自動的選擇其中的一個方法。在多態中只關心一個對象做什么,而不關心如何去做。
  • 子類對象可以賦給父類引用變量,父類對象不可以賦給子類引用對象。
  • Overriding的限制:參數必須一致,返回值必須兼容,方法的可達性不能降低。
  • 非抽象類中不可以有抽象方法,抽象類中可以有非抽象方法。
  • 抽象方法的存在就是為了多態,具體的類必須實現所有的抽象方法,實現抽象方法就像子類覆蓋父類的方法一樣。
  • 子類繼承父類,就會把父類完全繼承過來,二者之間存在一種規約,即父類擁有什么接口,子類也具有什么接口。父類變子類也要變;而組合的兩端沒有“契約”的存在,有時會顯得更好。
  • 組合和繼承要注意:確保繼承是一種“…is a…”的關系;使用繼承不要僅僅是為了代碼復用或是體現多態。
  • 父類接口的脆弱性會給子類帶來很大的麻煩。
  • 繼承的一些問題(補充向):
    (1) 我們肯定是要重寫一些什么的,但如果重寫一切,那父類就不該是一個類而應該是一個接口;另外,如果不使用任何繼承的方法,那繼承也毫無意義。
    (2) 我們不希望堆棧支持所有的父類方法,這是一個問題。
    (3) 繼承的父類與子類存在共有接口的耦合性,當父類接口發生改變時,子類接口也隨之改變。
    (4) 當子類創建對象的時候,就決定了其實現選擇,無法實現動態的修改。
  • 接口定義了一種規約,而類實現了一種規約。
  • 含有繼承關系的初始化:
  • 新覆蓋的方法會在對象創建之前被調用。
  • 總結

    以上是生活随笔為你收集整理的【Java】《基于Java的面向对象范式》学习笔记分享的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。