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

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

在UML中表示Java繼承和接口

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

  我們引入了UML類圖的概念,比較了在java編程語言和UML類圖中表示類、屬性、操作和關聯關系的不同之處。下面我們來看看如何在UML中表示兩個重要的Java概念——繼續,接口。
  繼續
  在Java中,我們可以聲明一個類擴展(extends)另一個類,還可以聲明一個類實現(implements)一個或者多個接口。下面我們來看看如何在UML中表達這些概念。
  
  下面是三個Java類的基本骨架。第一個類是代表某種支付方式的Payment抽象類,另外兩個類分別擴展Payment類,描述兩種不同的支付方式:
  
  /** 描述支付方式的抽象類 */
  abstract public class Payment {
   public Payment() { }
  
   public Payment(BigDecimal amount) {
  this.amount = amount;
   }
  
   public BigDecimal getAmount() {
  return amount;
   }
  
   public void setAmount(BigDecimal amount) {
  this.amount = amount;
   }
  
   PRivate BigDecimal amount;
  }
  
  /** 一個擴展了Payment類的子類,描述信用卡支付方式 */
  public class CreditCardPayment extends Payment {
   public CreditCardPayment() {
   }
  
   public CreditCardPayment(BigDecimal amount) {
  super(amount);
   }
  
   public String getCardNumber() {
  return cardNumber;
   }
  
   public void setCardNumber(String cardNumber) {
  this.cardNumber = cardNumber;
   }
  
   public boolean authorize() {
  return false; //暫不實現
   }
  
   private String cardNumber;
  }
  
  /** 一個擴展了Payment類的子類,描述現金支付方式 */
  public class CashPayment extends Payment {
   public CashPayment() {
  super();
   }
  
   public CashPayment(BigDecimal amount) {
  super(amount);
   }
  
   public BigDecimal getAmountTendered() {
  return amountTendered;
   }
  
   public void setAmountTendered(BigDecimal amountTendered) {
  this.amountTendered = amountTendered;
   }
  
   private BigDecimal amountTendered;
  
   public BigDecimal calcChange() {
  return amountTendered.suBTract(super.getAmount());
   }
  }
  圖一用UML顯示了同樣的三個類。在操作和屬性聲明中,類型和參數之類的細節都沒有顯示出來,這是為了更清楚地顯示出類的整體結構以及各個類之間的關系。
   在UML中表示Java繼續和接口(圖一) 
  圖一:UML一般化關系
  Java中的extends要害詞聲明了繼續關系,相當于UML中的“一般化”(Generalization,也譯為“泛化”)關系,在UML圖形中用子類向超類的實線空心封閉箭頭表示。圖一額外增加了一個Sale類,這是為了更清楚地說明UML一般化關系與UML定向關聯關系所用箭頭的不同。關聯關系與一般化關系的另一個不同之處在于,一般化關系的兩端不需要說明多重性或角色名稱。
  顯然,UML類圖比三個Java源代碼文件更清楚直觀地顯示出了三個類之間的繼續關系。假如你要與別人探討設計思路,繪制UML草圖也要比直接使用代碼簡單快捷得多。
  
  也許有人會說,系統的類結構圖就在他們的頭腦中,他們只需要直接使用Java代碼。實際上,對于規模較大的系統,這種說法顯然是不成立的;即使對于規模較小的系統,假如一定的時間之后要由其他程序員修改,沒有UML圖也會寸步難行——很難保證每一個人都了解你頭腦中的類結構圖。
  
  在UML中,抽象類的標志是類的名字以斜體顯示。在白板或紙張上手工畫UML草圖時,很難區分字體是否是斜體。為此,一些人建議這些場合可以在類名稱的右下角加上{abstract}標記以示區別。
  
  另一些人認為,在白板上寫{abstrac t}顯得太羅嗦,他們傾向于打破UML常規,在類名稱的右下角加上一個0表示零個實例,假如在該位置寫上1,則表示該類是一個singleton類(永遠只有一個實例的類);假如在該位置寫上N,則表示它是一個枚舉類(擁有固定實例數量的類,如一星期中的天數,彩虹的顏色,等等)。不過,這一切都不是標準的UML,只能用于手工繪制UML圖的場合,看來也不可能得到UML建模工具的支持。
  
  歷史知識:UML首先由Rational公司的一個工作組發明,Ration公司是UML建模工具Rose的生產者。UML于1995年的OOPSLA會議上被公諸于世,隨后,OMG(對象治理組織)于1997年采用了UML規范。不難理解,繼續負責發展UML規范的OMG任務組包含了來自幾乎所有主流UML工具廠商的代表。因此,除了嚴格遵從規范的UML軟件工具,在一些書籍或網頁上發現不規范的UML符號也不足為怪?!?br />  繼續使得一個類能夠使用另一個類的屬性和方法,就象使用自己的屬性和方法一樣。當這類繼續機制第一次出現時,人們普遍把它視為重用現有代碼的理想方法。令人遺憾的是,規模過于龐大的繼續樹變得很脆弱,修改繼續樹的一部分,就會在整棵繼續樹中引起一系列的連帶反映。在面向對象的編程中,假如要實現有效的封裝,就應該讓改動局部化,即一個地方的改動不至于引起其他地方的變化。而修改繼續樹一個地方引起其他地方的變化恰恰違反了上述設計思想。UML圖使得我們能夠方便地把握繼續關系圖,從而為應用繼續關系帶來了方便。那么,什么時候適合運用繼續關系呢?按照《Java Design》一書,對于超類A和子類B,執行如下檢查:
  
  命題“B是一個由A扮演的角色”不成立。
  
  B永遠不需要變形成為其他某些類別中的對象。
  
  B擴展而不是覆蓋或廢棄A的行為。
  
  A不僅僅是一個工具類(一些可以重用的實用功能)。
  
  對于一個問題域(特定的業務對象環境):A和B定義了同一類型的對象,或者是用戶事務、角色、實體(團體、位置或其他東西),或其他物體的相似類別。
  假如上述任意一個判定不成立,那么把A和B定義成繼續關系可能是不合適的,改用關聯關系可能更加穩固、正確。例如,圖二違反上面的第一個判定,因為“雇員是一個由人扮演的角色”成立。另外,它還違反了第二個判定,因為雇員確實可能改變其類別(身份),例如某個時候它可能是顧客。這樣,一個既是顧客又是雇員的人就要有兩個獨立的對象來描述,從而使保存在Person類里面的信息重復出現,帶來了兩個數據副本之間數據不一致的風險。
   在UML中表示Java繼續和接口(圖二) 
  圖二:不恰當的extends用法
  圖三顯示了改用關聯關系后的UML圖?,F在,一個人可以在同一時刻(或不同時刻)既是顧客又是雇員(或任意一種)。
   在UML中表示Java繼續和接口(圖三) 
  圖三:改用關聯關系
  接口
  Java編程語言中接口(Interface)的概念也能夠與UML概念匹配。UML中的接口是一種實現繼續的形式,但這種繼續形式與Java中通過要害詞extends實現的繼續有所不同。
  
  在Java中,extends要害詞描述了一種繼續形式,它既繼續接口也繼續行為。這種類型的繼續有時被稱為Sub-classing。與其他的面象對象編程語言不同,Java類只能從一個類繼續。許多時候,設計UML圖的人熟悉多種編程語言,經常會引入多重繼續的思想,例如C++的多重繼續思想。從已有的Java代碼生成UML圖(這個過程稱為反向工程)不會帶來多重繼續的問題,但假如要求一個Java程序員去實現一個帶有多重繼續的UML類圖,就會出現問題。假如多重繼續中的超類是純抽象類,這部分類可以用Java的接口來描述,但是,假如只做這種轉換不足以把UML類圖中的多重繼續全部轉換成單重繼續,這時就必須修改UML類圖重新建模了。
  
  雖然Java不支持C++之類語言那樣的多重繼續,但它支持實現多重接口。這種由Java要害詞implements聲明的繼續只繼續接口,這種繼續有時被稱作Sub-typing。在UML中,實現接口的類與接口定義之間的關系叫做Realization關系,用一個虛線封閉箭頭表示,從實現接口的類指向接口。接口本身的UML圖與普通類一樣,但它的名字上面要加上“<>”。圖四由圖一修改而成,Payment類被一個接口取代。(關于Realization名稱的說明:Realization最常見的中文譯名是“實現”。但是,Java的implements也叫做“實現”。為避免混淆,本文中凡是出現Realization的地方一律直接使用英文)。
   在UML中表示Java繼續和接口(圖四) 
  圖四:接口與實現接口的類之間的Realization關系
  接口可以從一個或者多個其他接口擴展。UML一般化關系(實線封閉箭頭)可用來描述這種關系,如圖五所示。
   在UML中表示Java繼續和接口(圖五) 
  圖五:UML一般化關系,用來表示一個接口擴展了一個或者多個其他接口
  UML還支持另一種接口符號,即用圓圈表示接口(加上連線之后就成了棒棒糖的樣子),但這種表示法多用于UML組件圖,在UML類圖中比較少見。
  假如UML圖規模較大,有大量的類實現一個常用接口,整個UML圖可能亂成一團糟。《Java Design》一書提出了一種簡化方法,后來又被《Streamlined Object Modeling》一書的作者采用,這就是在實現接口的類中,用接口的名字替代從接口繼續的方法,不過這不屬于標準方法。遺憾的是,目前似乎還沒有工具支持這種轉換。圖六是用Together ControlCenter工具加工出來的簡化類圖。
  
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品网站999www| 国产精品爽爽爽爽爽爽在线观看| 欧美精品成人在线| 欧美午夜无遮挡| 欧美国产日产韩国视频| 91精品国产777在线观看| 综合激情国产一区| 亚洲欧洲在线播放| 国产精品一二三在线| 欧美日韩国产精品一区| 国产精品91视频| 成人精品久久久| 国产亚洲美女精品久久久| 成人妇女淫片aaaa视频| 欧美黑人又粗大| 91在线观看免费观看| 亚洲第一区中文99精品| 日本精品免费一区二区三区| 久热爱精品视频线路一| 九九精品在线视频| 国产成人精品亚洲精品| 中文字幕精品国产| 国产成人久久久精品一区| 日韩精品在线免费观看| 日韩av电影在线网| 国产一区二区三区丝袜| 91精品国产综合久久香蕉922| 久久精品亚洲一区| 久久亚洲国产精品成人av秋霞| 日韩在线中文字| 国产精品高潮呻吟久久av野狼| 欧美久久精品午夜青青大伊人| 欧美日韩中文字幕在线视频| 91伊人影院在线播放| 午夜精品久久久久久久久久久久| 日韩精品在线电影| 国产精品亚洲视频在线观看| 久久影视免费观看| 日韩国产欧美精品一区二区三区| 97精品国产91久久久久久| 国产亚洲成av人片在线观看桃| 中日韩午夜理伦电影免费| 国产不卡视频在线| 在线成人中文字幕| 欧美大胆a视频| 高清亚洲成在人网站天堂| 国产精品第七十二页| 色综合老司机第九色激情| 成人在线免费观看视视频| 亚洲自拍中文字幕| 亚洲成人三级在线| 国产精品pans私拍| 精品久久香蕉国产线看观看gif| 日韩av三级在线观看| 91九色单男在线观看| 裸体女人亚洲精品一区| 日韩美女写真福利在线观看| 日韩电影中文字幕av| 国产精品最新在线观看| 69久久夜色精品国产69| 久久视频国产精品免费视频在线| 亚洲欧美日韩精品久久奇米色影视| 国产精品mp4| 国产欧美精品日韩精品| 亚洲乱码一区av黑人高潮| 色综合男人天堂| 97视频在线观看亚洲| 亚洲日本成人女熟在线观看| 亚洲www视频| 91免费人成网站在线观看18| 91免费国产网站| 国产综合久久久久久| 国产精品日韩在线观看| 亚洲激情自拍图| 欧美日韩亚洲视频一区| 久久久亚洲成人| 精品高清美女精品国产区| 日韩欧美在线免费观看| 国产精品一二三在线| 91精品国产高清久久久久久91| 国产精品久久久久久久9999| 亚洲天堂一区二区三区| 久久精品99国产精品酒店日本| 亚洲成人久久电影| 日韩av观看网址| 综合欧美国产视频二区| 欧美电影在线播放| 7777精品久久久久久| 亚洲国产精品va在线看黑人| 欧美激情免费看| 丁香五六月婷婷久久激情| 亚洲自拍偷拍网址| 久久精品国产亚洲7777| 国产一区二区三区日韩欧美| 国产精品一久久香蕉国产线看观看| 国产精品视频免费观看www| www.日韩不卡电影av| 国产精品h在线观看| 亚洲色图15p| 国产精品美腿一区在线看| 午夜精品一区二区三区在线播放| 少妇高潮 亚洲精品| 国产成人精品久久亚洲高清不卡| 日韩精品免费在线| 欧美亚洲日本网站| 日韩有码在线观看| 亚洲女成人图区| 国产精品国产自产拍高清av水多| 亚洲第一男人av| 日韩精品在线观| 亚洲精品91美女久久久久久久| 精品国产91久久久| 欧美色videos| 精品国模在线视频| 国产99在线|中文| 国产精品白嫩初高中害羞小美女| 日韩亚洲精品视频| 国语自产精品视频在免费| 大伊人狠狠躁夜夜躁av一区| 亚洲色图第三页| 亚洲成成品网站| 亚洲春色另类小说| 日韩欧美a级成人黄色| 国产精品三级在线| 一区二区三区回区在观看免费视频| 欧美国产日韩一区二区三区| 91亚洲精品久久久久久久久久久久| 在线日韩av观看| 亚洲国产成人久久综合| 亚洲跨种族黑人xxx| 国产精品91在线| 久久成人精品一区二区三区| 日韩欧美第一页| 日韩精品一区二区视频| 亚洲欧洲在线看| 亚洲天堂男人天堂女人天堂| 国产精品999| 精品国产一区二区三区久久久狼| 日韩高清电影好看的电视剧电影| 中文字幕日本精品| 精品日本高清在线播放| 精品亚洲va在线va天堂资源站| 国产精品中文字幕久久久| 亚洲乱码av中文一区二区| 久久视频这里只有精品| 精品久久久久久亚洲精品| 精品高清一区二区三区| 亚洲在线免费观看| 中文字幕v亚洲ⅴv天堂| 国产综合在线观看视频| 亚洲国产成人精品女人久久久| www.亚洲一二| 这里只有精品在线观看| 亚洲精品久久久久久久久| 久久色免费在线视频| 在线电影中文日韩| 欧美午夜激情小视频| 欧美高清视频在线播放| 亚洲www在线| 国产欧美一区二区三区视频| 一本色道久久88综合日韩精品| 不卡av在线网站| 国产精品视频一区二区高潮| 欧美精品九九久久|