日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为什么面向对象糟透了?

發(fā)布時間:2023/12/18 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么面向对象糟透了? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

又是周末,編程語言“三巨頭”Java, Lisp 和C語言在Hello World咖啡館聚會。

服務員送來咖啡的同時還帶來了一張今天的報紙, 三人寒暄了幾句, C語言翻開了報紙,突然眼前一亮:“這篇文章的標題寫得好啊, 《為什么面向對象糟透了!》”

(這是一篇很早之前的文章,作者是大名鼎鼎的Joe Armstrong , 也就是Erlang之父。)

Java 大吃一驚,居然有人這么罵面向對象?!

他趕緊搶過來,看了一會兒,說到:“雖然我對去世的Joe Armstrong老先生非常尊敬,但是我對他的觀點卻不敢茍同,你看他說'數(shù)據(jù)結構和函數(shù)不應該綁到一起!'”

C語言說:“他說得很有道理啊,函數(shù)是實現(xiàn)算法的,就像一個黑盒子,只要理解了它的輸入和輸出,就理解了它的功能,而數(shù)據(jù)結構呢就是單純的‘聲明’,為什么要把他們綁在一起呢?”

“不不不,還是綁在一起好!我給你舉個例子,一個棧,如果你把它當成一個完整的對象,那用起來就方便多了。”

Stack s = new Stack();

s.push(100);

s.push(200);

s.pop();

C語言不甘示弱:“把數(shù)據(jù)結構和函數(shù)分開也挺好啊!比如我可以創(chuàng)建一個叫做Stack的數(shù)據(jù)結構,然后寫幾個對這個數(shù)據(jù)結構操作的函數(shù)。”

push(stack, 100);

push(stack, 200);

pop(stack);

Java不屑一顧地說:“你看看你這種方式多丑陋啊。”

C語言寸步不讓:“本質都是一樣的,你是o.f() ,我是f(o), ?有啥區(qū)別?”

Lisp也插了一嘴:“還有我的(f o) ”

2

Java無語,心說這兩個家伙就是胡攪蠻纏。突然,他心中一動:我怎么忘記多態(tài)了。

Java說:“本質是不一樣的,你要知道,o.f()是可以產(chǎn)生多態(tài)行為的,這就帶來了巨大的好處,我給你舉個例子,你有一段業(yè)務邏輯,需要把計算的結果記錄到文件中,將來還可能會記錄別的地方,你的設計可能是這樣的。”

C語言:“難道不應該如此嗎?一個函數(shù)調用另外一個函數(shù)?”

Java 說到:“這里有個依賴的問題,就是businessLogic()不但運行期依賴writeToFile(), 在源碼級或者編譯期也會依賴。”

C語言:“這不是很正常嘛!”

Java又說道:“不一樣, 寫入文件是底層的實現(xiàn)細節(jié),不是高層策略,假如用戶不想把計算的結果保存到文件中了,而是想通過郵件發(fā)送,那你的businessLogic也得修改了,對不對?”

C語言:“那肯定啊!函數(shù)調用嘛,一個改了,另外一個也得改。”

“這就是問題了, 編譯期/源代碼的依賴導致我們沒法把系統(tǒng)劃分成獨立的組件,各自獨立開發(fā),獨立部署,一個的變化就影響到了另外一個。”

C語言覺得有一定的道理,他說:“那怎么辦?”

Java說:“你看看我使用多態(tài)以后的設計,我的業(yè)務邏輯在編譯時只依賴那個接口Writer,而不依賴具體的實現(xiàn)FileWriter和MailWriter。”

“你的意思是只要接口Writer不變化,底層的具體實現(xiàn)如FileWriter ,MailWriter可以隨意變化,隨意替換,就像插件一樣,對吧?” ?C語言說到。

“對啊,編譯期/源代碼不依賴,運行期依賴,這就是延遲綁定帶來的好處,現(xiàn)在你明白o.f()和 f(o)的本質區(qū)別了吧。?”

