首頁 後端開發 C#.Net教程 C#中物件導向設計七個原則介紹

C#中物件導向設計七個原則介紹

Sep 06, 2017 am 11:21 AM
原則 設計

C#中物件導向設計七個原則介紹

#

一:單一職責原則(Single Responsibility Principle, SRP)

    1、定義:一個物件應該只包含單一的職責,並且該職責被完整地封裝在一個類別中

     或:就一個類別而言,應該只有一個造成它變化的原因。

   2、分析:一個類別(或大到模組,小到方法)承擔的職責越多,它被重複使用的可能性越小,如果一個類別承擔的職責過多,就相當於將這些職責耦合在一起,當其中一個職責變化時,可能會影響其他職責的運作。 類別的職責主要包括兩個面向:資料職責和行為職責,資料職責透過其屬性來體現,而行為職責則透過其方法來體現。 單一職責原則是實現高內聚、低耦合的指導方針,在許多程式碼重構手法中都能找到它的存在,它是最簡單但又最難運用的原則,需要設計人員發現類別的不同職責並將其分離,而發現類別的多重職責需要設計人員具有較強的分析設計能力和相關重構經驗。

   3、實例:

實例說明某基於Java的C/S系統的「登入功能」透過以下登入類別(Login)實現:
現使用單一職責原則對其進行重構。

二:開閉原則(Open-Closed Principle, OCP)

     1、定義:一個軟體實體應對擴充開放,對修改關閉。也就是說在設計一個模組的時候,應當使這個模組可以在不被修改的前提下被擴展,也就是實現在不修改原始碼的情況下改變這個模組的行為。  

   2、分析:開閉原則由Bertrand Meyer於1988年提出,它是物件導向設計中最重要的原則之一。在開閉原則的定義中,軟體實體可以指一個軟體模組、一個由多個類別組成的局部結構或一個獨立的類別。抽象化是開閉原則的關鍵。 開閉原則也可以透過一個更具體的「對可變性封裝原則」來描述,對可變性封裝原則(Principle of Encapsulation of Variation, EVP)要求找到系統的可變因素並將其封裝起來。

三:里氏代換原則(Liskov Substitution Principle, LSP)      

1、定義:如果對每一個類型為S的物件o1,都有類型為T的物件o2,使得以T定義的所有程式P在所有的物件o1都代換成o2時,程式P的行為沒有變化,那麼型別S是型別T的子型別

  或:所有參考基底類別(父類別)的地方必須能透明地使用其子類別的物件。

2、分析:里氏代換原則由2008年圖靈獎得主、美國第一位電腦科學女博士、麻省理工學院教授Barbara Liskov和卡內基.梅隆大學Jeannette Wing教授於1994年提出。

里氏代換原則可以通俗表述為:在軟體中如果能夠使用基類對象,那麼一定能夠使用其子類對象。把基類都替換成它的子類,程式將不會產生任何錯誤和異常,反過來則不成立,如果一個軟體實體使用的是一個子類的話,那麼它不一定能夠使用基類。里氏代換原則是實現開閉原則的重要方式之一,由於使用基類對象的地方都可以使用子類對象,因此在程序中盡量使用基類類型來對對象進行定義,而在運行時再確定其子類別類型,並用子類別物件來取代父類別物件。

四:依賴倒轉原則(Dependence Inversion Principle, DIP)    

1、定義:高層模組不應該依賴低層模組,它們都應該依賴抽象。抽像不應該依賴細節,細節應該依賴抽象

  或:要針對介面編程,不要針對實作程式設計。 (Program to an interface, not an implementation.)   

2、分析:依賴倒轉原則是Robert C. Martin在1996年為《C++ Reporter》所寫的專欄Engineering Notebook的第三篇,後來加入到他在2002年出版的經典著作《Agile Software Development, Principles, Patterns, and Practices》。   

     簡單來說,依賴倒轉原則就是指:程式碼要依賴抽象的類,而不要依賴特定的類別;要針對介面或抽象類別編程,而不是針對特定類別編程。 實現開閉原則的關鍵是抽象化,並且從抽象化導出具體化實現,如果說開閉原則是面向對象設計的目標的話,那麼依賴倒轉原則就是物件導向設計的主要手段。

   依賴倒轉原則的常用實作方式之一是在程式碼中使用抽象類,而將特定類別放在設定檔中。

