Gameprogrammeren: Abstracte klassen

Slides:



Advertisements
Verwante presentaties
Les 2 klassediagrammen II
Advertisements

KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
Van domeinklasse tot implementatie
Klassen en objecten.
Hoofdstuk 2 Hallo, C# !.
Inleidend probleem Data structuur (hiërarchie van classes)
Overerving Hoofdstuk 11 Hoofdstuk 11.
Hoofdstuk 10 Overerving.
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Algoritmiek Object-georiënteerd Programmeren
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
JAVA1 H 9. OBJECTGEORIENTEERD PROGRAMMEREN: OVERERVING 1. INLEIDING Wat is overerving (inheritance)? Overerving is een mechanisme waarbij software opnieuw.
Herhaling Java-programmatie en geautomatiseerd testen (vervolg)
Visual Basic 2005/2008 OOP in praktijk André Obelink - MCSD, MVP Web: Web: -
Overerving: It’s a kind of magic…. Principes van OO: 1) Overerving 2) Encapsulatie 3) Polymorphisme = (deel van het) OO. paradigma.
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Encapsulatie: Every man is an island upon himself.
Polymorphisme en Interfaces: inleiding
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2.
 C++ heeft een inheritance mechanisme  Manier om functionaliteit te ‘erfen’ van een parrent class ◦ Polymorphisme ◦ Zoals we het ook in C# kennen.
Soorten programma’s nConsole- applicatie. Soorten programma’s nConsole- applicatie nWindows- applicatie.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Game Object Structuren
Objectgeoriënteerd Programmeren (2)
Gameprogrammeren: Objecten en geheugen
Gameprogrammeren: Game Assets
Gameprogrammeren: Lists en interfaces
Gameprogrammeren: Keuzeopdrachten
Gameprogrammeren: Introductie
Gameprogrammeren: Overerving
Gameprogrammeren: Char en String
Arjan Egges & Paul Bergervoet
Gameprogrammeren: Expressies
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Gameprogrammeren: Animatie
Gameprogrammeren: Methoden
Arjan Egges & Paul Bergervoet
Gameprogrammeren: Overerving in Painter
Gameprogrammeren: Player input in Painter
Gameprogrammeren: Programmastructuur
Basis Gameprogrammeren
Gameprogrammeren: Tiles in Tick Tick
Gameprogrammeren: Afsluiting
Gameprogrammeren: Willekeurigheid (Randomness)
Gameprogrammeren: Herhalingen
Gameprogrammeren: Properties
Arjan Egges & Paul Bergervoet
Gameprogrammeren: Game Basics
Arjan Egges & Paul Bergervoet
Libraries, Platform Games
Gameprogrammeren: Recursie
Gameprogrammeren: Exceptions
Willekeurigheid en Herhaling
Gameprogrammeren: Interfaces
Arjan Egges Paul Bergervoet Wouter van Toll
Gameprogrammeren: Tiles en File I/O in Tick Tick
Game: omgaan met tijd (Jewel-Jam)
Gameprogrammeren: Klassen en objecten
‘Inleiding objectgeoriënteerd programmeren met PHP’ ‘Inleiding’
Arjan Egges & Paul Bergervoet
Object Communication (Jewel Jam)
Exceptions Exception:
Software Development fundamentals
Gameprogrammeren: Enemies in Tick Tick
Gameprogrammeren: Sprite sheets
Software Development fundamentals
Software Development fundamentals
Gameprogrammeren: Arrays
Transcript van de presentatie:

Gameprogrammeren: Abstracte klassen Arjan Egges Paul Bergervoet Wouter van Toll

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

Terugblik: Hiërarchie-ontwerp class Voertuig : Vervoermiddel class Boot : Vervoermiddel Voertuig Vervoer- middel “is een” Boot

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

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!

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)

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

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

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

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