提到面向對象,相信不少人都不陌生,隨口均可以說出面向對象的四大特性:封裝、抽象、繼承、多態。實際上,面向對象這個概念包含的內容還不止這些。編程
面向對象編程的英文縮寫是 OOP
,全稱是 Object Oriented Programming
。對應地,面向對象編程語言的英文縮寫是 OOPL
,全稱是 Object Oriented Programming Language
。設計模式
面向對象編程中有兩個很是重要、很是基礎的概念,那就是類(class
)和對象(object
)。這兩個概念最先出如今 1960
年,在 Simula
這種編程語言中第一次使用。而面向對象編程這個概念第一次被使用是在 Smalltalk
這種編程語言中。Smalltalk
被認爲是第一個真正意義上的面向對象編程語言。編程語言
什麼語言纔算是面向對象編程語言呢?若是非得給出一個定義的話,能夠用下面兩句話來歸納。學習
通常來說,面向對象編程都是經過使用面向對象編程語言來進行的,可是,不用面向對象編程語言,咱們照樣能夠進行面向對象編程。反過來說,即使咱們使用面向對象編程語言,寫出來的代碼也不必定是面向對象編程風格的,也有多是面向過程編程風格的。優化
實際上,對於什麼是面向對象編程、什麼是面向對象編程語言,並無一個官方的、統一的定義。並且,從 1960
年,也就是 60
年前面向對象編程誕生開始,這兩個概念就在不停地演化,因此,也沒法給出一個明確的定義,也沒有必要給出一個明肯定義。編碼
實際上,面向對象編程從字面上,按照最簡單、最原始的方式來理解,就是將對象或類做爲代碼組織的基本單元,來進行編程的一種編程範式或者編程風格,並不必定須要封裝、抽象、繼承、多態這四大特性的支持。可是,在進行面向對象編程的過程當中,人們不停地總結髮現,有了這四大特性,咱們就能更容易地實現各類面向對象的代碼設計思路。翻譯
實際上,只要某種編程語言支持類或對象的語法概念,而且以此做爲組織代碼的基本單元,那就能夠被粗略地認爲它就是面向對象編程語言了。至因而否有現成的語法機制,徹底地支持了面向對象編程的四大特性、是否對四大特性有所取捨和優化,能夠不做爲斷定的標準。基於此,纔有了前面的說法,按照嚴格的定義,不少語言都不能算得上面向對象編程語言,但按照不嚴格的定義來說,如今流行的大部分編程語言都是面向對象編程語言。設計
實際上,跟面向對象編程常常放到一起來說的還有另外兩個概念,那就是面向對象分析(OOA
)和麪向對象設計(OOD
)。面向對象分析英文縮寫是 OOA
,全稱是 Object Oriented Analysis
;面向對象設計的英文縮寫是 OOD
,全稱是 Object Oriented Design
。OOA
、OOD
、OOP
三個連在一塊兒就是面向對象分析、設計、編程(實現),正好是面向對象軟件開發要經歷的三個階段。code
之因此在前面加「面向對象」這幾個字,是由於咱們是圍繞着對象或類來作需求分析和設計的。分析和設計兩個階段最終的產出是類的設計,包括程序被拆解爲哪些類,每一個類有哪些屬性方法,類與類之間如何交互等等。它們比其餘的分析和設計更加具體、更加落地、更加貼近編碼,更可以順利地過渡到面向對象編程環節。這也是面向對象分析和設計,與其餘分析和設計最大的不一樣點。對象
簡單點講,面向對象分析就是要搞清楚作什麼,面向對象設計就是要搞清楚怎麼作,面向對象編程就是將分析和設計的的結果翻譯成代碼的過程。
講到面向對象分析、設計、編程,就不得不提到另一個概念,那就是 UML
(Unified Model Language
),統一建模語言。不少講解面向對象或設計模式的書籍,經常使用它來畫圖表達面向對象或設計模式的設計思路。
UML
是一種很是複雜的東西。它不只僅包含咱們常提到類圖,還有用例圖、順序圖、活動圖、狀態圖、組件圖等。在我看來,即使僅僅使用類圖,學習成本也是很高的。就單說類之間的關係,UML
就定義了不少種,好比泛化、實現、關聯、聚合、組合、依賴等。
UML
在互聯網公司的項目開發中,用處可能並不大。爲了文檔化軟件設計或者方便討論軟件設計,大部分狀況下,隨手畫個不那麼規範的草圖,可以達意,方便溝通就夠了,而徹底按照 UML
規範來將草圖標準化,所付出的代價是不值得的。
1. 什麼是面向對象編程?
面向對象編程是一種編程範式或編程風格。它以類或對象做爲組織代碼的基本單元,並將封裝、抽象、繼承、多態四個特性,做爲代碼設計和實現的基石 。
2. 什麼是面向對象編程語言?
面向對象編程語言是支持類或對象的語法機制,並有現成的語法機制,能方便地實現面向對象編程四大特性(封裝、抽象、繼承、多態)的編程語言。
3. 如何斷定一個編程語言是不是面向對象編程語言?
若是按照嚴格的的定義,須要有現成的語法支持類、對象、四大特性才能叫做面向對象編程語言。若是放寬要求的話,只要某種編程語言支持類、對象語法機制,那基本上就能夠說這種編程語言是面向對象編程語言了,不必定非得要求具備全部的四大特性。
4. 面向對象編程和麪向對象編程語言之間有何關係?
面向對象編程通常使用面向對象編程語言來進行,可是,不用面向對象編程語言,咱們照樣能夠進行面向對象編程。反過來說,即使咱們使用面向對象編程語言,寫出來的代碼也不必定是面向對象編程風格的,也有多是面向過程編程風格的。
5. 什麼是面向對象分析和麪向對象設計?
簡單點講,面向對象分析就是要搞清楚作什麼,面向對象設計就是要搞清楚怎麼作。兩個階段最終的產出是類的設計,包括程序被拆解爲哪些類,每一個類有哪些屬性方法、類與類之間如何交互等等。
本文由博客一文多發平臺 OpenWrite 發佈!
更多內容請點擊個人博客沐晨