Lisp 不失時機又插了一嘴:“你那接口中只有一個函數(shù),就是write(),用什么接口啊,脫褲子放屁,多此一舉,在我這兒只要把不同的函數(shù)傳遞過去就可以了。”

Java笑道:“別抬杠,這就是個簡單的例子,不管是用接口,還是傳遞函數(shù),都是延遲綁定嘛, 關鍵點都是要找到那個穩(wěn)定的東西(Writer),就是抽象。你找不到這個穩(wěn)定的東西,做不出抽象,你的系統(tǒng)就沒法劃分成可以獨立開發(fā),獨立變化的組件了。”

C語言還想反擊,但一直找不到突破口。

Lisp說道:“別聽Java在哪里忽悠,C老弟,你也能實現(xiàn)運行期的延遲綁定,這不是Java的專利,你忘了虛函數(shù)表了?”

C語言一拍大腿:“是啊,我忘了那一年春節(jié)回家,Linus 大神曾經(jīng)告訴我,虛函數(shù)表和函數(shù)指針才是實現(xiàn)多態(tài)的關鍵,比如Unix/Linux把設備都當成了文件,有標準的open , read 等方法,對于不同的設備,都能調用對應的方法, 那是怎么實現(xiàn)的?也是通過虛函數(shù)表做延遲綁定嘛!”

