Skip to content

Overerving (Inheritance)

De manier om dit principe naar OOP te vertalen noemen we Overerving (Inheritance). Overerving helpt bij het hergebruiken van code en het organiseren van objecten. Met Overerving kunnen we bijvoorbeeld een basis-class(parent) Voertuig creëren met algemene eigenschappen, zoals het aantal wielen en de maximale snelheid. Afgeleide classes zoals Auto, Vrachtwagen en Motorfiets erven deze eigenschappen en voegen specifieke kenmerken toe, zoals het aantal deuren en het laadvermogen. Dit bevordert een efficiënte en gestructureerde code, waarbij we gemeenschappelijke functionaliteit op één plek neerzetten en specifieke functionaliteit toevoegen in subclasses (child-classes). Overerving maakt het onderhouden en uitbreiden van de code gemakkelijker, waardoor we flexibele en herbruikbare code kunnen schrijven, zoals in dit voorbeeld het modelleren van auto’s en andere voertuigen.

classDiagram
    Voertuig <|-- Auto
    Voertuig <|-- Vrachtwagen
    Voertuig <|-- Motorfiets
    Voertuig : -String merknaam
    Voertuig : -int aantalWielen
    Voertuig : -int maximaleSnelheid
    Voertuig : getMerknaam()

    class Auto{
      -int aantalDeuren
      -boolean heeftDakdragers
      getAantalDeuren()
    }
    class Vrachtwagen{
      -int laadvermogen
      -boolean heeftSlaapcabine
      getLaadvermogen()
    }
    class Motorfiets{
      -int aantalCC
      -boolean heeftZijspan
      getAantalCC()
    }

Voorbeelden van Overerving in TypeScript en Python:

/**
 * Musician super-class (or parent-class)
 */
class Musician {
  public artistName: string;
  public bandName: string;
  public bankAccount: string;

  public constructor(
    artistName: string,
    bandName: string,
    bankAccount: string
  ) {
    this.artistName = artistName;
    this.bandName = bandName;
    this.bankAccount = bankAccount;
  }
  public logBandName() {
    console.log("The band name is ", this.bandName);
  }
}
/**
 * Guitarist sub-class (or child-class)
 */
class Guitarist extends Musician {
  public logBankAccount() {
    console.log("The bank account is ", this.bankAccount);
  }
}

/**
 * Drummer sub-class (or child-class)
 */
class Drummer extends Musician {
  play() {
      console.log("Drummer is drumming.");
  }
  stop() {
      console.log("Drummer stops drumming.");
  }
}

const guitarist: Guitarist = new Guitarist(
  "Dan Auerbach",
  "The Black Keys",
  "ASNB123456790"
);
console.log(guitarist.logBandName());
// this will log the bandname 'The Black Keys'
console.log(guitarist.logBankAccount());
// this will log the bankaccount 'ASNB123456790'

const drummer: Drummer = new Drummer(
  "Ringo Starr",
  "The Beatles",
  "ASNB987654321"
)
console.log(drummer.logBandName());
// this will log the bandname 'The Beatles'
 console.log(drummer.play());
// this will log 'Drummer is drumming'
# super-class (or parent-class)
class Musician:
  def __init__(self, artistName, instrumentName):
    self.artistName = artistName
    self.instrumentName = instrumentName

  def start(self):
    print(self.artistName + " starts playing a " + self.instrumentName)

  def stop(self):
    print(self.artistName + " stops playing on the " + self.instrumentName)


# sub-class (or child-class)
class Guitarist(Musician):
  def __init__(self, artistName):
    # pass the artistName and instrumentName variables to the super-class via the 'super' function
    super().__init__(artistName, "guitar")

  # guitarist class specific method
  def playSolo(self):
    print(self.artistName + " plays a solo!")

# sub-class (or child-class)
class Drummer(Musician):
  def __init__(self, artistName):
    # pass the artistName and instrumentName variables to the super-class via the 'super' function
    super().__init__(artistName, "drums")

  # guitarist class specific method
  def drumRoll(self):
    print(self.artistName + " plays a drum roll!")



musician = Musician("Ray Manzarek", "&#127929; keyboard")
musician.start()

guitarist = Guitarist("John Mayer")
guitarist.start()
# prints the guitarist's name and the playSolo message
guitarist.playSolo()

drummer = Drummer("Ringo Starr")
drummer.start()
# prints the drummer's name and the drumRoll message
drummer.drumRoll()

musician.stop()
guitarist.stop()
drummer.stop()