星期四, 10月 05, 2006

object-oriented programming

嗯,看完《Visual C# 2005 How to program》後,總算體會到什麼是「物件導向」。這本書對物件的著墨不錯。

學過 C++ 等語言的都知道 class 結合 data member 和 member function,成為一種新型態,也知道data abstraction 及 encapsulation 是落實物件導向很重要的概念。許多書藉把 OOP 和 inheritance 放在一塊(包括《C++ Primer 4/e》),容易讓人誤解為 OOP 和繼承習習相關,進而狹化 OO 概念。

在《Visual C# 2005 How to program》一書中,第一章很清楚地描述何謂物件,在日常生活上,人、球、計算機等等,都算是物件。這些物體除了本質外,還包含了許多行為,譬如說:人會「走」、「跑」、「跳」等;計算機會「顯示數字」、「計算結果」;球會滾。在程式裡,物件就是具有本質(data member),以行為(member function or method),我們可以藉由這些行為(方法)來操控(處理)本質,這就是物件。

那何謂物件導向?舉個簡單的例子:在沒有任何計算工具發明前,我們直接透過人腦來算術;但有了算盤、計算機等等後,我們是藉由這些工具來算術。算術,可以看待為處理數值,也就是資料。而差別僅在於,前者是直接處理資料,後者是藉由工具來處理。因此,物件導向是指「透過物件來管理、處理資料」,不同於以往直接處理資料。

以上是對於物件導向最淺層的描述

--
應該沒講錯吧!?

2 則留言:

Josh Ko 提到...

當 C++ Primer 這種等級的書和 How to Program 這等級的書有衝突時,相信前者會是比較好的選擇 :P。

OOP 的確不是非繼承不可(i.e. 不應濫用繼承),但繼承仍扮演相當關鍵(crucial)的角色。例如,可以看看 GoF《Design Patterns》23 個範式裡面,使用繼承的範式所佔的比例。你在這篇提的只是 data abstraction,or object-based programming。與其說這是 OOP 的精神,不如說(和繼承一樣)是 OOP 的根基 ─ 但就只是根基而已,情形和「C++ 以 C 為根基」相仿。

要對 OO 理論有比較原汁原味的了解,還是得請教 Booch 的《Object-Oriented Analysis and Design with Applications, 2/e》。

Celith 提到...

嗯嗯^^