所有程式設計語言都提供抽象機制。人們所能解決問題的複雜性直接取決于抽象的類型和品質。
彙編語言是對底層機器的抽象。接着出現的“指令式”語言(如FORTRAN、BASIC、C等)都是對彙編語言的抽象。這些語言雖然在彙編語言的基礎上有了很大的改進,但是這些語言所做的抽象仍要求在解決問題時要基于計算機的結構,而不是基于所要解決的問題的結構來考慮。程式員必須建立起在機器模型(位于“解空間”内)和實際待解問題的模型(位于“問題空間”)之間的關聯。但是有時候很難建立這種映射,這使得程式難以編寫,并且維護代價高昂。
另一種對機器模組化的方式是隻針對待解問題模組化。早期的程式設計語言,如LISP(所有的問題都是清單)和APL(所有問題都是算法形式的),都選擇考慮世界的某些特定視圖。但是一旦超出其特定領域,這些程式設計語言就力不從心了。
OOP(object oriented programming)根據問題來描述問題,而不是根據運作解決方案的計算機來描述問題,其具有如下特性:
萬物皆為對象
程式是對象的集合,它們通過發送消息(某個特定對象的方法調用請求)來告知彼此所要做的
每個對象都有自己的由其他對象所構成的存儲
每個對象都擁有其類型
某一特定類型的所有對象都可以接受同樣的消息