OOP i Java

Tags:    java
Skrevet af Bruger #173 @ 17.06.2001
Lidt om OOP 1 - Klasser

I denne artikel-serie vil jeg forklare noget om det objekt-orienterede ved Java (OOP). Det kan være svært at forstå i starten, men det er meget vigtigt at lære, da man ikke kan programmere i Java uden at støde på klasser og alle de andre objekt-orienterede ting. Der er mange ting at lære om OOP i Java, så disse artikler skulle kunne hjælpe dig lidt. Jeg regner med at du kender til de mest grundlæggende ting om Java. Det er nødvendigt, for at kunne forstå artiklerne.

Hvad er klasser og hvad skal man bruge dem til?

Forestil dig et hus. Det har vinduer og døre. Disse vinduer er elementer i det hus, ligesom dørene. I Java-sprog kan vi sige at hele huset er en klasse, mens vinduerne og dørene er variabler af huset. Ligesom huset kan have forskellige elementer som vinduerne, kan det også have metoder til at gøre specifikke ting, ofte med variablerne af klassen. Det kan være at en person, der bor i et højhus, vil slukke for lyset. Det kan gøres ved hjælp af en metode. Så bliver lyset slukket i det pågældende hus. Højhuset er da et objekt af klassen Hus, og har dermed et sæt af alle variabler og metoder i huset. Her er et billede, som viser sammenhængen mellem klassen Hus og dens objekter.



Det viser at objekter af klassen Hus automatisk får tildelt variablerne fra huset. Hvert objekt er en invidiuel sag, som kan ændres hver for sig. Hvordan det kan gøres i praksis, vil vi se på nu.
class Hus {
  int antalVinduer = 2; 
  int antalDore = 1;
}
Når et objekt laves af denne klasse får objektets 'antalVinduer' automatisk værdien 2, og det samme sker med 'antalDore'. Nu vil vi udvide eksemplet, så det kan kompileres.
class Hus {
  int antalVinduer = 2;
  int antalDore = 1;
  void bygVindue() {
    antalVinduer++;
  }
}

public class Huset {
  public static void main(String[] args) {
    Hus hojHus = new Hus(); // laver et objekt af hus
    Hus villa = new Hus();
    System.out.println("Antal vinduer i hojHus: " + rum1.antalVinduer);
    System.out.println("Antal vinduer i villa: " + rum2.antalVinduer);
    rum1.bygVindue();
    System.out.println("Antal vinduer i hojHus: " + rum1.antalVinduer);
  }
}
hojHus.antalVinduer er af typen 'int' så den værdi bliver konverteret til String for at kunne vises. Kaldet til metoden bygVindue() forhøjer 'antalVinduer' med én.

Definition af en klasse

  • Variabler: variabler, som du kan arbejde med i objekterne
  • Metoder: funktioner, som du bruger til at gøre noget med objekterne af klassen. De kan meget vel ændre variablerne af klassen
Variablerne af Hus i eksemplet bruges inviduelt af objekterne. Men hvad hvis man vil have variabler, som bruges af selve klassen? Så skal man bruge ordet 'static' foran variablen. Der er kun én kopi af de variabler der er 'static', så når en sådan variabel ændres fra et objekt, medfører det at alle objekter får den nye værdi. En variabel der er 'static' er klassens variabel. Eksempel:
class Hus {
  int antalVinduer = 2;
  int antalDore = 1;
  static int totalAntalVinduer = 3;
  void bygVindue() {
    antalVinduer++;
  }
}
Man kunne vælge at gøre sådan, at hver gang et nyt objekt af klassen Hus blev lavet blev 'totalAntalVinduer' plusset det antal vinduer det nye objekt havde. Vi kan nu tilføje en linje til eksemplet fra før.
System.out.println("Total antal vinduer i huset: " + Hus.totalAntalVinduer);
Det fortæller hvor mange vindurer selve huset har. Dog har objekter af klassen også adgang til variablen. Man kunne derfor skrive:
System.out.println("Total antal vinduer i huset: " + villa.totalAntalVinduer);
Det viser den samme værdi. På samme måde kan man også have metoder som er lavet 'static'. Vi kan tilføje en ekstra metode til eksemplet:
static void infoOmHus() {
  System.out.println("info...");
}
Man kan kalde denne metode uden at lave et objekt af den klasse, der har metoden. Derfor kan vi gøre dette:
public static void main(String[] args) {
  Hus.infoOmHus();    // skriver information om Hus.
}
Igen kan objekterne af Hus også kalde metoden; det fungerer på samme måde som med de statiske variabler. Constructors Hver gang du laver et nyt objekt af en klasse bliver klassens 'constructor' kaldet. Det er en form for metode. Når man laver et nyt objekt af en klasse kan det således ud:
Hus villa = new Hus();
En variabel af typen Hus bliver initialiseret, og constructoren for Hus bliver kaldet. Hvis du ikke selv har lavet en constructor laver compileren en. Vi vil nu lave en constructor for klassen Hus:
Hus(int antalVinduer) {
  this.antalVinduer = antalVinduer;
}
Constructorens navn er altid det samme som klassens navn. Constructoren tager en parameter af typen int. Det pågældende objekts variabel 'antalVinduer' bliver sat til værdien af parameteren 'antalVinduer'. Hvis vi for eksempel vil lave et objekt af klassen Hus med 7 vinduer skriver vi:
Hus raekkeHus = new Hus(7);
En vigtig ting at nævne er at constructorer ikke kan returnere nogen værdi. Jeg håber du nu har fået en lille idé om hvad klasser er og hvordan det kan bruges. Det bruges meget, og der er en masse flere ting der kunne skrives om, som jeg ikke har nævnt. Det kommer i de næste artikler.


Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (1)

User
Bruger #11924 @ 03.06.07 13:16
Du har lavet en fejl i den kode, som du siger kan compile:
System.out.println("Antal vinduer i hojHus: " +
Fold kodeboks ind/udKode 

Skal der ikke stå villa i stedet for rum1 og hojHus i stedet for rum2? det her får jeg til at compile: (copy-paste ind i koden)
Fold kodeboks ind/udKode 


... det virker for mig..
Du skal være logget ind for at skrive en kommentar.
t