類別之間的耦合 

零耦合關係

具體耦合關係

抽象耦合關係

依賴倒轉原則要求客戶端依賴抽象耦合,以抽象方式耦合是依賴倒轉原則的關鍵。

依賴注入 

#建構注入(Constructor Injection):透過建構子注入實例變數。 

設值注入(Setter Injection):透過Setter方法注入實例變數。 

介面注入(Interface Injection):透過介面方法注入實例變數。

五:介面隔離原則(Interface Segregation Principle, ISP)

   1、定義:客戶端不應該依賴那些它不需要的介面   注意,在該定義中的介面指的是所定義的方法。

   或:一旦一個介面太大,則需要將它分割成一些更細小的接口,使用該接口的客戶端僅需知道與之相關的方法即可。

   2、分析:介面隔離原則是指使用多個專門的接口,而不使用單一的總接口。每個介面應該承擔一種相對獨立的角色,不多不少,不干不該幹的事,該幹的事都要幹。

 (1) 一個接口就只代表一個角色,每個角色都有它特定的一個接口,此時這個原則可以叫做「角色隔離原則」。

   (2) 介面僅提供客戶端所需的行為,即所需的方法,客戶端不需要的行為則隱藏起來,應當為客戶端提供盡可能小的單獨的接口,而不要提供大的總接口。

        使用介面隔離原則分割介面時,首先必須滿足單一職責原則,將一組相關的操作定義在一個介面中,且在滿足高內聚的前提下,介面中的方法越少越好。 可以在進行系統設計時採用客製化服務的方式,即為不同的客戶端提供寬窄不同的接口,只提供使用者需要的行為,而隱藏使用者不需要的行為。

六:合成復用原則(Composite Reuse Principle, CRP)又稱為組合/聚合復用原則(Composition/ Aggregate Reuse Principle, CARP)

#     1、定義:盡量使用對象組合,而不是繼承來達到復用的目的。 (Favor composition of objects over inheritance as a reuse mechanism.)

     2、解析:合成復用原則是指在一個新的物件裡透過關聯關係(包括組合關係和聚合關係)來使用一些已有的對象,使之成為新對象的一部分;新對象透過委派調用已有對象的方法達到復用其已有功能的目的。簡言:要盡量使用組合/聚合關係,少用繼承。

在物件導向設計中,可以透過兩種基本方法在不同的環境中重複使用已有的設計和實現,即透過組合/聚合關係或透過繼承。
繼承復用:實作簡單,易於擴充。破壞系統的封裝性;從基底類別繼承而來的實作是靜態的,不可能在運行時發生改變,沒有足夠的靈活性;只能在有限的環境中使用。 (「白箱」復用 )

組合/聚合復用:耦合度相對較低,選擇性地呼叫成員物件的操作;可以在運行時動態進行。 (「黑箱」多用)
組合/聚合可以使系統更靈活,類別與類別之間的耦合度降低,一個類別的變化對其他類別造成的影響相對較少,因此一般首選使用組合/聚合來實現復用;其次才考慮繼承,在使用繼承時,需要嚴格遵循里氏代換原則,有效使用繼承會有助於對問題的理解,降低複雜度,而濫用繼承反而會增加系統構建和維護的難度以及系統的複雜度,因此需要慎重使用繼承復用。

七:迪米特法則(Law of Demeter, LoD)又稱為最少知識原則(Least Knowledge Principle, LKP)

1、定義:

#(1 ) 不要和「陌生人」說話。英文定義為:Don't talk to strangers.

(2) 只與你的直接朋友通信。英文定義為:Talk only to your immediate friends.

