<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    邋遢居

    我的Java天堂

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      61 Posts :: 2 Stories :: 90 Comments :: 0 Trackbacks

    在八進制的中講述了從模型到應(yīng)用程序的生成過程。我通過類似的方法生成了一個應(yīng)用程序。

    代碼生成后,我就想看看EMF為我生成了什么樣的代碼。我如果需要修改的話該如何修改。

    我的“Hellow world”是采用的“Using EMF”文中的模型。
    familytree.JPG
    根據(jù)這個模型建立了一個EMF Model
    family model.gif
    根據(jù)這個模型生成model class的結(jié)構(gòu)如下圖所示:
    class code.gif

    從圖中我們可以看到有三個包:

    他們分別是:family,family.implfamily.util

    familyfamily.impl包之間的差別就是一個是Interface,另外一個是這些Interface的實現(xiàn)。

    我們先來看看我們模型中出現(xiàn)過的類:

    Family,FamilyTree,Female,Male以及Individual

    由于我是采用Annotated Java的方式生成的模型。所以在family包中的代碼并沒有太多的變化。
    /**
         * Return the father
         * 
    @return the father
         * @model
         
    */
        Male getFather();
        
        
    /**
         * Sets the value of the '{
    @link com.jet.swt.emf.family.Family#getFather <em>Father</em>}' reference.
         * <!-- begin-user-doc -->
         * <!-- end-user-doc -->
         * 
    @param value the new value of the '<em>Father</em>' reference.
         * 
    @see #getFather()
         * @generated
         
    */
        
    void setFather(Male value);

    他只是為我提供了Set方法。接口的繼承也沒有做修改。但是他對應(yīng)的實現(xiàn)類就有了很多變化。

    首先從類的申明來看:

    public class FamilyImpl extends EDataObjectImpl implements Family {
    我們可以看到我們的FamilyImpl是從EdataObjectImpl類繼承而來。處于好奇我有在Hiberarchy中打開他的繼承關(guān)系看了一下。hiberarchy.gif

    這里有一張圖可以清晰的說明這個繼承關(guān)系的職能。

    hiberachyfunction.gif
    我例子中的Business Layer是FamilyImpl類。

    這樣我們的就可以不寫一行代碼就可以使我們的對象具有Notification/Common的功能(關(guān)于NotificationCommon的功能到底是怎樣的,我會在后續(xù)的學(xué)習(xí)筆記中記下來。呵呵,是不是很爽啊)。另外在《Eclipse Modeling Framework: A Developer's Guide》一書的第二章也有提到這部分的內(nèi)容,不過由于他講解的EMF的版本比較老和我現(xiàn)在使用的版本有點出入,不過基本的功能還是講到了。

    好了,看完申明我們就來繼續(xù)往下看吧。

    Family下面有三個屬性,father,motherchildren

    EMF給我們生成的對應(yīng)的代碼為:

    protected Male father = null;

        
    /**
         * The cached value of the '{
    @link #getMother() <em>Mother</em>}' reference.
         * <!-- begin-user-doc -->
         * <!-- end-user-doc -->
         * 
    @see #getMother()
         * @generated
         * @ordered
         
    */
        
    protected Female mother = null;

        
    /**
         * The cached value of the '{
    @link #getChildren() <em>Children</em>}' containment reference list.
         * <!-- begin-user-doc -->
         * <!-- end-user-doc -->
         * 
    @see #getChildren()
         * @generated
         * @ordered
         
    */
        
    protected EList children = null;

    以及一些getset方法。

    對于set方法中除了基本的賦值以外還加上了向所有對這次變動感興趣觀察者發(fā)送一個變更消息:

    public void setFather(Male newFather) {
            Male oldFather 
    = father;
            father 
    = newFather;
            
    if (eNotificationRequired())
                eNotify(
    new ENotificationImpl(this, Notification.SET, FamilyPackage.FAMILY__FATHER, oldFather, father));
        }

    對于get方法要分基本類型還是對象這兩種類型來處理。

    如果是基本類型,直接返回就好了。

    如:

    public String getName() {
            
    return name;
        }
    如果是對象的話就有點麻煩了。先要判斷該對象是否使用了代理(這一部分我還不是太清楚)如果是的話就獲得他的代理對象,并判斷獲得代理對象是否和當(dāng)前對象是否相等,如果不等就發(fā)送一個變更消息。最終返回對象(肯能是一個代理對象)。
    public Male getFather() {
            
    if (father != null && ((EObject)father).eIsProxy()) {
                Male oldFather 
    = father;
                father 
    = (Male)eResolveProxy((InternalEObject)father);
                
    if (father != oldFather) {
                    
    if (eNotificationRequired())
                        eNotify(
    new ENotificationImpl(this, Notification.RESOLVE, FamilyPackage.FAMILY__FATHER, oldFather, father));
                }
            }
            
    return father;
        }

    還有其他類將在下一篇記下。

    1、  Using EMF,  Author :Catherine Griffin

    2、   EMF介紹系列(二、從模型生成應(yīng)用程序) Author:八進制

    3、  Mastering Eclipse Modeling FrameworkAuthor:Vladimir Bacvanski(Vladimir@inferdata.com) Petter Graff(petter@inferdata.com)

    Eclipse Modeling Framework: A Developer's Guide Author:Frank Budinsky, David Steinberg, Ed Merks, Raymond Ellersick, Timothy J. Grose
    posted on 2005-12-18 13:12 Jet Geng 閱讀(3962) 評論(4)  編輯  收藏 所屬分類: EMF

    Feedback

    # re: EMF 生成的Model Code閱讀筆記(一) 2006-01-01 21:09 lanserzhao
    java,myeclipse,struts,spring,hibernate技術(shù)論壇群9967568,歡迎各位加入  回復(fù)  更多評論
      

    # re: EMF 生成的Model Code閱讀筆記(一) 2006-01-05 13:24 水狐
    我也來踩踩 真是好文啊  回復(fù)  更多評論
      

    # re: EMF 生成的Model Code閱讀筆記(一) 2006-05-03 22:05 綠色使者、綠色心情
    恩,過一段來仔細研究一下EMF  回復(fù)  更多評論
      

    # re: EMF 生成的Model Code閱讀筆記(一) 2006-06-17 10:06 re
    推薦插件搜索站點 : http://www.eclipsepowered.net  回復(fù)  更多評論
      

    主站蜘蛛池模板: 午夜国产羞羞视频免费网站| 亚洲综合一区二区国产精品| 国产成人无码精品久久久免费| 亚洲无av在线中文字幕| 日本三级2019在线观看免费| 亚洲a无码综合a国产av中文| 国产亚洲成人久久| 久久99国产乱子伦精品免费| 亚洲精品第一国产综合野| 大胆亚洲人体视频| 久久国产精品免费看| 亚洲最大的成人网| 亚洲综合色区在线观看| 免费观看激色视频网站(性色)| 亚洲av成人片在线观看| 亚洲免费在线播放| 日韩毛片无码永久免费看| 国产在线播放线91免费| 欧洲 亚洲 国产图片综合| 亚洲一区二区三区香蕉| 四虎永久在线观看免费网站网址| 国产亚洲精品成人久久网站| 亚洲福利视频导航| 亚洲国产综合久久天堂| 99久久久国产精品免费牛牛| 老牛精品亚洲成av人片| 精品亚洲麻豆1区2区3区| 亚洲色偷拍区另类无码专区| 最近中文字幕国语免费完整| 老湿机一区午夜精品免费福利| 亚洲黄色三级网站| 亚洲一区二区三区香蕉| 欧美好看的免费电影在线观看| 99精品免费视品| 精品视频免费在线| 亚洲自偷精品视频自拍| 国产精品亚洲αv天堂无码| 久久久久国色AV免费观看性色| 永久免费av无码入口国语片| 色多多免费视频观看区一区| 亚洲kkk4444在线观看|