Sobes.tech
Middle+

Zašto ugrađivanje u jeziku Go nije nasledstvo?

sobes.tech АИ

Одговор од АИ

Ugrađivanje (embedding) u Go omogućava jednoj strukturi da koristi polja i metode druge strukture kao da su njeni sopstveni.

Ključne razlike u odnosu na nasleđivanje:

  • Kompozicija vs. Hijerarhija: Ugrađivanje je oblik kompozicije ("ima") gde jedna struktura ima drugu. Nasleđivanje (u klasičnom OOP) je oblik hijerarhije ("je"), gde jedna klasa je podklasa druge.
  • Polimorfizam: Go ne podržava polimorfizam podtipova u tradicionalnom smislu nasleđivanja. Polimorfizam u Go se realizuje putem interfejsa.
  • Pristup: Ugrađivanje omogućava direktan pristup vidljivim poljima i metodama ugrađene strukture putem spoljašnje strukture, ali ne stvara hijerarhiju tipova.
  • Nedostatak override: Ne postoji direktan mehanizam za "prepisivanje" metoda osnovne klase. Možete definisati metodu sa istim imenom u spoljašnjoj strukturi, koja "skriva" ugrađenu metodu.

Primer ugradnje:

package main

import "fmt"

type Engine struct {
	Cylinders int
}

func (e Engine) Start() {
	fmt.Println("Motor startovan sa", e.Cylinders, "cilindara")
}

type Car struct {
	Engine // Ugrađivanje Engine
	Brand  string
}

func main() {
	myCar := Car{
		Engine: Engine{Cylinders: 4},
		Brand:  "Toyota",
	}
	myCar.Start() // Pristup metodi Start Engine preko Car
	fmt.Println("Marka automobila:", myCar.Brand)
	fmt.Println("Cilindri motora:", myCar.Cylinders) // Pristup polju Cylinders Engine preko Car
}

U ovom primeru, Car ima Engine, ali Car nije podklasa Engine. Jednostavno dobijamo zgodan pristup poljima i metodama Engine preko strukture Car.