class Op	{		private static final char ADD = '+';	private static final char DIV = '/';	private static final char MUL = '*';	private static final char SUB = '-';	private static final char NEG = '±';		private char op;		private Op( char op )		{ this.op = op; }			private char op()		{ return this.op; }			String asString()		{		char[] str = { op }; 		return new String( str );		}				static Op Add()		{ return new Op( ADD ); }			static Op Divide()		{ return new Op( DIV ); }			static Op Multiply()		{ return new Op( MUL ); }			static Op Negate()		{ return new Op( NEG); }			static Op Subtract()		{ return new Op( SUB ); }			boolean isAddition()		{ return op() == ADD; }					boolean isDivision()		{ return op() == DIV; }			boolean isMultiplication()		{ return op() == MUL; }		boolean isNegation()		{ return op() == NEG; }					boolean isSubtraction()		{ return op() == SUB; }				boolean isBinaryOp()		{ return ( ! isUnaryOp() ); }		boolean isUnaryOp()		{ return isNegation(); }		Double perform( Double a )		{		double temp = a.doubleValue();		double result = Double.NaN;				if ( isNegation() )		 	{ result = temp * -1d; };		return new Double( result );		}		Double perform( Double a, Double b )		{		double temp1 = a.doubleValue();		double temp2 = b.doubleValue();		double result = Double.NaN;				if ( isAddition() )		 	{ result = temp1 + temp2; }		else if ( isSubtraction() )			{ result = temp1 - temp2; }		else if ( isMultiplication() )			{ result = temp1 * temp2; }		else if ( isDivision() )			{ result = temp1 / temp2; };					return new Double( result );		}			}		