c++是在c語言基礎上發展的一門語言,他繼承了c語言的高效,簡潔,快速,和高移植性的傳統。c++包含c語言的內容,主要是在c語言的基礎上新增了物件導向編成(oop)的方法,c語言是面向過程的編成。
c語言--面向過程:
計算機語言要處理兩個概念--資料和演算法。資料是程式要使用和處理的資訊,而且演算法是程式解決問題的方法。c語言是面向過程的語言,他強調的是編成的演算法方面。
隨著程式規模的擴大,計算機科學家開發了一種跟有序的編成方法--結構化編成。結構化編成將分支限制為一小組行為的結構。如c語言中的for迴圈, while迴圈,do while迴圈和if else語句。結構化編成技術反映了過程性編成的思想,根據執行的操作構思乙個程式。
在c語言中,其理念是將大型程式分解為小型,便於管理的任務。
c++物件導向編成:
雖然結構化編成的理念提高了程式的清晰度,可靠性,便於維護,但隨著程式規模不斷增時,它不能很多地處理。於是人們提出了新的方法--物件導向編成。opp不象過程性編成那樣,試圖認問題來滿足語言,而是試圖認語言來滿足問題。
類是opp中的重點。程式設計師可以按需要定義乙個類,從而使問題更容易處理。opp的理念是設計與問題的本質特性相對應的資料格式。opp編成並不是僅僅將資料和方法合併為類定義。opp還有助於創造可重用的**。
c++物件導向和面向過程的程式設計有何區別?
面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。
物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。
例如五子棋,面向過程的設計思路就是首先分析問題的步驟:1、開始遊戲,2、黑子先走,3、繪製畫面,4、判斷輸贏,5、輪到白子,6、繪製畫面,7、判斷輸贏,8、返回步驟2,9、輸出最後結果。把上面每個步驟用分別的函式來實現,問題就解決了。
而物件導向的設計則是從另外的思路來解決問題。整個五子棋可以分為 1、黑白雙方,這兩方的行為是一模一樣的,2、棋盤系統,負責繪製畫面,3、規則系統,負責判定諸如犯規、輸贏等。第一類物件(玩家物件)負責接受使用者輸入,並告知第二類物件(棋盤物件)棋子布局的變化,棋盤物件接收到了棋子的i變化就要負責在螢幕上面顯示出這種變化,同時利用第三類物件(規則系統)來對棋局進行判定。
可以明顯地看出,物件導向是以功能來劃分問題,而不是步驟。同樣是繪製棋局,這樣的行為在面向過程的設計中分散在了總多步驟中,很可能出現不同的繪製版本,因為通常設計人員會考慮到實際情況進行各種各樣的簡化。而物件導向的設計中,繪圖只可能在棋盤物件中出現,從而保證了繪圖的統一。
功能上的統一保證了物件導向設計的可擴充套件性。比如我要加入悔棋的功能,如果要改動面向過程的設計,那麼從輸入到判斷到顯示這一連串的步驟都要改動,甚至步驟之間的循序都要進行大規模調整。如果是物件導向的話,只用改動棋盤物件就行了,棋盤系統儲存了黑白雙方的棋譜,簡單回溯就可以了,而顯示和規則判斷則不用顧及,同時整個對物件功能的呼叫順序都沒有變化,改動只是區域性的。
再比如我要把這個五子棋遊戲改為圍棋遊戲,如果你是面向過程設計,那麼五子棋的規則就分布在了你的程式的每乙個角落,要改動還不如重寫。但是如果你當初就是物件導向的設計,那麼你只用改動規則物件就可以了,五子棋和圍棋的區別不就是規則嗎?(當然棋盤大小好像也不一樣,但是你會覺得這是乙個難題嗎?直接在棋盤物件中進行一番小改動就可以了。)而下棋的大致步驟從物件導向的角度來看沒有任何變化。
當然,要達到改動只是區域性的需要設計的人有足夠的經驗,使用物件不能保證你的程式就是物件導向,初學者或者很蹩腳的程式設計師很可能以物件導向之虛而行面向過程之實,這樣設計出來的所謂物件導向的程式很難有良好的可移植性和可擴充套件性。
面向過程和物件導向到底有什麼區別
最近我在學習軟體工程,建模,可是學著學著,我對面向過程和物件導向越來越糊塗,還有,第一代物件導向和第二代物件導向有何區別?請哪位兄弟賜教一下!
第乙個問題似乎不是三言兩語就能解析清楚的,建議到一些oo的**上看看,比如umlchina。
第二個問題不知道是不是緣自「程式設計師」的「高展專欄」?個人提議在高展的理論尚未的到普遍認同前,初學者還是不要趕這趟混水,還是學好「傳統」的物件導向來得實際。
sa:資料是怎麼變化的。
oa:有那些物件,物件有那些服務和屬性。
乙個博大,乙個精深.
總體而言,物件導向簡單,面向過程對人員要求素質過高
第一代oo:物件導向,
第二代oo:面向構件。
面向過程是把變數和函式按照功能模組進行分類和打包。
物件導向是把變數和函式分配給不同的執行者,按執行者進行分類和打包。
二者對問題資訊領域的分析方法是相交的。
二者對問題資訊域的分析方法是相交的。
艾蘭.庫伯的《軟體創新之路》中提到:
面向過程和物件導向的區別並不像人們想象得那麼大
物件導向的大部分思想在面向過程中也能體現
但面向過程最大的問題(也許是唯一先天的缺陷)在於隨著系統的膨脹, 面向過程將無法應付,最終導致系統的崩潰
物件導向的提出正是試**決這一軟體危機
目前看來,似乎有一定成效
但仍任重道遠
做一些對比來說吧:
分析 基本構件 方法 工具
面向過程 基於演算法 函式/過程 資料流圖、偽**... ...
物件導向 基於物件 類 uml建模... rose,viso等
其實我始終認為,不管是物件導向,還是面向過程,都體現了一種軟體重用的思想!
只不過面向過程中重用的是過程和函式,但是物件導向重用的是類,一種將資料和處理資料的過程及函式封裝在一起的實體,其實物件導向中的過程和 函式和面向過程中的分別不是很大,所以資料流圖和偽**還是有用的。
物件導向乙個很大的好處就是資料 和方法的封裝,由此物件導向的三大特性得到發揮。
物件導向和面向過程區別
原文 面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。例如五子棋,面向過程的設計思路就是首先分析問題的步驟 1 ...
物件導向和面向過程的區別
面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。例如五子棋,面向過程的設計思路就是首先分析問題的步驟 1 開始遊...
物件導向和面向過程的區別
面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。例如五子棋,面向過程的設計思路就是首先分析問題的步驟 1 開始遊...