1.面向過程(結(jié)構(gòu)化程序設(shè)計)
采用自頂向下、分而治之的方法,將整個程序按功能劃分為幾個可獨立編程的子過程模塊,每一子模塊完成指定的子任務(wù),主過程通過調(diào)用各子過程完來成全部處理工作。
2.面向?qū)ο蟮某绦蛟O(shè)計(Object-Oriented Programming)
面向?qū)ο蟮某绦蛟O(shè)計方法強調(diào)直接以現(xiàn)實世界中的物體為中心來思考和認識問題,并按照這些事物的本質(zhì)特征把它們抽象為類。采用數(shù)據(jù)抽象和數(shù)據(jù)隱藏,類之間互相交互,共同構(gòu)成大型的面向?qū)ο蠡A(chǔ)。
3.面向?qū)ο蟮南嚓P(guān)概念
1)類(Class):具有相似屬性和行為的一組對象,就稱為類。可見,有了類的概念以后,就可以對具有共同特征的事物進行統(tǒng)一描述;
2)對象(Object):類的實例,每個對象都具有屬性和方法這兩方面的特征。對象的屬性描述了對象的狀態(tài)和特征,對象的方法說明了對象的行為和功能,并且對象的屬性值只應(yīng)由這個對象的方法來讀取和修改,兩者結(jié)合在一起就構(gòu)成了對象的完整描述。;
3)封裝(Encapsulation):封裝把對象的屬性和方法看成了一個密不可分的整體,從而使對象能夠完整地描述并對應(yīng)于一個具體事物 ;
4)繼承(Inheritance):在面向?qū)ο蟮某绦蛟O(shè)計中,允許在已有類的基礎(chǔ)上通過增加新特征而派生出新的類,這稱為繼承。其原有的類稱為基類(base class),而新建立的類稱為派生類(derived class);
5)消息(Message):當一個對象需要另外一個對象提供服務(wù)時,它向?qū)Ψ桨l(fā)出一個服務(wù)請求,而收到請求的對象會響應(yīng)這個請求并完成指定的服務(wù)。這種向?qū)ο蟀l(fā)出的服務(wù)請求就稱為消息。所謂消息就是調(diào)用一個對象所提供的方法;
6)多態(tài)性(Polymorphism):多態(tài)性是面向?qū)ο蟮囊粋€重要特征。多態(tài)有兩種,靜態(tài)的和動態(tài)的。在通過繼承而派生出的一系列類中,可能存在一些名稱相同,但實現(xiàn)過程和功能不同的方法(Method)。 當程序中的其他部分發(fā)出同樣的消息時,按照接收消息對象的不同能夠自動執(zhí)行類中相應(yīng)的方法。其好處是,用戶不必知道某個對象所屬的類就可以執(zhí)行多態(tài)行為,從而為程序設(shè)計帶來更大方便。
4.面向?qū)ο缶幊痰奶攸c
1)OOP以“對象”或“數(shù)據(jù)”為中心。由于對象自然地反映了應(yīng)用領(lǐng)域的模塊性,因此具有相對穩(wěn)定性,可以被用作一個組件去構(gòu)成更復(fù)雜的應(yīng)用,又由于對象一般封裝的是某一實際需求的各種成分,因此,某一對象的改變對整個系統(tǒng)幾乎沒有影響;
2)引入了“類”(class)的概念。類與類以層次結(jié)構(gòu)組織,屬于某個類的對象除具有該類所描述的特性外,還具有層次結(jié)構(gòu)中該類上層所有類描述的全部性質(zhì),OOP中稱這種機制為繼承;
3)OOP方法的模塊性與繼承性,保證了新的應(yīng)用程序設(shè)計可在原有對象的數(shù)據(jù)類型和功能的基礎(chǔ)上通過重用、擴展和細化來進行,而不必從頭做起或復(fù)制原有代碼,這樣,大大減少了重新編寫新代碼的工作量,同時降低了程序設(shè)計過程中出錯的可能性,達到了事半功倍的效果。
5.設(shè)計了良好的OOP系統(tǒng)具有的特性
1)可維護性:軟件在投入使用的過程中,隨著運行時間的延長,后期可能就不符合客戶的需求了,我們就需要對軟件進行修改。后期維護的人員初期可能沒有參與到軟件的開發(fā)中,對軟件的結(jié)構(gòu)是不熟悉的。那OOP系統(tǒng)就能保證后期的維護比較方便,比較簡單;
2)可擴展性:在軟件運行后期我們需要對軟件新增一些功能的時候,不需要對軟件的架構(gòu)進行大的更改就能非常方便的增加一些功能;
3)可復(fù)用性:我們在這一個項目中使用的一些代碼和類,模塊可以很容易的拿到另外一個項目中去使用;
4)健壯性:軟件要比較穩(wěn)定,出錯的幾率比較小。
6.二者比較
1)傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計方法以過程為中心構(gòu)造應(yīng)用程序,數(shù)據(jù)和處理數(shù)據(jù)的過程代碼是分離的、相互獨立的實體,設(shè)計出的程序可重用代碼少,且當代碼量增加時維護數(shù)據(jù)和代碼的一致性困難;
2)面向?qū)ο蟪绦蛟O(shè)計方法中,對象所具有的封裝性和繼承性使得代碼重用成為可能,并大大減少了程序出錯的可能性;
3)面向?qū)ο蠓椒ㄎ樟私Y(jié)構(gòu)化程序設(shè)計方法的優(yōu)點,同時引入了新概念、新機制并建立了比傳統(tǒng)方法更高層次的抽象。面向?qū)ο髢?nèi)部也包含了面向過程,比如我們在設(shè)計類中的一個方法時,我們就會采用面向過程的一些原則,一些思想等等…….
7.一些誤區(qū)
1)面向?qū)ο髢?yōu)于面向過程:面向?qū)ο笈c面向過程沒有絕對的優(yōu)劣之分,只有是否適用之別;
2)C++ = C +類,C++的編程思想被很大的改變,如果僅僅只是適用類將C封裝起來,那不是C++的面向?qū)ο蟮脑瓌t;
3)使用面向?qū)ο蠹夹g(shù)一定能構(gòu)造出更優(yōu)秀的軟件:有人認為面向?qū)ο笞龀鰜淼能浖欢ㄊ欠浅?yōu)秀的,但是面向?qū)ο蟛簧髡`用,或者是面向?qū)ο缶幊痰乃枷霙]有掌握好的話,這樣的軟件只會比面向過程寫出的軟件更糟糕而已;
4)學會了C++就學會了面向?qū)ο蠹夹g(shù),這個我們前面也已經(jīng)說過,學習C++只是學習面向?qū)ο蟮牡谝徊剑竺孢€需要學習面向?qū)ο蟮囊恍┰恚瓌t和方法。更是需要自己去實踐,對面向?qū)ο蟛粩嗉由罾斫狻?/p>