Objektorienteret programmering

Objektorienteret programmering (forkortes OOP) er et programmeringsparadigme som er tæt koblet til objektorienteret analyse og design (OOAD).

Princippet

Idéen bag objektorienteret programmering er at opdele programkoden i klasser, der har hver sit velafgrænsede ansvarsområde i programmet. Ved en god afgrænsning kan en klasse genbruges i andre programmer. Man anvender en klasse ved at oprette én eller flere forekomster (instanser) af klassen, og en sådan forekomst kaldes et objekt.

Der findes tre grundprincipper i objektorienteret programmering:

1. Indkapsling
2. Nedarvning
3. Polymorfi

Indkapsling

Et objekt indkapsler nogle data og noget funktionalitet (adfærd). Objektet skal stille en grænseflade (eng. interface) til rådighed for andre objekter, der så gennem grænsefladen kan få objektet til at udføre en bestemt opgave. Andre dele af programmet skal kun have kendskab til, hvilken opgave objektet udfører, men ikke, hvordan opgaven udføres, eller hvordan eventuelle data repræsenteres i klassen.

Eksempelvis kan en klasse Begivenhed indeholde data om et tidspunkt. I grænsefladen defineres, hvordan andre objekter kan manipulere med dette tidspunkt, f.eks. flytte en given Begivenhed en uge frem, uden at kende til, hvordan tidspunktet er repræsenteret internt i klassen.

Nedarvning

Et objekt kan arve data og funktionalitet fra et andet objekt og udvide dem med ekstra data og funktionalitet. Eksempelvis kan en klasse Fødsel nedarve tidspunkt fra Begivenhed, men herudover udvides med oplysninger om person eller sted samt en grænseflade, der kan manipulere med disse ekstra data. Et objekt af typen Fødsel vil således samtidig være af typen Begivenhed. I dette tilfælde siges Begivenhed at være "superklasse" for Fødsel.

Et andet eksempel kan være et objekt af typen Køretøj med data som hjul, farve mm. og funktionalitet som kør og brems. Objekter af typen Bil eller Cykel kan begge være en nedarvning af Køretøj og arve dennes egenskaber.

Polymorfi

I objektorientering betyder polymorfi, at to klasser kan have samme grænseflade defineret via nedarvning, men udføre dem forskelligt. En Cykel kan arve funktionaliteten brems fra Køretøj, dvs. udføre opgaven, sådan som den er defineret i superklassen, men kan også have defineret sin egen måde at udføre opgaven på. Herved siges Bil at "overskrive" Køretøj mht. denne funktionalitet.

Designmønstre

En meget vigtig del af objektorientering er at forstå, at den problemstilling man står overfor er der sikkert andre, der har prøvet før.

Det er der andre, der har forstået som eksempelvis fire forfattere omtalt som "Firebanden", som skrev den første og mest berømte bog om design patterns.

Idéen i design patterns er, at man har fundet eksempler på design af objektorienteret kode, som er generelt og vedligeholdelsesvenligt. Disse eksempler er fundet og samlet i design patterns.

En person, som er meget aktiv i design pattern fællesskabet, er Martin Fowler. Han har samlet en anseelig mængde af design patterns.

Objektet i programmet

I et almindeligt objektorienteret sprog, som fx Java eller det dansk designede C#, er systemet opbygget af indbyrdes sammenhængende objekter. Der er altid et overordnet objekt som "instantierer" et andet objekt, dvs. laver sin egen kopi af et andet objekt.

Et objekt i Java er en instans af en klasse. En klasse er en skabelon, der definerer, hvordan et objekt ser ud, og består overordnet af to delelementer:

  1. Feltvariabler (instance fields)
  2. Metoder (methods)

Feltvariabler er pladser, der kan indeholde forskellige typer data. Metoder er programstumper, som kan modtage en værdi, manipulere med dele af programmet, levere en værdi tilbage osv. En metode er som regel en type algoritme.

Eksempel

Man kan forestille sig objektet Spillemaskine, der har metoden IndsætMønt, som tager imod objektet Mønt med variablen VÆRDI sat til 1 krone. De enkelte objekter er isoleret fra hinanden, men interagerer med hinanden.

Se også

Objektorienteret analyse og design

Aspektorienteret programmering