亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java中鮮為人知的缺點(下)

2019-11-18 13:28:19
字體:
來源:轉載
供稿:網友

  最后討論一下無法繼續多種類的裝配問題。該問題的原因在于java不答應多層繼續。
  
  Java不能進行多層繼續。這一點大多經常作為其優點而不是缺點而被提出來。C++答應多層繼續,但結果卻致使程序變得非常復雜,而且還產生了難以理解的錯誤。
  
  多層繼續在裝配時會很復雜
  
  多層繼續會在如下幾個方面導致混亂。第一是名稱的沖突。在繼續具有相同名稱的其他類時,不知道是哪個類的方法將會被調用(圖5)。這一點是在一個類繼續兩個已經繼續了某一個類的類時經常發生的問題。這種繼續稱為菱形繼續(圖6)。在分別改寫(override)最上層的類的方法后,就會引起被最下層的類所調用的問題。
   Java中鮮為人知的缺點(下)(圖一)


  圖5●在需要繼續兩個具有相同名稱的方法的超級類時,其名稱就會發生沖突。這一點是經常被作為多層繼續的問題而指出來的地方
   Java中鮮為人知的缺點(下)(圖二)
  圖6●菱形繼續的一個例子。在同一個人具有社會人和學生兩種性質的時候,就必然會引起此類問題
  第二,類的層次也會變得很復雜。假如只有單繼續,類的結構僅僅只會分支成樹狀。而假如是多層繼續,一下子就會變得很復雜。假如多次反復地進行多層繼續,把握類的層次關系幾乎就將變得不可能。
  
  由于Java只答應單繼續,因此就不會引起這種問題。不過,用戶當然也希望通過將多個不同的類組合起來,生成新的類。為了解決這一問題,Java就提供了被稱為接口的多層繼續的功能。
  
  日本產業技術綜合研究所信息處理研究部的主任研究員一杉裕志說:“Java只答應單繼續從編程語言的裝配的角度來講是一種很不錯的作法”。甚至有人表示:“Java利用接口來取代多層繼續給人的感覺非常不錯。此前Java之所以如此普及就是因為Java的語言標準采取了適當的折衷”(東京大學研究生院處理理工學系研究專業專門從事計算機科學的萩谷昌己教授)。
  
  接口不能繼續裝配
   Java中鮮為人知的缺點(下)(圖三)
  圖7●Java只答應繼續一個裝配。因此就必須完整地復制代碼
  不過,基于接口的偽多層繼續存在致命的缺點。這就是指接口無法繼續裝配。Ruby語言的開發者--日本的松本幸弘指出:“使用接口取代多層繼續是Java的高明之處。不過放棄裝配的繼續則令人非常痛心”。
  
  繼續2個類的功能時,Java將會復制某一個類的源代碼。結果,相同的代碼就會分散在各種不同的位置,可維護性就會顯著降低(圖7)。將相同的處理過程集中到名為類的單位中來提高面向對象的優點沒有得到充分的利用?!皬氖袌鲣N售上來講,Java是一種取得了巨大成功的語言。但是從編程語言的裝配角度來看,我認為它是一個失敗的作品”(松本)。
  
  Ruby語言利用Mix-in實現裝配的繼續
  
  實際上松本開發的Ruby語言也和Java一樣只答應單繼續。不過,Ruby則利用相當于Java接口的方法實現了裝配的繼續。這就是被稱為Mix-in的方法。
  
  Mix-in是指僅將程序中具有再利用性的功能部分集中到被稱為“模塊”的單位中,以供其他的類來使用。模塊與類一樣,其本身無法利用new運算符來生成。只有“include”即嵌入到其他的類中才能使用(圖)。
  
  LIST 6就是使用了Mix-in方法的簡單Ruby代碼。定義了一個可以輸出“test”字符串的、名為TestModule的模塊。TestClass類嵌入了該模塊。這樣一來,TestClass類就可以像調用自身的方法一樣調用TestModule模塊中的方法。
  
  不過,Ruby的Mix-in所解決的只是由多層繼續所造成的繼續關系的復雜性。在多個模塊存在同名的方法時,就會產生與多層繼續相同的問題。Ruby優先處理由后面嵌入的方法(注3)。
   Java中鮮為人知的缺點(下)(圖四)
