Java Reference
In-Depth Information
calc.setFormat( new RationalFormat());
assertEquals("3.0/4.0",calc.secondOperand());
calc.setBase( new BinaryBase());
assertEquals("11.0/100.0",calc.secondOperand());
calc.setBase( new HexBase());
assertEquals("3.0/4.0",calc.secondOperand());
} catch (FormatException e)
{ fail("Unexpected exception"); }
}
}
6.6
Extension
The reader can extend the application presented in this chapter in several
ways:
The use of only two operands in the calculator represents a limitation
when complex expressions are needed. A more general solution consists
of using a stack: each time an operand is added it is pushed onto the stack;
when an operation is selected the operands are popped from the stack and
the result is pushed back onto the stack.
The calculator described here is able to handle only constant numeric
values. A powerful extension consists of adding the capability of dealing
with variables. In this case the calculator must manage symbolic expres-
sions: expressions must be stored using an internal format (an abstract
syntax tree). In addition a table must contain the values of the variables
that are used to compute the value of symbolic expressions.
A graphical user interface can be developed to provide a user friendly
interaction with the calculator.
6.7
Assessment
Analysis techniques . We analysed the problem domain and identified the
main concepts; since they are correlated we abstracted concepts into more
general ones.
Modelling techniques . In this chapter we introduced use case diagrams
and collaboration diagrams. In addition we used inheritance to factorize
common characteristics into base classes.
Development approach . The development of the multi-format calculator
highlighted two important issues:
dynamic behaviour and polymorphism; and
exception handling.
Handling a dynamic behaviour is a common problem and the solution
adopted in this system is largely reusable. Actually it is an instance of the
 
Search WWH ::




Custom Search