close

OOP淺談(軟體革命-物件導向)

Object Oriented Programming 物件導向程式設計

  1. 序言

0與1的世界
一如英文中Computer一詞來自於Compute般,電腦最擅長的就是處理龐大的數字計算,也稱為資料處理。但以現在電腦的功能來看,電腦處理的工作已經讓人感覺不到,電腦只能做計算。學商的用電腦來做報表,學工程的用電腦做力學分析,你家的小孩更可能天天耗在電腦前完Game。而前一陣子IBM那個會下西洋棋,名叫深藍(Deep Blue)的超級電腦,更進一步挑戰人類的智慧。電腦現在做的事幾乎已經讓人感覺不出它的本質-數字計算。但是別忘了,不論電腦處理什麼事情,電腦終究處理的還是最基本的0與1。

  • 將真實世界量化

如何讓0與1處理這許多工作,這是電腦科學中最重要的,也是最神奇的部分。而這個部分牽涉一個重要的觀念—量化。就像前面所講的,現在電腦做的事,完全不像計算,而是模擬。用電腦模擬做報告的編輯動作、模擬材料受力後的行為、模擬下西洋棋。雖然電腦做的事不像計算,但是終究處理的只是0與1。所以在電腦模擬的過程裡,必須將真實世界的事物量化為數字。將真實世界的事物量化為數字後,電腦才能進行運算,完成資料處理。而這整個量化模擬的過程,我們稱之為抽象化,而抽象化的過程就要靠思維(人類因思維而偉大)的運作。

  • 抽象化(抽象畫?)

電腦系統的抽象化,主要分為兩種,一是資料的抽象化,另一個處理過程的抽象化,資料的抽象化,將現實生活中的資料抽象化為電腦程式中的變數,處理的流程的抽象化則將現實生活中事件發生的過程轉化為程式的執行流程。以圖書館系統來說,書的抽象化結果是名稱、出版商、作者…等變數。借書/還書的作業流程抽象化後,將成為執行程式運作變數的過程。

  • 想像是靈魂的眼睛

--Joubert 朱伯特

  1. 什麼是物件導向

物件導向(Object Oriented)是目前最先進的程式設計技術,它模擬了真實世界物件間的運作方式—亦即每一個物件間靠著訊息的傳遞,來達到彼此的溝通與互助。由於物件導向技術的推出,解決了日益繁雜之軟體所帶來了軟體危機。

傳統程式設計是從程式的第一行一直撰寫到最後一行的做法,寫作以往我們寫程式的方式與習慣是以是以副程式、資料結構為程式設計中心;新一代程式設計方式是以物件為整個程式設計為主角。於OOP的領域中,程式設計師的責任將是思索如何建立使用者所需的物件。其思考模式則是依據真實世界的層次來分析問題,而不再以程式語言的層次來思考問題。

程式設計包含兩大要素:一個是演算法(Algorithm),另外一個則是資料結構(Data Structure),所謂演算法便是一個為了解決問題所發展出來的方法—亦即所謂的程序。以往程式設計的重點乃是將程序模組化,但卻往往忽略了資料的模組化。試想當一個複雜的系統可能有很多程序會去存取共同的資料時,資料被哪一個程序修改或使用時將難以追蹤的。然而物件導向程式設計的方式,則是將程序和相關資料封裝(Encapsulate)在一起成為一個物件,如此一來,別的物件就無法直接對另一個物件的資料進行存取了。 OOP所帶來的好處,如節省程式開發時間、減小程式的大小(Size)等。

  • Why 物件導向? 我們為什麼要用物件導向,它有什麼過人之處。

