程式員七大面向對象設計原則

来源:http://www.cnblogs.com/john69-/archive/2016/03/02/5235934.html
-Advertisement-
Play Games

在沒有瞭解到面向對象設計的7大原則前,我只是一隻豆子! 但豆子終將會成長不是嗎? 1.開閉原則:一個軟體實體應當對擴展開放,對修改關閉。也就是說在所涉及一個模塊的時候,應當使這個模塊可以在不被修改的前提下被擴展,即實現在不修改源代碼的情況下改變這個模塊的行為。 在開閉原則的定義中,軟體實體可以指一個


在沒有瞭解到面向對象設計的7大原則前,我只是一隻豆子!   但豆子終將會成長不是嗎? 

1.開閉原則:一個軟體實體應當對擴展開放,對修改關閉。也就是說在所涉及一個模塊的時候,應當使這個模塊可以在不被修改的前提下被擴展,即實現在不修改源代碼的情況下改變這個模塊的行為。

   在開閉原則的定義中,軟體實體可以指一個軟體模塊、一個由多個類組成的局部結構或一個讀庫的類。

   抽象化是開閉原則的關鍵。

 是添加新代碼完成方法的重構  而不是修改源代碼

聲明: 本文源自   

 

2.依賴倒轉原則:高層模塊不應該依賴低層模塊,他們都應依賴抽象。抽象不應該依賴於細節,細節應該依賴於抽象。

        要針對介面編程,不要針對實現編程。
        代碼要依賴於抽象的類,而不要依賴於具體的類;要針對介面或抽象類編程,而不是針對具體類編程。
        實現開閉原則的關鍵是抽象化,並且從抽象化導出具體化實現,如果說開閉原則是面向對象設計的目標的話,那麼依賴倒轉原則就是面向對
        象設計的主要手段。
        依賴倒轉原則的常用實現方式之一是在代碼中使用抽象類。而將具體類放在配置文件中
        依賴註入:構造註入:通過構造函數註入實例變數      設值註入:通過Setter方法註入視力變數      介面註入:通過介面方法註入實例變數

聲明: 本文源自  

3.里氏替換原則: 子類出現在父類出現的位置,且不影響程式的運行。但是反過來就是父類對象是不能替換子類對象的。

         有了里氏替換原則,才使繼承復用成為可能,

         子類可以在父類的基礎上添加新的行為。(子類要比父類優秀)

                        子類型必須能替換掉他的父類型

 Pass :瞭解更多

 

4.單一職責原則:一個對象應該只包含單一的職責,且該職責要被封裝在具體的一個類中

        即一個類只做單一的事,避免繁雜類的出現,使得類的繼承和重載更加的方便。

耦合性(Coupling),也叫耦合度,是對模塊間關聯程度的度量。耦合的強弱取決與模塊間介面的複雜性、調用模塊的方式以及通過界面傳送
數據的多少。模塊間的耦合度是指模塊之間的依賴關係,包括控制關係、調用關係、數據傳遞關係。模塊間聯繫越多,其耦合性越強,同時
表明其獨立性越差。軟體設計中通常用耦合度和內聚度作為衡量模塊獨立程度的標準。劃分模塊的一個準則就是高內聚低耦合。

 Pass :瞭解更多

 

 5.介面隔離原則:客戶端不應該依賴於那些他不需要的介面。

        在使用介面的時候,為客戶端提供指定的介面大小,按需分配,隱藏客戶端不需要的介面。

        介面隔離原則是指:不使用單一的總介面,每一個介面應承擔相對獨立的角色。

        類應完全依賴相應的專門的介面。

Pass:  瞭解更多

 

6.合成復用原則 :儘量使用對象組合,而不是使用繼承來達到復用的目的。

        一般來說使用繼承的時候,要嚴格遵守里氏替換原則,基類的細節對於子類是可見的,這種方式屬於靜態的,

      減少了程式的靈活性如果基類發生改變,其子類也不得不隨之變動。

        一般來說首先使用"組合/聚合" 降低類於類之間耦合度,減少類的變化對其他類的影響。

 

 合成復用原則 :就是在一個新的對象里通過關聯關係(包括組合關係和聚合關係)來使用一些已有的對象,使之成為新對象的一部分;新對象通過委派調用已有對象的方法達到復用功能的目的。簡言之:復用時要儘量使用組合/聚合關係(關聯關係),少用繼承

Pass 瞭解更多

 

 

7.迪米特法則:一個軟體實體儘可能少的和其他軟體實體發生相互作用。

         減少對象與對象之間的直接交互,創建中間類, 通過中間類進行對象與對象間的間接交互,

       當我們需要增加或刪除空間的時候,就只需在中間類中進行調整,無需修改已有控制項的源代碼。

      降低程式之間的耦合度,使類於類之間呈現鬆散的耦合關係。程式更加的靈活。

 

 

靈活使用面向對象的準則,使我們的編程更加靈活,封裝性更好,復用性更高,易於維護。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Java 異常處理方法 Java catch多個異常處理 Java Finally實例 Java 如何使用 catch 處理異常 Java 多線程異常處理實例 Java 如何獲取異常的堆棧信息 Java 重載方法異常處理 Java 鏈試異常實例 Java 如何自定義異常處理
  • 學習maven項目時 搭建個ssm項目 算是給自己留個備份吧 環境說明: MyEclipse10 Maven 3.2.3 框架: struts2 2.3.24.1 spring3 3.0.5.RELEASE mybatis 3.2.2 資料庫: mysql 5.7 <project xmlns="h
  • 所謂“單例”: 單例模式是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個實例而且該實例易於外界訪問,從而方便對實例個數的控制並節約系統資源。如果希望在系統中某個類的對象只能存在一個,單例模式是最好的解決方案。 C#中的例子: 轉:htt
  • 1 package com.shejimoshi.behavioral.Iterator; 2 3 4 /** 5 * 功能:我們的迭代器介面 6 * 時間:2016年3月4日上午9:17:36 7 * 作者:cutter_point 8 */ 9 public interface MyIterat
  • 1、概念:裝飾模式是在不必改變原類文件和使用繼承的情況下,動態的擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象,又叫做包裝模式。 2、在java的IO流這個章節中,我們會發現有底層流,比如說位元組和字元流,有緩衝流等等: FileOutputStream:基本的文件輸出流 B
  • 引言 用過ASP.NET WebApi2.0, 上次去面試被問到什麼是Restful ,一時間竟不知道從何說起,所以搜集資料,做個備註,有時間好多來看看加深理解。 什麼是Restful 一種軟體架構風格,設計風格而不是標準,只是提供了一組設計原則和約束條件。它主要用於客戶端和伺服器交互類的軟體。基於
  • 面向對象原則綜述 七大原則總脈絡圖: 註:1,2,3,4,5顯示的重要等級 常用的面向對象設計原則包括7個,這些原則並不是孤立存在的,它們相互依賴,相互補充。 下麵就是面向對象七個原則的一一解析 一、開閉原則 1. 開閉原則定義 :一個軟體實體應當對擴展開放,對修改關閉。也就是說在設計一個模塊的時候
  • 1 package com.shejimoshi.behavioral.Interpreter; 2 3 4 /** 5 * 功能:演奏文本 6 * 時間:2016年3月3日上午9:26:19 7 * 作者:cutter_point 8 */ 9 public class PlayContext 1
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...