
/**
Eine Figur "hat einen" Punkt als Bezugspunkt.  
Die Figur wird textuell ausgegeben.
*/
/*------------------------------------------------------------------*/

abstract class Figur
{  
   Punkt bezugspunkt;
   String name;

   /**
   *  Konstruktor mit vollem Parametersatz.
   *  @param n Name der Figur
   *  @param x x-Koordinate des Bezugspunktes
   *  @param y y-Koordinate des Bezugspunktes
   */
   Figur(String n, int x, int y)
   {
      bezugspunkt = new Punkt(x, y);
      name = n;
   }

   /**
   *  Default-Konstruktor
   */
   Figur()
   {  this("nichts", 0, 0);  }
   
   /**
   * Liefere den Namen der Figur zurueck.
   */
   String getName()
   {
      return name;
   } 

   /**
   * Setze den Namen der Figur auf n.
   */
   void setName(String n)
   {
      name = n;
   }

   /**
   * Liefere den Bezugspunkt der Figur zurueck.
   */
   Punkt getBezugspunkt()
   {
      return bezugspunkt;
   } 

   /**
   * Setze den Bezugspunkt der Figur auf (x, y).
   */
   void setBezugspunkt(int x, int y)
   {
      bezugspunkt.x = x;
      bezugspunkt.y = y;
   }


   /**
   * abstrakte Methoden, die erst in den Unterklassen 
   * definiert werden koennen
   */
   abstract double flaeche();
   abstract double umfang();


   /**
   *  textuelle Ausgabe der Figur
   */
   void ausgeben()
   {
      System.out.print("Figur: " + name + ", Bezugspunkt: ");
      bezugspunkt.ausgeben();
   }

   public String toString()
   {
      return "Figur: " + name + ", Bezugspunkt: " + bezugspunkt;
   }
   
   /**
   *  Figur verschieben; es wird der Bezugspunkt verschoben.
   *  @param dx Verschiebung in x-Richtung
   *  @param dy Verschiebung in y-Richtung
   */
   void verschieben(int dx, int dy)
   {  bezugspunkt.verschieben(dx, dy);  }
}

