設計模式之美學習(二):到底什麼是面向對象?

提到面向對象,相信不少人都不陌生,隨口均可以說出面向對象的四大特性:封裝、抽象、繼承、多態。實際上,面向對象這個概念包含的內容還不止這些。編程

什麼是面向對象編程和麪向對象編程語言?

面向對象編程的英文縮寫是 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 DesignOOAOODOOP 三個連在一塊兒就是面向對象分析、設計、編程(實現),正好是面向對象軟件開發要經歷的三個階段。code

之因此在前面加「面向對象」這幾個字,是由於咱們是圍繞着對象或類來作需求分析和設計的。分析和設計兩個階段最終的產出是類的設計,包括程序被拆解爲哪些類,每一個類有哪些屬性方法,類與類之間如何交互等等。它們比其餘的分析和設計更加具體、更加落地、更加貼近編碼,更可以順利地過渡到面向對象編程環節。這也是面向對象分析和設計,與其餘分析和設計最大的不一樣點。對象

簡單點講,面向對象分析就是要搞清楚作什麼,面向對象設計就是要搞清楚怎麼作,面向對象編程就是將分析和設計的的結果翻譯成代碼的過程。

什麼是 UML?咱們是否須要 UML?

講到面向對象分析、設計、編程,就不得不提到另一個概念,那就是 UMLUnified Model Language),統一建模語言。不少講解面向對象或設計模式的書籍,經常使用它來畫圖表達面向對象或設計模式的設計思路。

UML 是一種很是複雜的東西。它不只僅包含咱們常提到類圖,還有用例圖、順序圖、活動圖、狀態圖、組件圖等。在我看來,即使僅僅使用類圖,學習成本也是很高的。就單說類之間的關係,UML 就定義了不少種,好比泛化、實現、關聯、聚合、組合、依賴等。

UML 在互聯網公司的項目開發中,用處可能並不大。爲了文檔化軟件設計或者方便討論軟件設計,大部分狀況下,隨手畫個不那麼規範的草圖,可以達意,方便溝通就夠了,而徹底按照 UML 規範來將草圖標準化,所付出的代價是不值得的。

重點回顧

1. 什麼是面向對象編程?

面向對象編程是一種編程範式或編程風格。它以類或對象做爲組織代碼的基本單元,並將封裝、抽象、繼承、多態四個特性,做爲代碼設計和實現的基石 。

2. 什麼是面向對象編程語言?

面向對象編程語言是支持類或對象的語法機制,並有現成的語法機制,能方便地實現面向對象編程四大特性(封裝、抽象、繼承、多態)的編程語言。

3. 如何斷定一個編程語言是不是面向對象編程語言?

若是按照嚴格的的定義,須要有現成的語法支持類、對象、四大特性才能叫做面向對象編程語言。若是放寬要求的話,只要某種編程語言支持類、對象語法機制,那基本上就能夠說這種編程語言是面向對象編程語言了,不必定非得要求具備全部的四大特性。

4. 面向對象編程和麪向對象編程語言之間有何關係?

面向對象編程通常使用面向對象編程語言來進行,可是,不用面向對象編程語言,咱們照樣能夠進行面向對象編程。反過來說,即使咱們使用面向對象編程語言,寫出來的代碼也不必定是面向對象編程風格的,也有多是面向過程編程風格的。

5. 什麼是面向對象分析和麪向對象設計?

簡單點講,面向對象分析就是要搞清楚作什麼,面向對象設計就是要搞清楚怎麼作。兩個階段最終的產出是類的設計,包括程序被拆解爲哪些類,每一個類有哪些屬性方法、類與類之間如何交互等等。

參考:理論一:當談論面向對象的時候,咱們到底在談論什麼?

本文由博客一文多發平臺 OpenWrite 發佈!

更多內容請點擊個人博客沐晨

相關文章
相關標籤/搜索