簡單來說,物件導向思維最重要的優點,在於它能以直覺的方式模擬真實世界。直覺到當你要建立一個圖書管理系統時,您馬上知道這個系統一定有圖書管理員、書、讀者這些物件,而讀者的行為就是借書、還書,直覺到不是程式設計師都可以說出這系統是怎麼一回事,倘若實現設計理念時,使用亦使用支援物件導向觀念之程式語言,那只要將設計出的物件原封不動的放進程式裡即可,因此,利用物件導向技術建構電腦系統時,所用的設計理念與發展系統的技術是同一套觀念。

  1. 物件簡介(物件是什麼東西?)

1.何為物件:

  • 「物件」一般泛指宇宙間任何具體或抽象的事務。
    例如:一個人是一個物件,而桌子、椅子、電腦、照相機等也是物件,這些都是屬於自然界的物件。而在視窗程式中

  • 訊息:訊息在物件導向系統中扮演了相當重要的角色。

訊息在物件導向的電腦系統裡,就相當於真實世界人說的話,藉由訊息的傳遞,觸動了物件的方法。例如:在公司中,營業人員要出貨、要填寫出貨單(發出訊息),通知倉管部門執行出貨動作,倉管部門完成後通知營業人員已完成出貨動作(接收訊息)。
人與人之間靠語言、文字、肢體動作等…,進行溝通;而物件導向程式設計中,物件與物件的聯繫就是靠訊息(參數)。
例如:在公司中您要這個月的出貨報告,應由倉管部門提出,而非您自己去統計而產生報表,否則就會產生錯誤,也違反物件導向的規則了。

  1. 物件三巨頭

A.屬性(Property):「屬性」是物件的一項描述內容,用以描述該物件的外貌與特徵。

例如以『人』這個物件來說吧,此物件便擁有「姓名」、「性別」、「年齡」、「身高」、「體重」等不同的屬性。
以一個程式表單而言,「高度」、「寬度」、「標題」、「背景顏色」等項目都是此表單物件之描述與特徵、故我們稱這些項目為表單之「屬性」。

B.事件(Event):「事件」是一種預先定義好的特定動作,通常由使用者或系統啟動。

例如以一部照相機來說「按下快門」是一個預先定義好的動作,當使用者按下快門時,便觸發了「按下快門」事件。
以一個程式按鈕而言「按一下」(Click)按下滑鼠左鍵,便觸發該按鈕之Click事件。也就是執行該物件事先寫好之程式碼,而此物件程式碼便是存放在該「事件程序」(Event Procedure)內。
以開車門為例:當您要開車門時,插入鑰鎖時向右或左轉動時便是啟動不同的事件,再拉起車門把手便可開啟車門(不要用榔頭去敲破車窗)。

C.方法(Method):
「方法」是放在物件內的程序,透過此程序可另物件產生特定動作或行為,且此程序是被包含在該物件內,並與物件緊密結合在一起。
以開車門為例:起車門把手便可啟動車門的機械結構,而開啟車門。

  1. 物件的藍本

1.何謂類別(Class):

類別(Class)與物件(Object)關係密切,類別包含了有關物件的特徵和定義,它是物件的藍圖,有了類別才可產生相對應的物件。例如:電話的「電路設計圖」可看成是「類別」,而因此電路設計圖出產之『電話』便是物件。

2.物件類別的特性:

A.繼承-提高軟體再利用性

B.多元性

「多元性」也就代表著多種形式。就以上述開車門轉動鑰鎖為例,轉動鑰鎖向左或向右,就會觸動不同的動作。以程式而言呼叫同一物件名稱之函數,會因參數不同而產生不同動作。

C.封裝

「封裝」意指將相關聯的資訊、作業、與處理整合至一個內含元件中。意指有較佳的防護,其他的作業不可破壞我的資料。

D.萃取

「萃取」抽象中的抽象?其意指為鼓勵程式設計師採用較淺顯易懂的名詞。

  1. 五. 結語

    Microsoft微軟帝國,擁有?
    MicroSoft說曰:

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 tjchanster 的頭像
    tjchanster

    邊城故事

    tjchanster 發表在 痞客邦 留言(0) 人氣()