首頁  >  文章  >  Java  >  物件導向程式設計不是你想像的那樣,或者至少不是你想像的那樣

物件導向程式設計不是你想像的那樣,或者至少不是你想像的那樣

王林
王林原創
2024-08-22 06:38:07564瀏覽

Object-Oriented Programming is Not What You Think It Is, or at Least It Wasn’t Meant to Be

「當我創造「物件導向」這個術語時,讓我告訴你,我並沒有想到C++。重要的想法是「訊息傳遞」......創建良好且可擴展的系統的關鍵在於更多設計模組如何相互通信,而不是其內部屬性和行為應該如何。 「我很遺憾很久以前就這個主題創造了『對象』這個詞,因為它讓人們關注更小的想法。大的想法是『訊息傳遞』。」
— Alan Kay,Smalltalk 語言的創建者。

當我們學習物件導向程式設計時,首先向我們展示的想法是汽車具有門和輪子等屬性,電視具有打開和關閉的行為,房屋具有可以打開和關閉的窗戶。打開和關閉。但真實的系統遠非如此。

您將看到一個名為 HTTPRequest 的對象,但不會看到名為 TV 的物件。您將遇到 logMessage,但不會遇到 house1Joao。或者還有資源管理、檔案系統等。現在,這些「對象」應該有什麼行為?

物件作為現實世界物件的表示的想法甚至在 Alan Kay 之前就用 Simula 語言出現了。該語言的創建者 Ole-Johan Dahl 和 Kristen Nygaard 正在設計一種用於模擬現實的語言,例如隊列、網路流量、製造過程等。過程式編程不適合解決此類問題。

這就是需要一種程式設計形式的開始,這種程式設計形式可以讓您專注於真正重要的事情,而將實現留在幕後。想像一下,必須建立一個強大的大型系統,更多地考慮程式碼細節而不是問題本身。更不用說程式碼可能具有的函數數量足夠大,以至於變得令人困惑和晦澀難懂。

他們踏出了抽象程式設計中不必要的概念的第一步。

「但這正是現代的物件導向程式設計!」你可能會驚呼。嗯,是的,也不是。此範例的 Simula 語言的實作是不同的。重點不是可重複使用和靈活的系統,而是建模事件和流程。

繼承很簡單。重點是改進和專業化程序,而不是靈活性和層次結構。
封裝是基本的。沒有像 private、public 和 protected 這樣的存取修飾符的概念。
基本上,這個想法是將混亂的程式碼組織到具有更清晰定義的套件中。

一段時間後,在施樂公司,艾倫·凱 (Alan Kay) 提出了他的消息想法。施樂公司創造了電腦圖形和 Smalltalk。

他的想法基本上是將物體視為生物,但不是動物或人類,而是細胞。 (艾倫·凱是一位受過訓練的生物學家。)
由於細胞之間的通訊,活組織可以完美地發揮功能。它們的功能非常明確,並且知道如何回應從其他細胞接收到的「訊息」。
這個想法是創建對象,其功能是知道如何以自己的方式回應訊息。沒有必要也不應該知道物件的回應是如何實現的。您唯一需要知道的是物件理解哪種訊息。 (事實上,您可以「傳送」到物件的訊息集稱為介面。)
例如,當您傳送訊息「2 + 2」時,您希望 sum 物件回傳什麼?
啊,是的。在 Smalltalk 中,一切都是對象,包括訊息。
是的,我知道,這太瘋狂了。物件透過包含其他物件的物件進行通訊。但這就是這個想法。
「好的,這如何幫助創建可重複使用和可擴展的系統?」
軟體系統更像是接線而不是檔案。這就是 Alan Kay 所做的區分。
對他來說,你應該擔心電線是否連接到正確的極,而不是文件的組織方式。

結論

Alan Kay 構思的物件導向程式設計不僅僅是將程式碼組織成模仿現實世界的結構,而是創建透過訊息有效溝通的系統。儘管現代 OOP 是從 Simula 的最初思想發展而來,並在 C++ 和 Java 等語言中流行起來,但這種方法的真正重點(物件之間的通信)往往被淡化了。

了解 Kay 最初的願景可以讓我們重新考慮今天如何設計和建立軟體。我們不應該只關注物件和類別層次結構的內部結構,還應該重視精心設計的模組之間的通訊所帶來的簡單性和靈活性。

回歸OOP的根源可以幫助我們開發更具彈性、模組化且易於擴展的系統。畢竟,正如凱提醒我們的那樣,「偉大的想法」不在於物體本身,而在於它們的交流方式。


資料來源:

  1. Alan Kay,“Smalltalk 的早期歷史”,程式語言史,第 2 版,由 Thomas J. Bergin 和 Richard G. Gibson 編輯,Addison-Wesley,1996 年,第 123 頁。 511-578。
  2. Kristen Nygaard 和Ole-Johan Dahl,“SIMULA 語言的發展”,收錄於程式語言史,第一版,由Richard L. Wexelblat 編輯,學術出版社,1981 年,第123頁。 439-493。
  3. Bjarne Stroustrup,C++ 程式語言,Addison-Wesley,2013 年,前言和第 1 章。
  4. 凱,艾倫。 「『物件導向程式設計』的意思。」給 Stefan Ram 的電子郵件,2003 年。

P.S.:本文由 Moisés Cristiano 撰寫,ChatGPT 編輯。

以上是物件導向程式設計不是你想像的那樣,或者至少不是你想像的那樣的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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