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
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:
java.awt.Color
.
Point
eller typen Line
är 0.
Point
är 0 och omkretsen för ett objekt av typen Line
är dess längd.
Comparable
. Storleken avgörs i första hand avgörs på area och i andra hand på dess omkrets.
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.
hashCode()
som ärvs från klassen Object
på ett korrekt och effektivt sätt.
Notera
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.
Uppgiften delas upp i två delar: en specifikationsdel och en implementeringsdel.
public
- och eventuella protected
-deklarerade enheter ha javadoc-kommentarer. Tips: ta reda på hur taggen @inheritDoc
fungerar i javadoc och hur @Override
fungerar i IntelliJ 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;
MoveToUpperLeftCorner
(java-kod, API), som du kopierar till lämplig plats.
Den färdiga koden redovisas muntligt.
Line
med hjälp av höjden och bredden av den omslutande rektangeln, samt linjens lutning (uppåt eller nedåt)
(Original lab av Christer Carlsson)