Spring til indhold
Academi.dk

Objektorienteret programmering

Objektorienteret programmering

Let øvet DA↔EN-ordliste

Objektorienteret programmering er at samle data og de funktioner, der hører til dem, i objekter i stedet for at holde dem adskilt. En klasse er tegningen, og objekterne er de konkrete eksemplarer, du laver ud fra den. Formålet er kode, der kan ændres uden at alt andet går i stykker.

Forudsætter, at du har set objekter , funktioner i javascript .

Problemet, det løser

I første semester skrev du funktioner, der tog data ind og gav data ud. Det fungerer fint, indtil programmet bliver stort. Så opstår to problemer:

  • Dataene og de funktioner, der hører til dem, ligger langt fra hinanden. Ændrer du formen på dataene, skal du finde alle de steder, der rører ved dem.
  • Alle kan ændre alt. Der er ingen, der siger, at en saldo ikke må blive negativ.

Objektorienteret programmering løser begge dele med den samme idé: læg dataene og de funktioner, der må røre dem, sammen i én ting.

Eksempel
class Konto {
constructor(ejer, saldo) {
  this.ejer = ejer;
  this.saldo = saldo;
}

indsaet(beloeb) {
  this.saldo = this.saldo + beloeb;
  return this.saldo;
}
}

const min = new Konto("Ida", 1000);
console.log(min.indsaet(500));
console.log(min.ejer);

Output

Tryk på “Kør koden”.

Klasse og objekt er ikke det samme

Det er den skelnen, der skal sidde:

  • Klassen er tegningen. Den beskriver, hvilke felter og metoder der findes. Der er kun én af den, og den optager ingen data.
  • Objektet er et konkret eksemplar lavet ud fra tegningen med new. Der kan være tusind af dem, og de har hver deres værdier.

Et hus mod en byggetegning. En form mod en kage. Klassen Konto er ikke en konto; min er en konto.

De fire begreber

Til eksamen bliver du bedt om at forklare dem. Her er de kort, hver med sin egen side:

Indkapsling: objektet holder sine data for sig selv og udleverer kun adgang gennem metoder. Det er sådan, du kan garantere, at saldoen aldrig bliver negativ. Se indkapsling.

Arv: en klasse kan bygge videre på en anden og få alle dens felter og metoder med. Se arv.

Polymorfi: to klasser, der arver fra den samme, kan svare forskelligt på det samme kald. Kalder du beskriv() på en liste af forskellige objekter, gør hvert af dem sit.

Abstraktion: du udstiller det, andre skal bruge, og skjuler hvordan det virker. Den, der bruger din Konto, behøver ikke vide, hvordan saldoen gemmes.

Eksempel
class Dyr {
constructor(navn) {
  this.navn = navn;
}
lyd() {
  return "...";
}
beskriv() {
  return this.navn + " siger " + this.lyd();
}
}

class Hund extends Dyr {
lyd() {
  return "vov";
}
}

class Ko extends Dyr {
lyd() {
  return "muh";
}
}

const dyr = [new Hund("Fido"), new Ko("Rosa")];

for (const d of dyr) {
console.log(d.beskriv());
}

Output

Tryk på “Kør koden”.

Det er polymorfi i praksis: beskriv() er skrevet ét sted, men svarer forskelligt afhængigt af, hvilken slags dyr det er.

Hvad du bliver spurgt om

  • Forskellen på en klasse og et objekt.
  • Hvad this peger på (det objekt, metoden blev kaldt på).
  • Et eksempel på arv fra dit eget projekt.
  • Hvorfor indkapsling er en fordel. Svar med et konkret eksempel på en regel, der ellers kunne brydes.

Kort opsamling

  • Data og de funktioner, der hører til dem, samles i objekter.
  • Klassen er tegningen, objektet er eksemplaret.
  • Indkapsling, arv, polymorfi, abstraktion.
  • Vælg det, når der er flere ting af samme slags med hver deres tilstand.

Læs videre

Senest gennemgået .