編程範式--對象範式,這不是原來的配方了

来源:https://www.cnblogs.com/Kate-liu/archive/2019/08/13/11348855.html
-Advertisement-
Play Games

面向對象,OOP,我知道,我知道,我知道....... 你真的知道嗎?你確定知道嗎?你確定你是真的知道嗎? 經過了,靈魂三連問,開始一起看看什麼是面向對象編程~ ...


編程範式|對象範式,這不是原來的配方了

編程範式大家都應該不陌生,隨口都可以說出來幾個,比如 : 過程式,函數式,面向對象......

前言

在正式開始正文之前,我想你思考幾個問題:

1.什麼是面向對象編程?

2.面向對象的特性是什麼?

3.面向對象繼承真的好嗎?

4.你還記得面向對象中的組合嗎?

好了,看完這四個問題,開始正文的內容吧。

正文

面向對象,即對象範式,誕生於20世紀80年代,屬於第二次軟體危機的產物,解決了結構化編程的危機。

但是真正的發展,是很曲折的,畢竟編程範式,一定程度上解決了當前的環境的困惑,影響了下一代環境。

誕生

1967 年的** Simula-67 語言**,屬於第一個面向對象的語言,使用的是直接調用目標對象的方法,也就是我們所稱的組合方法。

受到 Simula-67 語言的啟發, Smalltalk-71 編程語言誕生,Smalltalk 不同於 Simula ,使用發消息實現對象方法的調用。

在一開始的對象範式中,對象範式思想 : 程式由對象組成,對象之間互相發送消息,協作完成任務。
註意 : 並不包括現在的 繼承

演變

面向對象編程範式的流行,更多的原因是解決了當時的困境,進行了新的演化。可以將其稱為軟體方法

C++ 編程語言的誕生,帶來了對象範式的演化。

由於在原本的對象範式思想中,在對象之間互相發消息,需要知道目標對象有哪些方法。所以,此時就需要在對象範式中,引入定義對象本身有哪些方法的“類”和“繼承”。此時的對象,也就是類造出來的,並不重要了。(七夕,程式員new對象,來源於此~)

經過演變,此時的對象範式,核心就變成 : 封裝、繼承、多態。
而原本的 面向對象 OOP(Object Oriented Programming) 也 演變為了 面向類程式設計 COP(Class Oriented Programming)

註意 : 此時,你是不是覺得自己一直寫的類,並且一直叫的面向對象,是不是可以更名為面向類了呢?

變化與不變

當對象範式變為 COP 之後,已經與初期的面向對象不一致了。

或者說,使用 COP這個概念,是‘錯’的。

這裡的錯,來源於繼承與組合

1994 年 Robert C. Martin 在《** Object-Oriented C++ Design Using Booch Method** 》中,曾建議面向對象程式設計從對象活動圖入手,而不是從類圖入手。(對象活動圖 : 組合,類圖 : COP)

1995 年出版的經典作品《 Design Patterns 》中,建議優先考慮組合而不是繼承。

2000 年後,工程界明確的提出:“組合比繼承重要,而且更靈活”。

好了,看到這裡,我不知道大家,在自己寫程式的時候,使用的是組合多呢? 還是繼承多?

結束語

綜上,我介紹了OOP的誕生,一級演化為COP,並且借用例證,表明對象範式的主張。

此刻,不知道你是否對於前言的四個問題有了自己的答案。

其實,面向對象的初衷 : 複合對象的唯一方法是組合。(並不是繼承)


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

-Advertisement-
Play Games
更多相關文章
  • @[toc] 推薦閱讀 "掘金 前端模塊化" "模塊化七日談" 部分內容摘自《移動 Web 前端高效開發實踐》 iKcamp 著 為什麼需要模塊化? JavaScript 發展初期,代碼簡單地堆積在一起,只要能順利地從上往下一次執行即可。但隨著網站越來越複雜,實現網站功能的 JavaScript 代 ...
  • 最近在研究SSR伺服器端渲染,自己寫了的小demo。 項目佈局 註:以防版本不對應產生的問題。package.json我也把放出來了,不過在文章的最後面 上圖是Vue官方的SSR原理介紹圖片。從這張圖片,我們可以知道:我們需要通過Webpack打包生成兩份bundle文件: Client Bundl ...
  • 軟體開發,一提起來感覺這個感覺這個詞範圍很大很廣,說起來也很籠統。不知所云,開發的到底是什麼?或者說開發的具體內容是什麼?以前我們講軟體開發主要是分前端和後端,那前端和後端又是什麼那?你可以這麼通俗的理解,前端就是用戶可以看到的界面,而後端就是客戶看不到的模塊。現在我們已經摒棄了這種說法,因為這種說 ...
  • 問題:因為登陸是用ajax傳值的,在哪個頁面點擊登陸的,登陸成功跳到再跳回那個頁面,之前直接傳遞的是 解決方法: 用js的函數 返回值 URIstring 的副本,其中的某些字元將被十六進位的轉義序列進行替換。 說明 該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進 ...
  • 1.對 WEB 標準以及 W3C 的理解與認識? 參考: 標簽閉合、標簽小寫、不亂嵌套、提高搜索機器人搜索幾率、使用外 鏈 css 和 js 腳本、 結構行為表現的分離、文件下載與頁面速度更快、內容能被更多的用戶所訪問、內容能被更 廣泛的設備所訪問、更少的代碼和組件,容易維 護、改版方便,不需要變動 ...
  • ...
  • 數據綁定是將視圖和數據相關聯,當數據發生變化時,可以自動更新視圖,本文介紹vue,js中數據綁定的語法 (1)插值 文本插值是最基本的形式 使用雙大括弧{{}},例如<span>數據:{{text}}</span>,當text的值改變時,文本中的值也會聯動的發生變化。例如: 大括弧裡面的值被替換為《 ...
  • 效果圖 HTMl5結婚微信電子請柬模板源碼↑ 點擊下載 HTMl5結婚微信電子請柬模板源碼基於最新版Animate CC設計,採用HTML5 Canvas+ASP製作。 請柬能夠有效識別pc和移動設備,在頁面中添加自動適應代碼,請柬中採用幻燈片輪播方式,包含片頭和結尾,帶有音樂控制開關。用戶可以通過 ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...