《Java面向對象程序設計》學習筆記——第 7 章 面向對象設計的基本原則

?專欄:《Java面向對象程序設計》學習筆記

?# 第 7 章 面向對象設計的基本原則

7.1 UML 類圖簡介

類的 UML 圖

長方形垂直地分為三層。

  • 第 1 層是名字層。

    名字是常規字形,表明該類是具體類,如果類的名字是斜體字形,表明該類是抽象類

  • 第 2 層是變量層。

  • 第 3 層是方法層。

    訪問權限:+表示 public -表示 private #表示 protected

  • 接口 (lnterface)

  • 泛化關系 (Generalizationl)

    繼承關系 實線 空心三角形

  • 關聯關系 (Association)

    組合關系 實線 箭頭

  • 依賴關系 (Dependency)

    弱組合關系 虛線 箭頭

  • 實現關系 (ReaIization)

    實現接口 虛線 空心三角形

7.2 面向抽象原則

所謂面向抽象編程,是指當設計一個類時,不讓該類面向具體的類,而是面向抽象類或接口,即所設計類中的重要數據是抽象類或接口聲明的變量,而不是具體類聲明的變量。

“面向抽象編程”,該原則的核心就是將類中經常需要變化的部分分割出來。其關鍵點是分割變化。

  • 將每種可能的變化對應地交給抽象類的一個子類或實現接囗的一個類去負責

  • 從而讓類的設計者不去關心具體實現,避免所設計的類依賴于具體的實現。

  • 基于該原則就容易使設計的類應對用戶需求的變化。

7.3 “開-閉”原則

“開.閉”原則 (Open-Closed Principle) ,就是讓用戶的設計“對擴展開放,對修改關閉”。

本質是指當在一個設計中增加新的模塊時,不需要修改現有的模塊。

7.4 “多用組合、少用繼承”原則

繼承與復用

  • 子類從父類繼承的方法在編譯時刻就確定下來了,所以無法在運行期間改變從父類繼承的方注的行為。

  • 子類和父類的關系是強耦合關系,也就是說當父類的方法的行為更改時,必然導致子類發生變化

  • 通過繼承進行復用也稱“白盒”復用,其缺點是父類的內部細節對于子類而言是可見的。

組合與復用

如果一個對象 a 組合了對象 b ,那么對象 a 就可以委托對象 b 調用其方法

  • 通過組合對象來復用方法也稱“黑盒”復用,因為當前對象只能委托所包含的對象調用其方法,這樣一來,當前對象所包含的對象的方注的細節對當前對象是不可見的。
  • 對象與所包含的對象屬于弱耦合關系,因為,如果修改當前對所包含的對象的類的代碼,不必修改當前對象的類的代碼。
  • 當前對象可以在運行時刻動態指定所包含的對象

7.5 “高內聚-低耦合”原則

如果類中的方法是一組相關的行為,則稱該類是高內聚的,反之稱為低內聚的。

高內聚便于類的維護,而低內聚不利于類的維護。

低耦合就是盡量不盅讓一個類含有太多的其它類的實例的引用,以避免修改系統的其中一部分會影響到其它部分,

7.6 小結

  1. 在設計模式中,使用簡單的 UML 類圖可以簡潔地表達一個模式中類之間的關系。
  2. 面向抽象原則的核心思想是:在設計一個類時,不讓該類面向具體的類,而是面向抽象類或接口,即所設計類中的重要數據是抽象類或接口聲明的變量,而不是具體類聲明的變量。
  3. “開-閉”原則的本質是指當一個設計中增加新的模塊時,不需要修改現有的模塊。我們在給出一個設計時,應當首先考慮到用戶需求的變化,將應對用戶變化的部分設計為對擴展開放,而設計的核心部分是經過精心考慮之后確定下來的基本結構,這部分應當是對修改關閉的,即不能因為用戶的需求變化而再發生變化,因為這部分不是用來應對需求變化的。
  4. “多用組合、少用繼承”原則的目的是減少類之間的強耦合關系。
  5. “高內聚-低耦合”原則的目的是盡量不要讓一個類含有太多的其他類的實例的引用,便于類的維護。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35853.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35853.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35853.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言可變數組 嵌套的可變數組,翻過了山跨過了河 又掉進了坑

可變數組 ?專欄內容: postgresql內核源碼分析 手寫數據庫toadb 并發編程 個人主頁:我的主頁 座右銘:天行健,君子以自強不息;地勢坤,君子以厚德載物. 概述 數組中元素是順序存放,這一特性讓我們…

【IC萌新虛擬項目】spt_core模塊基于dc的綜合環境搭建與面積時序優化

關于整個虛擬項目,請參考: 【IC萌新虛擬項目】Package Process Unit項目全流程目錄_尼德蘭的喵的博客-CSDN博客 前言 當驗證的同學正在瘋狂寫測試點,補充測試用例各種找茬找bug時候,設計的同學也要進入到跑綜合修時序優化面積的階段了。 還是老樣子,關于芯片綜合的知識就…

Redis_緩存3_緩存異常(數據不一致、雪崩、擊穿、穿透)

14.6緩存異常 四個方面 緩存中數據和數據庫不一致緩存雪崩緩存擊穿緩存穿透 14.6.1數據不一致: 一致性包括兩種情況 緩存中有數據,需要和數據庫值相同緩存中沒有數據,數據庫中的數據是最新值 如果不符合以上兩種情況,則出現…

Linux tee

