<source id="4vppl"><ins id="4vppl"></ins></source>
<u id="4vppl"><sub id="4vppl"><label id="4vppl"></label></sub></u>
<object id="4vppl"></object>
  • <u id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></u>

    <object id="4vppl"></object>
    <b id="4vppl"><sub id="4vppl"><tr id="4vppl"></tr></sub></b>

      <i id="4vppl"><thead id="4vppl"></thead></i>

      <thead id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></thead>

      當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > EMF開發指南之Reference詳解

      EMF開發指南之Reference詳解
      2010-01-14 22:44:28  作者:  來源:
      ★reference沒有默認值,因為它們的默認值都是null
      ★one-way reference 跟simple attribute比較像,因為涉及到延遲加載,所以getter方法會相對復雜點
      ★bedirectional reference 雙向引用表示reference在對方的opposite里面保存著(如果用annotated interface來定義emf的話,則需要設置兩邊的opposite屬性),對于雙向應用的getter方法跟單向一樣,區別主要在setter部分,因為在改變關聯關系的時候需要同時修改雙方的引用,這里會使用到EObject的eInverseAdd()和eInverseRemove()方法,即取消舊的關聯關系,建立新的關聯關系,且兩邊同時修改,因此我們應該明白一點,那就是建立了雙向關聯之后,關聯雙方只允許被一個reference引用。由于做了很多修改,會觸發一系列的Notification,這里使用了一個NotificationChain來收集所有的Notification在最后一一跟通知接收者attach起來
      ★multiplicity-many reference 一對多引用就是其中有一個引用是一個集合,因此對于多的那一方不存在setter方法
      ★containment reference在uml圖中表述為容器方以by-value的方式聚合0或n個目標對象(被包含對象),在emf中則表現為容器方的containment設置為true,互為containment reference的對象在持久化的時候,將被保存在一個document中。因此在getter方法中也不需要proxy這樣的運行機制。對于容器對象來說,被包含對象只能有一份,如果向容器中添加重復對象,最終得到的只有一份。如果將一個目標對象添加到一個容器對象,則必須將其從原有容器中刪除。containment reference也可以看成是一種雙向引用,因為在EObjectImpl中有一個eContainer屬性,用來保存容器對象。我們也可以將containment reference轉換成更直接的雙向引用,只需要跟雙向引用在被引用方添加相應的getter方法,不同之處在于在指定container為true即可。
      ★non-proxy-resolving reference,默認情況下,reference都會檢查互為reference的雙方對象是否在一個document之中,然后采用不同的方式,不在同一個document中將采用proxy的方式加載reference對象,如果能確信reference雙方對象都在一個document中,那么getter方法就跟single value的attribute沒有區別,這里我們只需要將resolveProxies設置為false即可。
      ★volatile reference跟volatile attribute一樣,需要自己手工修改具體實現
      ★non-changeable reference跟non-changeable reference一樣,通常與volatile reference聯合使用。
      ★unsettable reference也沒什么好說的
      ★map reference 在emf中為了支持map,必須先定義map entry,一個 map entry是一個實現了Map.Entry接口并且具有key和value兩個feature的EClass類,map entry可以顯式或者隱式定義。顯式定義,就是在EPackage類中添加一個訪問map entry的方法,隱式定義則是在containment reference中使用map entry。如果使用annotated interface定義emf model的話,那么需要這樣定義,在package中定義一個返回值為EClass的getXxxx()方法,并添加以下注釋:@model但沒有instanceClass屬性,定義MapEntry的相關屬性,比如features屬性名列表以及關于feature的屬性。隱式定義,這個一般在reference中定義,即返回值必須是Map或者EMap的getter方法,注釋必須有@model,且帶有mapType或者keyType,valueType屬性,如果使用了mapType屬性,則必須在Package中顯示定義MapEntry的getter方法,使用keyType,valueType定義時,EReference將隱式定義一個包含keyType和valueType屬性的MapEntry,且默認的名稱為“keyTypeToValueTypeMapEntry”

      安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢
      国产午夜福三级在线播放_亚洲精品成a人片在线观看_亚洲自慰一区二区三区_久久棈精品久久久久久噜噜
      <source id="4vppl"><ins id="4vppl"></ins></source>
      <u id="4vppl"><sub id="4vppl"><label id="4vppl"></label></sub></u>
      <object id="4vppl"></object>
    1. <u id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></u>

      <object id="4vppl"></object>
      <b id="4vppl"><sub id="4vppl"><tr id="4vppl"></tr></sub></b>

        <i id="4vppl"><thead id="4vppl"></thead></i>

        <thead id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></thead>
        精品成年人在线观看 | 亚洲精品在线911 | 亚洲日本中文字幕一区二区三区 | 亚洲成a人v影院一区 | 亚洲伦中文字幕另类不卡 | 五月天丁香婷婷激情综合 |