“你好,阿米戈!今天我要為你打開一個新的有趣的世界。我說的是面向對象編程(OOP)。你已經了解了類和對象。今天你要去了解更多關於他們的信息,更多。”
我們將從 OOP 的四大支柱開始。它們是抽象、封裝、繼承和多態。(以前是三個,後來抽像出來的)
1)抽象。
現實生活中抽象的一個很好的例子是公司的職位描述。職稱是一回事,但其職責是完全不同的事情。
想像一下,您正在為您未來的公司創建組織結構圖。你可以將秘書的職責分攤到其他幾個職位上。您可以將 CEO 的工作拆分為幾個獨立的職位:首席財務官、首席技術官、首席營銷官、首席人力資源官。或者,您可以將辦公室經理和招聘人員的職位合二為一。
假設您想出了公司職位的名稱,然後您“分配”了這些職位的職責。這就是抽象——將大而單一的東西分成幾個小部分。
從程序員的角度來看,抽象就是將程序適當地劃分為對象。
大型程序通常可以用十幾種不同方式中的任何一種表示為交互對象。抽象可以讓你挑選出一個對象的主要特徵並忽略任何不那麼重要的東西。
抽象就像一種軍事戰略。如果您選擇了錯誤的策略,再巧妙的策略也無法挽救局面。
2)封裝。
封裝旨在通過簡化對象來改善對象之間的交互。
簡化事情的最好方法是對那些不需要知道的人隱藏任何復雜的事情。例如,如果您坐在波音噴氣式飛機的飛行員控制裝置後面,就需要很長時間才能理解它們的工作原理:
另一方面,對於飛機上的乘客來說,一切看起來都比較簡單:他們買票並登機,然後飛機起飛和降落。您可以輕鬆地從一個大陸飛到另一個大陸,只知道如何“買票”和“登機”。我們沒有看到任何與準備飛機飛行、起飛、降落和各種潛在緊急情況相關的複雜性。我們也沒有提到衛星導航、自動駕駛儀和空中交通管制中心。這簡化了我們的生活。
在編程方面,封裝是“隱藏實現”。我喜歡這個定義。我們的類可以包含數百個方法並在各種情況下實現高度複雜的行為。但是我們可以隱藏它的所有方法以防窺探(通過將它們標記為“ private ”),只留下兩三個方法與其他類交互(通過將它們標記為“ public ”)。然後我們程序中的所有其他類將只看到並調用該類的這幾個方法。班級的所有復雜性都將隱藏在裡面,就像駕駛艙不會讓快樂的乘客看到一樣。
3)繼承。
繼承是編程和現實生活中的一個概念。在編程中,繼承是兩個類之間的一種特殊關係。但現實生活中的繼承要有趣得多。
如果我們需要在現實生活中創造一些東西,我們有兩種選擇:
1)從頭開始製作我們需要的東西,並花費大量時間和精力去做。
2)使用已經存在的東西製作我們需要的東西。
最好的策略是:我們採用現有的良好解決方案,對其進行返工和調整以滿足我們的需求,然後使用它。
考慮一下,人類進化。如果我們將它們的起源追溯到地球上生命的起源,我們就會發現數十億年已經過去了。但是,如果我們認為人類是從猴子開始的,那麼僅僅過去了幾百萬年。從頭開始創建東西需要更長的時間。更久,更長。
同樣,在編程中我們可以創建一個基於另一個類的類。新類成為現有類的後代(繼承人)。當您已經擁有一個包含 80-90% 所需數據和方法的類時,這將非常有用。我們只需聲明一個合適的類作為我們新類的父類。父類的所有數據和方法自動成為新類的一部分。方便吧?
4)多態性。
多態性是一種編程概念,描述了不同的實現隱藏在同一接口後面的情況。要在現實生活中找到類似物,我們可以看看駕駛汽車的過程。
如果一個人可以駕駛卡車,那麼他或她也可以被安排在救護車或跑車的方向盤後面。一個人可以開一輛車,不管是什麼車,因為它們都有相同的控制界面:方向盤、踏板和變速桿。汽車內部的組織方式不同,但它們都共享相同的控制界面。
回到編程,多態性讓我們以相同的方式與不同類(通常具有共同的祖先)的對象進行交互。這一點的重要性怎麼強調都不為過。隨著程序變得越來越大,它變得越來越重要。
OOP是原則。編程規律。它們中的每一個都以某種方式限制了我們,但作為回報,隨著程序變大,它們提供了巨大的優勢。OOP 的四大原則就像椅子的四條腿。如果你拿走其中之一,整個系統就會變得不穩定。
GO TO FULL VERSION