(3) 每一個軟體單位對其他的單位都只有最少的知識,而且局限於那些與本單位密切相關的軟體單位。英文定義為:Each unit should have only limited knowledge about other units: only units "closely" related to the current unit.   

  2、分析:迪米特法則來自於1987年秋美國東北大學(Northeastern University )一個名為「Demeter」的研究計畫。簡單地說,迪米特法則就是指一個軟體實體應盡可能少的與其他實體發生交互作用。這樣,當一個模組修改時,就會盡量少的影響其他的模組,擴展會相對容易,這是對軟體實體之間通訊的限制,它要求限制軟體實體之間通訊的寬度和深度。

以上是C#中物件導向設計七個原則介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

首發649元 酷比魔術方塊小酷平板2 Lite來了:11吋護眼大螢幕+8000mAh大電量 首發649元 酷比魔術方塊小酷平板2 Lite來了:11吋護眼大螢幕+8000mAh大電量 Mar 05, 2024 pm 05:34 PM

3月4日消息,酷比魔方將於3月5日推出「小酷平板2Lite」平板電腦,首發價649元。據悉,新款平板搭載紫光展銳T606處理器,採用12nm工藝,由兩顆1.6GHz的ArmCortex-A75CPU和六顆ArmCortex-A55處理器組成。螢幕採用的是10.95吋IPS護眼屏,解析度為1280x800,亮度高至350尼特。影像方面,小酷平板2Lite後置1300萬像素主攝,前置500萬像素自拍鏡頭,另支援4G上網/通話、藍牙5.0、Wi-Fi5。此外,官方宣稱,這款平板電腦&l

首發899元 中興5G隨身Wi-Fi U50S開賣:最高網速500Mbps 首發899元 中興5G隨身Wi-Fi U50S開賣:最高網速500Mbps Apr 26, 2024 pm 03:46 PM

4月26日消息,中興5G隨身Wi-FiU50S目前已經正式開賣,首發899元。外觀設計上,中興U50S隨身Wi-Fi簡約時尚,易於手持和包裝。其尺寸為159/73/18mm,攜帶方便,讓您隨時隨地暢享5G高速網絡,實現暢行無阻的行動辦公與娛樂體驗。中興5G隨身Wi-FiU50S該設備支援先進的Wi-Fi6協議,峰值速率高達1800Mbps,依托驍龍X55高效能5G平台,為用戶提供極速的網路體驗。不僅支援5G雙模SA+NSA網路環境與Sub-6GHz頻段,實測網速更可達驚人的500Mbps,輕鬆滿

復古潮流! HMD與喜力聯合推出翻蓋手機:透明外殼設計 復古潮流! HMD與喜力聯合推出翻蓋手機:透明外殼設計 Apr 17, 2024 pm 06:50 PM

4月17日消息,HMD攜手知名啤酒品牌喜力以及創意公司Bodega,聯袂推出了一款獨特的翻蓋手機-無聊手機(TheBoringPhone)。這款手機不僅在設計上充滿新意,更在功能上返璞歸真,旨在引領人們回歸真實的人際交往,享受與朋友暢飲的純粹時光。無聊手機採用了獨特的透明翻蓋設計,展現出簡約而不失優雅的美感。其內部配備了2.8英寸QVGA顯示屏,外部則是一塊1.77英寸的顯示屏,為用戶提供了基本的視覺交互體驗。在攝影方面,雖然僅搭載了30萬畫素的鏡頭,但足以應付日常的簡

榮耀Magic V3首發AI離焦護眼技術:有效緩和近視發展 榮耀Magic V3首發AI離焦護眼技術:有效緩和近視發展 Jul 18, 2024 am 09:27 AM

