package lab9;

public class Point {
	/*properties*/
	public double _abscisse,
		          _ordonnee;

	/*constructor*/
	protected Point(double abs, double ord){
		_abscisse = abs;
		_ordonnee = ord;
	}

	/*static factory*/
	private static Point _zero = new Point(0.0,0.0);
	public static Point fromZero(){
		return _zero;
	}

	public static Point fromCoord(double abs, double ord){
		return new Point(abs, ord);
	}

	/*getter*/
	public double distance(final Point p){
		return Math.sqrt(Math.pow(getAbs()-p.getAbs(), 2) + Math.pow(getOrd()-p.getOrd(),2));
	}

	public double getAbs(){
		return _abscisse;
	}

	public double getOrd(){
		return _ordonnee;
	}

	/*mutator*/
	public Point setAbs(double abs){
		return fromCoord(abs, getOrd());
	}

	public Point setOrd(double ord){
		return fromCoord(getAbs(), ord);
	}

	/*default method*/
	public String toString(){
		return "("+_abscisse+","+_ordonnee+")";
	}
}
