Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdFien van der Wal Laatst gewijzigd meer dan 6 jaar geleden
1
Gameprogrammeren: Abstracte klassen
Arjan Egges Paul Bergervoet Wouter van Toll
2
Terugblik: Overerving
class Painter : Game Painter is een subklasse van Game Game is de superklasse van Painter Elk Painter-object is tevens een Game-object Een Painter-object is een bijzonder geval van een Game-object
3
Terugblik: Hiërarchie-ontwerp
class Voertuig : Vervoermiddel class Boot : Vervoermiddel Voertuig Vervoer- middel “is een” Boot
4
Terugblik: Virtual - Override
A a = new B (); a . m( ); dit mag, als class B : A deze methode komt uit klasse: B als m virtual in A en override in B A anders
5
Abstracte klasse Nieuw concept: abstract class
Klasse waarvan je mag overerven, maar die je nooit mag/wilt instantiëren ThreeColorGameObject is een goede kandidaat Game bevat altijd PaintCan, Ball, etc. en nooit een “gewone” ThreeColorGameObject TetrisBlock ook Game bevat altijd een specifieke soorten blokken Verdere overerving-concepten blijven hetzelfde!
6
Geeft aan dat je nooit een gewone Animal mag maken
Voorbeeld abstract class Animal { // code shared by all animals } class Cat : Animal { // code that is specific for cats Geeft aan dat je nooit een gewone Animal mag maken Wat mag er wel/niet? Cat a = new Cat(); // mag gewoon Animal b = new Cat(); // mag ook nog steeds Animal c = new Animal(); // mag niet, want Animal is abstract! List<Animal> zoo = new List<Animal>(); // OK (lijst is nog leeg) Animal[] zoo2 = new Animal[100]; // OK (je hebt nog geen Animals // gemaakt, alleen ruimte gereserveerd)
7
Abstracte methoden Zo’n klasse mag abstracte methoden hebben
Die moet elke niet-abstracte subklasse dan invullen abstract class Animal { public abstract void SayHello(); } class Cat : Animal { public override void SayHello() { Console.WriteLine("Meow!"); Geen implementatie in Animal zelf override, net als bij gewone inheritance Zonder implementatie vindt de compiler een Cat geen geldige Animal
8
Abstracte properties Ook properties mogen abstract zijn
Dus dit is een mooiere versie van het voorbeeld: abstract class Animal { public void SayHello() { Console.WriteLine(Hello); } protected abstract string Hello { get; } class Cat : Animal { protected override string Hello { get { return "Meow!"; } Elke Animal schrijft sowieso iets naar de console (dus deze methode is niet meer abstract) Geen implementatie in Animal zelf Invulling van de property
9
Even opletten Zodra je één methode abstract maakt, moet de klasse zelf ook abstract zijn Een abstracte klasse mag ook niet-abstracte onderdelen hebben (zie vorige slide) Een abstracte methode/property mag zelf geen body hebben Dan kun je ‘m beter virtual maken Een implementatie van een abstracte methode mag zelf best weer virtual zijn
10
Waarom? Extra structuur in je programma aanbrengen
Je belooft de compiler dat je bepaalde klassen nooit zult maken... ...maar je mag wel het gedrag ervan gebruiken! Ontstaat vaak “vanzelf” zodra je gemeen-schappelijke code in een superklasse plaatst Kleine ingreep Voeg ergens abstract toe en je compiler helpt mee
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.