一切皆是對象

来源:https://www.cnblogs.com/zouhp/archive/2018/03/16/6701977.html
-Advertisement-
Play Games

一門語言如果是另一個語言的超集的話,那麼這麼語言就要向後者相容,會變得臃腫,在某些方面的顯得過於複雜,如c++ 2.引用是可以獨立的存在的,當給一個引用進行初始化的時候,就是給這個引用添加了關聯 如 string a;和string a="as" 3.常量的使用通常都是放在程式的內部,但也可放在非r ...


    一門語言如果是另一個語言的超集的話,那麼這麼語言就要向後者相容,會變得臃腫,在某些方面的顯得過於複雜,如c++

    2.引用是可以獨立的存在的,當給一個引用進行初始化的時候,就是給這個引用添加了關聯 如 string  a;和string a="as"

    3.常量的使用通常都是放在程式的內部,但也可放在非rom存儲器中(只讀存儲器)。

   4.越是簡單的事物,其可塑性就很強,可以在此基礎上做出各種修飾;對於複雜的事物,確實相反,要改變所付出的代價很大,效果達不到預期。封閉性適合複雜,簡單對應抽象。上層建築依賴底層所存在,但要求要隨著時間變化,做出不同的響應,所肩負的職責越來越多。上層的建築的職能都是依賴底層,要想其賦予不同職責,故要改變底層,添加滿足新的最小單位(只賦予一個職責)職能。故在上層和基礎層之間映入抽象層,使上層依賴一個抽象層,在抽象層可以選擇的添加新的最小單位,高層依賴抽象。

 6.五大原則:

單一職責原則SRP:Single Responsibility Principle

開放封閉原則OCP:Open-Close Principle

Liskov替換原則LSP:Liskov Substitution Principle

依賴倒置原則DIP:Dependency Invertion Principle

介面隔離原則ISP:Interface Separate Principle

 

  在面向對象設計中,如何通過很小的設計改變就可以應對設計需求的變化,這是令設計者極為關註的問題。為此不少OO先驅提出了很多有關面向對象的設計原則用於指導OO的設計和開發。下麵是幾條與類設計相關的設計原則。

 

1. 開閉原則(the Open Closed Principle OCP)

   一個模塊在擴展性方面應該是開放的而在更改性方面應該是封閉的。因此在進行面向對象設計時要儘量考慮介面封裝機制、抽象機制和多態技術。該原則同樣適合 於非面向對象設計的方法,是軟體工程設計方法的重要原則之一。我們以收音機的例子為例,講述面向對象的開閉原則。我們收聽節目時需要打開收音機電源,對準 電臺頻率和進行音量調節。但是對於不同的收音機,實現這三個步驟的細節往往有所不同。比如自動收縮電臺的收音機和按鈕式收縮在操作細節上並不相同。因此, 我們不太可能針對每種不同類型的收音機通過一個收音機類來實現(通過重載)這些不同的操作方式。但是我們可以定義一個收音機介面,提供開機、關機、增加頻 率、降低頻率、增加音量、降低音量六個抽象方法。不同的收音機繼承並實現這六個抽象方法。這樣新增收音機類型不會影響其它原有的收音機類型,收音機類型擴 展極為方便。此外,已存在的收音機類型在修改其操作方法時也不會影響到其它類型的收音機。 

 

2. 替換原則 (the Liskov Substitution Principle LSP)

  子類應當可以替換父類並出現在父類能夠出現的任何地方。這個原則是Liskov於1987年提出的設計原則。它同樣可以從Bertrand Meyer 的DBC (Design by Contract) 的概念推出。

  我們以學生為例,夜校生為學生的子類,因此在任何學生可以出現的地方,夜校生均可出現。這個例子有些牽強,一個能夠反映這個原則的例子時圓和橢圓,圓是橢圓的一個特殊子類。因此任何出現橢圓的地方,圓均可以出現。但反過來就可能行不通。 

  運用替換原則時,我們儘量把類B設計為抽象類或者介面,讓C類繼承類B(介面B)並實現操作A和操作B,運行時,類C實例替換B,這樣我們即可進行新類的擴展(繼承類B或介面B),同時無須對類A進行修改。

 

3. 依賴原則 (the Dependency Inversion Principle DIP)

  在進行業務設計時,與特定業務有關的依賴關係應該儘量依賴介面和抽象類,而不是依賴於具體類。具體類只負責相關業務的實現,修改具體類不影響與特定業務有關的依賴關係。

  在結構化設計中,我們可以看到底層的模塊是對高層抽象模塊的實現(高層抽象模塊通過調用底層模塊),這說明,抽象的模塊要依賴具體實現相關的模塊,底層模塊的具體實現發生變動時將會嚴重影響高層抽象的模塊,顯然這是結構化方法的一個"硬傷"。

  面向對象方法的依賴關係剛好相反,具體實現類依賴於抽象類和介面。

  為此,我們在進行業務設計時,應儘量在介面或抽象類中定義業務方法的原型,並通過具體的實現類(子類)來實現該業務方法,業務方法內容的修改將不會影響到運行時業務方法的調用。 

 

