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ı |