認識物件導向

物件導向的觀念
  在物件導向程式語言的環境裡,程式設計師的焦點放在每一個物件上,設計時只
  需設定每個物件在發生特定事件時執行特定工作,並不需要像以前一樣規畫整個
  程式的執行流程,而且其他程式需要時,也可以自由的複製物件。



物件導向語言
  事實上遠在 1967 年的 Simula-67 就是屬於物件導向的語言,但當時根本沒有人注
  意,直到 70 年代中期 Smalltalk 語言問世後,物件導向語言才開始引起人們的興
  趣。80 年代 C++ 的出現,更是炒熱了物件導向語言的市場,往後新上市的程式
  語言都免不了要遵循這個趨勢,例如微軟的
Visual Basic Visual C++ ,寶藍(
  Borland)的
Delphi(Object Pascal)以及現在最熱門的爪哇(JAVA)語言...等都
  具有物件導向的特性。



物件與事件
  真實世界中的「物件」,其實就是我們習以為常的「東西」。

  •物件與類別
   類別是物件相同特性和行為訊息的集合,例如「人」是一種類別,而你、我、
   小明、大華...等都是屬於「人」這個類別的一個物件。

     


  •物件具有屬性
   每一個物件都有許多屬性,例如一個「人」便具有「髮色」、「身高」、「體
   重」、「性別」...等不同的屬性。
            


  •事件和事件程序
   每一個物件都可以對一個被稱為事件(Event)的動作進行辨識和回應,物件
   對事件的回應方法稱為事件程序。例如,當我們「打」「小明」時「小明」會
  「喊痛」,「打」便是作用在物件「小明」上的事件,而「喊痛」就是物件「
   小明」所回應的事件程序。
         



物件導向的特性
  在物件導向程式設計的環境中,一個圖示、一個按鈕或文字欄位…等都是物件,
  每個物件都包含資料以及相關的指令。當程式執行時,物件便等待事件發生,然
  後再採取相關行動(即事件程序),這稱為事件驅動(Event-Driven),也是物
  件導向程式與傳統程式之間的最大差別。物件導向語言還具有以下特性:

  •繼承性
   一個物件擁有類別中部份或所有的特性,稱為繼承性(Inheritance)。例如,
   不論工人、農人、商人、運動員與設計師...等都是「人」,即使工作崗位不同
   但仍都一樣具有「身高」、「體重」、「性別」...等屬性。在物件導向程式設
   計的環境中,程式設計師不須重覆撰寫經由繼承而來的設定指令,藉此節省開
   發時間。

  •包裝性
   當我們去餐廳吃飯時只要告訴老闆「我要吃排骨飯」,至於這塊排骨是怎樣選
   購、切割、浸料、沾粉、油炸...等烹飪流程我們都不必理會。烹飪的複雜性被
   隱藏起來,使用者只要注意基本的操作如點餐的動作即可。同樣的,物件導向
   將事件程序及屬性的程式碼包裝在一起,使程式設計師不須為每一個細節煩惱
   ,這樣的特性便稱為包裝性(Encapsulation)。

  •多型性
   「小華」或「小明」都一樣可以進行「掃地」的工作,只要我們告訴他「去掃
   地」即可。同樣的,程式設計師可用同樣的敘述來執行不同物件中相同的方法
   ,這個特性稱為物件導向程式設計的多型性(Polymorphism)。

  •抽象性
   一般高階語言利用函數來處理相關程序,物件導向程式設計則將變數抽象化,
   讓使用者可以更容易使用,這樣的特性稱為抽象性(Abstraction)。例如以「
   視窗.開啟」代表開啟視窗的動作,而「視窗.關閉」則表示關閉視窗的動作。