入門便是不識
從我們開始接觸Java這門語言后偷厦,就有人告訴我們這是一個面向?qū)ο蟮恼Z言展氓。說的最多的是new個對象捆愁,其實并不知道什么是對象割去。以為對象就是一個class(類),并不覺得有什么特殊昼丑。直到很久之后劫拗,面試官問到什么是OOP,嘴巴都是一個大O矾克,OOP页慷?WTF憔足?那人厭惡的說到就是面向?qū)ο缶幊獭N艺f:Java就是面向?qū)ο缶品保褪且磺幸詫ο鬄檩d體滓彰,去編程,去面對州袒。面試官: go out ! now!
滾回來的我趕緊看看什么是OOP揭绑,Object Oriented Programming,原來就是面向?qū)ο蟮木幊贪±煽蓿€有OOD(面向?qū)ο蟮脑O(shè)計)他匪,OOA(面向?qū)ο蟮姆治觯D鞘裁词敲嫦驅(qū)ο竽乜溲校恳肓私膺@個問題我們要先了解面向過程邦蜜,這樣對比我們就好理解了。
很早很早以前的編程是面向過程的亥至,比如實現(xiàn)一個算術(shù)運算1+1 = 2悼沈,通過這個簡單的算法就可以解決問題。但是隨著時代的進(jìn)步姐扮,人們不滿足現(xiàn)有的算法了絮供,因為問題越來越復(fù)雜,不是1+1那么單純了茶敏,比如一個班級的學(xué)生的數(shù)據(jù)分析壤靶,這樣就有了對象這個概念,一切事物皆對象惊搏。將現(xiàn)實的事物抽象出來萍肆,注意抽象這個詞是重點啊,把現(xiàn)實生活的事物以及關(guān)系胀屿,抽象成類塘揣,通過繼承,實現(xiàn)宿崭,組合的方式把萬事萬物都給容納了亲铡。實現(xiàn)了對現(xiàn)實世界的抽象和數(shù)學(xué)建模。這是一次飛躍性的進(jìn)步葡兑。
舉個最簡單點的例子來區(qū)分 面向過程和面向?qū)ο?/p>
有一天你想吃魚香肉絲了奖蔓,怎么辦呢?你有兩個選擇
1讹堤、自己買材料吆鹤,肉,魚香肉絲調(diào)料洲守,蒜苔疑务,胡蘿卜等等然后切菜切肉沾凄,開炒,盛到盤子里知允。
2撒蟀、去飯店,張開嘴:老板温鸽!來一份魚香肉絲保屯!
看出來區(qū)別了嗎?這就是1是面向過程涤垫,2是面向?qū)ο蟆?/p>
面向?qū)ο笥惺裁磧?yōu)勢呢姑尺?首先你不需要知道魚香肉絲是怎么做的,降低了耦合性蝠猬。如果你突然不想吃魚香肉絲了切蟋,想吃洛陽白菜,對于1你可能不太容易了吱雏,還需要重新買菜,買調(diào)料什么的瘾境。對于2歧杏,太容易了,大喊:老板迷守!那個魚香肉絲換成洛陽白菜吧犬绒,提高了可維護(hù)性《以洌總的來說就是降低耦合凯力,提高維護(hù)性!
面向過程是具體化的礼华,流程化的咐鹤,解決一個問題,你需要一步一步的分析圣絮,一步一步的實現(xiàn)祈惶。
面向?qū)ο笫悄P突模阒恍璩橄蟪鲆粋€類扮匠,這是一個封閉的盒子捧请,在這里你擁有數(shù)據(jù)也擁有解決問題的方法。需要什么功能直接使用就可以了棒搜,不必去一步一步的實現(xiàn)疹蛉,至于這個功能是如何實現(xiàn)的,管我們什么事力麸?我們會用就可以了可款。
面向?qū)ο蟮牡讓悠鋵嵾€是面向過程育韩,把面向過程抽象成類,然后封裝筑舅,方便我們我們使用的就是面向?qū)ο罅恕?/p>
面向過程:
優(yōu)點:性能比面向?qū)ο蠛米浚驗轭愓{(diào)用時需要實例化,開銷比較大翠拣,比較消耗資源版仔。
缺點:不易維護(hù)、不易復(fù)用误墓、不易擴(kuò)展.
優(yōu)點:易維護(hù)蛮粮、易復(fù)用、易擴(kuò)展谜慌,由于面向?qū)ο笥蟹庋b然想、繼承、多態(tài)性的特性欣范,可以設(shè)計出低耦合的系統(tǒng)变泄,使系統(tǒng) 更加靈活、更加易于維護(hù) .
缺點:性能比面向過程差
原來君如此
面向?qū)ο蟮娜筇匦裕?/h4>
1恼琼、封裝
隱藏對象的屬性和實現(xiàn)細(xì)節(jié)妨蛹,僅對外提供公共訪問方式,將變化隔離晴竞,便于使用蛙卤,提高復(fù)用性和安全性。
2噩死、繼承
提高代碼復(fù)用性颤难;繼承是多態(tài)的前提。
3已维、多態(tài)
父類或接口定義的引用變量可以指向子類或具體實現(xiàn)類的實例對象行嗤。提高了程序的拓展性。
五大基本原則:
1垛耳、單一職責(zé)原則SRP(Single Responsibility Principle)
類的功能要單一昂验,不能包羅萬象,跟雜貨鋪似的艾扮。
2既琴、開放封閉原則OCP(Open-Close Principle)
一個模塊對于拓展是開放的,對于修改是封閉的泡嘴,想要增加功能熱烈歡迎甫恩,想要修改,哼酌予,一萬個不樂意磺箕。
3奖慌、里式替換原則LSP(the Liskov Substitution Principle LSP)
子類可以替換父類出現(xiàn)在父類能夠出現(xiàn)的任何地方。比如你能代表你爸去你姥姥家干活松靡。哈哈~~
4简僧、依賴倒置原則DIP(the Dependency Inversion Principle DIP)
高層次的模塊不應(yīng)該依賴于低層次的模塊,他們都應(yīng)該依賴于抽象雕欺。抽象不應(yīng)該依賴于具體實現(xiàn)岛马,具體實現(xiàn)應(yīng)該依賴于抽象。就是你出國要說你是中國人屠列,而不能說你是哪個村子的啦逆。比如說中國人是抽象的,下面有具體的xx省笛洛,xx市夏志,xx縣。你要依賴的是抽象的中國人苛让,而不是你是xx村的沟蔑。
5、接口分離原則ISP(the Interface Segregation Principle ISP)
設(shè)計時采用多個與特定客戶類有關(guān)的接口比采用一個通用的接口要好狱杰。就比如一個手機(jī)擁有打電話瘦材,看視頻,玩游戲等功能浦旱,把這幾個功能拆分成不同的接口宇色,比在一個接口里要好的多九杂。
最后
1颁湖、抽象會使復(fù)雜的問題更加簡單化。
2例隆、從以前面向過程的執(zhí)行者甥捺,變成了張張嘴的指揮者。
3镀层、面向?qū)ο蟾先祟惖乃季S镰禾,面向過程則是機(jī)器的思想
參考:
https://blog.csdn.net/jerry11112/article/details/79027834
https://baike.baidu.com/item/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/2262089?fr=aladdin
https://www.cnblogs.com/corvoh/p/5747856.html