Middle+
Go ve C#'ta nesne yönelimli programlamanın uygulamasını karşılaştırın.
sobes.tech yapay zeka
AI'dan gelen yanıt
Go'da klasik nesne yönelimli kalıtım ve sınıflar geleneksel anlamda yoktur. Bunun yerine, Go bileşim ve arayüzleri kullanır.
Ana farklar:
- Sınıflar ve nesneler: C# sınıflar üzerine kuruludur, bunlardan nesneler oluşturulur. Go yapılar (structs) kullanır ve bunlar metodlara sahip olabilir.
- Kalıtım: C# tek ve çoklu kalıtımı (arayüzler aracılığıyla) destekler. Go, bileşim (yapıların gömülmesi) ve arayüzler aracılığıyla çok biçimlilik sağlar.
- Arayüzler: C#'ta arayüzler açıkça uygulanmalıdır. Go'da, yapılar arayüzleri dolaylı olarak uygular: eğer bir yapı, arayüzün imzasına uygun metodlara sahipse, otomatik olarak uygular.
- Erişim belirteçleri: C#'ta
public,private,protected,internalkullanılır. Go'da görünürlük, ismin ilk harfi büyükse dışa açıktır, küçükse paket içi görünür. - Generics: C# gelişmiş bir generics sistemine sahiptir. Go, 1.18 sürümünden itibaren generics desteği eklemiştir.
Go'da bileşim örneği:
package main
import "fmt"
type Engine struct {
Type string
}
func (e Engine) Start() {
fmt.Printf("%s motor başladı!\n", e.Type)
}
type Car struct {
Model string
Engine // Anonim gömme - bileşim
}
func main() {
myCar := Car{
Model: "Sedan",
Engine: Engine{
Type: "Benzin",
},
}
fmt.Printf("Araba modeli: %s\n", myCar.Model)
myCar.Start() // Gömülü yapının metodunu çağırma
}
Arayüz uygulaması örneği:
package main
import "fmt"
type Speaker interface {
Speak() string
}
type Dog struct{}
func (d Dog) Speak() string {
return "Hav!"
}
type Cat struct{}
func (c Cat) Speak() string {
return "Miyav!"
}
func main() {
animals := []Speaker{Dog{}, Cat{}} // Speaker arayüzünü uygulayan tiplerin dilimi
for _, animal := range animals {
fmt.Println(animal.Speak())
}
}
Tabloda:
| Özellik | Go | C# |
|---|---|---|
| Sınıflar | Yok (yapılar) | Evet |
| Objeler | Yapı örnekleri | Sınıf örnekleri |
| Kalıtım | Bileşim, arayüzler | Geleneksel (tekli), arayüzler |
| Arayüzler | Dolaylı uygulama | Açık uygulama |
| Görünürlük | İlk harf büyükse görünür | public, private, protected vb. |
| Generics | 1.18 sürümünden itibaren | Evet |
Go'nun OOP yaklaşımı daha merkezi olmayan ve davranışlara (arayüzler aracılığıyla) ve veri yapılarına (gömme yoluyla) odaklanmıştır, bu da genellikle daha esnek ve test edilmesi kolay kodlara yol açar. C# daha geleneksel ve hiyerarşik bir modeli benimser.