Sobes.tech
Junior

Golang'da kalıtım nasıl uygulanır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go'da Java veya C++ gibi geleneksel sınıf kalıtımı yoktur. Bunun yerine iki mekanizma kullanılır:

  1. Gömme (Embedding):

    • Gömme, bir yapıyı veya tipi başka bir yapıya entegre etmeyi sağlar.
    • Gömülü tip, kendi alanlarını ve metodlarını gömme tipe "aktarır".
    • Gömülü tipin alanlarına ve metodlarına doğrudan erişim sağlanır, sanki gömme tipinde tanımlanmışlar gibi.
    • Bu, kalıtıma benzeyen, ancak daha kullanışlı bir erişim sözdizimi ile kompozisyonu taklit eder.
    package main
    
    import "fmt"
    
    type Engine struct {
        Type string
    }
    
    func (e Engine) Start() {
        fmt.Println(e.Type, "motor başlatıldı")
    }
    
    type Car struct {
        Engine // Engine yapısının gömülmesi
        Model  string
    }
    
    func main() {
        car := Car{
            Engine: Engine{Type: "V8"},
            Model:  "Mustang",
        }
    
        // Gömülü yapının alanlarına ve metodlarına doğrudan erişim
        fmt.Println("Araba modeli:", car.Model)
        car.Start() // Gömülü yapının metodunu çağırma
    }
    
  2. Arayüzler:

    • Arayüzler, bir tipin uygulaması gereken metodlar kümesini tanımlar.
    • "Davranış" tanımlarlar, veri yapısını değil.
    • Tip, arayüzü uyguladığını açıkça bildirmek zorunda değildir; arayüzde tanımlanan tüm metodları uygulaması yeterlidir.
    • Arayüzler, çok biçimlilik sağlar.
    package main
    
    import "fmt"
    
    type Speaker interface {
        Speak()
    }
    
    type Dog struct {
        Name string
    }
    
    func (d Dog) Speak() {
        fmt.Println(d.Name, "diyor Woof!")
    }
    
    type Cat struct {
        Name string
    }
    
    func (c Cat) Speak() {
        fmt.Println(c.Name, "diyor Miau!")
    }
    
    func main() {
        animals := []Speaker{
            Dog{Name: "Buddy"},
            Cat{Name: "Whiskers"},
        }
    
        for _, animal := range animals {
            animal.Speak() // Çok biçimli Speak metod çağrısı
        }
    }
    

Gömme ve arayüzlerin birleşimi, Go'nun geleneksel kalıtım sorunları ve karmaşıklıkları olmadan esneklik ve kod tekrarını sağlamasına olanak tanır (örneğin, "elmas" problemi). Go'da, kompozisyon ve arayüzler, kalıtım hiyerarşileri yerine tercih edilir.