Les 09

Les 08
Unity Interfaces, Abstract Classes en Inheritance
1 / 21
next
Slide 1: Slide
Programming - FundamentalsMBOStudiejaar 2

This lesson contains 21 slides, with text slides.

time-iconLesson duration is: 120 min

Items in this lesson

Les 08
Unity Interfaces, Abstract Classes en Inheritance

Slide 1 - Slide

Interface
Een interface is een collectie aan functies en variabelen dat een ervende class over moet nemen.
Je kan in een interface de members geen waardes geven, dat moet je allemaal invullen in de ervende class.
Je kan in een interface alleen variabelen aanmaken als je een getter/setter body toevoegd.
protected float health { get; set; }

Slide 2 - Slide

Interface - Maken
Het maken van een interface is bijna hetzelfde als een class, alleen moet je class vervangen met interface.
Bij het aanmaken van een interface begin je de naam vaak met een hoofdletter i.

Slide 3 - Slide

Interface - Gebruiken
Als ik dan een object heb dat damageable moet zijn hoef ik alleen maar IDamageable toe te voegen aan de inheritance.
Wanneer ik dat doe moet ik alle members vanuit het interface overnemen en een waarde geven.

Slide 4 - Slide

Interface - Gebruiken
Een interface is het beste te gebruiken wanneer je meerdere classes hebt die dezelfde functionaliteit nodig hebben.
In het geval van IDamageable zou het handig kunnen zijn voor een speler en een enemy maar ook bijvoorbeeld voor props die kapot moeten gaan wanneer ze schade oplopen.

Slide 5 - Slide

Interface - Gebruiken
In plaats van dat er nu schade van mijn health af gaat roept de TakeDamage functie nu de Break functie zodat het object kapot kan gaan. Je hebt dan nog wel het currentHealth variable nodig.
            Anders krijg je namelijk een error.

Slide 6 - Slide

Interface - Gebruiken
Als je dan bijvoorbeeld een projectile script hebt kan je heel gemakkelijk damage doen op meerdere objecten.
Als mijn projectile nu iets raakt wat IDamageable is voert hij direct de functie uit van de ervende class.

Slide 7 - Slide

Inheritance
Inheritance, oftewel erven is iets wat vaak gebruikt wordt in Game Development. Je gebruikt het vaak als je meerdere classes hebt die dezelfde basis functionaliteit hebben.
De class waar andere classes uit overerven noemen we ook wel de Super class of Base class.

Slide 8 - Slide

Inheritance VS. Interface
Het grootste verschil tussen inheritance van een class en van een interface is dat de super class al functionaliteit toe kan voegen aan functies en variabelen waardes kan geven.
Het nadeel hiervan is alleen dat een class maar van een andere class kan overerven maar van meerdere Interfaces. Een class kan dus een monobehaviour zijn en tegelijk ook IDamageable en bijvoorbeeld ook IHealable.

Slide 9 - Slide

Inheritance - Gebruiken
Om inheritance aan te maken hoef je alleen een normale class aan te maken. Laten we bijvoorbeeld een Enemy script nemen.
Dit script erft ook over van het IDamageable interface omdat mijn vijanden schade moeten kunnen nemen.

Slide 10 - Slide

Inheritance - Gebruiken
In mijn Enemy class wil ik basis functionaliteit stoppen voor dingen die ik wil dat al mijn enemies kunnen. Dit kan bijvoorbeeld lopen, damage nemen en dood gaan zijn. Dit is dan iets wat iedere enemy hierna kan doen.

Slide 11 - Slide

Slide 12 - Slide

Inheritance - Gebruiken
Omdat mijn enemy class ook IDamageable is moet ik sowieso de TakeDamage functie toevoegen, deze geef ik hier dan ook zijn functionaliteit.

Slide 13 - Slide

Inheritance - Gebruiken
Als ik nu een Orc enemy zou willen maken kan ik die over laten erven van de Enemy super class. Dan hoef ik alleen monobehaviour weg te halen en te vervangen met Enemy.
                                 Omdat Enemy wel een Monobehaviour is
en ook een IDamageable neemt onze Orc class dat ook allemaal over. Orc is dus een Enemy, een Monobehaviour en IDamageable.

Slide 14 - Slide

Inheritance - Gebruiken
Als ik wil dat mijn Orc bepaalde functies of variabelen anders doet kan ik dat makkelijk aanpassen. Ik moet dan eerst het keywoord virtual toevoegen aan mijn functies in de enemy class. Hierna kan ik ze overschrijven met override.
Enemy script:                         
Orc Script:                  

Slide 15 - Slide

Inheritance - Gebruiken
Ik wil bijvoorbeeld dat mijn orc vanwege zijn armor de helft van de normale damage zou nemen. De basis functionaliteit van damage nemen hoef ik niet aan te passen. Alleen de waarde van hoe veel damage ik neem. Om de basis code van de enemy class te gebruiken roepen we "base.FunctieNaam" aan in die functie.

Slide 16 - Slide

Abstract Classes
Een Abstract class is een soort combinatie van een interface en een super class. Je kan normale functies en variabelen aanmaken en die ook gelijk functionaliteit en waardes geven maar je kan ook abstract functies toevoegen.

Slide 17 - Slide

Abstract Classes
Een abstract functie lijkt veel op een functie vanuit een interface. De abstract class kan het geen functionaliteit geven maar het is wel een functie die gebruikt moet worden door een ervende class.

Slide 18 - Slide

Abstract Classes
Verder kan je een abstract class ook niet meer initializeren, je kan er dus geen object meer van maken. Ook kunnen classes nog steeds maar van 1 class overerven, of deze nou abstract is of niet.
Je gebruikt een abstract class wanneer je normale inheritance zou gebruiken maar de super class niet genoeg informatie bevat om op zichzelf een object te kunnen zijn.

Slide 19 - Slide

Abstract Classes

Dit is hoe mijn enemy class uiteindelijk gemaakt wordt. Het is nu een abstract class dus er kunnen geen objecten meer alleen een Enemy zijn.
Maar mijn Orc class moet nu wel ook de abstract functie van
                                  attack overnemen en overschrijven.

Slide 20 - Slide

Opdracht
Maak een abstract enemy class aan met minstens 3 functies.
Maak dan 3 classes aan die deze class erven en ieder een eigen functie aanpassen.
BONUS:
Voeg ook een interface toe om te zorgen dat ze allemaal IDamageable zijn. (Ze moeten dan ook door het interface aan te spreken damage kunnen nemen)

Slide 21 - Slide