Java設計模式建模語言面向對象設計原則

設計模式

設計模式的概念

設計模式最初用于建筑領域的設計中。

軟件的設計模式,又稱設計模式,是一套被反復使用,多數人知道的,經過分類編目的,代碼設計經驗的總結。

它描述了在軟件設計過程中的一些不斷重復發生的問題,以及如何解決這些問題。

它是解決特定問題的一系列套路,是前輩們的代碼設計經驗的總結,具有一定的普遍性,可以反復使用。

設計模式的作用

設計模式的本質是面向對象設計原則的實際運用,是對類的封裝性,繼承性和多態性記憶類的關聯關系和組合關系的充分理解。

正確使用設計模式具有以下優點:

  1. 可以提高程序員的思維能力,編程能力和設計能力。
  2. 使程序設計更加標準化,使軟件開發效率大大提高。
  3. 使設計的代碼可重用性高,可讀性強,可靠性高,靈活性好,可維護性強。
  4. 能夠更好的去理解源碼架構。

如果需要設計大型項目架構,必須考慮增加新功能的代碼變動成本,要保證新加入的功能不影響以前的功能。

在這里插入圖片描述

建模語言

統一建模語言(Unifiled Modeling Language)簡稱UML是一種用于軟件系統分析和設計的語言工具,用于幫助軟件開發人員進行思考和記錄思路的結果。

UML圖:通過不同的圖形和符號來描述軟件模型以及各個元素之間的關系。

類圖:展示模型的靜態結構,特別是模型中存在的類,類的內部結構以及它們與其他類的關系等。

在這里插入圖片描述

類是指具有相同屬性,方法,關系的對象的抽象,封裝了數據和行為,是OOP(面向對象程序設計)的基礎,具有封裝性,繼承性和多態性等三大特性。

在UML中,類使用包含類名,屬性和操作且帶有分割線的矩形表示。

  1. 類名是一個字符串,例如:Student,Teacher
  2. 屬性是指類的特性,即類的成員變量。

UML按照以下格式:

[可見性]屬性名:類型[=默認值]
例如:-name:String
注意:“可見性”表示該屬性對類外的元素是否可見,包括公有(Public)、私
有(Private)、受保護(Protected)和朋友(Friendly)4 種,在類圖中分別
用符號+、-、#、~表示。

3.操作是類的任意一個實例對象都可以使用的行為,是類的成員方法

UML按照以下格式:

[可見性]名稱(參數列表)[:返回類型]
例如:+display():void。

學生類的UML表示如下:

在這里插入圖片描述

接口

接口是一種特殊的類,它具有類的結構但不可被實例化,只可以被子類實現。

它包含抽象操作,但不包含屬性。它描述了類或組件對外可見的

UML表示如下:

在這里插入圖片描述

類之間的關系

在軟件系統中,類不是孤立的,類與類之間存在各種關系。根據類與類之間的耦合度從弱到強排列,UML中類圖有以下幾種關系:

依賴關系,關聯關系,聚合關系,組合關系,泛化關系,實現關系。

其中泛化和實現的耦合度相等,它們是最強的。

1.依賴關系

依賴關系指的是一種臨時使用的關聯,是耦合度最低的關系。

某個類的方法通過局部變量,方法的參數或者對靜態方法的臨時調用來訪問另一個類(被依賴類)中的某些方法來完成一些職責。

在UML中依賴關系使用帶箭頭的虛線表示,剪頭從使用類指向被依賴類。

下圖展示人通過手機的語言傳送方法打電話

在這里插入圖片描述

2.關聯關系

是對象之間的引用關系。

用于表示一類對象與另一類對象之間的聯系,如老師和學生,師傅和徒弟等。

關聯關系是類與類之間最常用的一種關系,氛圍一般關聯關系,聚合關系和組合關系。

關聯可以分為單向關聯,雙向關聯,自關聯。

單向關聯:

在這里插入圖片描述

雙向關聯:

在這里插入圖片描述

所謂雙向關聯就是雙方各自持有對方類型的成員變量。

自關聯:

在這里插入圖片描述

3.聚合關系

聚合關系是關聯關系的一種,是強關聯關系,是整體和部分之間的關系。

