Sobes.tech
Middle

Go dilinde nesne yönelimli programlama (OOP) kavramları nasıl uygulanır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go'da diğer dillerde (Java, C++) yaygın olan klasik sınıflar, kalıtım ve sanal metodlar kavramları yoktur. Nesne yönelimli programlama şu yollarla gerçekleştirilir:

  • Yapılar (Structs): Verileri (alanlar) gruplar.
    type Person struct {
    	Name string
    	Age  int
    }
    
  • Yöntemler: Bir alıcıyla (yapı veya başka bir tip) ilişkili fonksiyonlar. Yapıların davranış kazanmasını sağlar.
    func (p Person) Greet() string {
    	return "Hello, my name is " + p.Name
    }
    
    • Değer alıcısı: Yöntem, yapının bir kopyasıyla çalışır. Yöntem içindeki değişiklikler orijinal yapıyı etkilemez.
    • İşaretçi alıcısı: Yöntem, işaretçi aracılığıyla orijinal yapı ile çalışır. Yöntem içindeki değişiklikler orijinal yapıyı etkiler.
  • Arayüzler (Interfaces): Bir tipin uyması gereken metodların imzalarını tanımlar. "Ördek tipi" (duck typing) ile çok biçimlilik sağlar. Bir tip, tüm metodlarını uygularsa, arayüzü uygular.
    type Greeter interface {
    	Greet() string
    }
    
    func SayHello(g Greeter) string {
    	return g.Greet()
    }
    
  • Gömme (Embedding): Bir yapının başka bir yapıyı veya arayüzü "gömmesine" izin verir. Bu, klasik anlamda kalıtım değildir, daha çok bileşimdir. Gömülü yapı, isimsiz bir alan haline gelir ve alanları ile metodlarına doğrudan erişilebilir.
    type Employee struct {
    	Person // gömülü yapı
    	ID string
    }
    
    // Employee artık Name ve Age alanlarına sahip ve Greet() metodunu kullanabilir
    
    e := Employee{
    	Person: Person{Name: "Alice", Age: 30},
    	ID:     "E123",
    }
    fmt.Println(e.Greet()) // Person'un Greet() metodunu Employee aracılığıyla çağırma
    
Nesne Yönelimli Programlama Kavramı Go'da Uygulama Notlar
Sınıflar Yapılar class anahtar kelimesi yok
Kapsülleme İhraç edilen (büyük harfle başlayan) / ihraç edilmeyen (küçük harfle başlayan) alanlar/metodlar Paket seviyesinde görünürlük kontrolü
Kalıtım Gömme (Embedding) Hiyerarşik kalıtım yerine bileşim
Çok biçimlilik Arayüzler Duck typing, arayüzlerin örtük uygulanması