河北農業大學渤海校區理工學院 石博文
淺談面向對象和面向過程程序設計
河北農業大學渤海校區理工學院 石博文
主要論述了面向過程程序設計的結構化思想和面向對象程序設計的抽象、封裝、繼承、多態技術,并詳細介紹了兩種思維方式的特點、優缺點以及相互聯系。
程序設計;面向對象;面向過程;模塊;封裝;繼承;多態
程序設計是給出解決特定問題程序的過程。程序設計的本質是把人們在現實生活中遇到的問題經過抽象處理,再利用計算機語言轉換到機器能夠理解的層面上去。如今,在程序設計中,有兩個非常成熟的設計方式:面向過程的程序設計和面向對象的程序設計。
2.1 設計思想
面向過程就是分析出解決問題所需要的步驟,然后用函數把這些步驟一步一步實現,使用的時候再一個一個調用。結構化程序設計是其核心思想。
2.2 設計特點
(1)模塊化
模塊化即功能分解,實質是采用自頂向下、逐步求精的設計過程把程序分解成單一處理功能的模塊,進而通過調用相應模塊并傳遞參數以實現程序的功能,此功能模塊可以理解為函數、過程、子程序;每一模塊內部均是由順序、選擇、循環三種基本結構組成,利用這三種結構的組合、嵌套,可以實現任何復雜的程序設計。功能分解使得系統是模塊的組件即:程序=(模塊+模塊+模塊+…)、模塊=(數據結構+算法)[1]。
模塊設計應堅持“高內聚,低耦合”的設計原則。其中“高內聚”是指每一個模塊都執行一個完整的功能,具有一個完整功能的業務都組合在一個模塊當中,而不會分散到兩個或者多個模塊當中;“低耦合”是指每一個模塊之間的共用信息應該盡量少,每個模塊之間的交集應盡可能小,應該盡量降低每個模塊之間的耦合度。
(2)數據和操作分離
面向過程的程序設計把重點放在解決問題的功能模塊劃分上,將數據和操作這些數據的函數分開。數據處于次要地位,而過程即模塊劃分是關心的焦點[2]。
2.3 設計優點
早期的程序設計屬于面向計算機的程序設計,程序員需要考慮大量的機器細節。面向過程的程序設計優點是相對前期程序設計而論的。
(1)模塊化思想將一個較復雜的問題分解為若干個子問題,各子問題分別由不同的人員解決,提高了開發效率,便于程序的調試;
(2)面向過程的設計按解決問題的過程劃分模塊,直接針對求解關系,集中處理數據,運行效率很高[3];
(3)自頂向下逐步求精的方法使程序具有清晰的層次結構,容易閱讀和理解,也較容易保證程序的正確性。
2.4 設計缺陷
(1)軟件模塊重用難。當開發一個新的軟件系統時,以前開發的軟件模塊很難直接使用;
(2)軟件系統功能擴展難。一旦用戶的需求發生變化,要改進系統或升級版本時,程序員要面對調用關系復雜的許多函數模塊,系統的功能擴展很困難;
(3)軟件維護難。軟件的模塊即函數越來越多,模塊間的調用關系越來越復雜,程序容易出錯,而且一旦出錯很難查找[4]。
3.1 設計思想
面向對象就是把構成問題的事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描述某個事物在整個解決問題步驟中的行為。
3.2 設計特點
(1)抽象、類、對象
抽象就是把事物共同點抽取出來,以統一的方式進行概要描述的一種過程。面向對象中,類是對現實世界事物的抽象,包括屬性和方法。其中屬性是對事物靜態特征的描述,方法是對事物動態特性即行為的描述[5]。一旦建立了類,就可以基于類初始化成員變量,實例化出一個對象,而程序就是由這一系列對象組成即:程序=(對象+對象+對象+…)、對象=(數據結構+算法)。
(2)封裝
封裝又稱數據隱藏,就是將一個事物的屬性和方法放在一個類中,對外只提供訪問該數據的方法,程序的其它部分不能直接作用于此數據。這一特性大大降低了面向過程中模塊間的耦合性,從而提高了程序的可靠性,盡可能地排除了對數據進行任意訪問造成的隱患[6]。
(3)繼承
類的繼承實質上是先定義一個基類(父類),然后用該基類派生出其它的子類,子類在沿襲父類的屬性和方法的同時可以添加自己特有的屬性和方法。繼承性使得程序得以最大限度地實現代碼重用,同時在父類上所做的改動可以直接反映到它的所有子類中,軟件可維護性大為提高。
(4)多態
多態是指在一般類中定義的屬性或方法被特殊類繼承以后,通過重寫,可以具有不同的數據類型或表現出不同的行為。多態性使得程序員可以將所定義的方法應用于多個類,同一個屬性和方法在一般類及各個特殊類中具有不同的語義,并使得程序更加容易擴展[7]。
3.3 設計優點
面向對象程序設計的優越性是基于它的特點而論的。對客觀現實世界事物的抽象,使軟件開發可以按照人類習慣的思維方式建立起問題領域的模型從而模擬客觀世界,有利于大型軟件的開發;事物屬性和方法的封裝避免了數據的隨意訪問,保證了數據的安全性;類與類之間的繼承關系,最大程度實現了代碼的重用;繼承關系下的多態性增強了程序的靈活性和擴展性。
3.4 設計缺陷
(1)運行效率較低。類的大量加載會犧牲系統性能,降低運行速度。雖然CPU速度在提高,內存容量在增加,但這一問題仍會隨著系統規模變大而逐漸顯示出來,變得越發嚴重。
(2)類庫龐大。由于類庫都過于龐大,程序員對它們的掌握需要一段時間,從普及、推廣的角度來看,類庫應在保證其功能完備的基礎上進行相應的縮減。
(3)類庫可靠性。越龐大的系統必會存在我們無法預知的問題隱患,程序員無法完全保證類庫中的每個類在各種環境中百分之百的正確,當使用的類發生了問題,就會影響后續工作,程序員也有可能推翻原來的全部工作[8,9]。
面向對象重視對現實世界的抽象,面向過程重視對問題的功能模塊化,但兩種技術不是非此即彼的對立關系。面向對象的抽象、封裝、繼承、多態是建立在面向過程的順序、選擇、循環三種控制結構之上。因此,如果將一個軟件任務分為兩層,那么面向對象技術用于解決“做什么”,而面向過程技術用于解決“怎么做”。
[1]馬金霞,宋傳磊.面向過程和面向對象程序設計分析[J].中國新通信,2016(11).
[2]錢能.C++程序設計教程(第2版)[M].北京:清華大學出版社,2005(09):13-16.
[3]許偉剛,梁大周.面向對象程序設計[J].計算機工程與應用,1990(12).
[4]朱戰立,宋新愛.面向對象程序設計與C++語言[M].北京:電子工業出版社,2010(07):31-46.
[5]張海藩.軟件工程導論(第5版)[M].北京:清華大學出版社,2008(02):203-211.
[6][美]Grady Booch等.面向對象分析與設計(第3版)[M].王海鵬,潘加宇譯.北京:人民郵電出版社,2009(08):35-38.
[7][加]Scott W.Ambler.面向對象軟件開發教程(第2版)[M].車皓陽,劉銳譯.北京:機械工業出版社,2003(06):97-130.
[8]徐向陽.面向對象程序設計現狀及發展趨勢研究[J].光盤技術,2006(01).
[9]胡玲.面向對象程序設計和設計技術思考[J].電子技術與軟件工程,2016(06).
The Summary between Object-oriented Programming and Process-oriented Programming
ShiBowen
(College of Science and Engineering,Agricultural University of Hebei,Cangzhou,061000,China)
The summary is mainly about structured ideas of process-oriented programming and some important technologies in objectoriented programming like abstract,encapsulation,inheritance and polymorphism.At the same time,the article expatiates the feature,merits and drawbacks as well as the relationship between process-oriented and object-oriented programming.
programming;object-oriented;process-oriented,module;encapsulation;inheritance;polymorphism