(碼農(nóng)翻身老劉注:C語言實現(xiàn)面向對象的詳情可以移步《

C語言高興了:“哈哈,Java 老弟,看來我們本質上還是一樣的,多態(tài)只不過是函數(shù)指針的一種應用!”

Java說:“所以編程的關鍵不在于是否使用了面向對象的語言,這一點你同意吧?”

C語言點頭,編程的關鍵點就是找到、抽象出穩(wěn)定的接口,針對這個接口編程,這樣就可以讓各個模塊能夠獨立地變化。

3

“說起來容易,做起來難,這兒有一個例子,你給我用面向對象設計一下?” ?Lisp 拋出了一道題。

動物可以分為肉食動物,草食動物,水生動物,陸生動物,用類如何表示?

Java 說:這還不簡單,看看這名詞多明顯啊,都可以變成類啊,讓他們都繼承動物就可以了。

Lisp看到Java 掉入了陷阱,狡黠地一笑:“那有的動物就既是陸生動物,又是肉食動物,怎么表達?”

“那我就加一個陸生肉食動物類。” 雖然覺得不妥,Java還是說了出來。

“那要是再來一個水生肉食動物怎么辦?或者來了一個新的概念‘哺乳動物’, 該怎么處理?”

“哈哈哈,我懂了,隨著需求的增多,不但類會出現(xiàn)爆炸, 還可能會出現(xiàn)那種怪異的類,這面向對象編程確實是有大問題啊!” ?C語言說。

Java 低頭沉思不語,突然,腦海中想起來了那句話:優(yōu)先使用組合而不是繼承。

怎么使用組合?必須得改變下看待問題的方式,對,應該這樣:

Java得意地說:“看看這個圖, 動物具備多個特性,如'進食', '移動',將來還可以加上'哺乳方式',每個特性都是一個接口,接口是穩(wěn)定的, 動物這個概念是可以通過這些接口特性給組合起來的。”

Lisp 贊賞地點頭, C語言向Java投去了欽佩的目光,這家伙經(jīng)常做面向對象的設計,還是有兩把刷子的,他通過特性的方式把變化給隔離了, 各個特性可以通過組合的方式,像插件一樣隨意替換, 嗯,這才是面向對象的真正精髓啊。

夜已深, 最后Java做了個總結,大伙散去。

“編程嘛就是發(fā)現(xiàn)變化,并且把它給隔離起來,使用各種語言都可以,面向對象的語言有著直接使用多態(tài)的便利,以后不要隨隨便便就diss它了。”

參考資料:

http://www.cs.otago.ac.nz/staffpriv/ok/Joe-Hates-OO.htm

《敏捷軟件開發(fā):原則,模式與實踐》

《架構整潔之道》

《面向對象開發(fā)參考手冊》

關于作者:

,15年以上軟件開發(fā)經(jīng)驗,暢銷書《》作者,前 IBM 架構師,領導過多個企業(yè)應用架構設計和開發(fā)工作;洞察技術本質,擅長用故事去講解復雜技術。

往期精彩回顧

總結

以上是生活随笔為你收集整理的为什么面向对象糟透了?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品视频99 | 欧美日韩黄| 9人人澡人人爽人人精品 | 少妇高潮毛片色欲ava片 | 伊人久久大香线蕉av色婷婷色 | 免费在线播放视频 | 午夜精品久久久 | 成人做爰免费视频免费看 | 久久伊人热| 亚洲av电影天堂男人的天堂 | 肉色丝袜脚交一区二区 | 国产成人精品久久 | 国产精品v日韩精品v在线观看 | 九九热在线观看视频 | 日韩人妻一区二区三区蜜桃视频 | 国产白丝一区二区三区 | 国产香蕉网 | 国产一区二区三区四区五区在线 | 国产成人精品综合久久久久99 | 九七影院在线观看免费观看电视 | 亚洲 日本 欧美 中文幕 | 亚洲精品2区 | 国产高清毛片 | av导航站| 日本打白嫩屁股视频 | 日日爱影视 | 操处女逼视频 | 麻豆激情网 | 国产精品人人爽人人爽 | xxxxx黄色片 噜噜噜噜噜色 | 亚洲免费视频一区 | 日本黄色视屏 | 国产盗摄视频在线观看 | 乌克兰极品av女神 | 乱淫av| 国产亚洲一区二区三区在线观看 | 日本亚洲欧美在线 | 亚洲最大的av网站 | 高h喷汁呻吟3p | 网站av| 新中文字幕 | 青青草久久伊人 | 日韩一区二区毛片 | 国产欧美日韩二区 | 国产爆乳无码一区二区麻豆 | 伊人免费视频 | 国产美女视频 | 免费在线亚洲 | 最近的中文字幕在线看视频 | 99热自拍偷拍 | 黄色一级片在线看 | 日本精品视频网站 | 亚洲欧洲日本国产 | 久久中文字幕无码 | 无码熟妇αⅴ人妻又粗又大 | 成年人在线播放视频 | 婷婷激情丁香 | 91精品啪在线观看国产线免费 | 久久精精品久久久久噜噜 | 国产精品福利视频 | 久久窝窝 | 亚洲欧美在线视频免费 | 精品国产乱码久久久久夜深人妻 | 欧美午夜视频在线观看 | 人妻 日韩 欧美 综合 制服 | 日韩一级在线 | 97久久久 | 久久夫妻视频 | 国产亚洲视频一区 | 性福宝av | 日本热久久 | 亚洲国产aⅴ精品一区二区 日韩黄色在线视频 | 不用播放器的av网站 | 亚洲熟妇无码另类久久久 | av导航在线 | 黄色成年网站 | 黄色成人免费网站 | 欧美一区二区性久久久 | 精品国产免费无码久久久 | 久久精品国产99久久不卡 | 亚洲成人免费网站 | 久操视频精品 | 国产日韩一区二区三免费高清 | 久久99草| 国产精成人品免费观看 | 国产成人精品久久二区二区91 | 欧美日韩国产片 | 国产精品啪 | 麻豆影视av | 日本在线观看a | 精品人妻一区二区三区免费看 | 老妇女性较大毛片 | 99re色| 激情九九 | 黄色的网站在线 | 日韩欧美午夜 | 免费在线精品视频 | 草逼视频免费看 | 亲子伦视频一区二区三区 |