① 問一個概念性的問題,vc++6.0這個編譯器主要面向對象還是面向過程
c++是面向對象的。vc++6.0在使用上偏向面向對象;
面向對象和面向過程並不是那麼嚴格區分,糾結這個沒有意義!
② 面向對象的編程和面向過程的編程的區別
C語言是面向過程的編程,它的最重要特點是函數,通過主函數來調用一個個子函數。程序運行的順序都是程序員決定好了的。它是我學的第一種程序語言。
C++是面向對象的編程,類是它的主要特點,程序執行過程中,先由主函數進入,定義一些類,根據需要,執行類的成員函數,過程的概念被淡化了(實際上過程還是有的,就是主函數的那些語句),類就是對象,所以我們稱之為面向對象程序設計。 不同點:1.編程模型
所有計算機均由兩種元素組成:代碼和數據.精確的說,有些程序是圍繞著"什麼正在發生"而編寫,有些則是圍繞"誰正在受影響"而編寫的.
第一種編程方式叫做"面向過程的模型",按這種模型編寫的程序以一系列的線性步驟(代碼)為特徵,可被理解為作用於數據的代碼.如 C 等過程化語言.
第二種編程方式叫做"面向對象的模型",按這種模型編寫的程序圍繞著程序的數據(對象)和針對該對象而嚴格定義的介面來組織程序,它的特點是數據控制代碼的訪問.通過把控制權轉移到數據上,面向對象的模型在組織方式上有:抽象,封裝,繼承和多態的好處.
2.抽象
面向對象程序設計的基本要素是抽象,程序員通過抽象來管理復雜性.
管理抽象的有效方法是使用層次式的分類特性,這種方法允許用戶根據物理含義分解一個復雜的系統,把它劃分成更容易管理的塊.例如,一個計算機系統是一個獨立的對象.而在計算機系統內部由幾個子系統組成:顯示器,鍵盤,硬碟驅動器,DVD-ROM,軟盤,音響等,這些子系統每個又由專門的部件組成.關鍵是需要使用層次抽象來管理計算機系統(或其他任何復雜系統)的復雜性.
面向對象程序設計的本質:這些抽象的對象可以被看作具體的實體,這些實體對用來告訴我們作什麼的消息進行響應.
/* (我的理解)
*計算機是一個實體,我要輸入字元,顯示器顯示出來,那麼
*計算機(對象).輸入(鍵盤屬性).顯示(顯示方法)
*使用分層來引用,操作.而不用管計算機內部如何處理.
*只要有計算機對象,它就能響應我的操作,而我敲鍵盤,
*計算機對象就把這個消息傳給屏幕,屏幕顯示.
*/
計算機對象包含了它所有的屬性,以及操作,這就是面向對象程序設計的三大原則之一:封裝.
3.封裝
封裝是一種把代碼和代碼所操作的數據捆綁在一起,使這兩者不受外界干擾和誤用的機制.封裝可被理解為一種用做保護的包裝器,以防止代碼和數據被包裝器外部所定義的其他代碼任意訪問.對包裝器內部代碼與數據的訪問通過一個明確定義的介面來控制.封裝代碼的好處是每個人都知道怎樣訪問代碼,進而無需考慮實現細節就能直接使用它,同時不用擔心不可預料的副作用.
在java中,最基本的封裝單元是類,一個類定義著將由一組對象所共享的行為(數據和代碼).一個類的每個對象均包含它所定義的結構與行為,這些對象就好象是一個模子鑄造出來的.所以對象也叫做類的實例.
在定義一個類時,需要指定構成該類的代碼與數據.特別是,類所定義的對象叫做成員變數或實例變數.操作數據的代碼叫做成員方法.方法定義怎樣使用成員變數,這意味著類的行為和介面要由操作實例數據的方法來定義.
由於類的用途是封裝復雜性,所以類的內部有隱藏實現復雜性的機制.所以JAVA中提供了私有和公有的訪問模式,類的公有介面代表外部的用戶應該知道或可以知道的每件東西.私有的方法數據只能通過該類的成員代碼來訪問.這就可以確保不會發生不希望的事情.
4.繼承
繼承是指一個對象從另一個對象中獲得屬性的過程.是面向對象程序設計的三大原則之二,它支持按層次分類的概念.例如,波斯貓是貓的一種,貓又是哺乳動物的一種,哺乳動物又是動物的一種.如果不使用層次的概念,每個對象需要明確定義各自的全部特徵.通過層次分類方式,一個對象只需要在它的類中定義是它成為唯一的 各個屬性,然後從父類中繼承它的通用屬性.因此,正是由於繼承機制,才使得一個對象可以成為一個通用類的一個特定實例.一個深度繼承的子類將繼承它在類層次中的每個祖先的所有屬性.
繼承與封裝可以互相作用.如果一個給定的類封裝了某些屬性,它的任何子類將會含有同樣得屬性,另加各個子類所有得屬性.這是面向對象程序在復雜性上呈線性而非幾何增長的一個重要概念.新的子類繼承其所有祖先的所有屬性.子類和系統中的其他代碼不會產生無法預料的交互作用.
5.多態
多態是指一個方法只能有一個名稱,但可以有許多形態,也就是程序中可以定義多個同名的方法,用"一個介面,多個方法"來描述.可以通過方法的參數和類型引用.
6.封裝,繼承,多態的組合使用
在由封裝,繼承,多態所組成的環境中,程序員可以編寫出比面向過程模型更健壯,更具擴展性的程序.經過仔細設計的類層次結構是重用代碼的基礎.封裝能讓程序員不必修改公有介面的代碼即可實現程序的移植.多態能使程序員開發出簡潔,易懂,易修改的代碼.例如:汽車
從繼承的角度看,駕駛員都依靠繼承性來駕駛不同類型(子類)的汽車,無論這輛車是轎車還是卡車,是賓士牌還是菲亞特牌,駕駛員都能找到方向盤,手剎,換檔器.經過一段時間駕駛後,都能知道手動檔與自動檔之間的差別,因為他們實際上都知道這兩者的共同超類:傳動裝置.
從封裝的角度看,駕駛員總是看到封裝好的特性.剎車隱藏了許多復雜性,其外觀如此簡單,用腳就能操作它.發動機,手剎,輪胎大小的實現對與剎車類的定義沒有影響.
從多態的角度看,剎車系統有正鎖反鎖之分,駕駛員只用腳踩剎車停車,同樣的介面可以用來控制若干種不同的實現(正鎖或反鎖).
這樣各個獨立的構件才被轉換為汽車這個對象的.同樣,通過使用面向對象的設計原則,程序員可以把一個復雜程序的各個構件組合在一起,形成一個一致,健壯,可維護的程序
③ 面向對象編程和面向過程編程哪個好
掌握面向對象的困難之處在於思路的轉換。我們通常習慣於考慮解決問題的方法,而不是考慮將問題抽象成對象再去解決它。
我還是從兩個簡單的例子來說一下吧,希望對你轉換思路有幫助:
第一個簡單的例子:
(編寫一個駕駛汽車的方法)
面向過程的程序設計:
編寫一個方法,void drivecar();
面向對象的程序設計:
將一輛汽車看成一個對象,將所有汽車對象的共性抽取出來,設計一個類Car,類中有一個方法void drive(),用Car這個類實例化一個具體的對象car,調用:car.drive()。
第二個簡單的例子:問題:求一個長方形的周長和面積。
以面向過程的程序設計方式思考:
1、確定長方形周長和面積的演算法。
2、編寫兩個方法(函數)分別計算長方形的周長和面積。
3、求周長的方法(函數)和求面積的方法(函數)需要兩個參數,分別是長方形的長和寬。
面向過程的程序設計代碼:
class Rectangle
{
static int perimeter(int length,int width)
{
return 2*(length+width);
}
static int area(int length,int width)
{
return length*width;
}
public static void main(String[] args)
{
System.out.println("perimeter = 「 + Rectangle.perimeter(5,4));
System.out.println("area = 「 + Rectangle.area(5,4));
}
}
面向對象的程序設計:
問題:求一個長方形的周長和面積。
以面向對象的程序設計方式思考:
1、一個長方形可以看成一個長方形對象。
2、一個長方形對象有兩個狀態(長和寬)和兩個行為(求周長和求面積)。
3、將所有長方形的共性抽取出來,設計一個長方形類。
4、通過長方形對象的行為,就可以求出某個具體的長方形對象的周長和面積。
(程序你可以自己試著編一下哈!)
④ 面向對象語言和面向過程語言的編譯器有什麼區別
面向對象
和面向過程
是說的編程思想
和編譯器關系不大
每種語言的編譯器都是不同的。
比如C++
同一個編譯器。
你可以寫成面向過程的
也可以寫成面向對象的
並不會因為你改變編程思想
而需要換編譯器。
⑤ 請問各位大蝦,類C語言可以編譯,並且屬於面向對象語言嗎
C語言是面向過程的語言
它是可以編譯的。
C++是面向對象的語言。而且和C極其類似。
類就好比是一個類型,比如:人
對象是類的實體,比如你,我,就是人的實體。也就是人類的一個對象。
他們有共同點:比如:都有鼻子,嘴
但是也有不同點,比如鼻子和嘴的大小,位置是不同的。
⑥ C語言是面向對象還是面向過程的
「C語言」面向過程和面向對象的區別是:面向過程是著重於其中程序設計的演算法、語言的運用,如設計不同功能的函數。面向對象,按書上說是在C語言的基礎上發展起來的,通俗說也就是更高一級的C語言,也就是C++,保留了大部分C語言的功能,而在設計方面卻著重於對象的處理,獲得更好地性能。
面向過程與面向對象的區別,由「如何把大象裝進冰箱」來看:
一、面向過程
為了把大象裝進冰箱,需要3個過程。
/* 思路:
1、把冰箱門打開(得到打開門的冰箱)。
2、把大象裝進去(打開門後,得到裡面裝著大象的冰箱)。
3、把冰箱門關上(打開門、裝好大象後,獲得關好門的冰箱)。
*/
//每個過程有一個階段性的目標,依次完成這些過程,就能把大象裝進冰箱。
//寫法一:
1:冰箱開門(冰箱)。
2:冰箱裝進(冰箱,大象)。
3:冰箱關門(冰箱) 。
//寫法一變體:
1:(冰箱開門 冰箱)。
2:(冰箱裝進 冰箱大象)。
3:(冰箱關門 冰箱)。
//寫法二:
冰箱關門(冰箱裝進(冰箱開門(冰箱),大象))。
//寫法二變體:
(冰箱關門 (冰箱裝進 (冰箱開門 冰箱) 大象))。
二、面向對象
為了把大象裝進冰箱,需要做三個動作(或者叫行為)。每個動作有一個執行者,它就是對象。
/* 思路:
1、冰箱,你給我把門打開。
2、冰箱,你給我把大象裝進去(或者說,大象,你給我鑽到冰箱里去)。
3、冰箱,你給我把門關上。
*/
//依次完成這些動作,你就可以把大象裝進去。
//寫法一:
1:冰箱.開門()
2:冰箱.裝進(大象)
3:冰箱.關門()
//寫法二:
冰箱.開門().裝進(大象).關門()
⑦ java是面向對象的還是面向過程的
JAVA是面向對象的。
兩者的區別如下:
面向過程就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了。
面向對象是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。
例如五子棋,面向過程的設計思路就是首先分析問題的步驟:1、開始游戲,2、黑子先走,3、繪制畫面,4、判斷輸贏,5、輪到白子,6、繪制畫面,7、判斷輸贏,8、返回步驟2,9、輸出最後結果。把上面每個步驟用分別的函數來實現,問題就解決了。
而面向對象的設計則是從另外的思路來解決問題。整個五子棋可以分為 1、黑白雙方,這兩方的行為是一模一樣的,2、棋盤系統,負責繪制畫面,3、規則系統,負責判定諸如犯規、輸贏等。第一類對象(玩家對象)負責接受用戶輸入,並告知第二類對象(棋盤對象)棋子布局的變化,棋盤對象接收到了棋子的i變化就要負責在屏幕上面顯示出這種變化,同時利用第三類對象(規則系統)來對棋局進行判定。
可以明顯地看出,面向對象是以功能來劃分問題,而不是步驟。同樣是繪制棋局,這樣的行為在面向過程的設計中分散在了總多步驟中,很可能出現不同的繪製版本,因為通常設計人員會考慮到實際情況進行各種各樣的簡化。而面向對象的設計中,繪圖只可能在棋盤對象中出現,從而保證了繪圖的統一。
功能上的統一保證了面向對象設計的可擴展性。比如我要加入悔棋的功能,如果要改動面向過程的設計,那麼從輸入到判斷到顯示這一連串的步驟都要改動,甚至步驟之間的循序都要進行大規模調整。如果是面向對象的話,只用改動棋盤對象就行了,棋盤系統保存了黑白雙方的棋譜,簡單回溯就可以了,而顯示和規則判斷則不用顧及,同時整個對對象功能的調用順序都沒有變化,改動只是局部的。
再比如我要把這個五子棋游戲改為圍棋游戲,如果你是面向過程設計,那麼五子棋的規則就分布在了你的程序的每一個角落,要改動還不如重寫。但是如果你當初就是面向對象的設計,那麼你只用改動規則對象就可以了,五子棋和圍棋的區別不就是規則嗎?(當然棋盤大小好像也不一樣,但是你會覺得這是一個難題嗎?直接在棋盤對象中進行一番小改動就可以了。)而下棋的大致步驟從面向對象的角度來看沒有任何變化。
當然,要達到改動只是局部的需要設計的人有足夠的經驗,使用對象不能保證你的程序就是面向對象,初學者或者很蹩腳的程序員很可能以面向對象之虛而行面向過程之實,這樣設計出來的所謂面向對象的程序很難有良好的可移植性和可擴展性。
⑧ 面向對象語言和面向過程語言的編譯器有什麼區別
面向對象 和面向過程
是說的編程思想
和編譯器關系不大
每種語言的編譯器都是不同的。
比如C++ 同一個編譯器。
你可以寫成面向過程的 也可以寫成面向對象的
並不會因為你改變編程思想 而需要換編譯器。
⑨ 什麼是面向對象對象,什麼是面向過程,什麼是面向對象
面向對象技術是一種以對象為基礎,以事件或消息來驅動對象執行處理的程序設計技術。它具有抽象性、封裝性、繼承性及多態性。
面向對象與面向過程程序設計有如下不同:
(1)面向過程程序設計方法採用函數(或過程)來描述對數據的操作,但又將函數與其操作的數據分離開來;面向對象程序設計方法將數據和對數據的操作封裝在一起,作為一個整體來處理。 函數與數據是否分離
(2)面向過程程序設計方法以功能為中心來設計功能模塊,難於維護;而面向對象程序設計方法以數據為中心來描述系統,數據相對於功能而言具有較強的穩定性,因此更易於維護。
(3)面向過程程序的控制流程由程序中預定順序來決定;面向對象程序的控制流程由運行時各種事件的實際發生來觸發,而不再由預定順序來決定,更符合實際需要。 預定順序;由運行時各種事件的實際發生來觸發
(4)面向對象程序設計方法可以利用框架產品(如MFC,Microsoft Foundation Classes)進行編程。 面向對象可利用框架 面向對象和面向過程的根本差別,在於封裝之後,面向對象提供了面向過程不具備的各種特性,最主要的,就是繼承和多態。