Korte samenvatting

  • Inheritance houdt in dat je gegevens van de ene class overhevelt naar de andere class.
  • Een base class is een class die functies en variabelen bevat, die andere classes zouden kunnen overnemen.
  • Een derived class is een ondergeschikte class die variabelen en functies overneemt van de base class en op zichzelf kan toepassen.
  • Als je twee classes hebt die (een aantal) dezelfde functies/variabelen bevatten, kun je de overeenkomstige functies/variabelen plaatsen in een andere class (de base class), waar de twee classes (in dit geval de derived classes genoemd) functies en variabelen van kunnen overnemen.

Broncode

#include <iostream>

/* GameObject Class */

class GameObject
{
public:
    void Lopen()
    {
        std::cout << "Object loopt met snelheid " << m_snelheid << std::endl;
    }
    
protected:
    int m_gezondheid;
    float m_snelheid;
};

/* Dier Class */

class Dier : public GameObject
{
public:
    Dier()
    {
        m_gezondheid = 5.0f;
        m_snelheid = 3.0f;
    }
    
    void Grazen()
    {
        std::cout << "Object graast." << std::endl;
    }
    
private:
};


/* Monster Class */

class Monster : public GameObject
{
public:
    Monster()
    {
        m_gezondheid = 10.0f;
        m_snelheid = 10.0f;
    }
    
    void Aanvallen()
    {
        std::cout << "Object valt aan." << std::endl;
    }
    
private:
};

/* Main */

int main(int argc, const char * argv[]) {
    Monster monster;
    Dier dier;
    
    /* In Monster gedefinieerde functie */
    monster.Aanvallen();
    
    /* In Dier gedefinieerde functie */
    dier.Grazen();
    
    /* In GameObject gedefinieerde functie */
    monster.Lopen();
}

Huiswerk voor deze tutorial

Hoewel het voorbeeld in C++ is gegeven, kun je inheritance ook toepassen in Python. Als je Level 2 hebt afgerond, ken je de basis van deze programmeertaal. In de onderstaande code zijn de classes Persoon, Student en Professor gegeven.

# Base Class - Persoon
class Persoon:
  def __init__(self, naam, leeftijd, geslacht):
    self.naam = naam
    self.leeftijd = leeftijd
    self.geslacht = geslacht
	
def Info(self):
    print("Naam:", self.naam)
    print("Leeftijd:", self.leeftijd)
    print("Geslacht:", self.geslacht, "\n")

# Derived Class - Student
class Student():
  def __init__(self, naam, leeftijd, geslacht, startJaar):
    self.startJaar = startJaar
		
  def PrintStartJaar(self):
    print(self.naam, "is begonnen met zijn studie in", str(self.startJaar) + ".\n")

# Derived Class - Professor
class Professor():
  def __init__(self, naam, leeftijd, geslacht, studieRichting):
    self.studieRichting = studieRichting
	
  def PrintRichting(self):
    print("Prof.", self.naam, "geeft les in", self.studieRichting + ".\n")

Je ziet dat de Persoon-class de variabelen naam, leeftijd en geslacht bevat en dat die waarden worden geprint door de Info-functie. Je ziet dat de Student- en Professor-class deze waarden ook als parameters in de init-functie hebben zitten. Echter hebben deze waarden nog geen waarde.

  1. Zorg ervoor dat de waarde naam, leeftijd en geslacht door de Student- en Professor-class worden overgenomen door middel van inheritance. Gebruik hiervoor de onderstaande W3schools-pagina, waarop staat beschreven hoe inheritance in Python werkt. Voel je vrij om gebruik te maken van andere externe bronnen. Een goede programmeur is immers een goede onderzoeker: https://www.w3schools.com/python/python_inheritance.asp
  2. Roep de Info-functie aan voor de Student- en Professor-class, zonder deze opnieuw aan te maken in deze classes. Als je correct gebruik maakt van inheritance, zou dit goed moeten werken. Geef als parameters waarden naar keuze mee.

Oplossing huiswerkopdracht

Voorbeeld output

Voorbeeld code

# Base Class - Persoon
class Persoon:
  def __init__(self, naam, leeftijd, geslacht):
    self.naam = naam
    self.leeftijd = leeftijd
    self.geslacht = geslacht
	
  def Info(self):
    print("Naam:", self.naam)
    print("Leeftijd:", self.leeftijd)
    print("Geslacht:", self.geslacht, "\n")
		
# Derived Class - Student
class Student(Persoon):
  def __init__(self, naam, leeftijd, geslacht, startJaar):
    super().__init__(naam, leeftijd, geslacht)
    self.startJaar = startJaar
		
  def PrintStartJaar(self):
    print(self.naam, "is begonnen met zijn studie in", str(self.startJaar) + ".\n")

# Derived Class - Professor
class Professor(Persoon):
  def __init__(self, naam, leeftijd, geslacht, studieRichting):
    super().__init__(naam, leeftijd, geslacht)
    self.studieRichting = studieRichting
	
  def PrintRichting(self):
    print("Prof.", self.naam, "geeft les in", self.studieRichting + ".\n")

student = Student("Nick", 19, "Man", 2021)
student.Info();

professor = Professor("Van Beek", 55, "Vrouw", "Computer Science")
professor.Info()