INTERFACE USENIX BRAND "v1"; EXCEPTION ZeroDivisor; TYPE Calculator = OBJECT COLLECTIBLE METHODS Clear (), CurrentValue () : REAL, Add (value : REAL), Subtract (value : REAL), Multiply (value : REAL), Divide (value : REAL) RAISES ZeroDivisor END END; TYPE Factory = OBJECT METHODS NewCalculator () : Calculator END; EXCEPTION NoValueInMemory; TYPE MemCalculator = OBJECT COLLECTIBLE SUPERTYPES Calculator END METHODS MemSet (value : REAL), MemGet () : REAL RAISES NoValueInMemory END, MemAdd () RAISES NoValueInMemory END, MemSubtract () RAISES NoValueInMemory END, MemMultiply () RAISES NoValueInMemory END, MemDivide () RAISES ZeroDivisor, NoValueInMemory END END; TYPE OpType = ENUMERATION Clear, Add, Subtract, Multiply, Divide, MemSet, MemAdd, MemSubtract, MemMultiply, MemDivide END; TYPE PossibleValue = OPTIONAL REAL; TYPE Operation = RECORD kind : OpType, val : PossibleValue END; TYPE CalcTape = SEQUENCE OF Operation; TYPE MemCalculatorWithTape = OBJECT COLLECTIBLE SUPERTYPES MemCalculator END METHODS GetTape () : CalcTape END; .