何謂物件導向
傳統的程式設計主張將程式看作一系列函式的集合,或者直接就是一系列對電腦下達的指令,物件導向可以被看成在程式中包含各種獨立而又互相呼叫的物件的思想,這與傳統的思想剛好相反,物件導向程式設計中的每一個物件都應該能夠接受資料、處理資料並將資料傳達給其它物件,因此它們都可以被看作一個小型的「機器」,即物件。目前已經被證實的是,物件導向程式設計推廣了程式的靈活性和可維護性,並且在大型專案設計中廣為應用。
含有物件導向的程式語言
Common Lisp、Python、C++、Objective-C、Smalltalk、Delphi、Java、Swift、C#、Perl、Ruby 與 PHP等。
基本概念:類別及物件
類別(Class)
在程式語言中,類別定義一件事物的抽象特點。類別的定義包含了資料的形式(屬性, Field)以及對資料的操作(方法, Method)。我們也可以想像成類別是手機的設計藍圖(blueprint),其中我們可以在這張藍圖定義抽象的內容(也就是屬性、方法),例如手機的廠牌、手機的名字以及規格和取手機資訊等。
物件(Object)
物件也就是類別的實例,也就是說有了類別這張藍圖我們可以在程式中產生許多手機類別的資料,而這些資料彼此之間不互相影響,每一個皆是獨立的。
類別(Class)與物件(Object)其實是個一體兩面的東西,簡單解釋:
類別算是一個藍圖、一個可參考的文件,他沒有實體的概念,是靜態的。
物件是具有實體概念,狀態會隨時改變,是動態的,但架構不會改變。
舉例來說:手機
類別:設計藍圖
物件:實際設計好的手機
兩者關係:設計藍圖(類別)決定手機要怎麼製作,決定要用多少規格的CPU、多少畫素的相機、手機外觀要長怎樣。實際製作出來的手機(物件)是照著設計藍圖所生產出來的,使用者也只能照著設計圖所訂定的規格使用手機。
三大特性:封裝、繼承、多型
封裝 (Encapsulation)
即是將物件內部的資料隱藏起來,只能透過物件本身所提供的介面(interface)取得物件內部屬性或者方法,物件內部的細節資料或者邏輯則隱藏起來,其他物件即無法瞭解此物件的內部細節,若不經過允許之窗口(即此物件提供之方法)便無從更動此物件內之資料。簡白的說,對一件事情只需要理解他的外在就好,不需要了解裡面內部的構造。例如:由先前的例子,我們可以透過getInformation()取得手機資訊,然而我們並不需要知道他是如何取得資訊的。
繼承 (Inheritance)
即為繼承者可以擁有被繼承者的特性。例如:HTC手機繼承了手機(統稱)原有的屬性以及方法,也新增了自己特有的屬性(driverName)。
多型 (Polymorphism)
簡單來說就是相同名稱的方法(Method),多個相同名稱的方法,傳入不同的參數,會執行不同的敘述。多型(Polymorphism)則包含多載(Overloading)和複寫(Overriding)。
多載(Overloading) — 是指說在相同類別中,定義名稱相同,但是參數個數不同,或是參數型態不同的函式,這樣就可以利用參數個數或者參數型態,呼叫到對應的方法。例如:一個計算面積的方法,如果傳入一個參數,就當正方形來算面積;傳入兩個參數,就當成長方形來算面積。
結語
希望以上的介紹能有效地幫助讀者初步了解物件導向,如果想觀看更多相關內容,可以到快樂學程式的Udemy點擊逛逛,有豐富的入門程式課程,你絕對會在裡面奠定良好的程式基礎!
如果你的入門還在單打獨鬥,歡迎來到快樂學程式找到志同道合的夥伴,你的自學之路不孤單。