在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

你是使用函數(shù)式編程還是面向?qū)ο缶幊谭绞剑?/h1>

作為程序員,你是使用函數(shù)式編程還是面向?qū)ο缶幊谭绞剑?br />
在本文中,擁有 10 多年軟件開發(fā)經(jīng)驗的作者從面向?qū)ο缶幊痰娜筇匦浴^承、封裝、多態(tài)三大角度提出了自己的疑問,并深刻表示是時候和面向?qū)ο缶幊陶f再見了。

幾十年來我都在用面向?qū)ο蟮恼Z言編程。我用過的第一個面向?qū)ο蟮恼Z言是 C++,后來是 Smalltalk,最后是 .NET 和 Java。 我曾經(jīng)對使用繼承、封裝和多態(tài)充滿熱情。它們是范式的三大支柱。 我渴望實現(xiàn)重用之美,并在這個令人興奮的新天地中享受前輩們積累的智慧。 想到將現(xiàn)實世界的一切映射到類中,使得整個世界都可以得到整齊的規(guī)劃,我無法抑制自己的興奮。 然而我大錯特錯了。
01繼承,倒塌的第一根支柱 乍一看,繼承似乎是面向?qū)ο蠓妒降淖畲髢?yōu)勢。所有新手教程講解繼承時都會拿出最簡單的繼承的例子,而這個例子似乎很符合邏輯。

然后就是滿篇的重用了。甚至以后的一切都是重用了。 我囫圇吞下這一切,然后帶著新發(fā)現(xiàn)興沖沖地奔向世界了。香蕉猴子叢林問題帶著滿腔的信仰和解決問題的熱情,我開始構(gòu)建類的層次結(jié)構(gòu)然后寫代碼。似乎一切皆在掌控中。 我永遠(yuǎn)不會忘記我準(zhǔn)備從已有的類繼承并實現(xiàn)重用的那一天。那是我期待已久的時刻。 后來有了新的項目,我想起了另一個項目里我很喜歡的那個類。 沒問題,重用拯救一切。我只需要把那個類拿過來用就好了。 嗯……其實……不僅是那一個類。還得把父類也拿過來。但……應(yīng)該就可以了吧。 額……不對,似乎還需要父類的父類……還有……嗯,我們需要所有的祖先類。好吧好吧……搞定了。沒問題。 不錯。但編譯不過,怎么回事?哦我知道了……這個對象還需要另一個對象。所以那個也得拿過來。沒問題…… 等等……我不僅需要那個對象,還需要那個對象的父類,和父類的父類,和……包含的所有對象的所有祖先…… 唉…… Erlang 的創(chuàng)建者 JoeArmstrong 有句名言:

面向?qū)ο笳Z言的問題在于,它們依賴于特定的環(huán)境。你想要個香蕉,但拿到的卻是拿著香蕉的猩猩,乃至最后你擁有了整片叢林。

香蕉猴子叢林的解決方法這個問題的解決方法是,不要把類層次建得那么深。但如果繼承是重用的關(guān)鍵,那么給繼承機(jī)制添加的任何限制都會限制重用。對吧? 沒錯。 那我們可憐的面向?qū)ο蟪绦騿T該怎么辦?指望一杯三聚氰胺奶維系我們的健康嗎? 答案就是:包含和委托(Contain and Delegate)。一會兒會詳細(xì)解釋。菱形繼承問題早晚你會遇到下面這種惡心的問題,有些語言甚至根本解決不了。

大多數(shù)面向?qū)ο笳Z言都不支持這種情況,盡管看上去似乎很符合邏輯。為什么面向?qū)ο笳Z言支持這種情況如此困難? 來看看下面的偽代碼:

