Objektorientering

Från Wikibooks
Hoppa till: navigering, sök
Books-aj.svg aj ashton 01.svg Denna bok är bara påbörjad och saknar fortfarande mycket. Det är öppet för vem som helst att bidra till denna bok, liksom alla andra böcker. Om du märker att något saknas eller är felaktigt, tveka inte att lägga till eller redigera. Du kan träna lite i sandlådan innan du gör mer avancerade ändringar.


Vad är Objektorienterad programmering?[redigera]

Objektorientering är ett sätt att beskriva för en dator hur den ska se på världen, hur data ska struktureras och hur metoder ska skapas och användas. Även deras relationer till varandra beskrivs.

Objektorientering ska försöka likna en människas sätt att se på saker, att man grupperar saker som hör ihop, man skapar objekt.

Objekt[redigera]

Ett traditionellt program består av funktioner och data. Ett objektorienterat program består av objekt. Ett objekt kan sedan innehålla data samt de funktioner (metoder) som ska kunna appliceras på data.

Datorspråk som nyttjar objektorientering är t. ex Smalltalk, C++, Python och Java.

Klasser[redigera]

En klass innehåller instansvariabler, konstruktor och metoder.Den är en beskrivning av olika objekt som har något gemensamt. Klassen kan betraktas som en mall för vilka data, metoder och meddelanden som ingår i ett objekt.

Konstruktor[redigera]

I konstruktor finns ritningen till objektet. Alla klasser innehåller en konstruktor men har man inte definierat hur den ska se ut skapas ett tomt objekt, alltså ingenting. Man måste tänka på att allt är objekt.

Instansvariabler[redigera]

dfhdh

Metoder[redigera]

Metoderna används inom klassen för att behandla data. Metoderna bör vara privata, dvs bara åtkomliga inom klassen för att förhindra att att data påverkas utifrån. Undantaget är get & set metoderna som används för att kommunicera med klassen.

Arv[redigera]

Genom arv kan den programmeraren som använder objektorienterad programmering konstruera nya klasser genom att låta dessa ärva egenskapen från någon annan basklass.


Exempel på användandet av klasser (Java)[redigera]

Om man ska göra till exempel ett kortspel så börjar man med att hitta dom objekt som används. Ett bra sätt är att leta substantiv.

  • Kortlek
  • Deltagare

En kortlek innehåller kort.

Kort[redigera]

Vi börjar med att skapa klassen Kort som ska innehålla:

  • instansvariabler (privata, tillgängliga bara inom klassen)
  • konstruktor som skapar kortet
  • metoder (verb som talar om vad som ska utföras)
Instansvariabler[redigera]

Först bestämmer vi vilka variabler som behövs:

private static final String[] färglista = {"Klöver", "Ruter", "Hjärter", "Spader"};
private int färgnr, värdenr;

Variablerna är privata, bara åtkomliga i kort-klassen

Konstruktor[redigera]

Konstruktorn skapar ett kort och vilket kort det blir måste man ange när konstruktorn anropas. Vi använder nr 0-3 för färgerna och 2-14 för värdet:

public Kort(int färg, int värde) {
 färgnr = färg;
 värdenr = värde;
}
Metoder[redigera]

Och så skapar vi några metoder. Det enda man behöver är visa-metoder (get) för nåt annat gör man inte med ett kort:

public int getFärgnr () {
 return färgnr;
}
public int getVärdenr () {
 return värdenr;
}
public String toString () {
 return färglista[färgnr] + " " + värdenr;
}

Enda sättet att veta vilket kort det är är genom att ha metoder som är public. Alltså åtkomliga från andra klasser.

Man kan även ha set-metoder (ändra) för att ändra på en instansvariabel
toString är en metod för att kunna visa kortet som en sträng.

Kortlek[redigera]

Man spelar inte kort med enstaka kort utan med en kortlek och därför skapar vi klassen Kortlek.

Instansvariabler[redigera]

Här behövs en lista innehållande alla korten och en räknare nr som håller koll på vilket kort som ska ges:

private List<Kort>  högen = new LinkedList<Kort>();
private int nr;

variablerna är privata, bara åtkomliga i kortleks-klassen

Konstruktor[redigera]

Konstruktorn skapar en kortlek:

public Kortlek() {
 for (int f=0;f<4;f++)
  for (int v=2;v<15;v++)
   högen.add(0,new Kort(f, v));
}
Metoder[redigera]

Med en kortlek kan man blanda eller ge kort,

public void blanda() {
 nr = 0;
 Collections.shuffle(högen);
}		
 
public Kort geKort(){
 return högen.get(nr++);
}

Nu är kortleken skapad. Återstår att skapa en klass spelare och en Main-metod som sköter spelet.

För att använda kortleken:

Kortlek Leken = new Kortlek();
Leken.blanda();
Kort MittKort = Leken.geKort();

Nu innehåller variabeln MittKort ett kort.

För att titta på kortet använder man nån av metoderna som som finns i kortklassen:

System.out.println(Mittkort.toString());