什麼是OO?物件導向與封裝 - Medium

文章推薦指數: 80 %
投票人數:10人

物件導向程式設計(英語:Object-oriented programming,縮寫:OOP)是種具有物件概念的程式程式設計典範,同時也是一種程式開發的抽象方針。

它可能包含 ... GetunlimitedaccessOpeninappHomeNotificationsListsStoriesWritePublishedin程式愛好者Google物件得出的結果,果然大部分都是跟程式有關的內容呢。

什麼是OO?物件導向與封裝說來慚愧,寫了兩年的物件導向語言,真的意識這是一個「物件導向」語言,這件事情也是最近的事情。

當然是要回去惡補一下何為物件導向,同時也想記錄一下自已的心得,讓以後的自已檢視一下。

什麼是物件導向程式設計?其實平常我們常使用的程度語言,絕大部分都是物件導向語言。

從C++,Java,Python,PHP等等(不好意思,不要問我JavaScript算不算),我們真的是活在物件導向語言的圈子當中。

那我們真的有使用到物件導向的功能嗎?物件導向-簡稱OO,是一種程式設計方式,其他的程式設計方式分別有:結構式程式設計與函式程式設計。

這次的主題是OO,那OO的主要特性會是什麼呢?物件導向程式設計(英語:Object-orientedprogramming,縮寫:OOP)是種具有物件概念的程式程式設計典範,同時也是一種程式開發的抽象方針。

它可能包含資料、屬性、程式碼與方法。

物件則指的是類別的實例。

它將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充性,物件裡的程式可以存取及經常修改物件相關連的資料。

在物件導向程式程式設計裡,電腦程式會被設計成彼此相關的物件。

(節錄自—維基百科)是不是看不懂?對,維基的東西就是這麼複雜🤬。

以我的話來說,OO就是以一種人類日常分類方式來設計程式。

什麼是人類日常分類?就好比現在我請在座各位描述一下,何為杯子?Thisisacup.可能為們會說,可以裝水、可以飲料、有一個圓圓的形狀、有耳朵能拿等等,這些都是杯子的特徵,而這些特徵會構成一件物品,讓人聽到「給我個杯子」這句話時,知道要給他一個「杯子」,而不會是叉子。

而在程式上面,我們同樣需要面對這種描述的問題。

當我們要在程式裡描述一個杯子時,我們就可以用到Class這個OO的特性了。

Class中文稱為類別,在OO中是一個相當重要的概念。

當我們在程式中有了類別之後,就等於人類有了抽象能力一樣重要。

我們可以為一種專門裝水與飲料的容器抽象為杯子,正正是我們在程式中用一樣的方式為擁有某種/些特性的程式碼/功能抽象為類別一樣。

當我們要用程式來表達杯子時,我們可以怎麼寫?我會分別寫下沒有類別時的寫法與類別的寫法︰intcupSize=50cm*50cm;boolcupHaveEar=false;StringcupName="mylove";publicArrayfunctioncupManufacture(intcupSize,boolcupHaveEar,StringcupName){arraymaterialList=[cupSize,cupHaveEar,cupName];returnmaterialList;}ClassCup{Stringname;intsize;boolhaveEar;publicArrayfunctionmanufacture(intsize,boolhaveEar,Stringname){arraymaterialList=[size,haveEar,name];returnmaterialList;}以上沒有類別與類別為基礎的差別我認為是結構。

當我們隨意寫一段杯子的code時,這些code可能會散落在世界各地,沒有一個統一個地方可以維護。

但當我們宣告杯子為一個類別時,在類別內的都是杯子的特性(屬性),這樣一個杯子的藍圖(抽象想法)就出現了。

那現在作為一名工匠(程式猿),我們就可以按照杯子的藍圖來做出一個杯子來了!ClassCup{Stringname;intsize;boolhaveEar;//建構函式publicfunction__constructor(Stringname,intsize,boolhaveEar){this->name=name;this->size=size;this->haveEar=haveEar;}publicArrayfunctionmanufacture(intsize,boolhaveEar,Stringname){arraymaterialList=[size,haveEar,name];returnmaterialList;}}//以下是在Controller實作一個杯子出來ClassController{CupmyTeaCup=newCup("Tea","500",true);}這邊不會多說明一些code的細節,如什麼是contructor。

但是以上的code就是以一個Cup的類別,帶上一個杯子所需要的初創化參數,就可以創造出一個真正的杯子出來。

跟上面沒有類別的對比起來,每當我們要做一個新的杯子時,我們只要newCup()出來就可以馬上製造出一個杯子出來了!不用再來瘋狂宣告變數來創出一個個不同杯子的特性。

當我們使用Class,我們設計程式時就可以像人類抽象思考一樣,為每一個我們想要描述的東西抽象化,來寫出一個具通用特性的類別。

其實上面的把一堆code寫進Class中就是我們的物件導向三本柱之一:封裝!!!!!當然封裝有很多種手法可以形成封裝,把東西抽象化是一種再包起來,才被外界呼叫就是一種常用的封裝手法。

簡單到一個function,也是一種封裝手法。

當有了類別,我們就可以創造物件。

但是杯子有好多不同的型態,可能不是一個Cup的類別就可以表達清楚,如有馬克杯、保溫瓶等等。

因此,我們還需要一些其他物件導向特性。

還請看下一集的OO三本柱之繼承。

如果你覺得我的文章幫助到你,希望你也可以為文章拍手,分別Follow我的個人頁與程式愛好者出版,按讚我們的粉絲頁喔,支持我們推出更多更好的內容創作!Morefrom程式愛好者「程式愛好者」是為了程式愛好者而創建的文章平台,只要是程式愛好者我們都歡迎加入我們,為中文的程式社群創造更多更優質的資源!Readmorefrom程式愛好者AboutHelpTermsPrivacyGettheMediumappGetstartedYC1.2KFollowers提供更精確的技術內容為目標,另創立「程式愛好者」專頁。

資深軟體工程師,專研後端技術、物件導向、軟體架構。

FollowHelpStatusWritersBlogCareersPrivacyTermsAboutKnowable



請為這篇文章評分?