Klasse (datalogi)

en model af objektorienteret programmering
(Omdirigeret fra Klasse (programmering))
For alternative betydninger, se Klasse. (Se også artikler, som begynder med Klasse)

En klasse i datalogi anvendes til at beskrive en række ensartede objekter. Klassebegrebet bruges gennem hele udviklingsforløbet i såvel objektorienteret analyse og design som i objektorienteret programmering.

Inden for programmering er en klasse den skabelon som objekter kan dannes på. Klasser består af variabler og funktioner, der enten er private, beskyttede eller offentlige. En klasse kan i sig selv være abstrakt, normal eller en forlængelse af en anden klasse. Når man forlænger en klasse, refererer man til den forlængede klasse som "forældreklassen". Som udgangspunkt er det muligt at overskrive forældreklassens egenskaber og metoder. I nogle programmeringssprog kan egenskaber, metoder og hele klasser være defineret som afsluttende ("final"). Når en klasse er afsluttende kan den ikke blive forlænget af en ny klasse. Hvis en metode eller egenskab er afsluttende kan denne ikke overskrives som del af en forlængelse.

Klasser i objektorienteret analyse

redigér

I objektorienteret analyse kan man definere en klasse som beskrivelsen af en mængde af objekter med samme:

Attributterne bruges til at beskrive objekternes egenskaber, adfærdsmønsteret beskriver hvilke hændelser, der kan påvirke objekterne og/eller objekternes reaktioner på sådanne hændelser, og endelig beskriver strukturen forbindelserne mellem klasserne og objekterne tilhørende klassen.

Et eksempel: I en virksomhed vil man beskrive personalets tilknytning til forskellige projekter. Man vælger så at definere to klasser, "Ansat" og "Projekt". Klassen "Ansat" beskriver en række ensartede objekter svarende til de ansatte i virksomheden, f.eks. Jens Bang og Hanne Olsen. Tilsvarende beskriver "Projekt" måske projekter kaldet "Strategiudvikling" og "Brobygning".

For klassen "Ansat" kunne relevante attributter omfatte "Navn", "Telefonnummer" og "Jobfunktion". Adfærdsmønsteret kunne omfatte hændelser som "Ansættelse af medarbejder" (der svarer til oprettelse af et nyt "Ansat"-objekt), "Tilknyt til projekt" og "Skift telefonnummer". Endelig vil de to nævnte klasser naturligt være forbundet med hinanden via en associering kaldet "tilknyttet", og denne associering beskriver (en del af) klassernes struktur.

Klasserne i objektorienteret analyse stammer fra det genstandsområde, hvortil man er på vej til at konstruere et system. Man bør vælge navne på klasser, attributter, hændelser og klasseforbindelser, der forekommer i genstandsområdet, hvilket gør kommunikation med de kommende brugere af systemet nem.

I forhold til beskrivelsen af klasserne senere i forløbet (design og programmering) bør man holde sig til en overordnet beskrivelse af klasserne, så man ikke blokerer for fortolkninger og teknologiskbaserede valg for tidligt i forløbet.

Klasser i objektorienteret design

redigér

I objektorienteret design bruger man klasserne fra analysen og viderebearbejder dem. Desuden tilføjer man en række klasser. Den store forskel er, at man i design har lagt sig fast på en række tekniske og arkitekturmæssige beslutninger om det kommende system.

Definitionen på klassen holder fortsat, men nu vil vælge en mere detaljeret beskrivelse af klasserne, der har rod i genstandsområdet. Man beslutter sig f.eks. for, hvilke datatyper der skal anvendes til at repræsentere attributterne, og man lægger sig fast på, hvordan klassens objekter skal reagerer på input udefra i form af klassens metoder, der lige som attributterne beskrives detaljeret.

Som supplement til klasserne fra genstandsområdet får man ved den efterfølgende programmering brug for en række klasser af teknisk karakter. Det kan være persistensklasser, der sikrer, at informationer overlever brugen af systemet (typisk i form af at gemme data i en database), eller det kan være klasser, der bruges til at repræsentere systemets brugergrænseflade. Disse klasser beskrives på samme niveau som klasserne fra genstandsområdet.

Klasser i objektorienteret programmering

redigér
 
En klasse beskrevet i UML: Øverst klassens navn, dernæst klassens parametre/variable (markeret private vha. minus) og klassens metoder (markeret offentlige vha. plus)

I objektorienteret programmering bruges klasser som basisstruktur til at udvikle programmet. Programmet er udelukkende opbygget af objekter, der er variabler af klasser, og som kommunikerer indbyrdes ved at sende beskeder, som modtageren reagerer på ved at udføre tilsvarende metoder.

Den største forskel mellem klasser i analyse/design og programmering er, at en af de væsentligste strukturformer ikke understøttes af gængse programmeringssprog. Det drejer sig om associeringsstrukturen, der beskriver en sammenhæng mellem to objekter. Associeringer håndteres i stedet ved hjælp af specielle attributter, kaldet "linkattributter", der er referencer til objekterne fra den klasse, som associeringen beskriver. I eksemplet ovenfor kunne "Ansat"-klassen således blive suppleret med en "ProjektLink"-attribut. I et objekt fra klassen vil så placere links til alle de "Projekt"-attributter, som det aktuelle objekt arbejder på.

Generelt for klasser i objektorienteret programmering er en struktur bestående af to dele:

  • Klassehoved – (eng. class header) er det sted hvor man definerer selve klassen. Den består af nøgleordet class efterfulgt af klassenavnet – se figuren.
  • Klassekroppen – (eng. class body) omringes af krølleparenteser, hvor selve kroppen kan opdeles i 3 dele. Disse 3 dele kaldes også for klassens medlemmer – (eng. class members)
    • Attributter – (eng. attributes) – der også kaldes for klassens variable
    • Metoder – (eng. methods)
    • Nestede klasser – (eng. nested classes)

En konstruktør (eng. constructor) er en speciel metode i en klasse. Der findes altid en konstruktør for en klasse, og oprettelse af et objekt af klassen sker via denne specielle metode, der som standard er defineret som værende en tom metode og modtager ingen argumenter.