4.2. Punkter (klassen Point)

Det første objekt, vi vil arbejde med, er Javas Point-objekt, der repræsenterer et punkt. I Java indeholder et punkt to heltalsvariable, nemlig en x- og en y-koordinat. Vi vil senere bruge Point-klassen, når vi kommer til programmering af grafik.

4.2.1. Erklæring og oprettelse

For at kunne arbejde med et objekt har man brug for en variabel, der refererer til objektet. En variabel af typen Point (der refererer til et punkt) erklæres ved at skrive

  Point p;

Figur 4-3. Java p refererer til et punktobjekt.Objektet har x=0 og y=0

Ligesom med de simple typer skriver man typen (Point) efterfulgt af variabelnavnet. Nu har vi defineret, at p er en variabel til objekter af typen Point, og vi kan lave et nyt Point-objekt, som vi sætter p til at pege på:

  p = new Point();

Vi skriver altså new og klassens navn (Point) efterfulgt af parenteser med startværdier for objektet. Her giver vi ingen startværdier, og parentesen er derfor tom.

Et objekt oprettes med new

Når et objekt oprettes, sørger det for dets datas startværdi

I dette tilfælde vil punktet starte med at have koordinaterne (0,0), og situationen er som vist på figuren til højre: p peger hen på et objekt, der har en x- og y-variabel, som begge er sat til 0.

Man kan sige, at hver gang vi anvender new-operatoren, bruger vi klassen som en slags støbeform til at skabe et nyt objekt med.

4.2.2. Objektvariable

Vi kan undersøge objektet p's variabler. Her erklærer vi en anden variabel, a,

    int a;

... og gemmer p's x-koordinat i variablen:

    a = p.x;

p's x-koordinat får man fat i ved at skrive p punktum x. Vi kan derefter udskrive a:

    System.out.println("a: "+a);

Man kan også udskrive koordinaterne direkte uden at bruge a som mellemvariabel:

    System.out.println("x-koordinat: "+p.x);
    System.out.println("y-koordinat: "+p.y);

Figur 4-4. Efter tildeling af p.x og p.y

Vi kan også ændre p's koordinater:

    p.x = 110;
    p.y = 210;

Variablerne x og y i Point-objektet kan behandles fuldstændig som andre variabler af typen int, når vi bare husker at skrive "p." foran. F.eks. kan man tælle x-koordinaten op med 5:

      p.x = p.x + 5;

x og y kaldes objektvariabler, fordi de tilhører objektet p.

4.2.3. Metodekald

I stedet for at ændre objektet udefra, kan vi bede objektet selv udføre ændringen. Metoden move() flytter punktet til et bestemt koordinatsæt, dvs. den ændrer x- og y-koordinaten.

Figur 4-5. Efter kald af move(200,300)

    p.move(200,300);

Man siger, at man foretager et metodekald på objektet som p refererer til, og man skriver: p punktum metodenavn parenteser.

Efter metodekaldet til move() har x- og y-koordinaterne ændret sig i det objekt, som p peger på.

Et objekt kan indeholde metoder

Et metodekald på et objekt kan ændre objektets variabler

Her er Point-klassen illustreret i UML-notationen:

Figur 4-6. Java

Herunder er nogle af de metoder, som punktobjekter forstår (en oversigt over klassen kan findes i appendiks, Afsnit 4.7.1).

Nogle af Point-klassens metoder

move(int x, int y)Sætter punktets koordinater

translate(int x, int y)Rykker punktets koordinater relativt i forhold til, hvor det er

Først står navnet på metoden med fed, f.eks.: move.

Derefter står parametrene adskilt af komma, f.eks.: (int x, int y).

For hver parameter er angivet en type og et navn.

Typen angiver, hvilke værdier man kan kalde metoden med, og bruges til at kontrollere, at man har kaldt den med en værdi af den rigtige type.

Navnet i beskrivelsen bruges kun til at minde om, hvordan metoden bruger parameteren.

Bemærk at kaldet derfor ser anderledes ud end beskrivelsen:

p.move(200,300);          // korrekt
p.move(int 200, int 300); // sprogfejl: parametertyper angivet ved kald.
p.move(x=200, y=300);     // sprogfejl: parameternavne angivet ved kald.

I parenteserne i metodekaldet giver man oplysninger til objektet om, hvordan man vil have metoden udført

Oplysningerne kaldes parametre (eller argumenter)

I kaldet til move() ovenfor gav vi oplysningerne 200 og 300 som parametre.

4.2.4. Eksempel

Her er et eksempel på tingene, vi har vist ovenfor:

import java.awt.*; // Point-klassen skal importeres fra pakken java.awt

public class Punkt
{
  public static void main(String[] args) 
  {
    Point p;
    p = new Point();

    int a;
    a = p.x;

    System.out.println("a: "+a);

    System.out.println("x-koordinat: "+p.x);
    System.out.println("y-koordinat: "+p.y);

    p.x = 110;
    p.y = 210;

    System.out.println("x-koordinat: "+p.x);
    System.out.println("y-koordinat: "+p.y);

    p.move(200,300);

    System.out.println("x-koordinat: "+p.x);
    System.out.println("y-koordinat: "+p.y);

    p.x = p.x + 5;

    System.out.println("x-koordinat: "+p.x);
    System.out.println("y-koordinat: "+p.y);

    p.translate(-10,20);

    System.out.println("x-koordinat: "+p.x);
    System.out.println("y-koordinat: "+p.y);
  }
}

Resultatet bliver:

a: 0
x-koordinat: 0
y-koordinat: 0
x-koordinat: 110
y-koordinat: 210
x-koordinat: 200
y-koordinat: 300
x-koordinat: 205
y-koordinat: 300
x-koordinat: 195
y-koordinat: 320

4.2.5. Import af standardklasser

Øverst i kildeteksten "importerer" vi alle klasser i pakken java.awt:

import java.awt.*;

Dette fortæller oversætteren, hvor den skal lede efter definitionen af klasserne, vi bruger i programmet. I dette tilfælde er det for, at oversætteren skal kende til Point-klassen (der findes i pakken java.awt).

En pakke er en samling klasser med beslægtede funktioner. AWT står for "Abstract Window Toolkit", og java.awt indeholder forskellige nyttige klasser til at tegne grafik på skærmen, herunder klasser til at repræsentere punkter og rektangler.

Lige nu er det nok at vide, at de fleste klasser skal importeres, før de kan bruges (hvis du er meget nysgerrig, kan du læse den første del af kapitlet om pakker allerede nu).