聚合關系通過成員對象實現,其中成員對象時整體對象的一部分,但成員對象可脫離整體對象獨立存在。例如學校和老師的關系,若學校消失老師獨立存在

聚合關系在UML圖中用空心菱形的實線表示,菱形指向整體。

在這里插入圖片描述

4.組合關系

組合表示類之間的整體與部分的關系,但它是一種更強烈的聚合關系。

在組合關系中,整體對象可以控制部分對象的生命周期,一旦整體對象不存在了,部分對象也將不復存在,部分對象無法脫離整體對象而存在。例如頭和嘴的關系。

在UML圖中組合關系使用實心菱形實線表示:

在這里插入圖片描述

5.繼承關系

繼承關系是對象之間耦合度最大的一種關系,表示一般與特殊的關系,是父類與字類之間的關系,是一種繼承關系,是is-a的關系。

在UML圖中,繼承關系使用空心三角剪頭實線表示,剪頭從子類指向父類,在代碼實現時,使用面向對象的繼承機制來實現繼承關系。

例如下圖:

在這里插入圖片描述

6.實現關系

實現關系是接口和實現類之間的關系。

在這種關系中,類實現了接口,類中的操作實現了接口中所聲明的所有的抽象操作。

在UMl類圖中,實現關系使用帶空心三角剪頭的虛線表示

如下圖:

在這里插入圖片描述

面向對象設計原則

單一職責

單一職責原則是最簡單的面向對象設計原則,用于控制類的粒度大小。

對于單一職責原則,可以理解為一個類只負責一個功能領域中的相應職責,即一個類不要負責太多雜亂的工作。

在軟件系統中,如果一個類繼承的職責過多,就等于把這些職責耦合在一起,一個職責的變化可能會削弱或已知這個類完成其他職責的能力,這種耦合會導致一個脆弱的設計。

單一職責原則是實現高內聚,低耦合的指導方針。

以項目開發為例,如果項目組成員每個人的職責都很明確,可以專心開發自己負責的板塊,那么項目成功就會相對較高,反之則較低

在這里插入圖片描述

開閉原則

開閉原則指的是對拓展開放,對修改封閉。

在程序需要進行拓展時,不能去修改原有的代碼,實現一個熱插拔的效果。

為了使程序的拓展性好,易于維護和升級。想要達到這樣的效果,我們需要使用接口和抽象類。

因為抽象靈活性好,適應性廣,只要抽象的合理,可以基本保持軟件架構的穩定。

而軟件中易變的細節可以中抽象派生出來的實現類來拓展。

在這里插入圖片描述

依賴倒置

上層模塊不應該依賴低層模塊,它們都應該依賴于抽象,抽象不應該依賴于細節,細節應該依賴于抽象。

核心思想:面向接口,不面向實現編程。

抽象指的是抽象類或接口,細節指的是實現類。

使用接口或抽象類制定好規范和契約,不設計任何具體的操作,把展現細節的人物交給它們的實現類完成。

依賴倒置原則是實現開閉原則的重要途徑之一,降低了類與類模塊之間的耦合。

在這里插入圖片描述

接口隔離

使用多個接口,而不使用單一的接口,不強迫新功能實現不同的方法。

在這里插入圖片描述

組合/聚合復用原則

優先使用組合/聚合,使系統更加靈活,其次才考慮繼承,達到復用的目的.

一般而言,如果兩個類之間是"Has-A"關系應使用組合或聚合,如果是"Is-A"關系使用繼承

里氏替換原則

使用繼承時若父類的方法是非抽象的,那么子類繼承父類并對父類中的非抽象方法進行重寫時要注意,若使用父類的時候換成子類對象,由于子類對象重寫的父類方法,從而導致有可能實現不相同導致結果不對

里氏替換原則的提出

1987年麻省理工計算機科學實驗室思里科夫女士在面向對象技術的高峰會議上發表的文章《數據抽象和層次》中提出,她表明:擠成必須保證超類所擁有的性質在子類中仍然成立。

里氏替換原則主要闡述了有關擠成的一些原則,也就是什么時候應該使用繼承,什么時候不應該使用繼承,使用繼承時應該避免哪些問題。

里氏替換原則的定義

所有使用父類的地方必須能透明地使用其子類的對象。

在軟件中將一個基類對象替換成它的子類對象時程序將不會產生任何錯誤和異常

