面向對象編程的時代會不會走到盡頭?它的問題是什麼?

2020-10-10 軟帝學院一JAVA教學


面向對象程序設計,其本質是以建立模型體現出來的抽象思維過程和面向對象的方法。模型是用來反映現實世界中事物特徵的。

任何一個模型都不可能反映客觀事物的一切具體特徵,只能對事物特徵和變化規律的一種抽象,且在它所涉及的範圍內更普遍、更集中、更深刻地描述客體的特徵。通過建立模型而達到的抽象是人們對客體認識的深化。


面向對象程序設計方法是儘可能模擬人類的思維方式,使得軟體的開發方法與過程儘可能接近人類認識世界、解決現實問題的方法和過程,也即使得描述問題的問題空間與問題的解決方案空間在結構上儘可能一致,把客觀世界中的實體抽象為問題域中的對象。


面向對象編程一經問世,他就改變了開發人員看待代碼的方式,在 20 世紀 80 年代以前盛行的過程式編程,是非常面向機器的。開發人員需要對計算機如何工作有相當多的了解,才能寫出好代碼。

通過封裝數據和方法,面向對象編程使軟體開發更加以人為本。它符合人類的直覺,方法 drive()屬於數據組car,但不屬於組teddybear


繼承出現的時候,那也是直觀的。汽車是car的一個子群,有著相同的屬性,這是完全合理的。


然後問題來了,假設你正在設置一個新程序,並且你正在考慮設計一個新的類。你回想起為另一個項目創建的一個簡潔的小類,你意識到它對你目前正在嘗試做的事情來說是非常完美的。

沒問題!你可以在新項目中重用舊項目中的類。


除了這個類實際上可能是另一個類的子類外,所以現在還需要包含父類。然後,你意識到父類也依賴於其他類,如此一來,最終會包含大量的代碼。

這幾乎說明了一切。重用類是很好的做法。事實上,它可以成為面向對象編程的一個主要優點。


但是,為了避免 DRY(don’t repeat yourself 不要重複自己),你最好編寫一個新的類,而不是包含大量的依賴項。


假如你已經成功地為新代碼重用了來自另一個項目的一個類。如果基類發生變化,會發生什麼情況?


它有可能會破壞你的整個代碼。甚至你可能連碰都沒有碰過。但是,有一天你的項目工作得很順利,但第二天就不這樣了,因為有人更改了基類中的一個小細節,而這個細節最終對你的項目非常重要。


使用繼承的次數越多,可能需要進行的維護就越多。因此,儘管重用代碼在短期內看起來非常有效,但從長遠來看,它可能會付出高昂的代價。

由於繼承沒有包含在面向對象編程的原始形式中,這個問題不能稱為面向對象的固有問題,這只是一個教條走得太遠的例子。


不僅僅是面向對象編程可能做過頭了。在函數式編程中,在屏幕上處理用戶輸入或列印消息是極其困難的。對於這些目的,面向對象或過程化編程要更好一些。


儘管如此,仍有一些開發人員試圖將這些東西作為純函數來實現,並將他們的代碼擴展到幾十行,以至於沒有人能夠理解。使用另一種範式,他們可以輕鬆地將代碼簡化為幾行可讀的代碼。


毫無疑問,函數式編程,而面向對象編程在過去幾年來受到了一些。


了解新的編程範式並在適當的時候使用它們是有意義的。如果說,面向對象編程是讓開發人員無論走到哪裡都能看到釘子和錘子,那這是不是將錘子扔出窗外的理由呢?不是的。你可以在工具箱中添加一把螺絲刀,或者一把小刀、一把剪刀,然後根據手頭的問題來選擇工具。


函數式和面向對象的程式設計師一樣,不要將你的範式當做宗教來對待。它們只是工具,都有自己的用途。你使用什麼工具應該只取決於你正在解決什麼問題。


現在,關於函數式編程與面向對象編程的爭論是相當之激烈,但是這些爭論可以總結為一個問題:' 面向對象編程的時代會不會走到盡頭? '


最有可能的情況是,面向對象編程將再持續十年左右。因此,在接下來的幾年,不要將面向對象編程從你的工具箱扔出去。但要確保它不是你唯一的工具。


文章參考: Towards Data Science 博客 原文作者:Rhea Moutafis

*版權聲明:圖文均來源於公開網絡資源,若有侵權,請聯繫我刪除!


