StarUML分析實現筆記(1)

使用版本 Version:2.2

這幾天在Mark老大的帶領下,開始接觸StarUML,之前用過visio畫過面向過程編程的流程圖。感覺StarUML用來分析類的關係方面很好用。

上下文:實現一個運算器,該運算器可輸入運算式類似:1+5*(2-1)等等類型

使用算法方法:遞歸下降法

    遞歸下降法來分析此運算器:

       1 表達式
                 項      + / -     表達式
                 項
        2 項
                  因子   * / /      項
                  因子
        3 因子
                  數字
                  -因子
                 (表達式)

:觀察普通特例,抽象出規律

    式子1:1+5*(2-1)

    ------>  第一步是直接從認定它是一個表達式開始,表達式裏面從左往右尋找+或-號(括號裏的是在因子階段解析)                                               

               1(項)                       5*(2-1)(表達式)

    ------> 項中的格式“因子”符合 第一步分析出來的 項1,則項1爲因子

    ------> 因子裏面的格式“數字”符合第二步分析出來的因子1,所以1(項)被解析爲數字1,接下來第一步中加號的另一邊表達式

                                   +

               1(數字)              5*(2-1)(表達式)
    ------> 表達式 5*(2-1)符合表達式格式裏面的“”,因爲沒有找到+,-號(括號裏的是在因子階段解析爲表達式)
                                   +
               1(數字)              5*(2-1)  (項)
    ------>項5*(2-1)符合項格式裏面的“因子*項”,
                                     +
               1(數字)                5(因子)       *       (2-1) (項)
                                      

    ------>同理,因子5就被解析爲數字5,項(2-1)被解析爲表達式2-1
                                     +
               1                                    *       
                                               5            2-1
     ----------------------------------------------------------------------------->
                                      +
               1                                         *       
                                                5                -
                                                             2        1
  式子2:  -5*2
     ------>  第一步是直接從認定它是一個表達式開始,表達式裏面從左往右尋找+或-號(括號裏的是在因子階段解析)   
                                           *
                             -                       2
                                    5
  上面式子1和2都最後解析成兩棵樹,通過觀察這兩棵樹可逐漸歸納出規律:
                節點類型:
                                  加法節點,減法節點,乘法節點,除法節點,數字節點,負號節點
                節點裏面再分類:
                                           二元節點:
                                                         加法節點,減法節點,乘法節點,除法節點,
                                           一元節點:
                                                         數字節點,負號節點
               再對節點進行細節分辨:
                                          二元節點:
                                                        加法節點           
                                                                          左節點    右節點
                                                        減法節點
                                                                          左節點    右節點
                                                        乘法節點
                                                                           左節點    右節點
                                                        除法節點
                                                                          左節點    右節點
                                           一元節點:
                                                       負號節點
                                                                         子節點
                                           數字節點
                進一步細節分析:各個節點進行一個不同的計算
                                          二元節點:
                                                        加法節點    
                                                                           計算加法       
                                                                           左節點    右節點
                                                        減法節點
                                                                          計算減法
                                                                           左節點    右節點
                                                        乘法節點
                                                                           計算乘法
                                                                           左節點    右節點
                                                        除法節點
                                                                          計算除法
                                                                           左節點    右節點
                                           一元節點:                                                      
                                                       負號節點
                                                                         計算負號
                                                                          子節點
                                                       數字節點
                                                                         計算
                                                                          返回值
                  分別對二元節點,一元節點進行抽象:

                                          二元節點:
                                                 計算
                                                 左節點
                                                 右節點
                                                             加法節點    
                                                                           計算加法       
                                                                           左節點    右節點
                                                             減法節點
                                                                           計算減法
                                                                           左節點    右節點
                                                             乘法節點
                                                                           計算乘法
                                                                           左節點    右節點
                                                             除法節點
                                                                           計算除法
                                                                           左節點    右節點
                                           一元節點:
                                                 計算
                                                 子節點
                                                            
                                                            負號節點
                                                                           計算負號
                                                                           子節點
                                                            數字節點    
                                                                           計算返回值
                                                                           返回值
                  對整體一元,二元節點進行抽象:  
                             節點 
                              計算                                   
                                          二元節點:
                                                 計算
                                                 左節點
                                                 右節點
                                                             加法節點    
                                                                           計算加法       
                                                                           左節點    右節點
                                                             減法節點
                                                                           計算減法
                                                                           左節點    右節點
                                                             乘法節點
                                                                           計算乘法
                                                                           左節點    右節點
                                                             除法節點
                                                                           計算除法
                                                                           左節點    右節點
                                           一元節點:
                                                 計算
                                                 子節點
                                                            
                                                            負號節點
                                                                           計算負號
                                                                           子節點
                                                            數字節點    
                                                                           計算返回值
                                                                           返回值                                          
有了以上的分析,現在可以用StarUML生成對應的UML圖:

注意:
1、Node類和BinaryNode類的類名是斜體字,表示抽象類,因爲calc是要在各個底層節點進行實現的。
2、BinaryNode類和UnitaryNode類裏面的節點變量爲#開頭表示訪問權限是Protect的,不能是private的,因爲子類繼承父類時不能訪問Private的屬性。

關於代碼實現將在   StarUML分析實現筆記(2)裏面實現。剛剛入門C++編程,上述分析肯定會有錯誤的,希望各位看官可以幫忙指正,謝謝




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章