簡單來說,任何基類可以出現的地方,字類一定可以出現,所以字類可以拓展父類的中能,但不能改變父類原有的功能。

也就是說子類繼承父類時,除了添加新的方法完成新增功能外,盡量不要重寫父類方法,如果重寫父類的方法,程序運行會發生出錯概率。如果一定要用多態,那么父類可以設計成抽象接口。

歷史替換原則的作用

它是功能正確性的保證。
加強程序的健壯性,提高程序的維護性降低需求變更時引入的風險

迪米特原則

只和“朋友”交談,不和“陌生人”說話。

兩個類之間如果沒有直接的聯系,那么就不要相互之間調用,可以通過一個第三方進行調用。

例如:明星,公司,粉絲,經紀人之間的交流

可以通過經紀人和明星,公司,粉絲分別進行接觸,交流

總結

設計原則的核心思想

找出應用中可能需要變化之處,獨立出來,不要和不需要變化的代碼混在一起

針對抽象編程,而不是針對程序編程

為了交互對象的松耦合設計而努力

遵循設計原則;為了讓程序高內聚,低耦合

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

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

相關文章

uniapp 實現微信小程序電影選座功能

拖動代碼 /*** 獲取點擊或觸摸事件對應的座位位置* 通過事件對象獲取座位的行列信息* param {Event|TouchEvent} event - 點擊或觸摸事件對象* returns {Object} 返回座位位置對象,包含行(row)和列(col)信息,若未找到有效位置則返回 {row: -1, col: -1}*…

Docker - 切換源 (Linux / macOS)

文章目錄 Linux 系統macOS 系統 Linux 系統 修改配置文件:/etc/docker/daemon.json "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com"]驗證是否修改成功: docker info重啟 …

RocketMQ的安裝及配置(windows)

1. 環境準備 JDK需要先安裝好。 1. RocketMQ是用Java語言寫的,所以需要JDK的支持。2. 下載RocketMQ 建議下載這個低版本的 https://rocketmq.apache.org/release-notes/2020/12/21/4.8.0/ 下載之后解壓即可,目錄結構如下: 3. 配置RocketM…

【運維自動化-標準運維】如何實現一個最簡單的流程編排

流程編排是標準運維最核心的功能,通過將不同功能的原子插件在畫布上可視化的拖拽編排,可以實現各種不同場景的跨系統工作流。標準運維流程 根據實際運維操作場景梳理出來的操作步驟,通過不同的流轉邏輯(并行、分支、條件并行&…

性能測試之grafana展示jmeter測試指標與主機監控

性能測試之grafana展示jmeter測試指標與主機監控 背景 ? 公司新的項目準備開展性能測試,之前性能監控主要使用的jmeter的插件jpgc-Transactions per Second 與 jpgc- Response Times Over Time 與 jpgc - Active Threads Over Time等等插件監控性能指標結果,PerfMon Metrics…

1~2 課程簡介+ESP32-IDF環境搭建(虛擬機Linux環境下)

嗶站“宸芯IOT”視頻鏈接 一、課程內容介紹 1.什么是ESP32 ESP32是集成2.4GHz Wi-Fi和藍牙雙模的單芯片方案,具有超高的射頻性能、穩定性、通用性和可靠性,以及超低的功耗,滿足不同的功耗需求,適用于各種應用場景。ESP32是ESP8…

Vue3一個組件綁定多個 v-model,自定義 prop 和 event 名稱

Vue3一個組件綁定多個 v-model,自定義 prop 和 event 名稱 Vue3中v-model默認使用modelValue作為prop,update:modelValue作為事件,而Vue2使用的是value和input。此外,Vue3允許通過參數的方式為組件添加多個v-model綁定&#xff0…

YOLOv11小白的進擊之路(九)創新YOLO11損失函數之NWD損失函數源碼解讀

之前的博客也有對YOLO11的損失函數進行過源碼分析,可以參考:YOLOv11小白的進擊之路(六)創新YOLO的iou及損失函數時的源碼分析_yolov11的損失函數是什么-CSDN博客最近在做小目標檢測的時候注意到了NWD損失函數,這里對其…

VLN 論文精讀(四)Dynamic Path Navigation for Motion Agents with LLM Reasoning

這篇筆記用來描述2025年發表在arxiv上的一篇有關VLN領域的論文,由港科大和達特茅斯大學聯合發布,其核心思想有以下幾點: 將3D環境轉化為2D平面;2D平面中障礙物分布、機器人起點與終點信息用稀疏矩陣形式進行描述;與LL…

vue3之寫一個aichat ----vite.config.js

vite.config.js的CSS配置 postcss-pxtorem 開發響應式網頁的時候需要用到postcss-pxtorem amfe-flexible amfe-flexible是由阿里團隊開發的一個庫,它可以根據設備的屏幕寬度去動態調整HTML根元素()的字體大小,這意味著無論用戶使用什么尺寸的設備訪問你…

寶石PDF,全新 PC 版本,全部免費

寶石PDF已經運行 3 年時間,有客戶端,小程序,一直未上 PC 版本,隨著客戶端功能升級的不及時,很多用戶建議上 PC 版本。但是飛哥一直忙,這不終于給上了。 同時系統的名稱也從 “PDF云轉換”改為“寶石PDF”&…

.NET8使用EF Core連接SQLite

使用框架 .NET8 在nuget中,需要安裝包: SQLitePCLRaw.bundle_e_sqlite3,版本 2.1.10 Microsoft.EntityFrameworkCore.Sqlite.Core,版本 9.0.0 using Microsoft.Data.Sqlite; using Microsoft.EntityFrameworkCore; using Microso…

HTML課后實踐

實驗一 【實驗原理】 在搜索引擎的文本分析中,標題的信息權重要比正文的大,所以標題的樣式非常重要。本實驗通過把標題標記和常規文本進行對比輸出,掌握標題標簽的用法。在網頁中,有時需要為文字設置粗體、斜體或下劃線效果&#…

【紫光同創FPGA開發常用工具】FPGACPLD的下載與固化

文檔內容適配技術問題說明(非正文): 1、FPGA&CPLD如何下載位流文件; 2、FPGA外部flash如何固化位流文件; 3、PDS軟件燒錄界面如何新增用戶flash; 4、CPLD內部flash如何固化位流文件; F…

前端傳參+后端接參對照

? Java 后端參數接收注解 & 前端傳參格式對照 后端注解前端 Content-Type前端傳參方式說明RequestParamapplication/x-www-form-urlencodedURL參數 / form表單提交 / Postman form-data常用于 keyvalue 形式的參數;適合少量簡單參數RequestParamURL拼接/api/t…

計算機網絡的框架結構

計算機網絡課程知識體系框架 一、計算機網絡基礎概念 1.1 網絡組成要素 端系統(主機、服務器)通信鏈路(有線/無線介質)交換設備(路由器、交換機)協議體系(TCP/IP協議簇) 1.2 網絡…

塔能智慧物聯節能方案:點亮城市,賦能工廠

在全球積極倡導節能減排、綠色發展的時代背景下,塔能(江蘇)科技有限公司憑借其創新的智慧物聯節能一體化解決方案,在城市照明和工廠節能領域取得了顯著成果。該方案不僅為城市的夜晚帶來了明亮且節能的照明,還為工廠的…

Laravel框架下通過DB獲取數據并轉為數組的方法

在Laravel框架中,獲取數據庫信息并將其轉換為數組是一種常見的操作,特別是在處理數據導出、API響應等場景中。Laravel提供了簡潔而強大的數據庫抽象層,旨在簡化這類操作。接下來,我們將探討幾種在Laravel中通過數據庫抽象層&#…

pytorch小記(九):pytorch中創建指定形狀的張量: torch.empty

pytorch小記(九):pytorch中創建指定形狀的張量: torch.empty 詳細解釋1. 基本功能2. 語法3. 示例代碼示例 1:創建一個 5 的未初始化張量示例 2:創建一個 23 的未初始化張量示例 3:指定數據類型和設備 4. 注…

Linux cgroup cpuset

cpuset.c 是 Linux cgroup 的 cpuset 子系統的核心實現,這個文件的主要作用是: 實現 cgroup 的 cpuset 子系統管理進程的 CPU 和內存資源訪問權限提供 CPU 和內存節點的獨占功能支持層級化的資源管理提供用戶空間接口來配置和查看資源限制 關鍵數據結構…