4. 介面分離原則(the Interface Segregation Principle ISP)

    採用多個與特定客戶類有關的介面比採用一個通用的涵蓋多個業務方法的介面要好。

  ISP原則是另外一個支持諸如COM等組件化的使能技術。缺少ISP,組件、類的可用性和移植性將大打折扣。

  這個原則的本質相當簡單。如果你擁有一個針對多個客戶的類,為每一個客戶創建特定業務介面,然後使該客戶類繼承多個特定業務介面將比直接載入客戶所需所有方法有效。

 

以 上四個原則是面向對象中常常用到的原則。此外,除上述四原則外,還有一些常用的經驗諸如類結構層次以三到四層為宜、類的職責明確化(一個類對應一個具體職 責)等可供我們在進行面向對象設計參考。但就上面的幾個原則看來,我們看到這些類在幾何分佈上呈現樹型拓撲的關係,這是一種良好、開放式的線性關係、具有 較低的設計複雜度。一般說來,在軟體設計中我們應當儘量避免出現帶有閉包、迴圈的設計關係,它們反映的是較大的耦合度和設計複雜化。 

 


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

-Advertisement-
Play Games
更多相關文章
  • “Hello World”,這大概是每個程式員最熟悉的一句話了吧。每每我們進入一種語言的世界,第一句話就是向它問好。仔細想來,也許這就是我們的一種態度,一種出於習慣的禮貌,或者說是一種出於禮貌的問候吧。“世界,你好!”。短短的一句話,意味著從那一刻起,我們便正式進入了某一種語言的世界,所以也可以說是 ...
  • 實驗結論 題目1:輸入 1~7 的整數,如果輸入的是 1~5,則輸出“workday. Let’s work hard”;如果輸入的是 6~7,則輸出“weekend. Let’s have a rest.” 源代碼(1)及運行結果 源代碼(2)及運行結果 題目2:輸入一個整數,將各位數字反轉後輸出 ...
  • 對磁碟文件進行排序,文件包含最多一千萬條記錄,每條記錄都是7位的整數,無其他相關數據,每個整數只出現一次,由於某種系統需要,只能提供1MB左右記憶體。由於是實時系統,最多運行幾分鐘就能給出回應,十秒鐘是比較理想的運行時間。 準確的問題描述: 輸入:一個包含n個正整數的文件,每個數都小於n,其中n=10 ...
  • 簡單使用 Mvc 內置的 Ioc(續) 本文基於 .NET Core 2.0。 上一章《[.Net Core] 簡單使用 Mvc 內置的 Ioc》已經對日常 Mvc 中的 Ioc 的簡單用法進行了說明,此外還有一些需要補充的內容。 接下來會圍繞著這些疑問進行回答:AOP 中 Filter 和 Ioc ...
  • 1.1 需求問題的提出 五個與需求有關的敗因描述:(1)不完整的需求(2)缺乏用戶參與(3)不切實際的用戶期望(4)需求變更頻繁(5)提供了不再需要的需求 1.2 不同項目的需求視圖 不同的軟體項目具有不同的特點,這對需求也帶來了影響,在此主要從信息系統、嵌入式系統、軟體產品等不同角度說明如何進行相 ...
  • 無法在web伺服器上啟動調試,您沒有調試web伺服器進程的許可權,您需要以web伺服器的用戶賬戶身份運行,或者具有管理員許可權。 原因:從Windows NT 6.1開始,既Windows Vista版本開始,增強了用戶控制,尤其是Windows 8。如果沒有用系統優化軟體做過用戶控制,系統許可權調整,即 ...
  • 資料參考來源 : 我姓區不姓區 有關於WIF的介紹以及環境配置在此不多說,可以去網上搜索,或者點擊上方鏈接前往查看,以下所述都基於WIF配置完成的條件上; 以下很多東西都是從 我姓區不姓區 的博客直接copy過來的,我另外加的就是我跟著他的博客一路中所踩的坑以及我自己的理解; 開始單點登錄踩坑之旅: ...
  • 恢復內容開始 .net 項目開發管理中我們經常使用Nuget管理我們的類庫。由於某些原因 nuget v3的鏡像源https://api.nuget.org/v3/index.json 經常連接不上。 博客園提供了鏡像源 https://nuget.cnblogs.com/v3/index.json ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...