ClassPoweredDevice{ } ClassScannerinheritsfromPoweredDevice{ functionstart(){ } } ClassPrinterinheritsfromPoweredDevice{ functionstart(){ } } ClassCopierinheritsfromScanner,Printer{ } 注意 Scanner 和 Printer 類都實現(xiàn)了名為 start 方法。 那么問題來了,Copier繼承哪個start?是Scanner的還是Printer的?肯定不可能同時繼承啊。菱形繼承的解決解決方案很簡單:不要這樣做。 沒錯。大多數(shù)面向?qū)ο蠖疾蛔屇氵@么干。 但是,但是……要是必須這樣建模該怎么辦?我需要重用! 那就必須使用包含和委托。ClassPoweredDevice{ } ClassScannerinheritsfromPoweredDevice{ functionstart(){ } } ClassPrinterinheritsfromPoweredDevice{ functionstart(){ } } ClassCopier{ Scannerscanner Printerprinter functionstart(){ printer.start() } } 注意現(xiàn)在 Copier 類包含一個 Printer 實例和一個 Scanner 實例。然后將 start 函數(shù)委托給 Printer 類的實現(xiàn)。要委托給 Scanner 也很簡單。 這個問題是繼承這根支柱上的另一條裂縫。脆弱的基類問題好吧,那我盡量使用較淺的類層次結(jié)構(gòu),并保證里面沒有環(huán),這樣就不會出現(xiàn)菱形繼承了。 似乎一切都解決了。直到我們發(fā)現(xiàn)…… 我前一天工作得好好的代碼今天出錯了!關(guān)鍵是,我沒有改任何代碼! 嗯也許是個 bug……但等等……的確有些改動…… 但改動的不是我的代碼。似乎改動來自我繼承的那個類。 為什么基類的改動會破壞我的代碼? 原來是這樣…… 看看下面這個基類(用Java寫的,但就算你不懂Java,應(yīng)該也很容易看懂):importjava.util.ArrayList; publicclassArray { privateArrayLista=newArrayList(); publicvoidadd(Objectelement) { a.add(element); } publicvoidaddAll(Objectelements[]) { for(inti=0;i
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 封裝
    +關(guān)注

    關(guān)注

    127

    文章

    7997

    瀏覽量

    143422
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3637

    瀏覽量

    93996
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2114

    瀏覽量

    73860

原文標(biāo)題:面向?qū)ο缶幊蹋僖姡?/p>

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    gitee 支持的編程語言有哪些

    Gitee 支持的常見編程語言: Python :一種廣泛使用的高級編程語言,以其清晰的語法和代碼可讀性而聞名。 Java :一種面向對象編程
    的頭像 發(fā)表于 01-06 09:50 ?136次閱讀

    如何快速入門HAL庫編程 HAL庫與裸機(jī)編程的比較

    如何快速入門HAL庫編程 要快速入門HAL庫編程,可以遵循以下步驟: 了解基礎(chǔ)知識 : 掌握C語言編程基礎(chǔ),包括變量、數(shù)據(jù)類型、函數(shù)、指針等。 了解嵌入
    的頭像 發(fā)表于 12-02 11:39 ?458次閱讀

    一文了解嵌入軟件開發(fā)的對象

    以前應(yīng)用場景很單一,嵌入開發(fā)可能談不上面向對象開發(fā)。但現(xiàn)在,做嵌入開發(fā),沒有面向對象開發(fā),
    的頭像 發(fā)表于 11-15 10:31 ?430次閱讀
    一文了解嵌入<b class='flag-5'>式</b>軟件開發(fā)的<b class='flag-5'>對象</b>

    C語言中的socket編程基礎(chǔ)

    Socket編程簡介 Socket是一種通信機(jī)制,允許程序之間進(jìn)行通信。在C語言中,socket編程是網(wǎng)絡(luò)編程的基礎(chǔ)。通過使用socket,程序可以發(fā)送和接收數(shù)據(jù),實現(xiàn)不同計算機(jī)之間的通信
    的頭像 發(fā)表于 11-01 16:51 ?475次閱讀

    工業(yè)機(jī)器人常用的編程方式

    工業(yè)機(jī)器人的編程是確保機(jī)器人能夠執(zhí)行特定任務(wù)的關(guān)鍵步驟。編程方式多種多樣,每種方式都有其特定的應(yīng)用場景和優(yōu)勢。 工業(yè)機(jī)器人編程概述 工業(yè)機(jī)器
    的頭像 發(fā)表于 09-04 09:26 ?1129次閱讀

    倉頡來啦,辟謠:不是中文編程

    打造友好開發(fā)體驗和卓越程序性能。 而它的高效編程,安全可靠,輕松并發(fā),卓越性能又為開發(fā)者帶來不一樣的體驗。 特點 高效編程:倉頡支持面向對象函數(shù)
    發(fā)表于 09-03 08:50

    工業(yè)機(jī)器人的四種編程(示教編程、離線編程、自增強(qiáng)現(xiàn)實編程編程)剖析!

    當(dāng)前機(jī)器人廣泛應(yīng)用于焊接、裝配、搬運、噴漆及打磨等領(lǐng)域,任務(wù)的復(fù)雜程度不斷增加,而用戶對產(chǎn)品的質(zhì)量、效率的追求越來越高。在這種形式下,機(jī)器人的編程方式編程效率和質(zhì)量顯得越來越重要。降低編程
    的頭像 發(fā)表于 08-30 12:14 ?3160次閱讀
    工業(yè)機(jī)器人的四種<b class='flag-5'>編程</b>(示教<b class='flag-5'>編程</b>、離線<b class='flag-5'>編程</b>、自增強(qiáng)現(xiàn)實<b class='flag-5'>編程</b>主<b class='flag-5'>編程</b>)剖析!

    esp32有哪些編程方式

    ESP32是一款由樂鑫科技(Espressif Systems)推出的低功耗、高性能的Wi-Fi和藍(lán)牙雙模微控制器,廣泛應(yīng)用于物聯(lián)網(wǎng)、智能家居、智能穿戴等領(lǐng)域。其編程方式多種多樣,以下是一些主要
    的頭像 發(fā)表于 08-20 09:09 ?983次閱讀

    esp32用什么軟件編程

    。 概述 ESP32具有豐富的外設(shè)接口和靈活的編程方式,支持多種編程語言和開發(fā)環(huán)境。本文將詳細(xì)介紹ESP32的編程軟件,包括開發(fā)環(huán)境、編程
    的頭像 發(fā)表于 08-19 17:24 ?4343次閱讀

    簡述socket編程中的常用函數(shù)

    Socket編程是一種基于TCP/IP協(xié)議的網(wǎng)絡(luò)編程技術(shù),它允許應(yīng)用程序通過網(wǎng)絡(luò)進(jìn)行通信。在Socket編程中,有許多常用的函數(shù),它們用于創(chuàng)建、配置、連接、發(fā)送和接收數(shù)據(jù)等操作。以下是
    的頭像 發(fā)表于 08-16 10:49 ?463次閱讀

    如何理解socket編程接口

    Socket)和數(shù)據(jù)報Socket(Datagram Socket)。 1.2.1 流式Socket 流式Socket是一種面向連接的通信方式,它在通信雙
    的頭像 發(fā)表于 08-16 10:48 ?512次閱讀

    PLC的編程方式編程語言

    在工業(yè)自動化領(lǐng)域,PLC(Programmable Logic Controller,可編程邏輯控制器)因其強(qiáng)大的控制功能和靈活的編程方式而得到了廣泛應(yīng)用。PLC的編程
    的頭像 發(fā)表于 06-27 14:08 ?936次閱讀

    如何提升嵌入編程能力?

    如何提升嵌入編程能力? 要提升嵌入編程的能力,可以從以下幾點學(xué)習(xí): 1. 理解硬件:熟悉正在編程
    發(fā)表于 06-21 10:01

    三菱fx系列plc支持哪種編程方式

    三菱FX系列PLC是一種廣泛應(yīng)用于工業(yè)自動化領(lǐng)域的可編程邏輯控制器。它具有強(qiáng)大的功能和靈活性,支持多種編程方式,以滿足不同用戶的需求。本文將詳細(xì)介紹三菱FX系列PLC支持的編程
    的頭像 發(fā)表于 06-20 10:24 ?2067次閱讀

    數(shù)控銑床絕對編程和相對編程指令是

    數(shù)控銑床編程是數(shù)控加工技術(shù)中的重要組成部分,它涉及到數(shù)控銑床的控制和操作。在數(shù)控銑床編程中,絕對編程和相對編程是兩種常用的編程
    的頭像 發(fā)表于 06-07 11:12 ?1591次閱讀
    主站蜘蛛池模板: 1000部啪啪未满十八勿入 | 天天干夜夜夜操 | 亚洲精品美女在线观看 | 台湾佬自偷自拍情侣在线 | 亚洲理论片在线观看 | 特级毛片aaa免费版 特级毛片a级毛免费播放 | 亚洲图片综合区另类图片 | heyzo在线播放4k岛国 | 2021国产精品成人免费视频 | 加勒比视频网站 | 欧美成网站 | 2021久久精品国产99国产精品 | 免费观看a毛片一区二区不卡 | 国内一级特黄女人精品毛片 | 日韩免费观看的一级毛片 | 日韩三级| 天天插天天爽 | 狠狠色色综合网站 | 婷婷色九月综合激情丁香 | 色丁香婷婷| 天天看天天操 | 黄色免费看视频 | 久久天天躁夜夜躁狠狠 | 久久久噜久噜久久gif动图 | 国产91久久最新观看地址 | 中文字幕不卡在线播放 | 黄网站在线观看永久免费 | 久草视频一区 | 亚洲一区二区在线 | 好男人www社区影视在线 | 欧美黑人换爱交换乱理伦片 | 天天玩天天干 | 日本特级黄录像片 | 中国同志chinese小彬tv | 一级片免费看 | 色婷婷中文字幕 | 中文字幕第十页 | 九九精品在线观看 | 美女网站色在线观看 | 一区二区三区四区五区 | 99热在线获取最新地址 |