<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>

      當(dāng)前位置:首頁(yè) > 網(wǎng)站舊欄目 > 學(xué)習(xí)園地 > 設(shè)計(jì)軟件教程 > EMF開(kāi)發(fā)指南之Reference詳解

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

      安徽新華電腦學(xué)校專(zhuān)業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線(xiàn)咨詢(xún)
      国产午夜福三级在线播放_亚洲精品成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>
        亚洲国产欧美日本精品 | 亚洲处破女aⅴ一区二区 | 最新国产资源片在线观看 | 亚洲日本一区二区三区线 | 日韩欧美中文在线套图 | 最新手机AV在线不卡 |