什麼是OO?物件導向與封裝 - Medium
文章推薦指數: 80 %
物件導向程式設計(英語: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
延伸文章資訊
- 1菜雞與物件導向(3): 封裝 - 伊果的沒人看筆記本
所謂的封裝,咱同事在他整理的文章Object Oriented物件導向-3:封裝(Encapsulation)、繼承(Inheritance)與多型(polymorphism) 中的例子就舉得不...
- 2物件導向程式設計四大支柱之一:封裝- by Yao-Jen Kuo - 數聚點
封裝(Encapsulation)在物件導向程式設計中是用來將資料與函式的實作內容包裝、隱藏起來的技巧,其中資料更常被稱為類別的成員屬性(Attributes)、函式 ...
- 3思考物件導向(1)物件導向與封裝 - iThome
封裝封裝(Encapsulation)的目的,是將程式碼切割成許多模組(Module),使各模組之間的關連性降到最低,這麼一來比較不會產生「牽一髮而動全身」的狀況 ...
- 4[Java] 2. OOP三大特性:封裝、繼承、多型 - YaYi
封裝(Encapsulation): ... 若父類別不希望其他物件直接存取其屬性,可改以封裝的形式,將name、price、quantity封裝 ... 何謂物件導向程式設計?
- 5封裝(物件導向程式設計) - 維基百科,自由的百科全書
在物件導向程式設計方法中,封裝(英語:Encapsulation)是指,一種將抽象性函式介面的實作細節部份包裝、隱藏起來的方法。同時,它也是一種防止外界呼叫端,去存取 ...