作业 1. 抽象类Expression(表达式)既可以表达算术运算,⼜又可以表达逻辑运算,但两种运算不不能 混合。Expression还有两个抽象⼦子类BinOp(⼆二元运算)和UnOp(⼀一元运算)。还有另⼀一 个⾮非抽象⼦子类Const(常量量)可以表达Integer和Boolean。Expression要有两个抽象⽅方法 evaluate()和toString()。 算术运算处理理的都是Integer,⽽而逻辑运算处理理的都是Boolean。因为Expression这两类都可 以处理理,所以请声明类型参数。然后给这四个类都添⼊入构造函数。 为BinOp(⼆二元运算)加上6个⼦子类,四个算术运算:+,-,*,/,和两个逻辑运算:∧ 与, ∨ 或。 为UnOp(⼀一元运算)加上两个⼦子类,⼀一个算术运算:-(既是⼆二元运算⼜又是⼀一元运算),和⼀一 个逻辑运算:¬ 否。尽可能让这8个⼦子类的构造函数简单。 evaluate()的⼯工作就是运算输⼊入的表达式然后输出结果。 如:(new MulOp(new Const(3), new AddOp(new Const(1), new Const(2)))).evaluate() 输出的结果应该是9 (new AndOp(new Const(true),new OrOp(new
Const(false), new Const(true)))).evaluate()
输出的结果则是true toString()的⼯工作是将算术表达式都正确地print出来 如:(new MulOp(new Const(3), new AddOp(new Const(1), new Const(2)))).toString() 结果是3*(1+2) 在⼀一个新的ATest类中的main中⽤用三个包含⾄至少5个Expression的object的表达式测试 evaluate和toString 结束时应有的⽂文件:Expression.java, Const.java, BinOp.java, UnOp.java, AddOp.java, MulOp.java, DivOp.java, SubOp.java,