tee 是一個命令行工具,它可以從標準輸入讀取數據,并將其同時輸出到標準輸出和指定的文件中。tee 命令非常實用,特別是在需要同時查看輸出內容和將其保存到文件中的情況下。 tee 命令的基本語法如下: command | tee [options] [f…

Mysql 搭建MHA高可用架構,實現自動failover,完成主從切換

目錄 自動failover MHA: MHA 服務 項目:搭建Mysql主從復制、MHA高可用架構 實驗項目IP地址配置: MHA下載地址 項目步驟: 一、修改主機名 二、編寫一鍵安裝mha node腳本和一鍵安裝mha mangaer腳本,并執行安裝 …

docker容器限定ip訪問

docker容器限定ip訪問 一、測試所需環境:二、使用docker的 iptables 策略三、Docker使用iptables 與系統Firewalld之間的關系四、沖突解決方案 一、測試所需環境: 主機1: ip:192.168.3.117 環境配置:docker、httpd(do…

你真的了解ORM嗎?通過一個簡單的例子來學習ORM

什么是ORM ORM(Object-Relational Mapping)是一種將面向對象程序數據模型與關系數據庫之間進行映射的技術。 比如數據庫表user,它有id、name、age字段映射到Java實體類就是User類,有id、name、age屬性。 CREATE TABLE user (id…

2023國賽 高教社杯數學建模ABCDE題思路匯總分析

文章目錄 0 賽題思路1 競賽信息2 競賽時間3 建模常見問題類型3.1 分類問題3.2 優化問題3.3 預測問題3.4 評價問題 4 建模資料 0 賽題思路 (賽題出來以后第一時間在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 競賽信息 全國大學生數學建模…

echarts加釣魚島赤尾嶼(vue)(親測有效)

1.首先引入json文件,node_modules/echarts中就有 import chinaData from "../../node_modules/echarts/map/json/china.json" 2.初始化地圖,在初始化地圖的時候加入釣魚島和赤尾嶼的數據,在chinaData下的features中加入即可&#x…

Design-Pattern設計模式

Design-Pattern設計模式 圖說設計模式 圖說設計模式 在線書籍 軟件模式是將模式的一般概念應用于軟件開發領域,即軟件開發的 總體指導思路或參照樣板。軟件模式并非僅限于設計模式,還包括 架構模式、分析模式和過程模式等,實際上&#xff…

FFmpeg常見命令行(四):FFmpeg流媒體

前言 在Android音視頻開發中,網上知識點過于零碎,自學起來難度非常大,不過音視頻大牛Jhuster提出了《Android 音視頻從入門到提高 - 任務列表》,結合我自己的工作學習經歷,我準備寫一個音視頻系列blog。本文是音視頻系…

leetcode做題筆記77組合

給定兩個整數 n 和 k,返回范圍 [1, n] 中所有可能的 k 個數的組合。 你可以按 任何順序 返回答案。 思路一:直接求出組合數將每個組合放進數組中 int** combine(int n, int k, int* returnSize, int** returnColumnSizes) {int size 0, num 1, i;in…

Rust中的智能指針:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak<T>

Rust中的智能指針是什么 智能指針(smart pointers)是一類數據結構,是擁有數據所有權和額外功能的指針。是指針的進一步發展 指針(pointer)是一個包含內存地址的變量的通用概念。這個地址引用,或 ” 指向”…

UML 類圖的畫法

1.類圖的畫法 類 整體是個矩形,第一層類名,第二層屬性,第三層方法。 :public- : private# : protected空格: 默認的default 對應的類寫法。 public class Student {public String name;public Integer age;protected I…

2023杭電第七場補題報告1002 1004 1011 1013

2023杭電第七場補題報告1002 1004 1011 1013 1002 B. Random Nim Game (hdu.edu.cn) 思路 手推一下就可以發現其實除了一次必定結束的其他情況概論都是 1 2 \frac{1}{2} 21? 代碼 #include <bits/stdc.h> using namespace std; #define int long long void solve()…

【hello C++】特殊類設計

目錄 一、設計一個類&#xff0c;不能被拷貝 二、設計一個類&#xff0c;只能在堆上創建對象 三、設計一個類&#xff0c;只能在棧上創建對象 四、請設計一個類&#xff0c;不能被繼承 五、請設計一個類&#xff0c;只能創建一個對象(單例模式) C&#x1f337; 一、設計一個類&…

Sentinel使用實例

不說了&#xff0c;直接上官方文檔 https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/readme-zh.md Sentinel Example 項目說明 本項目演示如何使用 Sentinel starter 完成 Spring Clo…

【金融量化】對企業進行估值的方法有哪些?

估值的方法有哪些&#xff1f; 如何對企業進行估值&#xff1f;有2個方法估算。 1 絕對估值法 它是一種定價模型&#xff0c;用于計算企業的內在價值。 比如說你可以根據公司近N年的現金流情況。借此去預測未來N年的現金流情況。所有的現金流數據都可以在年報上查詢到。最后…

ios 知識

IOS 類文件.h和.m中interface的區別 大家都知道我們在創建類文件時會發現&#xff1a; #import <UIKit/UIKit.h>interface ViewController : UIViewControllerend和 #import "ViewController.h"interface ViewController ()end那么他們之間有何區別呢&#x…

【Ajax】回調地獄解決方法

回調地獄&#xff08;Callback Hell&#xff09;是指在異步編程中&#xff0c;特別是在嵌套的回調函數中&#xff0c;代碼變得深度嵌套、難以閱讀和維護的現象。這通常發生在處理多個異步操作時&#xff0c;每個操作都依賴于前一個操作的結果。回調地獄使代碼變得難以理解、擴展…