點擊查看大圖
 
  圖8●Ruby中的Mix-in功能。將集中了各種功能的模塊嵌入到類中來使用
   Java中鮮為人知的缺點(下)(圖五)
點擊查看大圖

   LIST 6●使用Ruby中Mix-in功能的代碼。TestClass類可以像使用自己的方法一樣使用TestModule模塊所裝配的方法
  利用與類不同的單位進行程序再利用的MixJuice語言
  
  目前一種利用與Ruby不同的方法來提高程序的再利用性的名為MixJuice的語言也在開發之中。這是一種基于Java的獨立語言。
   Java中鮮為人知的缺點(下)(圖六)
點擊查看大圖

  LIST 7●MixJuice的代碼。程序以“module(模塊)”為單位進行描述。而類則由module來分割
  為了程序的再利用,即便MixJuice也使用了與類不同的編程單位。這種單位與Ruby一樣被稱為“模塊”。MixJuice語言的開發者--日本產業技術綜合研究所的一杉表示:“在基于Java等語言中常見的類的程序設計中,通過多個類的協作實現某一種功能時,類就無法進行再利用。因此應該有一個與類不同的、可以再利用的編程單位”。
  
  MixJuice語言中當然也有類。但是編程時所處理的并不是一個類的源代碼,而是以包含了各種可協調工作的類的“模塊”為單位來描述程序。重新利用模塊進行擴展時,描述的是模塊之間的“區別”。
  
  LIST 7就是實際的源代碼。程序是以“模塊”為單位來組織的。類則在模塊中使用“define”要害詞進行定義。如本例所示,通過追加模塊來描述與現有類的區別。把使用多個類而實現的功能集中到了一起。
  
  必然引起裝配缺陷
  
  不過,這種方法必然會產生其他問題。就是說要使用MixJuice中的模塊來擴展類時,就會產生裝配缺陷。
  
  圖9就是一個具體的例子。模塊m1和m2均繼續了模塊m,m1定義了在m中定義的類S的派生類B。而m2則向S類追加了方法。假如是普通的方法,就不會產生問題,但是這里卻定義了一個利用派生類來強制裝配的抽象方法。實際上,它的派生類A添寫了裝配。
  
  如要同時使用這兩個模塊,連接時就會產生錯誤。因為類B沒有裝配由m2追加到類S中的方法m()。為了解決這個問題,無論是誰擁有多么豐富的知識都必須對方法進行裝配。這種問題是因模塊具有方法追加和子類(派生類)追加等2種擴展的方向性而引起的(圖10)。
   Java中鮮為人知的缺點(下)(圖七)
點擊查看大圖

  
  圖9●裝配缺陷的例子。由m2追加到類S中的抽象方法的存在與m1沒有任何關系。假如同時使用這2個模塊時就會產生編譯錯誤
  
   Java中鮮為人知的缺點(下)(圖八)
  圖10●存在二個以上的擴展方向性時就會產生裝配缺陷。拿MixJuice來說,就是子類和方法的擴展性
  提出了新的分割單位的、面向側面編程(aspect-Oriented PRogramming)
  
  像MixJuice語言那樣,利用橫跨多個對象的單位來把握系統的觀點稱為“關注分隔(Separation of Concerns,SoC)”。類的相互作用也屬于關注的一種。這種觀點并不是僅僅單純以對象為單位,還要由其他側面來分割系統。
  
  最近這種觀點已經開始受到越來越廣泛的關注。基于該觀點的代表性編程范式(paradigm)就是面向側面編程。它就是以“關注”為分隔單位的。假如存在多個與類相同的關注,就通過將這些關注組合起來,實現一種功能。這種功能就是側面(Aspect)。
  
  圖11就是具體的例子。把移動圖形來刷新畫面的處理過程定義為一個側面。圖形是由點和線組成的。每一個點和線中均存在移動的方法和用于設置位置的方法。這些動作相互協作,就可實現稱為畫面刷新的側面。
  
  LIST 8就是使用基于Java的面向側面語言“AspectJ”,來描述側面的源代碼。在一個被稱為移動圖形的程序段中定義了多個類的多個方法。圖形的移動結束后,最后執行重新刷新畫面的處理過程。
   Java中鮮為人知的缺點(下)(圖九)
  圖11●利用“關注”分割“類”的圖示。點和線以及他們各自所具有的定位和移動的方法被劃分成了相同的關注。該圖摘自面向側面編程的倡導者Gregor Kiczales在面向側面編程技術研討會上發表的演講資料
  Java中鮮為人知的缺點(下)(圖十)
