摘 要: 本文從程序設計語言的發展,面向過程的程序設計和面向對象的程序設計對比,以及面向對象的程序設計的思想和特征等方面,對面向對象的技術作了闡述,總結了面向對象程序設計的優越性。
關鍵詞: 面向對象程序設計 程序設計語言 面向對象技術
1.引言
面向對象程序設計技術將對象作為程序的基本結構單元,對象將數據及對該數據的操作封裝在一起成為一個相對獨立的實體,以簡單的接口對外提供服務。面向對象程序設計語言通過提供繼承與派生、多態性、模板等概念和語法,使開發者能最大限度地利用已有的程序代碼,大大提高程序開發的效率。
2.程序設計語言
程序設計語言是一組用來定義計算機程序的語法規則。它是一種被標準化的交流技巧,用來向計算機發出指令。計算機語言讓程序員能夠準確地定義計算機所需要使用的數據,并精確地定義在不同情況下所應當采取的行動。程序設計語言原本是被設計成專門使用在計算機上的,但它們也可以用來定義算法或者數據結構。正是因為如此,程序員才會試圖使程序代碼更容易閱讀。設計語言往往使程序員能夠比使用機器語言更準確地表達他們所想表達的目的。對那些從事計算機科學的人來說,懂得程序設計語言是十分重要的,因為在當今所有的計算都需要程序設計語言才能完成。在過去的幾十年間,大量的程序設計語言被發明、被取代、被修改或組合在一起。高級程序設計語言(也稱高級語言)的出現使得計算機程序設計語言不再過度地倚賴某種特定的機器或環境。這是因為高級語言在不同的平臺上會被編譯成不同的機器語言,而不是直接被機器執行。最早出現的編程語言之一FORTRAN的一個主要目標,就是實現平臺獨立。隨著C、PASCAL、FORTRAN等結構化高級語言的誕生,程序員可以離開機器層次,在更抽象的層次上表達意圖。由此誕生的三種重要控制結構,以及一些基本數據類型都能夠很好地開始讓程序員以接近問題本質的方式去思考和描敘問題。隨著程序規模的不斷擴大,在上世紀60年代末期出現了軟件危機,在當時的程序設計范型中都無法克服錯誤隨著代碼的擴大而級數般地擴大,以至無法控制,這個時候就出現了一種新的思考程序設計方式和程序設計范型——面向對象程序設計,由此也誕生了一批支持此技術的程序設計語言,比如EIFFEL、C++、JAVA,這些語言都以新的觀點去看待問題,即問題就是由各種不同屬性的對象,以及對象之間的消息傳遞構成。面向對象語言由此必須支持新的程序設計技術,比如:數據隱藏、數據抽象、用戶定義類型、繼承、多態等。
3過程式設計與面向對象設計
面向對象技術最初是從面向對象的程序設計開始的,它的出現以60年代的Simula語言為標志。
3.1過程式設計
總的來說,過程式的程序設計是一種自上而下的設計方法,設計者用一個main函數概括出整個應用程序需要做的事,而main函數由對一系列子函數的調用組成。對于main中的每一個子函數,都又可以再被精煉成更小的函數。重復這個過程,就可以完成一個過程式的設計。其特征是以函數為中心,用函數來作為劃分程序的基本單位,數據在過程式設計中往往處于從屬的位置。過程式設計的優點是易于理解和掌握,這種逐步細化問題的設計方法和大多數人的思維方式比較接近。然而,過程式設計對于比較復雜的問題,或是在開發中需求變化比較多的時候,往往顯得力不從心。這是因為過程式的設計是自上而下的,這要求設計者在一開始就要對需要解決的問題有一定的了解。在問題比較復雜的時候,要做到這一點會比較困難,而當開發中需求變化的時候,以前對問題的理解也許會變得不再適用。事實上,開發一個系統的過程往往也是一個對系統不斷了解和學習的過程,而過程式的設計方法忽略了這一點。
3.2面向對象設計
面向對象是一種自下而上的程序設計方法。不像過程式設計那樣一開始就要用main概括出整個程序,面向對象設計往往從問題的一部分著手,一點一點地構建出整個程序。面向對象設計以數據為中心,類作為表現數據的工具,是劃分程序的基本單位。而函數在面向對象設計中成為了類的接口。面向對象設計自下而上的特性,允許開發者從問題的局部開始,在開發過程中逐步加深對系統的理解。這些新的理解,以及開發中遇到的需求變化,都會再作用到系統開發本身,形成一種螺旋式的開發方式。在這種開發方式中,對于已有的代碼,常需要做代碼重構以體現系統的變化。和函數相比,數據應該是程序中更穩定的部分。不過在這里,只有從抽象的角度來看,數據才是穩定的,如果考慮這些數據對象的具體實現,它們甚至比函數還要不穩定,因為在一個數據對象中增減字段在程序開發中是常事。因此,在以數據為中心構建程序的同時,我們需要一種手段來抽象地描述數據,這種手段就是使用函數。在面向對象設計中,類封裝了數據,而類的成員函數作為其對外的接口,抽象地描述了類。用類將數據和操作這些數據的函數放在一起,這可以說就是面向對象設計方法的本質。
4.面向對象程序設計
面向對象程序設計(Object Oriented Programming,OOP)的許多原始思想都來自Simula語言,并在Smalltalk語言的完善和標準化過程中得到更多的擴展和對以前的思想的重新注解。可以說OOP思想和OOP幾乎是同步發展相互促進的。與函數式程序設計(functional-programming)和邏輯式程序設計(logic-programming)所代表的接近于機器的實際計算模型所不同的是,OOP幾乎沒有引入精確的數學描敘,而是傾向于建立一個對象模型,它能夠近似地反映應用領域內的實體之間的關系,其本質是更接近于一種人類認知事物所采用的哲學觀的計算模型。由此,導致了一個自然的話題,那就是OOP到底是什么?在OOP中,對象作為計算主體,擁有自己的名稱、狀態,以及接受外界消息的接口。在對象模型中,產生新對象,銷毀舊對象,發送消息,響應消息就構成OOP計算模型的根本。
OOP主要有以下的概念和組件:
組件——數據和功能一起在運行著的計算機程序中形成的單元,組件在OOP計算機程序中是模塊和結構化的基礎。
抽象性——程序有能力忽略正在處理中信息的某些方面,即對信息主要方面關注的能力。
封裝——也叫做信息封裝:確保組件不會以不可預期的方式改變其它組件的內部狀態;只有在那些提供了內部狀態改變方法的組件中,才可以訪問其內部狀態。每類組件都提供了一個與其它組件聯系的接口,并規定了其它組件進行調用的方法。
多態性——組件的引用和類集會涉及其它許多不同類型的組件,而且引用組件所產生的結果得依據實際調用的類型。
繼承性——允許在現存的組件基礎上創建子類組件,這統一并增強了多態性和封裝性。典型地來說就是用類來對組件進行分組,而且可以定義新類為現存的類的擴展,這樣就可以將類組織成樹形或網狀結構,這體現了動作的通用性。
我們可以看到面向對象程序設計的核心思想是:抽象數據類型、繼承和多態。這也是它的好處和優點。其核心就是用類來表示各種概念,在這種思想的影響下,誕生了一批面向對象程序語言,通過各種語言和程序設計范型的演化,我們可以清晰看到面向對象程序設計技術的各種優勢,以及這種優勢產生的根本原因——克服過程式編程里面數據與算法完全分離的弊端,并在此基礎上演化出了多種新的組織程序和表達概念的方法。
參考文獻:
[1]吳其慶.J2EE程序設計實例教程.北京:冶金工業出版社,2006.
[2]Stroustrup.C++程序設計語言.機械出版社.
[3]Lippman.C++PRIMER中文版.中國電力出版社.
[4]Bertrand.Meyer.Object-Oriented Software Constructure.機械工業出版社.
(作者系武漢理工大學計算機學院在讀碩士)