如果你做過一些初學者編程,甚至開始研究不同的語言,你可能會遇到“面向對象編程”(或“OOP”)這個短語。
關於它是什麼,有各種各樣的技術解釋,但今天我們將以一種簡單的方式來定義面向對象編程。
要理解什麼是面向對象編程語言,您需要理解它取代了什麼。早期的編程語言是程序性的,所謂程序性語言,是因為程序員會定義一組非常具體的程序,由計算機來執行。
在早期,程序寫在穿孔卡片上。這些步驟接收數據,對該數據執行一系列操作,然後輸出新數據。
過程語言在一段時間內運行良好(有些仍然在使用)。但是,當您想要編寫超出基本步驟序列的程序時,過程語言可能會變得難以管理。這就是面向對象編程的用武之地。
那麼,什麼是面向對象編程呢?
第一種面嚮對象語言(通常被認為是Simula)引入了對象的概念。對象是作為單一實體處理的信息集合。
我們將用一個例子更深入地探討這實際上意味著什麼,但首先我們必須討論類。類有點像pre對象。它們包含一個屬性列表,定義後這些屬性將成為一個對象。
讓我們以編程一個象棋遊戲為例。我們可能會有一門課叫Piece。在Piece中,我們有一個屬性列表:
一個對象只是定義了一個屬於該類的特定實例。
所以我們可以有一個叫做白皇后的物體。該對象將具有所有四個屬性的定義(白色、高、帶鋸齒的圓柱形、任意方向上任意數量的空間)。它也可能有方法或函數。
是什麼讓這比程序性方法好得多?
簡言之,面向對象編程語言(如Java)使組織數據和代碼變得更容易,從而使大型項目更具通用性。
為了更詳細地討論它,我們將討論面向對象編程的四個基礎知識。
僅僅因為你想使用一些東西並不意味著你需要知道它是如何工作的。例如,濃縮咖啡機就很複雜。但你不需要知道它是怎麼工作的。你只需要知道,當你開始時,你會得到濃縮咖啡。
面向對象編程中的對象也是如此。在我們的國際象棋示例中,可能有一個move()方法。這種方法可能需要大量的數據和其他方法。它可能需要初始位置和最終位置變量。它可以使用另一種方法來確定是否捕獲了一塊。
但你不需要知道。你需要知道的是,當你叫那塊移動時,它就移動了。那是抽象。
封裝是面向對象編程創建抽象的方法之一。每個對象都是作為單個實體處理的數據集合。在這些對象中有數據——變量和方法。
對象中的變量通常是私有的,這意味著其他對象和方法不能訪問它們。對象只能受其方法的影響。
Bishop對象可能包含多條信息。例如,它可以有一個名為“position”的變量,這個變量是使用move()方法所必需的。當然,它也有顏色。
通過將position變量設為private並將move()方法設為public,程序員可以保護move變量不受任何其他因素的影響。如果顏色是一個私有變量,除非有一個允許更改的方法,否則其他對象無法更改它。(你可能不會有,因為這件作品的顏色應該保持不變。)
這些變量和方法保存在Bishop對象中。因為它們是封裝的,程序員可以對對象的結構或內容進行更改,而不用擔心公共接口。
除了類之外,面向對象編程語言還有子類。它們包含父類中的所有屬性,但也可以包含其他屬性。
在我們的象棋遊戲中,棋子需要一種方法,如果棋子到達棋盤的末端,就可以把它們變成其他棋子。我們稱之為transformPiece()方法。
不是每個片段都需要transformPiece()方法。所以我們不想把它放在計件課上。相反,我們可以創建一個名為Pawn的子類。因為它是一個子類,所以它繼承了Piece的所有屬性。因此,子類典當的實例包括允許的顏色、高度、形狀和移動。
但它也包括transformPiece()方法。現在我們再也不用擔心在車上意外使用這個函數了。下面是一個技術解釋:
創建子類也節省了大量時間。程序員可以創建基類,然後在需要時將其擴展到新的子類,而不是為所有的內容創建新的類。(不過,值得注意的是,過度依賴繼承是不好的。)
多態性是遺傳的結果。完全理解多態性需要一些編程知識,所以我們只在這裡講基礎知識。簡言之,多態性允許程序員使用同名的方法,但是使用不同的對象。
例如,我們的Piece類可能有一個move()方法,它可以將一個片段向任何方向移動一個空間。這對國王的作品有效,但對其他作品無效。為了解決這個問題,我們可以在Rook子類中定義新的move()方法,該方法將移動定義為無限數量的向前、向後、向左或向右空格。
現在,當程序員調用move()方法並使用一個片段作為參數時,程序將確切地知道片段應該如何移動。這節省了大量的時間,而不是試圖找出哪些不同的方法,你應該使用。
如果你的頭在最後四個定義之後轉了一點,不要太擔心。以下是您需要記住的主要事項:
如果你能記住這些要點,你將很好地處理什麼是面向對象編程。正如我所提到的,面向對象編程的四個基本知識可能有點難以處理。但是一旦你開始編程,他們就會變得更加清晰。
請記住,我們在本文中只討論了一般性。不同的面嚮對象語言會有自己的怪癖和實現方法。一旦你為自己選擇了合適的語言,你就會開始學習如何將OOP原則付諸實踐。
接下來,學習如何組織面向對象的代碼。
...涵蓋了廣泛的主題,適用於廣泛的學習者。不管你以前有什麼經驗,這些書中的一本將幫助你朝著成為一個真正的iOS開發者邁出下一步。 ...
... JoeHanson的網路系列文章It'sOkayToBeSmart並不是什麼新鮮事,但是自從我們上次在一個關於線上觀看教育影片的最佳地點的綜述中談到它以來,它已經發生了一些變化。漢森已經成為YouTube上的明星,這部劇也是如此,...
... 如果你不是真正的程式設計愛好者,為什麼不看看這些最好的montypython草圖呢?畢竟,他們確實激發了語言! ...
... “封裝”是一個術語,用於描述面向物件設計的原則,其中程式的元件不應揭示其各自實現的內部細節。為了增加您對封裝概念的理解,請參閱我們關於封裝的文章。 ...