Object-Oriented Programming
Præsenter som slidesLæringsmål
- Kan forklare forskellen på en klasse og et objekt
- Kan oprette klasser med egenskaber (properties) og metoder
- Kan instantiere objekter med new og object initializer
- Kan bruge objekters metoder og egenskaber i programmet
Klasser og objekter
Objektorienteret programmering (OOP) organiserer kode omkring objekter — enheder der kombinerer data og adfærd. Når vi udvikler i C#, opretter vi klasser som skabeloner og objekter som konkrete instanser.
En klasse definerer:
- Egenskaber — tilstanden eller dataene (fx mærke, alder, farve)
- Metoder — handlingerne objektet kan udføre (fx start motor, sæt dig)
Klasse = blueprint (skabelon). Objekt = den faktiske instans i hukommelsen med egne værdier.
Eksempel: klassen Car
Klassen Car har tre egenskaber (Brand, Model, Year) og to metoder. Her opretter vi et objekt med new, sætter værdier og kalder metoderne:
Object initializer
Med object initializer sætter du egenskaber direkte ved oprettelse — kortere end at tildele hver property på separate linjer:
Hvert objekt kan have forskellige værdier for egenskaberne, men de deler samme metoder og adfærd fra klassen.
Flere objekter — samme klasse
Én klasse, to objekter med forskellig data:
Det samme princip med Person — én skabelon, mange instanser:
Eksempel: klassen Dog
Klasser kan modellere alt — biler, personer, dyr. Her opretter vi hunden bobby og bruger både egenskaber og metoder:
Klassen er skabelonen — bobby er ét konkret hund-objekt. Du kan oprette flere Dog-objekter med andre værdier.
Properties og felter
I eksemplerne ovenfor bruger vi felter (public string Brand) — det er fint til læring. I moderne C# foretrækkes properties med { get; set; }:
private set betyder, at kun klassen selv kan ændre Speed — det hedder indkapsling (encapsulation).
Metoder og data hører sammen
Metoder i en klasse definerer, hvad objekter kan gøre. Data og logik bør høre sammen:
Balance kan ikke ændres direkte udefra — kun via Deposit og Withdraw.
Instantiere og gemme objekter
Flere objekter i en liste — hvert new allokerer et nyt objekt i hukommelsen:
Objekter er reference-typer — variablen peger på objektet, ikke en kopi.
Git-trin
- Branch:
main - Commit:
feat: oop klasser og objekter
OOP-principper — kort overblik
Tre centrale principper (du uddyber dem senere):
Indkapsling — skjul intern data, eksponer kun det nødvendige via properties og metoder.
Arv — en klasse kan arve fra en anden og udvide den.
Polymorfi — objekter af forskellige klasser kan behandles ens via fælles interface.
I GF2 fokuserer vi på klasser, objekter og indkapsling. Arv og polymorfi bygger ovenpå dette fundament.
Videoer
Se det i praksis
Object-oriented Programming (OOP) [Pt 18] | C# for Beginners
OOP with derived or abstract classes, overrides | IEnumerable [Pt 19] | C# for Beginners
Opsummering
- En klasse er en skabelon med egenskaber og metoder
- Et objekt oprettes med
newog har egne værdier - Object initializer
{ Brand = "Ford", ... }sætter egenskaber ved oprettelse - Flere objekter kan dele samme klasse med forskellig data
- Properties og indkapsling giver bedre kontrol end offentlige felter alene
Test din viden
Spørgsmål 1
Hvad er forskellen på en klasse og et objekt?
En klasse (fx Car) definerer struktur og adfærd. Et objekt oprettes med new Car() og har egne værdier for egenskaberne.
Spørgsmål 2
Hvordan opretter du et nyt objekt i C#?
Nøgleordet new allokerer et nyt objekt i hukommelsen. Uden new får du compile-fejl — C# kræver eksplicit instansiering.
Spørgsmål 3
Hvad er en object initializer?
Med object initializer kan du sætte properties direkte: new Car { Brand = "Ford", Year = 1961 } — kortere end at tildele hver property på separate linjer.
Spørgsmål 4
Hvad er indkapsling (encapsulation)?
Fx public double Balance { get; private set; } — Balance kan læses udefra, men kun klassens egne metoder (Deposit, Withdraw) kan ændre den.
Spørgsmål 5
Kan to objekter af samme klasse have forskellige værdier for egenskaberne?
car1 og car2 kan have forskellig Brand og Year, men begge kan kalde StartEngine() — samme adfærd, forskellig tilstand.
Spørgsmål 6
Hvad er forskellen på et felt og en property?
Offentlige felter (public string Brand) er fine til læring. Properties giver bedre kontrol — fx private set — og er standard i professionel C#.
Spørgsmål 7
Objekter i C# er typisk reference-typer. Hvad betyder det?
Når du skriver var p1 = new Person { ... }, peger p1 på objektet i hukommelsen. Flere variabler kan pege på samme objekt — det er grundlaget for reference-semantik.