Sobes.tech
Middle+

Waarom is het insluiten in de programmeertaal Go geen erfenis?

sobes.tech AI

Antwoord van AI

Embedding in Go stelt een structuur in staat om de velden en methoden van een andere structuur te gebruiken alsof ze eigen velden zijn.

Belangrijke verschillen met erfelijkheid:

  • Samenstelling vs. Hiërarchie: Embedding is een vorm van samenstelling ("heeft een"), waarbij één structuur heeft een andere. Erfelijkheid (in de traditionele OOP) is een vorm van hiërarchie ("is een"), waarbij een klasse een subklasse is van een andere.
  • Polymorfisme: Go ondersteunt geen subtypen-polymorfisme in de traditionele zin van erfelijkheid. Polymorfisme in Go wordt gerealiseerd via interfaces.
  • Toegang: Embedding maakt de zichtbare velden en methoden van de ingebedde structuur direct toegankelijk via de externe structuur, maar creëert geen type-hiërarchie.
  • Geen overriding: Er is geen direct mechanisme voor "overriding" van methoden van de basisklasse. Je kunt een methode met dezelfde naam definiëren in de externe structuur, die de ingebedde methode "verbergt".

Voorbeeld van embedding:

package main

import "fmt"

type Engine struct {
	Cylinders int
}

func (e Engine) Start() {
	fmt.Println("Motor gestart met", e.Cylinders, "cilinders")
}

type Car struct {
	Engine // Embedding van Engine
	Brand  string
}

func main() {
	myCar := Car{
		Engine: Engine{Cylinders: 4},
		Brand:  "Toyota",
	}
	myCar.Start() // Toegang tot de Start-methode van Engine via Car
	fmt.Println("Merk van de auto:", myCar.Brand)
	fmt.Println("Cilinders van de motor:", myCar.Cylinders) // Toegang tot het veld Cylinders van Engine via Car
}

In dit voorbeeld heeft Car een Engine, maar Car is geen subklasse van Engine. We krijgen gewoon gemakkelijk toegang tot de velden en methoden van Engine via de structuur Car.