什麼是面向對象(OOP)

什麼是面向對象呢?要想了解這個問題我們要先了解面向過程,這樣對比我們就好理解了。

很早很早以前的編程是面向過程的,比如實現一個算術運算1+1 = 2,通過這個簡單的算法就可以解決問題。但是隨着時代的進步,人們不滿足現有的算法了,因爲問題越來越複雜,不是1+1那麼單純了,比如一個班級的學生的數據分析,這樣就有了對象這個概念,一切事物皆對象。將現實的事物抽象出來,注意抽象這個詞是重點啊,把現實生活的事物以及關係,抽象成類,通過繼承,實現,組合的方式把萬事萬物都給容納了。實現了對現實世界的抽象和數學建模。這是一次飛躍性的進步。

舉個最簡單點的例子來區分 面向過程和麪向對象

有一天你想吃魚香肉絲了,怎麼辦呢?你有兩個選擇

1、自己買材料,肉,魚香肉絲調料,蒜薹,胡蘿蔔等等然後切菜切肉,開炒,盛到盤子裏。

2、去飯店,張開嘴:老闆!來一份魚香肉絲!

看出來區別了嗎?這就是1是面向過程,2是面向對象。

面向對象有什麼優勢呢?首先你不需要知道魚香肉絲是怎麼做的,降低了耦合性。如果你突然不想吃魚香肉絲了,想吃洛陽白菜,對於1你可能不太容易了,還需要重新買菜,買調料什麼的。對於2,太容易了,大喊:老闆!那個魚香肉絲換成洛陽白菜吧,提高了可維護性。總的來說就是降低耦合,提高維護性!

面向過程是具體化的,流程化的,解決一個問題,你需要一步一步的分析,一步一步的實現。

面向對象是模型化的,你只需抽象出一個類,這是一個封閉的盒子,在這裏你擁有數據也擁有解決問題的方法。需要什麼功能直接使用就可以了,不必去一步一步的實現,至於這個功能是如何實現的,管我們什麼事?我們會用就可以了。面向對象的底層其實還是面向過程,把面向過程抽象成類,然後封裝,方便我們我們使用的就是面向對象了。

面向過程的優缺點:

優點:性能比面向對象好,因爲類調用時需要實例化,開銷比較大,比較消耗資源。
缺點:不易維護、不易複用、不易擴展。

面向對象的優缺點:

優點:易維護、易複用、易擴展,由於面向對象有封裝、繼承、多態性的特性,可以設計出低耦合的系統,使系統 更加靈活、更加易於維護 .
缺點:性能比面向過程差

面向對象的三大特性:

1、封裝
隱藏對象的屬性和實現細節,僅對外提供公共訪問方式,將變化隔離,便於使用,提高複用性和安全性。
2、繼承
提高代碼複用性;繼承是多態的前提。
3、多態
父類或接口定義的引用變量可以指向子類或具體實現類的實例對象。提高了程序的拓展性。

五大基本原則:

1、單一職責原則SRP(Single Responsibility Principle)
類的功能要單一,不能包羅萬象,跟雜貨鋪似的。
2、開放封閉原則OCP(Open-Close Principle)
一個模塊對於拓展是開放的,對於修改是封閉的,想要增加功能熱烈歡迎,想要修改,哼,一萬個不樂意。
3、裏式替換原則LSP(the Liskov Substitution Principle LSP)
子類可以替換父類出現在父類能夠出現的任何地方。比如你能代表你爸去你姥姥家幹活。哈哈~~
4、依賴倒置原則DIP(the Dependency Inversion Principle DIP)
高層次的模塊不應該依賴於低層次的模塊,他們都應該依賴於抽象。抽象不應該依賴於具體實現,具體實現應該依賴於抽象。就是你出國要說你是中國人,而不能說你是哪個村子的。比如說中國人是抽象的,下面有具體的xx省,xx市,xx縣。你要依賴的是抽象的中國人,而不是你是xx村的。
5、接口分離原則ISP(the Interface Segregation Principle ISP)
設計時採用多個與特定客戶類有關的接口比採用一個通用的接口要好。就比如一個手機擁有打電話,看視頻,玩遊戲等功能,把這幾個功能拆分成不同的接口,比在一個接口裏要好的多。


最後

1、抽象會使複雜的問題更加簡單化。
2、從以前面向過程的執行者,變成了張張嘴的指揮者。
3、面向對象更符合人類的思維,面向過程則是機器的思想



作者:豬_隊友
鏈接:https://www.jianshu.com/p/7a5b0043b035

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章