Middle+
Go dilinde gömme neden kalıtım değildir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go'da gömme (embedding), bir yapının başka bir yapının alanlarını ve metodlarını kendi alanları gibi kullanmasına izin verir.
Anahtar farklar:
- Bileşim vs. Hiyerarşi: Gömme, bir yapının başka bir yapıya sahip olduğu bir bileşim biçimidir ("sahip olma"), burada bir yapı başka birine sahip. Kalıtım (geleneksel OOP'de) ise bir hiyerarşi biçimidir ("bir"), burada bir sınıf bir alt sınıf olur.
- Polimorfizm: Go, kalıtımın geleneksel anlamında alt tip polimorfizmini desteklemez. Polimorfizm, Go'da arayüzler (interfaces) aracılığıyla uygulanır.
- Erişim: Gömme, gömülü yapının görünür alanlarındaki alanlar ve metodların doğrudan dış yapı üzerinden erişilebilir olmasını sağlar, ancak bir tür hiyerarşisi oluşturmaz.
- Aşırı yükleme yok: Temel sınıfın metodlarının doğrudan "aşırı yüklenmesi" mekanizması yoktur. Aynı isimde bir metod, dış yapıda tanımlanabilir ve gömülü metodu "gizleyebilir".
Gömme örneği:
package main
import "fmt"
type Engine struct {
Cylinders int
}
func (e Engine) Start() {
fmt.Println("Motor başladı", e.Cylinders, "silindir")
}
type Car struct {
Engine // Engine gömme
Brand string
}
func main() {
myCar := Car{
Engine: Engine{Cylinders: 4},
Brand: "Toyota",
}
myCar.Start() // Engine'in Start metoduna Car üzerinden erişim
fmt.Println("Araba markası:", myCar.Brand)
fmt.Println("Motor silindir sayısı:", myCar.Cylinders) // Engine'in Cylinders alanına Car üzerinden erişim
}
Bu örnekte, Car sahiptir bir Engine, ancak Car bir Engine'in alt tipi değildir. Sadece Engine'in alanlarına ve metodlarına Car yapısı üzerinden kolayca erişiyoruz.