美文网首页
QP计算器例子

QP计算器例子

作者: annge | 来源:发表于2019-02-15 13:30 被阅读0次
    SM_of_Calc.png

    QP计算器案例

    主要的目的是从头开始理解这个UML状态图,以及状态图的设计思想,上图是最终的成品

    设计目标

    首先要保证每次的计算都是准确无误的,其次在计算过程中不能出现任何异常,要做到没有任何异常要满足以下几点条件
    1.正浮点数的运算,在计算器案例中所有的操作数都视为双精度浮点数对待
    2.负号的判断,要保证负号的识别都是准确无误的
    3.小数点的识别,判断用户输入的小数点是否合法,并忽略到用户输入的多余小数点
    4.0的判断,和小数点类似,用户在输入0里,也要判断是否为合法,举粟子来说,在初始状态时用户输入多个0时,应该只保留一个0,其他的都忽略。但在已经存在输入数的情况位,0又属于有效位,需要保留。
    5.长度的判断,判断用户输入的数字是否有溢出

    原始设计

    以常规思想设计一个计算器模型,则组成部分有,操作数1,操作2,加减乘除,等于号。所以原始设计为


    1.png

    这个状态机的问题:当用户点击equals时,原则上应该在屏幕上显示用户的计算结果,但以这个状态机来看的话,当用户点击equals时直接又切换到了操作数1的状态,在操作数1的状态屏幕应当清0,并准备记录用户所输入的数字,所以用户根本无法看到计算结果,下面对其进行修正。


    2.png
    相比于第一个状态机,增加了几点不同:
    1.将加减乘除抽象成一个更高级的对象OPER

    2.增加了result这个状态,用来显示结果
    3.用户可以点Canel再次将状态切换到operand1
    4.用户也可以再次点击某个操作符将result作为操作数再次进行操作
    但显然这个状态机也是存在问题的,首先Cancel只有在运算出结果后才是可点击的状态,这显然不符合使用习惯。

    再次进行修改

    3.png

    这次我们增加了一个更高级别的状态机叫做on state,并增加了OFF功能,
    让该状态机下面的子状态统一继承了Cancel和OFF功能。这样用户就可以随时关机和Cancel,更加符合使用习惯。

    接下来我们对功能进行修改

    在operand1, operand2中我们还需要对用户输入的数字进行具体分析是正数,0,还是小数。所以接着在operand1中增加三个子状态机用于以上分析。


    4.png

    子状态机zeroX的用途时当用户输入多余的时,只保留一个0,忽略掉用户输入的多余的0。
    子状态机intX用于处理用户输入的整数部分
    子状态机fracX用于处理用户输入的小数点,及以后部分
    子状态intX可以从zeroX进入,或者由用户输入进入该子状态机
    fracX可以从同级的zeroX intx及用户输入进入

    由上面三个子状态机就可以将用户输入的数字,小数点,0,进行完整的判断了

    然后对负号进行分析

    5.png

    未完待续。。。。。。。。。

    相关文章

      网友评论

          本文标题:QP计算器例子

          本文链接:https://www.haomeiwen.com/subject/kzypeqtx.html