馮媛媛
摘要:隨著面向對象程序設計方法的出現,對象作為該方法的核心技術,正在得到新的開發語言和新的系統架構的支持,兩種開發方法存在著質的區別。本文從面向過程程序設計的結構化思想和面向對象程序設計的抽象、封裝、繼承、多態技術入手做主要論述,詳細介紹了兩種程序設計方法的特點、優缺點以及相互聯系。
關鍵詞:面向對象;面向過程;程序設計
中圖分類號:TP311.1 文獻標識碼:A 文章編號:1007-9416(2017)07-0185-01
1 引言
程序設計是為了解決某一類問題所設計的通用的解決辦法的程序,通過運行程序后進行特定的輸入域輸出,最后得出運行結果,是構造一個軟件活動必不可少的部分,程序設計活動與大多數設計活動一樣是為了平衡約束條件和相互矛盾的需求而進行的。計算機技術在早期發展階段,機器資源非常昂貴,因此在設計程序時必須要考慮到時間、空間代價等因素,而隨著計算機應用技術的發展和軟件規模的擴張,程序的結構、可重用性、可維護性、可擴展性等因素在設計時顯得尤為重要。現如今,面向對象和面向過程的程序設計是較為常用的兩個成熟的設計方式。
2 面向對象和面向過程的程序設計各自的特點
2.1 面向對象的程序設計
面向對象編程是使用對象的編程范式——包含數據域、方法以及它們之間的交互來設計應用和程序。其程序設計方法包括數據抽象、封裝、通信、模塊化、多態和繼承。簡單來看,我們可以對面向對象編程作出如下幾點理解:首先,它必須將數據抽象為模塊結構;其次,必須存在某種方式來實現代碼的多態執行;最后,它至少能部分壓縮代碼和函數。面向對象的程序設計大都遵循傳遞者模式(Mediator Pattern),并且被設計為從sender中解耦caller,其都提供狀態,且都是模塊化的[1]。
2.2 面向過程的程序設計
面向過程是一種以事件為中心的編程思想,以功能(行為)為導向,按模塊化的設計,分析出解決問題所需要的步驟,然后用函數把這些步驟一步一步實現,在實現過程中一個一個依次調用即可。面向過程的程序設計是自頂而下的,首先他需要設計者將應用程序需要完成的業務按照功能分類,并劃分出子模塊,同時將整個應用程序所要完成的事情寫在一個main函數中,由該main函數對這一系列的子函數的進行調用。對于每個子函數來說,可以對其進行再次分解,使其變為模塊更小的子函數。完成一個過程式的設計從本質上來說就是一直重復該過程。用一句話來概括面向過程的設計方法的特征即為:以函數為中心,并將其作為基本單位來劃分程序,數據在這種設計方法中一般處于從屬的位置。
3 面向對象和面向過程的程序設計的比較
3.1 從在開發過程中的運用來看面向對象和面向過程的程序設計
面向過程的設計方法是通過逐步細化問題的方式來進行設計,該方法符合多數人的邏輯思維方式。但是由于過程式的設計是自頂向下的,這就需要設計人員對要解決的問題有一個整體上的把握,但是現實情況中是很少有人能做到這一點的,尤其是在比較復雜的情況下,因此這種方法對于開發需求比較多的問題或比較復雜的工程項目而言,是不太適用的。開發一個系統的過程是一個創造性的過程,開發者或設計者不僅需要不斷地去了解要開發的系統,還需要學習相應的技術,而過程式的設計方法忽略了這一點。面向對象的設計方法是自底向上的,它不需要在一開始用main概括出整個應用程序,其自底向上的特性允許程序設計者從問題的最底層開始逐步加深對系統整體的理解,開發者在設計過程中遇到的需求變化及得到的新的理解,都會再次作用到系統開發本身,形成一種螺旋式的開發方式。
3.2 從編程語言來看面向對象和面向過程的程序設計
C語言是面向過程的設計方法的代表性語言,其包括定義數據的元素和定義操作的元素,比如在C語言中,要使得數據和操作分離開來,就要單獨來定義數據和操作,數據和操作的元素在C語言中分別用結構和函數來定義。數據和操作的分離可能會造成對一種數據的操作分布在程序的各個角落,那么當我們要對數據和操作進行修改的時候,即便是微小的修改,也會變得非常困難。在面向過程的設計中,main()函數可以調用子函數,對于整個應用程序來說處在一個尤為重要的位置。一般來說在面向過程的設計方式中,對于整個系統的概括性描述開發者會寫在一個main()函數中,之后再逐步細化出整個應用程序。然而,這樣做會使得程序的核心邏輯不夠清晰,易與一些較外延和易變化的邏輯混淆在一起[2]。
封裝性、繼承性和多態性是java語言中的三個典型的面向對象的特性。關于封裝性:在java語言中,與程序相關的變量和方法由對象對其進行相應的封裝,其中變量指對象的狀態,方法指對象具有的行為。通過對象的封裝,如通過對類中的成員設置訪問權限,實現類成員信息的隱藏。關于繼承性:通過繼承可實現代碼重復利用。Java中的類基本都是通過直接或間接地繼承java.lang.Object類而得到的。在父類中,如果成員變量和方法的訪問權限為private,則不能被子類繼承。父類的方法能夠被子類重寫,子類與父類同名的成員變量也能被子類重命名,但Java語言不能夠實現多重繼承。關于多態性:在java語言中,多態性體現在兩個方面:靜態多態性和動態多態性,靜態多態性也稱為編譯時多態,在編譯階段,編譯器會根據參數的不同來靜態確定具體調用哪個被重載的方法,由方法重載實現;動態多態性也稱為運行時多態,由方法重寫實現。程序中凡是使用父類對象的地方,都可以用子類對象來代替。一個對象可以通過引用子類的實例來調用子類的方法。
4 結語
總之,面向對象重視對現實世界的抽象,用于解決“做什么”在面向對象設計中,類封裝了數據,而類的成員函數作為其對外的接口,抽象地描述了類。用類將數據和操作這些數據的函數放在一起,這可以說就是面向對象設計方法的本質。而面向過程的設計方法重視對問題的功能模塊化,用于解決“怎么做”。
參考文獻
[1]譚娟.面向過程和面向對象程序設計的比較[J].湖南科技學院學報,2008,(12):117-118.
[2]石博文.淺談面向對象和面向過程程序設計[J].電子世界,2017,(1):59-60.endprint