Gameprogrammeren: Interfaces

Slides:



Advertisements
Verwante presentaties
Gegevensstructuren: list boxen en lijsten
Advertisements

Hoofdstuk 2 Hallo, C# !.
De koektrommel of de grabbelton
Inleidend probleem Data structuur (hiërarchie van classes)
Overerving Hoofdstuk 11 Hoofdstuk 11.
Array nDeclaratie nCreatie nOpvragen nWijzigen nLengte String [ ] a; a = new String[10]; ……a[5]…… a[5] = ……; …a.Length… …is eigenlijk overbodig! List a;
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Hoorcollege 7 Collections, arrays. Programma ‘Snowflakes’ Sneeuwvlok object.
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
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.
Hoorcollege 14 Vijanden, excepties. Overzicht programmaconstructies Opdrachten Toekenning Aanroep void-methode return-opdracht while-opdracht for(each)-opdracht.
Interfaces Hoofdstuk 23 Hoofdstuk 23.
Hoofdstuk 11.3 Algoritmen: Zoeken in een netwerk.
Scope. Scope van variaben/methoden Een variabele is te gebruiken binnen de { en } waarbinnen hij is aangemaakt. Hetzelfde geld voor een methode { int.
Hoofdstuk 10.3 Tekst-editor: MDI-interface Dialogen Files lezen Abstracte klassen.
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.
2e Deeltentamen nNagekeken werk ligt voor in de zaal (alfabetisch op achternaam) nOmcirkeld: tentamen2 Achter pijltje: gemiddelde tot nu toe nNeem het.
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.
Windows applicatieontwikkeling
Game Object Structuren
Objectgeoriënteerd Programmeren (2)
…is eigenlijk overbodig!
Lezen en schrijven van tekst
Gameprogrammeren: Objecten en geheugen
Gameprogrammeren: Game Assets
Gameprogrammeren: Lists en interfaces
Gameprogrammeren: Keuzeopdrachten
Gameprogrammeren: Overerving
Hoofdstuk 9.2 Strings.
Gameprogrammeren: Char en String
Gameprogrammeren: Animatie
Gameprogrammeren: Methoden
Gameprogrammeren: Overerving in Painter
Gameprogrammeren: Player input in Painter
Gameprogrammeren: Programmastructuur
Gameprogrammeren: Tiles in Tick Tick
Gameprogrammeren: Afsluiting
Gameprogrammeren: Willekeurigheid (Randomness)
Gameprogrammeren: Herhalingen
Gameprogrammeren: Platform-games
Gameprogrammeren: Properties
Gameprogrammeren: Game Basics
Arjan Egges & Paul Bergervoet
Voortborduren op eerder gedaan werk
Libraries, Platform Games
Gameprogrammeren: Recursie
Gameprogrammeren: Exceptions
Gameprogrammeren: Abstracte klassen
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
Arjan Egges & Paul Bergervoet
Implementatie Zoekboom
Object Communication (Jewel Jam)
ASP.NET MVC Web Development
Software Development fundamentals
Gameprogrammeren: Enemies in Tick Tick
Windows applicatieontwikkeling
Gameprogrammeren: Sprite sheets
Software Development fundamentals
Software Development fundamentals
Software Development fundamentals
Software Development fundamentals
Gameprogrammeren: Arrays
Transcript van de presentatie:

Gameprogrammeren: Interfaces Arjan Egges Paul Bergervoet Wouter van Toll

Terugblik: Abstracte klasse abstract class Klasse waarvan je mag overerven, maar die je nooit mag/wilt instantiëren Methoden en properties kunnen ook abstract zijn (maar dan moet de bijbehorende klasse dat ook zijn) 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

Multiple inheritance? Soms zou je het liefst iets gevaarlijks willen: Een klasse meerdere superklassen geven Dezelfde “superklasse” inzetten bij klassen die weinig met elkaar te maken hebben class Bird : Animal { // + animal-related code public void Fly() { ... } public void Land() { ... } } class Airplane : Vehicle // + vehicle-related code abstract class FlyingObject { public abstract void Fly(); public abstract void Land(); }

Multiple inheritance? “Multiple inheritance” is verboden Dus dit mag niet: Zou conflicten kunnen opleveren: wie krijgt voorrang, Animal of FlyingObject? Een veel voorkomende designfout (vak MSO, tweede jaar) class Bird : Animal, FlyingObject { ... }

Interfaces Oplossing: interface (Een soort “abstracte klasse die volledig abstract is”) Een lijstje methoden/properties waarvan je belooft dat je ze ooit gaat implementeren Die implementaties kunnen per klasse verschillen Klasse die een interface implementeert moet alle methoden/properties uit die interface bevatten Een klasse mag maar één superklasse hebben, maar mag meerdere interfaces implementeren!

Voorbeeld van een interface interface IFlyable { void Fly(); void Land(); } class Bird : Animal, IFlyable { // + animal-related code public void Fly() { ... } public void Land() { ... } class Airplane : Vehicle, IFlyable { // + vehicle-related code Naamconventie (niet verplicht) : begin met I Geen implementaties, alleen beloftes die een klasse moet nakomen Volgorde (verplicht): eerst de superklasse, daarna de interfaces Implementaties zijn altijd public; override is niet nodig

Interface gebruiken // dit mag allemaal: Bird b1 = new Bird(); Animal b2 = new Bird(); IFlyable b3 = new Bird(); IFlyable p1 = new Airplane(); List<IFlyable> flyers = new List<IFlyable>(); flyers.Add(b3); flyers.Add(p1); flyers.Add((IFlyable)b2); // of: "b2 as IFlyable“ foreach (IFlyable f in flyers) if (f is Animal) Console.WriteLine(“Flying animal found!"); Net alsof het een superklasse is!

Voorbeeld: IList en ICollection List en andere Collections gebruiken interfaces Die beloven wat een bepaald soort collection kan ICollection Volgorde van gegevens is niet belangrijk Voorbeeld: alle items in de inventory van de speler IList Gegevens die in een lineaire volgorde staan Voorbeeld: de achtergrondlagen in de volgorde waarin ze getekend moeten worden

ICollection-interface Ziet er zo uit: interface ICollection<E> { void Add(E x); bool Remove(E x); bool Contains(E x); int Count { get; }; // een read-only property void Clear(); … }

IList is zelf ook weer een ICollection! IList-interface IList is zelf ook weer een ICollection! interface IList<E> : ICollection<E> { E this [int n] {get; set;}; // notatie voor de indicering int IndexOf(E x); void Insert(int n, E x); void RemoveAt(int n); … }

Ander voorbeeld Multi-platform apps (bijv. met Xamarin Forms) Veel app-code is hetzelfde voor iOS, Android, ... Behalve functies die per telefoon verschillen (bijv. camera gebruiken, een nummer bellen, ...) Definieer een interface (bijv. ICaller) die belooft dat het in elk geval kan, op wat voor manier dan ook Verschillende ICaller-implementaties per platform