StarUML分析实现笔记(1)

1 篇文章 0 订阅
1 篇文章 0 订阅

使用版本 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++编程,上述分析肯定会有错误的,希望各位看官可以帮忙指正,谢谢




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值