面向對象(Object Oriented),如何翻譯這個詞有很多說法,有人說這個翻譯不夠准確,應該是“物件導向”更准確,個人認為后者更直白更好理解,以“物件”為導向目標。
1.面向對象(OO)
編寫軟件是為了解決某一問題,OO思想就是在編程過程中把“問題域”中的內容映射到軟件系統中的一個個"物件"上,“物件”作為一個獨立的個體,有自己的功能、狀態以及與其他“物件”之間的聯系,這些個體互相作用最終解決問題。
oo是把“問題域”中的內容經過抽象分析,在軟件的世界中創造與之對應的對象,這樣在思考問題的解決時,更符合人對世界的認識思維模式,畢竟人在現實世界中碰到的問題、思考的問題形成的思維模式更易於理解並具有普遍性。而這些好處,對於軟件的開發的可維護性、可擴展性以及可復用性等都是有極大的好處的。
2.面向對象和面向過程
與面向對象對應的是“面向過程(Procedure Oriented)”,它是以過程為中心,分析出解決問題需要的步驟,然后這些步驟一步一步實現,使用的時候一個一個依次調用。這種解決問題的思維模式和我們上學時解數學方程式的方式差不多。我們在學寫程序的時候,最開始學的一般也是這種方式,所以對與這種方式應該也不陌生,它也影響了我們在coidng過程中的實現,或者說潛意識的實現。
面向對象和面向過程按發展的時間順序來看,面向過程在前,面向對象是軟件行業發展的一定程度時慢慢興起的,這是的軟件系統所涉及的內容更加多,解決的問題更加復雜,實現的方案更加龐大,這些問題驅使着更加適合的編程思想的出現。我們不能說面向對象的變成就比面向過程的思想好,因為它們在解決不同的問題時,有各自的優勢,對於系統級的應用以及需要性能和實時性的模塊中,對於那些對系統掌控能力比較強的程序員來說面向過程的編程思想更適合。很多時候,面向對象的編程思想設計實現的代碼中包含面向過程的思想。
3.OOA、OOD和OOP
面向對象(OO)更詳細的可以分為OOA,OOD,OOP。采用面向對象進行分析的方式稱為OOA,采用面向對象進行設計的方式稱為OOD,采用面向對象進行編碼的方式稱為OOP。面向過程(OP)和面向對象(OO)本質的區別在於分析方式的不同,最終導致了編碼方式的不同。我們在拿到一個軟件需求時,肯定要先分析需求,然后概要設計、詳細設計,最后編碼。這和我們習慣的人類基本行為方式的是一樣的:先想做什么,再想如何去做,最后才是做事情。
4.面向對象的四個基本特征
面向對象的四個基本特征 抽象、封裝、繼承、多態。
抽象就是把事物的信息細節進行提煉、抽象,找到事物的本質和重要屬性,以求簡化、概括所觀察到的現實世界,並為人們所用。抽象包括兩個方面,一是過程抽象,二是數據抽象。過程抽象是指任何一個明確定義功能的操作都可被使用者看作單個的實體看待,盡管這個操作實際上可能由一系列更低級的操作來完成。數據抽象定義了數據類型和施加於該類型對象上的操作,並限定了對象的值只能通過使用這些操作修改和觀察。抽象是軟件開發的基礎。
封裝是將數據以及加在這些數據上的操作組織在一起,成為有獨立意義的對象或構件。這些構件隱藏了外部無法直接訪問的一些數據,並提供一定的訪問接口來進行操作這些數據。信息隱藏是用戶對封裝性的認識,封裝則為信息隱藏提供支持。封裝保證了模塊具有較好的獨立行、自治性,使得程序維護修改較為容易。
繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。這也是對事物進行抽象分析之后得出的結果。對象的一個新類可以從現有的類中派生,這個過程稱為類的繼承,新類可以從它所派生的類那里繼承方法和實例變量,並且可以修改或增加新的變量、方法使之更適合特殊的需求。繼承性很好地解決了軟件的可重用性問題。
多態是指對同一操作或消息不同的對象能做出不同的響應。多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行為共享、代碼共享的優勢,很好的解決了應用程序函數同名問題。其中會涉及的兩個概念覆蓋和重載,是多態性的表現形式。覆蓋,是指子類重新定義父類的虛函數的做法。重載,是指允許存在多個同名函數,而這些函數的參數表不同(或許參數個數不同,或許參數類型不同,或許兩者都不同)。
面向對象的編程思想能夠使得人們在編寫程序、設計軟件的過程中有跡可循,以更加熟悉和普遍的思維模式,更高效地編寫出更具有可維護性、可擴展性、可復用性的程序軟件,這也是每一個程序員現階段編程必須具備的基本素質,也是成為更加優秀程序員的必備的知識。