7月12日消息,榮耀MagicV3系列今日正式發布,搭載全新榮耀視力舒緩綠洲護眼屏,在屏幕本身俱備高規格和高素質的同時,還開創性的引入AI主動式護眼技術。據悉,傳統的緩解近視的方式是“近視鏡”,近視眼鏡度數均勻分佈,保證了視線中心區域成像在視網膜之上,但周邊區域成像在視網膜後,視網膜感應到成像在後,促進眼軸向後生長,從而使度數加深。目前主要的緩解近視發展的方式之一是“離焦鏡”,其中心區域度數正常,週邊區域透過光學設計分區調整,從而使周邊區域成像落在視網膜前,

台電M50 Mini小平板來了:8.7吋IPS螢幕、5000mAh電池 台電M50 Mini小平板來了:8.7吋IPS螢幕、5000mAh電池 Apr 04, 2024 am 08:31 AM

4月3日消息,台電即將推出的M50Mini平板電腦是一款功能豐富、效能強大的裝置。這款8吋小平板新品搭載了8.7吋的IPS螢幕,為用戶提供了出色的視覺體驗。其金屬機身設計不僅美觀,也增強了設備的耐用性。在性能方面,M50Mini搭載了紫光展銳T606八核心處理器,擁有兩個A75核心和六個A55核心,確保了流暢且高效的運作體驗。同時,該平板還配備了6GB+128GB的儲存方案,並支援8GB記憶體擴展,滿足了用戶對於儲存和多任務處理的需求。在續航上,M50Mini配備了5000mAh的電池,支援Ty

vivo訊號最強手機! vivo X100s搭載寰宇訊號放大系統:21天線、360°環繞設計 vivo訊號最強手機! vivo X100s搭載寰宇訊號放大系統:21天線、360°環繞設計 Jun 03, 2024 pm 08:41 PM

5月13日消息,vivoX100s今晚正式發布,除了出色的影像,新機在訊號方面表現也十分強悍。根據vivo官方介紹,vivoX100s採用了創新的寰宇訊號放大系統,該系統配備了高達21根天線。這項設計基於直屏進行了重新優化,以平衡5G、4G、Wi-Fi、GPS以及NFC等眾多訊號需求。這使得vivoX100s成為了vivo有史以來訊號接收能力最強的手機。新款手機還採用了獨特的360°環繞設計,天線分佈在機身周圍。這項設計不僅增強了訊號的強度,還針對日常各種握持姿勢進行了優化,避免了因握持方式不當導

ppt結束頁如何設計才夠吸引人 ppt結束頁如何設計才夠吸引人 Mar 20, 2024 pm 12:30 PM

在工作中,ppt是職場人士常使用的辦公室軟體。一個完整的ppt必須有一個好的結束頁。不同的職業要求賦予不同的ppt製作特色。關於結束頁的製作,如何才能設計的比較吸引人呢?下邊我們一起看一看,如何設計ppt結束頁吧! ppt結束頁的設計可以在文字和動畫方面進行一些調整,根據需要選擇簡潔或炫目的風格。接下來,我們將重點放在如何透過創新的表達方式來打造出符合要求的ppt結束頁。那我們就開始今天的教學吧。 1.對於結束頁的製作上,使用圖片中的任何文字都可以,結束頁重要的是表示我的簡報結束了。 2、除了這些文字,

1399元起 榮耀X60i手機開售:視覺四等邊OLED直屏 1399元起 榮耀X60i手機開售:視覺四等邊OLED直屏 Jul 29, 2024 pm 08:25 PM

7月29日消息,榮耀X60i手機今日正式開售,先發1,399元。設計上,榮耀X60i手機採用居中挖孔直屏設計,四邊近乎無界的超窄邊框,大大拓寬了視野邊界。榮耀X60i參數顯示器:6.7吋高清顯示器電池:5000mAh大容量電池處理器:天璣6080處理器(台積電6nm,2x2.4G的A76+6×2G的A55)系統:MagicOS8.0系統其他功能: 5G訊號增強靈動膠囊螢幕下指紋雙MIC降噪知識問答攝影能力:後置雙攝系統:5000萬像素主攝200萬像素輔助鏡頭前置自拍鏡頭:800萬像素價格:8GB

See all articles