物件導向程式設計與面向過程程式設計的區別(翻譯版

2021-09-07 16:27:28 字數 2476 閱讀 9253

應對複雜性的能力不同。  

我們知道現在存在著兩種不同的程式設計方式-1) 面向過程程式設計(pop)以及2)物件導向程式設計。我們可以任意選擇一種方式來編寫程式,但是我們得知道這兩種程式設計方式的區別。這兩種程式設計方式是軟體開發歷經幾十年發展的結果。從計算機被發明起,人們嘗試了很多方法來編寫程式,例如a)自頂向下程式設計;b)自底向上程式設計;c)模組化程式設計;d)結構化程式設計等等。這些方法的根本目的只有乙個-「使程式設計更加高效」-即讓編寫乙個複雜的程式變得簡單、自由、bug少、易於理解、易於擴充套件、易於修改等等。

簡單來說,pop與oop之間的區別可以這樣解釋:-乙個程式設計師可以用pop編寫乙個困難程度一般的複雜程式,但是當程式變得更加複雜的時候,此時用pop將比較低效率,整個程式設計過程將更加艱難,花費更多時間,有更多的bug,花更多的時間debug等等。而在同樣複雜度下,oop比pop高效得多。在軟體開發中,業界都遵循oop原則,因為oop使團隊協作程式設計變得簡單。同時,oop具有較高的**重用性。

面向過程程式設計

這裡「過程」一次值得特別注意。過程可以理解為子程式的集合或者函式的集合。我們都知道c語言中的函式。c是乙個典型的面向過程語言。在面向過程程式設計中,強調的是函式或者子程式。函式是指令的集合,用於執行某個特定的任務。在程式中,函式被重複呼叫來執行任務。例如,乙個程式可能包括收集使用者資料(讀),對使用者資料進行計算(計算),呈現計算結果(列印)。這三個讀、計算、列印能通過3個不同的函式來實現。

面向過程程式設計示意圖

面向過程程式設計最大的問題在於資料處理。面向過程完全不重視資料。這裡的資料指從使用者收集到的資訊、程式的計算結果等等。如果你熟悉c語言,你可能會想起c語言中的儲存類別。在c語言中,為了乙個或者多個函式可以訪問變數, 這個變數必須被宣告為全域性變數。如果這個程式有10個函式,每個函式都可以訪問這個變數,那麼其中乙個函式就有可能不小心修改了這個變數,如果這個變數是程式的乙個重要變數,那麼任意乙個不小心的操作就有可能毀了整個程雪。而且,當程式很龐大時,這種bug很難定位到是哪個函式出了問題。

面向過程程式設計中的資料以及函式示意

結構體是c語言的乙個重要特性。結構體提供了一種把不同資料型別打包成乙個新型別的方式。程式設計師可以用結構體把整數、浮點數、陣列等型別打包成乙個新的型別。結構體一引入c語言就收到了廣泛的好評和認可。這是因為結構體很好地把現實世界的需求對映到程式當中。結構體的問題在於它只處理資料。 結構體不允許打包與資料相關聯的函式,所有相關聯的函式必須寫在結構體之外。因此,c程式過度依賴於函式。

總的來說,在面向過程程式設計中,問題被看成過程的有序組合,例如讀、計算、展示結果等等過程。以面向過程來思考為時,首先把問題分解成一系列過程,每個過程可以對應乙個或者多個函式,實現所有的函式,問題就被解決了。

物件導向程式設計

物件導向程式設計與面向過程程式設計有本質的不同。物件導向程式設計保留每結構化程式設計的所有優點,並且引入了許多促提高程式設計效率的新特性。這些新特性使我們可以以一種全新的方式去程式設計。下面介紹這些新特性。

1) 物件導向程式設計的第乙個特性是資料隱藏。物件導向程式設計很重視資料。採用物件導向程式設計,程式設計師可以避免核心資料暴露在外。類(class)是物件導向程式設計的基本概念,類類似於面向過程程式設計中的結構體。類用於打包不同的資料型別以及對這些資料的操作函式。類中的資料成員可以是私有的(private)或者公有的(public)。為了避免資料暴露在外,程式設計師可以把資料宣告為私有的。類與c語言中的結構體很相似,都是打包不同的資料型別。它們之間的主要區別在於函式。結構體不允許一起打包資料以及相應的處理函式而類允許。並且結構體並不支援資料隱藏,結構體中的資料成員可以任意訪問。物件導向程式設計中的資料隱藏稱為資料封裝。面向過程程式設計的主要缺陷(忽視資料)在物件導向程式設計中得到了解決。物件導向程式設計把資料繫結到類以及類的物件上去,因此也就不再需要全域性資料型別,因此避免了全域性變數的偶然修改導致的嚴重錯誤。

物件導向程式設計中的物件示意圖

2)物件導向程式設計的另乙個特點是**重用。物件導向程式設計的繼承特性使**重用變得可能。通過繼承,乙個類能夠獲得另乙個類的特性。除此以外,物件導向程式設計的新特性還有多型,動態繫結等等,這些都提高了**的重用性。

以上翻譯自

面向過程程式設計與物件導向程式設計的區別(個人理解)

1)從思維方式上來講,是對現實問題的建模方式不同。面向過程程式設計把問題分解成乙個個過程,一步步實現這些過程,問題就得到了解決。而物件導向程式設計把問題看成一系列物件之間的互動,設計出這些物件以及物件之間的互動,問題就得到了解決。

2)從程式的本質上來講,是對演算法以及資料的重視程度的不同。程式的本質是演算法和資料。面向過程程式設計重視演算法,忽視資料。物件導向程式設計側重點在資料,對演算法的重視程度不如面向過程程式設計。對資料的重視,使物件導向程式設計具有繼承,封裝,多型等特性,在各方面提高了程式設計的效率。

物件導向程式設計與面向過程程式設計

面向過程程式設計 面向過程程式設計是一種以過程為中心的程式設計思想,分析出解決問題的步驟,然後用函式把這些步驟一步一步實現。面向過程程式設計,資料和對資料的操作是分離的。物件導向程式設計 物件導向程式設計是將事物物件化,通過物件通訊來解決問題。物件導向程式設計,資料和對資料的操作是繫結在一起的。物件...

面向過程程式設計與物件導向程式設計

舉個例子,比如開車 加速 減速 剎車。用面向過程來說就是你要先有乙個車,然後這四個分別是4件事,也就是說你要寫4個函式,分別是開車 加速 減速 剎車,這分別是四個事件,如果使用的話要呼叫4個函式。但是對於物件導向的程式設計來說,我們關心的是車這個類,而不是開車 加速 減速和剎車這四個過程。這4個過程...

面向過程程式設計與物件導向程式設計

面向過程 核心是過程二字,過程指的是解決問題的步驟,設計一條流水線,機械式的思維方式。優點 複雜的問題流程化,進而簡單化。程式設計難度低。缺點 可擴充套件性差 應用場景 功能一旦實現,擴充套件性很少的場景,比如系統監控 自動部署。import json import redef interactiv...