點擊查看大圖

  LIST 8●利用AspectJ描述側面的源代碼。將用于實現圖像移動的各種類中的方法歸納為“move”?!癿ove”結束以后,執行由“after”描述的畫面刷新。摘自Gregor Kiczales在面向側面編程技術研討會上發表的演講資料
  與面向對象并不矛盾
  
  面向側面編程在對象以外導入了分割系統的單位,提高了程序的再利用性和擴展性。假如只有對象單位有分割的軸,也許確實就會存在一定的限制吧。
  
  不過,面向對象本身就是公認難度很高的編程范式。盡管如此面向對象語言能夠普及到如此程序恐怕是因為“只有對象單位有分割的軸”吧。正因為軸只有一個好歹才能夠理解。假如還要加上被稱為側面的軸,也許有很多程序員就會產生混亂。
  
  另外,面向側面則是自由度很高的編程范式。正是因為自由度高,程序員才會感到苦惱。因為他們不知道應該如何分割或組織程序。也就是說,在某種程度上縮小自由度,并給程序員提供編程指南也可以說是編程語言的任務。
  
  面向側面是一種擴展了面向對象的編程范式。假如認為面向對象的自由度合適,就可以繼續使用它。就連面向側面的倡導者加拿大英屬哥倫比亞大學的Gregor Kiczales本人也表示:“沒有必要非要去勉強地使用側面來編程”。程序員要根據自己的開發風格,在追求一種易用性和擴展性適當平衡的同時,使用這種編程范式。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩在线视频免费观看高清中文| 欧美性高潮在线| 深夜精品寂寞黄网站在线观看| 欧美大人香蕉在线| 亚洲第一区第一页| 久久久久久久久久婷婷| 欧美激情乱人伦一区| 日韩视频免费看| 97在线免费观看视频| 久久久最新网址| 亚洲福利在线看| 久久精品国产免费观看| 亚洲色图激情小说| 国产中文欧美精品| 国产精品视频久久久| 国产精品久久久久久久电影| 国产精品福利无圣光在线一区| 日韩美女中文字幕| 91在线直播亚洲| 亚洲成色www8888| 国产精品极品尤物在线观看| 91影视免费在线观看| 久久久精品国产一区二区| 亚洲香蕉成人av网站在线观看| 亚洲精品黄网在线观看| 久久国产精品99国产精| 日韩中文字幕第一页| 日韩小视频在线观看| 亚洲精品久久久久中文字幕二区| 国产精品视频中文字幕91| 51ⅴ精品国产91久久久久久| 国产成人精品一区二区三区| 日本成人激情视频| 伊人亚洲福利一区二区三区| 日韩国产精品亚洲а∨天堂免| 91精品国产综合久久男男| 成人国产精品久久久久久亚洲| 久久99久国产精品黄毛片入口| 亚洲精品一区二区网址| 亚洲福利视频在线| 亚洲精品自拍第一页| 欧美三级免费观看| 亚洲精品国产精品久久清纯直播| 精品国产31久久久久久| 亚洲欧美国产精品久久久久久久| 亚洲成人黄色在线观看| 欧美综合国产精品久久丁香| 欧洲永久精品大片ww免费漫画| 性金发美女69hd大尺寸| 中文字幕免费精品一区| 亚洲国产精品专区久久| 日韩精品久久久久| 姬川优奈aav一区二区| 高潮白浆女日韩av免费看| 日本久久久久亚洲中字幕| 国产精品盗摄久久久| 日本伊人精品一区二区三区介绍| 欧美高清在线视频观看不卡| 欧美风情在线观看| 伊人久久精品视频| 精品国产一区二区三区四区在线观看| 国产精品九九久久久久久久| 日韩在线观看免费av| 亚洲欧美制服丝袜| 91爱爱小视频k| 日韩欧美视频一区二区三区| 欧美做受高潮电影o| 欧美xxxwww| 欧美在线一级视频| 日本高清不卡在线| 美女久久久久久久久久久| 91在线视频九色| 国产精品一区二区三区成人| 美女啪啪无遮挡免费久久网站| 精品国偷自产在线视频| 久久人人97超碰精品888| 97婷婷大伊香蕉精品视频| 国产成人在线播放| 国产91色在线|| 日韩在线高清视频| 亚洲视频在线免费观看| 精品福利在线视频| 成人综合网网址| 国产精品专区h在线观看| 久久精品91久久香蕉加勒比| 精品亚洲va在线va天堂资源站| 欧美久久精品午夜青青大伊人| 俺也去精品视频在线观看| 91精品国产沙发| 欧美日韩国内自拍| xxx欧美精品| 91中文在线观看| 中文字幕v亚洲ⅴv天堂| 国产精品成人免费视频| 欧美亚洲视频在线看网址| 日韩在线观看免费高清| 91在线观看免费高清完整版在线观看| 欧美日韩一区二区三区| 国产成人亚洲综合91| 欧美精品久久久久久久久久| 日本一区二区在线播放| 久久这里有精品| 久久高清视频免费| 国产精品欧美在线| 欧美黑人性生活视频| 97视频在线观看视频免费视频| 欧美性猛交视频| 亚洲老板91色精品久久| 日韩中文综合网| 国产精品va在线播放我和闺蜜| 成人伊人精品色xxxx视频| 亚洲欧洲第一视频| 成人免费高清完整版在线观看| 欧美一级大胆视频| 欧美多人乱p欧美4p久久| 欧美二区乱c黑人| 4438全国成人免费| 国产精品免费小视频| 亚洲日韩欧美视频| 免费不卡欧美自拍视频| 欧美肥老太性生活视频| 亚洲高清久久久久久| 日韩av电影在线免费播放| 欧美做受高潮电影o| 国产精品精品视频一区二区三区| 欧美亚洲国产精品| 久久久噜噜噜久久久| 国产精品免费久久久久久| 精品久久久久久久久久久久| 欧美怡红院视频一区二区三区| 中文字幕亚洲欧美在线| 国产精品久久二区| 欧美二区在线播放| 国产精品久久一区| 欧美在线一级视频| 欧美天堂在线观看| 91国产美女在线观看| 亚洲成人激情图| 国产成人av在线播放| yellow中文字幕久久| 国产精品日韩精品| 久久999免费视频| 欧美成人在线网站| 国产精品情侣自拍| 欧美激情久久久久| 国内精品久久久久久久久| 中文字幕亚洲综合久久| 亚洲女人天堂av| 国产成人黄色av| 亚洲国产欧美一区二区三区同亚洲| 欧美性极品xxxx娇小| 国产精品扒开腿做爽爽爽视频| 亚洲久久久久久久久久| 蜜臀久久99精品久久久久久宅男| 韩国国内大量揄拍精品视频| 国产精品第8页| 欧美一级bbbbb性bbbb喷潮片| 欧洲成人在线观看| 日韩女优在线播放| 国产精彩精品视频| 欧美视频在线看| 亚洲精品视频免费在线观看| 欧美日韩日本国产| 国产精品毛片a∨一区二区三区|国|