1) Si definisca una classe Point che descrive un punto nel piano cartesiano (quindi una coppia di coordinate x,y). Si definiscano, testandoli via via, i seguenti costruttori e metodi: a) un metodo di classe che restituisce la costante "origine"; b) un costruttore a partire da due coordinate; c) un costruttore che fa la copia di un altro punto; d) due metodi che spostano il punto rispettivamente orizzontalmente e verticalmente di una certa distanza; e) un metodo che calcola la distanza rispetto ad un altro punto; f) un metodo che calcola la distanza dall'origine; g) un metodo che stabilisce se il punto e' piu' vicino o no all'origine rispetto ad un altro punto; h) un metodo che stabilisce se il punto e' uguale (come coordinate) ad un altro punto. I punti 2 e 3 sotto sono indipendenti. 2) Si definisca una class OrientedPoint che estende la precedente. Un punto orientato e' un punto che in piu' ha una direzione corrente d (che assume valori N,E,S,W). Supponiamo inoltre ci sia una direzione "di default" (initD) dei punti definita come campo di classe, inizialmente N. Si definiscano, testandoli via via, i seguenti costruttori e metodi: a) un metodo di classe che restituisce la costante "origine con direzione initD"; b) un costruttore a partire da due coordinate e una direzione; un costruttore a partire da due coordinate; un costruttore a partire da un punto; si aggiunga inoltre a Point un costruttore a partire da un punto orientato; c) un costruttore che fa la copia di un altro punto orientato; d) un metodo che sposta il punto di una certa distanza nella direzione corrente ; e) un metodo che "gira" il punto in senso orario; f) un metodo di classe che "gira" la direzione di default in senso orario; g) un metodo che stabilisce se il punto e' uguale ad un altro punto orientato. 3) Si definisca una classe Rectangle che usa la classe Point. Un rettangolo e' individuato da una coppia di punti (lb = left bottom, angolo in basso a sinistra, rt = right top, vertice in alto a destra). Si definiscano, testandoli via via, i seguenti costruttori e metodi: a) un costruttore a partire da due punti; b) un costruttore che fa la copia (deep!) di un altro rettangolo; un costruttore a partire da un punto, preso come right top con left bottom l'origine; c) due metodi che spostano il rettangolo rispettivamente orizzontalmente e verticalmente di una certa distanza; d) due metodi che allargano-restringono il rettangolo rispettivamente orizzontalmente e verticalmente di una certa distanza, tenendo fisso left bottom; e) un metodo che calcola la distanza dall'origine del centro; f) un metodo che calcola l'area; g) un metodo che stabilisce se il rettangolo e' uguale ad un altro rettangolo.