相關焦點

  • 面向對象編程會被拋棄嗎?這五大問題不容忽視
    值得一提的是,繼承性和多態性並不是面向對象編程所特有的。真正的區別在於封裝數據及其包含的方法。在計算資源比今天稀缺得多的時代,這是一個天才的想法。那麼它應該是 Scanner 還是 Printer 的子類?這個問題根本沒有完美的答案。即使這個問題不會破壞你的代碼,但它經常出現,會讓人很沮喪。
  • 面向對象編程的災難:是時候考慮更新換代了!
    儘管面向對象編程承諾會解決模塊化和提高可重用性,但卻未能兌現其承諾(稍後將對此進行更多闡述)。面向對象編程代碼鼓勵使用共享的可變狀態,這一點多次證明是不安全的。面向對象編程通常需要大量樣板代碼(低信噪比)。函數編程什麼是函數編程?有些人認為它是一個高度複雜的編程範式,只適用於學術界,不適用於「現實世界」。這與事實相去甚遠!
  • Python 面向對象編程
    在學習面向對象編程時,我決定深入研究它的歷史,結果發現它很迷人。術語「面向對象編程」(OOP)是Alan Kay 在1966年研究生院時提出的。Simula語言是第一種具有面向對象編程特點的程式語言。它是在1967年開發的,用於製作模擬程序,其中最重要的信息稱為對象。
  • 跟我學java編程—面向對象的編程思想
    當前軟體開發領域有兩大編程思想,一個是面向過程的編程思想,一個是面向對象的編程思想。依據編程思想的不同,程式語言也分為面向過程的語言和面向對象的語言。Java、NET等是面向對象的語言,C語言、Fortran等是面向過程的語言。
  • 面向對象的程式語言
    在剛開始介紹到JAVA時,我們就提到說JAVA是一種面向對象的程式語言。我們在代碼編寫的時候用到的說到的最多的就是new一個對象,那麼什麼是對象,面向對象有哪些特點,與面向過程的編程有什麼區別。在一個類中包含了所有對象共有的特徵/屬性(變量),和行為(方法)。一個類中可以創建多個對象,同一個類的多個對象,結構屬性相同數據不同。我們可以說類是對象的模板,對象是類的具體實現。如:人是一個類,每一個個體是一個對象。類不但定義了抽象數據類型的組成(成員變量),同時還定義了可以對該類實施的操作(方法)。定義了類之後,提升了代碼的模塊化以及代碼的重用性,但程序依然存在問題。
  • Python面向對象編程的基本概念
    名為Simula的語言是第一種具有面向對象編程功能的程式語言。它是在1967年開發的,用於製作仿真程序,其中最重要的信息稱為對象。之後,這種編程技術已被包括Python在內的各種程式語言所採用,如今它的應用幾乎遍及各個領域,例如實時系統,人工智慧和專家系統,客戶端伺服器系統,面向對象的資料庫以及許多其他領域。更多。因此,在本文中,我將解釋Python中的面向對象編程的基本概念。
  • Python面向對象編程的一些見解
    我們需要根據我們想要達到的目標去學習相應的知識點,而不是去盲目的學習所有的一切,這樣會導致偏離你的目標越來越遠,當你迷失時,會讓你的學習興趣大大降低,甚至會讓你產生放棄學習的念頭。網上有很多關於Python的教程,基本上都是大同小異,你要先了解你的目標是什麼,然後再了解目標達成所需要掌握的知識點,然後再根據所需知識點去尋找相應的課程。
  • Java面向對象編程的7個特點
    發送消息給對象時,如果程序不知道接收的具體類型是什麼,但最終執行是正確的,這就是對象的「多態性」(Polymorphism)。面向對象的程序設計語言是通過「動態綁定」的方式來實現對象的多態性的。編譯器和運行時系統會負責對所有細節的控制;我們只需知道要做什麼,以及如何利用多態性來更好地設計程序。
  • 面向對象程序設計大行其道幾十年後,已經在面臨淘汰?
    在那個計算資源比今天稀缺得多的時代,這是一個天才般的想法。面向對象的編程並不可笑,它使編碼變得容易得多。(筆者從Charles Scalfani的熱門文章《再見,面向對象的編程》中借用了這個示例以及有關此處出現的問題的一些信息。)複印機掃描文檔的內容並將其列印在空白紙上,它應該是Scanner還是Printer的子類?根本沒有好的答案。即使這個問題不會破壞代碼,但它經常出現足以令人沮喪。
  • 面向對象編程OOP的基本概念
    1、類和對象面向對象編程的兩個重要概念:類(class)和對象(object)。類是抽象的概念,對象是具體的東西。如汽車是一個類,它的屬性包括最大速度、剩餘油量等,它的方法可以有:加油、設定行駛速度等。
  • 深入淺出理解面向過程與面向對象編程
    前言有過編程的經歷的讀者可能經常會聽到面向過程編程和面向對象編程,然後你是否去深入了解過這兩個概念,它們之間有什麼區別,下面我就來簡單介紹一下。:打開地圖搜索一下,自己開車走哪一條路比較近,選擇哪一條國道,走哪一座橋,過哪一個隧道,都是我需要需要考慮的,最後我一步一步的實現它,到達了北京。
  • 為什麼有這麼多開發者討厭面向對象編程?
    關於面向對象編程,有人喜歡它,也有人討厭它。面向對象編程(OOP)已經存在了很長時間。它是一種編碼風格、一種思想流派、一種學校裡的教授實踐。它的核心思想是將代碼組織成有意義的「對象」,這些「對象」是現實問題的模型,將描述模型各個「狀態」的變量和修改這些變量的方法(子例程或函數)捆綁在一起。
  • 當談論面向對象的時候,要搞清編程和語言的關係
    什麼是面向對象編程和面向對象程式語言?不過,關於面向對象編程的特性,也有另外一種說法,那就是只包含三大特性:封裝、繼承、多態,不包含抽象。為什麼會有這種分歧呢?抽象為什麼可以排除在面向對象編程特性之外呢?不過,話說回來,實際上,我們沒必要糾結到底是四大特性還是三大特性,關鍵還是理解每種特性講的是什麼內容、存在的意義以及能解決什麼問題。
  • 面向對象編程-類與對象
    面向對象的思想中,對象就是特徵和技能的結合體。在具體的軟體開發方法中,對象就是把相關的數據和方法組織到一起的整體。 而類則是對象的概念抽象。在生活中是先有對象再有類,程序中是先有類才能有對象。對象的含義是指具體的某一個事物,即在現實生活中能夠看得見摸得著的事物。類是具有相同特性(數據元素)和行為(功能)的對象的抽象。
  • 致開發人員:沉迷面向對象編程不可自拔?函數式編程了解一下
    現在,當我們查看函數聲明時,能確切知道發生了什麼。如果程序運行不正常,我們也可以輕鬆地單獨測試每個功能並查明哪個功能有問題。有些程式語言的函數式編程越來越強1.PerlPerl 對副作用的處理方法與大多數程式語言截然不同。它包含了一個神奇的參數 $\ 。Perl 確實有它的優點,但我不會用它進行函數式編程。
  • 程式語言是怎樣從機器語言進化到面向對象的?
    機器語言這個問題應該從機器語言是怎麼工作說起的。在計算機的太古宙時代,在製造一臺計算機之前,首先要做的是為它建造一座能夠容納它的大房子。面向對象編程面向對象編程的英文是Object Oriented Programming,下文中簡稱其為OOP。一般來說,支持OOP的語言都包含三個特性,即封裝、繼承和多態。
  • 如何使用JavaScript -面向對象編程
    學習目標理解面向對象開發思想掌握 JavaScript 面向對象開發相關模式面向對象介紹什麼是對象Everything is object (一切皆對象)我們可以從兩個層次來理解對象:(1) 對象是單個事物的抽象。
  • 如何學習面向對象的編程思想?理解原理,快速成長
    很多人對於程式語言的學習很困惑,甚至很多在職大學生讀了四年本科計算機專業,對於面向對象編程的什麼是對象?什麼是類?對象與類之間的關係都搞不清楚。今天我們主要來學習一下面向對象的編程思想是什麼?如何從原理上來學習達到快速成長的效果,能夠運用各種程式語言開發軟體項目。首先,我們來了解一下學習面向對象編程需要具備哪些基礎。也就是說我們學習面向對象的編程都有哪些概念,以及如何把我們的編程思想逐步轉變成一種面向對象的思想來考慮問題,是今天我們要學習的核心內容。什麼是面向對象?
  • 面向過程和面向對象程式語言有何不同
    首先,面向對象程式語言和面向過程程式語言都是操作計算機的方式,從本質上來說也都是操作計算機執行任務的工具,只是方式上的不同而已。面向過程程式語言故名思議,以業務流程為考慮問題的出發點,從上到下按照解決問題的流程來組織代碼結構,把功能封裝成函數,然後依次調用就可以了。
  • 面向對象的工業編程(OOIP)
    面向對象編程(OOP)在1990年代開始被計算機科學家使用,但是由於它的複雜性和缺乏支持的圖形語言環境,在工業控制領域的應用一直很緩慢。幸運的是,工業軟體供應商已經開始解決這些問題,並向控制項世界提供了OOP的許多好處,而沒有任何複雜性。