天天看點

面向對象

所有程式設計語言都提供抽象機制。可以認為,人們所能夠解決的問題的複雜性直接取決于抽象的類型和品質。所謂的“類型”是指抽象的是什麼?彙編語言是對底層機器的輕微抽象。接着出現了許多所謂“指令式”語言(如foratran、basic,c等)都是對彙編語言的抽象。這些語言在彙編語言基礎上有了大幅的改進,但是它們所作的主要抽象仍要求在解決問題時要基于計算機的結構,而不是基于所要解決的問題的結構來了考慮(考慮問題是面向機器的,而不是面向具體的問題的)。程式員必須建立起在機器模型(位于“解空間”内,這是你對問題模組化的地方,例如計算機)和實際待解問題的模型(位于“問題空間”内,這是問題存在的地方,例如一項業務)之間的關聯。建立這種映射是費力的,而且這不屬于程式設計語言所固有的功能,這使得程式難以編寫,而且維護代價高昂,同時也産生了作為副産物的整個“程式設計方法”行業。

另一種對機器模組化的方式就是隻針對待解問題模組化。早期的程式設計語言,如lisp和apl,都選擇考慮世界的某些特定視圖(分别對應于“所有問題最終都是清單”或者“所有問題都是算法形式”)。prolog則将所有問題都轉換成決策鍊。此外還産生了基于限制條件程式設計的語言和專門通過對于圖形符号操作來實作程式設計的語言。這些方式對于它們所要解決的特定類型的問題都是不錯的解決方案,但是一旦超出其特定領域,它們就力不從心了。

面向對象方式通過向程式提供表示問題空間中的元素的工具而更進了一步。這種表示方式非常通用,使得程式員不會受限于任何特定類型的問題。我們将問題空間中的元素及其在解空間中的表示稱為“對象”。這種思想的實質是:程式可以通過添加新類型的對象使自身适用于某個特定的問題。是以,當你在閱讀描述解決方案的代碼的同時,也是在閱讀問題的表述。相比以前我們所适用的語言,這是一種更靈活和更強有力的語言抽象。是以,oop允許根據問題來描述問題,而不是根據運作解決方案的計算機來描述問題。但是它仍然與計算機有聯系:每個對象看起來都有點像一台微型計算機--它具有狀态,還具有操作,使用者可以要求對象執行這些操作。如果要對現實世界中的對象作類比,那麼說它們都具有特性和行為似乎不錯。

1).外物皆為對象

2).程式是對象的集合,它們通過發送消息來告知彼此要做的。要想請求一個對象,就必對該對象發送一條消息。更具體地說,可以把消息想象成對某個特定對象的方法的調用請求。

3).每個對象都有自己的由其他對象所構成的存儲

4).每個對象都擁有其類型

5).某一特定類型的所有對象都可以接收同樣的消息

參考資料:《java程式設計思想第四版》,《深入java虛拟機》

繼續閱讀