Sobes.tech
Junior

Wat weet je over de samenstelling van klassen in programmeren?

sobes.tech AI

Antwoord van AI

Samenstelling is een relatie van "bevat" of "deel-van", waarbij een klasse (composiet) een verwijzing bevat naar een andere klasse (component) of naar zijn instanties. De levenscyclus van de component is meestal nauw verbonden met die van het composiet. Het is een sterke relatie waarbij de component niet zonder het composiet kan bestaan.

Voordelen van samenstelling:

  • Flexibiliteit: Het is gemakkelijker om gedrag te wijzigen door de componenten te veranderen.
  • Vermindering van koppeling: Klassen zijn minder afhankelijk van elkaar in vergelijking met overerving.
  • Herbruikbaarheid: Dezelfde componenten kunnen in verschillende composieten worden gebruikt.

Voorbeeld: De klasse Auto kan een verwijzing bevatten naar de klasse Motor. Als Auto wordt vernietigd, stopt ook de Motor (in deze context) te bestaan.

class Motor {
    // eigenschappen en methoden van de motor
}

class Auto {
    private Motor motor; // samenstelling

    public Auto() {
        this.motor = new Motor(); // creëren van de component binnen het composiet
    }

    // andere eigenschappen en methoden van de auto
}

Verschil met aggregatie: Bij aggregatie kunnen de componenten onafhankelijk bestaan van het composiet (zwakke relatie). Voorbeeld: De klasse Universiteit bevat verwijzingen naar instanties van de klasse Student. Studenten kunnen ook buiten de universiteit bestaan.

In Android-ontwikkeling wordt samenstelling actief gebruikt, bijvoorbeeld bij het maken van views (ViewGroup bevat View), bij het werken met afhankelijkheden via Dagger/Hilt. Dit is een voorkeursbenadering ten opzichte van meervoudige overerving (die niet bestaat in Java/Kotlin voor klassen) en is vaak flexibeler dan enkelvoudige overerving.

class UserRepository(private val apiService: ApiService) {
    // UserRepository "gebruikt" ApiService (samenstelling/aggregatie)
    fun fetchUser(userId: String) {
        // apiService.getUser(userId)
    }
}