Skip to content

Abstractie (Abstraction)

Neem een object uit de echte wereld in gedachten, bijvoorbeeld een waterfles. Je weet precies wat er bedoeld wordt met een waterfles zonder dat er details worden gegeven. Je maakt dus een eigen voorstelling van een waterfles in je hoofd. Maar ondanks het gebrek aan gedetailleerde informatie, weet je wat een waterfles is (eigenschappen) en wat je ermee kunt doen (gedrag). Dit is het proces van abstraction, je brengt als het ware een object terug naar zijn meest basale vorm, oftewel zijn abstracte vorm.

Het Abstractie (Abstraction) principe in software development verwijst naar het proces van het verminderen van complexiteit in je code. Door het verbergen van onnodige details en het focussen op de essentiële eigenschappen (functies en attributen). In object-oriented programming wordt ‘abstractie’ bereikt door het gebruik van abstract classes en interfaces. Deze beschrijven een standaard set van properties en functies die gedeeld worden door meerdere classes. Je maakt met een abstract super class een ‘blauwdruk’ of basis schets voor de afgeleide sub-classes.

Een abstract super-class (or parent-class) heeft alleen de verplichte attributen (parameters) en methods (functies) die nodig zijn voor de sub-class. Een sub-class (of child-class) is dus ook verplicht om de gedefinieerde abstract methods en attributen te gebruiken.

Voorbeelden van abstractie in TypeScript en Python:

/**
 * Musician abstract super-class (or parent-class)
 */
abstract class Musician {
    abstract artistName: string;
    abstract play(): void;
    abstract stop(): void;
}
/**
 * Guitarist sub-class (or child-class)
 */
class Guitarist extends Musician {
    artistName: string = "Janice";
    play() {
        console.log("Guitarist plays.");
    }
    stop() {
        console.log("Guitarist stops playing.");
    }
}
/**
 * Drummer sub-class (or child-class)
 */
class Drummer extends Musician {
    artistName: string = "Animal";
    play() {
        console.log("Drummer plays.");
    }
    stop() {
        console.log("Drummer stops playing.");
    }
}

// const musician: Musician = new Musician();
// This will fail. You cannot create an instance of an abstract class.
const guitarist: Guitarist = new Guitarist();
guitarist.play();
guitarist.stop();

const drummer: Drummer = new Drummer();
drummer.play();
drummer.stop();
from abc import ABC, abstractmethod

# abstract super-class (or parent-class)
class Musician(ABC):

    @abstractmethod
    def play(self):
        pass

    @abstractmethod
    def stop(self):
        pass


# sub-class (or child-class)
class Guitarist(Musician):

    # overriding abstract method
    def play(self):
        print("Guitarist plays.")

    # overriding abstract method
    def stop(self):
        print("Guitarist stops playing.")

# sub-class (or child-class)
class Drummer(Musician):

    # overriding abstract method
    def play(self):
        print("Drummer plays.")

    # overriding abstract method
    def stop(self):
        print("Drummer stops playing.")

# This will fail. You cannot create an instance of an abstract class.
# musician = Musician()

guitarist = Guitarist()
guitarist.play()
guitarist.stop()

drummer = Drummer()
drummer.play()
drummer.stop()

Abstraction zit niet standaard in Python. Daarvoor heb je wel een externe library nodig. Meer informatie in dit artikel Abstract classes in Python (Geeks for Geeks)