Hemsidan
Senaste nytt
Föreläsningar
Övningar
Laborationer
Instuderingsfrågor
Examination
Övriga resurser

Ansvarig:
Christer Carlsson

Uppdaterad:
2 Nov, 2015

CHALMERS - Data- och informationsteknik
Data- och informationsteknik


TDA550-Objektorienterad programvaruutveckling IT,fk




Informationen på dessa WWW-sidor hänför sig till
kurstillfället som går höstterminen 2015.



 

Laboration: Geometriska former

Inledning

Laborationen går ut på att strukturera och implementera ett paket, med namnet geometri, för att avbilda fyllda geometriska former, som kan användas vid utritning i en JFrame eller en JApplet i Java.

Modellen är förenklad för att inte laborationen skall bli alltför omfattande. Det viktigaste med laborationen är strukturering och de Java-begrepp som behövs. Den givna modellen nedan skall dock implementeras komplett.

De geometriska former som skall ingå och deras namn i bokstavsordning är:

  • Circle       som anges av sin diameter.

  • Line          som anges av sin start- och slutpunkt.

  • Oval          som anges av sin bredd och höjd.

  • Point         som anges av sin x- och y-koordinat.

  • Rectangle   som anges av sin bredd och höjd.

  • Square       som anges av sin sidlängd.

Gemensamt för alla former är:

  • De har en position, vilken definieras av positionen för det övre vänstra hörnet av den minsta rektangel som täcker in hela formen så snävt som möjligt.

  • De har en färg, angiven genom dess RGB-värde som ett objekt av klassen java.awt.Color.

  • De har en area. Arean för ett objekt av typen Point eller typen Line är 0.

  • De har en omkrets. Omkretsen för ett objekt av typen Point är 0 och omkretsen för ett objekt av typen Line är dess längd.

  • De kan sinsemellan jämföras på storlek genom att implementera interfacet Comparable. Storleken avgörs i första hand avgörs på area och i andra hand på dess omkrets.

  • De kan sinsemellan jämföras på likhet genom att implementera att överskugga metoden equals(Object o) som ärvs från klassen Object. För att två objekt skall betraktas som lika skall typen och samtliga attribut, förutom positionerna, för de två objekten vara lika.

  • De skall överskugga metoden hashCode() som ärvs från klassen Object på ett korrekt och effektivt sätt.

Notera

  • Alla positioner och mått ges i pixlar och vid behov avrundas till heltal.
  • Ritytan, i vilken objekten kan ritas ut, har origo i översta vänstra hörnet, x-axeln går åt höger och y-axeln går nedåt.

Ovan sagda leder fram till följande gränssnitt (fullständig API, java-kod):

    import java.awt.*;
    public interface GeometricalForm extends Comparable<GeometricalForm> {
        public void fill(Graphics g);
        public Color getColor();
        public int getArea();
        public int getHeight();
        public int getPerimeter();
        public int getWidth();
        public int getX();
        public int getY();
        public void move(int dx, int dy) throws IllegalPositionException;
        public void place(int x, int y) throws IllegalPositionException;
    }

Varje typ av GeometricalForm skall tillhandahålla två överlagrade konstruktorer, en där positionen för objektet anges med dess koordinater och en där positionen anges av position för ett given objekt av typen GeometricalForm. De olika geometriska formerna skall således ha följande konstruktorer :

   public Circle(int x, int y, int diameter, Color c) throws IllegalPositionException
   public Circle(GeometricalForm f, int diameter, Color c)

public Line(int x1, int y1, int x2, int y2, Color c) throws IllegalPositionException public Line(GeometricalForm f1, GeometricalForm f2, Color c)

public Oval(int x, int y, int width, int height, Color c) throws IllegalPositionException public Oval(GeometricalForm f, int width, int height, Color c)

public Point(int x, int y, Color c) throws IllegalPositionException public Point(GeometricalForm f, Color c)

public Rectangle(int x, int y, int width, int height, Color c) throws IllegalPositionException public Rectangle(GeometricalForm f, int width, int height, Color c)

public Square(int x, int y, int side, Color c) throws IllegalPositionException public Square(GeometricalForm f, int side, Color c)

Slutligen skall vi vid uppkomst av illegala positioner använda oss av klassen IllegalPositionException (API, java-kod), som ni definierar i ert paket. Ni får inte modifiera den givna definitionen.

Uppgift

Uppgiften delas upp i två delar, en specifikationsdel och en implementeringsdel.

  1. Definiera alla klasser, variabler, konstruerar- och metodhuvuden i paketet och lämna in dem via Fire för godkännande. Välj också lämpliga synlighetsgrader. Vidare skall alla public- och eventuella protected-deklarerade enheter ha javadoc-kommentarer. Tips: ta reda på hur taggen @inheritDoc fungerar i javadoc och hur @Override fungerar i Eclipse Gör detta innan du börjar implementera metoderna!

    Obs: Du skall inte ta bort pakettillhörigheten för denna laboration, utan paketet skall heta:

    package geometri;

  2. Implementera paketet fullständigt och testkör via programmet MoveToUpperLeftCorner (java-kod, API), som du kopierar till lämplig plats.
    Du kan se hur det skall fungera genom att hämta filen moveToUpperClassFiles.zip, göra unzip på filen och sedan exekvera via java MoveToUpperLeftCorner.

    Den färdiga koden lämnas in via Fire.

Tips:

  • Använd Javadoc för att dokumentera koden.

  • Undvik kodduplicering.

  • Implementera klassen Line med hjälp av höjden och bredden av den omslutande rektangeln, samt linjens lutning (uppåt eller nedåt).