OOP,Object Oriented Programming,就是面向對象的編程啊,還有OOD(面向對象的設計),OOA(面向對象的分析)。那什麼是面向對象呢?要想了解這個問題咱們要先了解面向過程,這樣對比咱們就好理解了。算法
很早很早之前的編程是面向過程的,好比實現一個算術運算1+1 = 2,經過這個簡單的算法就能夠解決問題。可是隨着時代的進步,人們不知足現有的算法了,由於問題愈來愈複雜,不是1+1那麼單純了,好比一個班級的學生的數據分析,這樣就有了對象這個概念,一切事物皆對象。將現實的事物抽象出來,注意抽象這個詞是重點啊,把現實生活的事物以及關係,抽象成類,經過繼承,實現,組合的方式把萬事萬物都給容納了。實現了對現實世界的抽象和數學建模。這是一次飛躍性的進步。編程
舉個最簡單點的例子來區分 面向過程和麪向對象安全
有一天你想吃魚香肉絲了,怎麼辦呢?你有兩個選擇性能
一、本身買材料,肉,魚香肉絲調料,蒜薹,胡蘿蔔等等而後切菜切肉,開炒,盛到盤子裏。設計
二、去飯店,張開嘴:老闆!來一份魚香肉絲!視頻
看出來區別了嗎?這就是1是面向過程,2是面向對象。對象
面向對象有什麼優點呢?首先你不須要知道魚香肉絲是怎麼作的,下降了耦合性。若是你忽然不想吃魚香肉絲了,想吃洛陽白菜,對於1你可能不太容易了,還須要從新買菜,買調料什麼的。對於2,太容易了,大喊:老闆!那個魚香肉絲換成洛陽白菜吧,提升了可維護性。總的來講就是下降耦合,提升維護性!繼承
面向過程是具體化的,流程化的,解決一個問題,你須要一步一步的分析,一步一步的實現。接口
面向對象是模型化的,你只需抽象出一個類,這是一個封閉的盒子,在這裏你擁有數據也擁有解決問題的方法。須要什麼功能直接使用就能夠了,沒必要去一步一步的實現,至於這個功能是如何實現的,管咱們什麼事?咱們會用就能夠了。遊戲
面向對象的底層其實仍是面向過程,把面向過程抽象成類,而後封裝,方便咱們咱們使用的就是面向對象了。
面向過程:
優勢:性能比面向對象好,由於類調用時須要實例化,開銷比較大,比較消耗資源。
缺點:不易維護、不易複用、不易擴展.
優勢:易維護、易複用、易擴展,因爲面向對象有封裝、繼承、多態性的特性,能夠設計出低耦合的系統,使系統 更加靈活、更加易於維護 .
缺點:性能比面向過程差
一、封裝
隱藏對象的屬性和實現細節,僅對外提供公共訪問方式,將變化隔離,便於使用,提升複用性和安全性。
二、繼承
提升代碼複用性;繼承是多態的前提。
三、多態
父類或接口定義的引用變量能夠指向子類或具體實現類的實例對象。提升了程序的拓展性。
一、單一職責原則SRP(Single Responsibility Principle)
類的功能要單一,不能一應俱全,跟雜貨鋪似的。
二、開放封閉原則OCP(Open-Close Principle)
一個模塊對於拓展是開放的,對於修改是封閉的,想要增長功能熱烈歡迎,想要修改,哼,一萬個不樂意。
三、裏式替換原則LSP(the Liskov Substitution Principle LSP)
子類能夠替換父類出如今父類可以出現的任何地方。好比你能表明你爸去你姥姥家幹活。哈哈~~
四、依賴倒置原則DIP(the Dependency Inversion Principle DIP)
高層次的模塊不該該依賴於低層次的模塊,他們都應該依賴於抽象。抽象不該該依賴於具體實現,具體實現應該依賴於抽象。就是你出國要說你是中國人,而不能說你是哪一個村子的。好比說中國人是抽象的,下面有具體的xx省,xx市,xx縣。你要依賴的是抽象的中國人,而不是你是xx村的。
五、接口分離原則ISP(the Interface Segregation Principle ISP)
設計時採用多個與特定客戶類有關的接口比採用一個通用的接口要好。就好比一個手機擁有打電話,看視頻,玩遊戲等功能,把這幾個功能拆分紅不一樣的接口,比在一個接口裏要好的多。
一、抽象會使複雜的問題更加簡單化。
二、從之前面向過程的執行者,變成了張張嘴的指揮者。
三、面向對象更符合人類的思惟,面向過程則是機器的思想
連接:https://www.jianshu.com/p/7a5b0043b035來源:簡書