Kalıtım Yerine Birleştirme
Go tasarım felsefesi
Kalıtım Yerine Birleştirme, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.
Go Tasarım Felsefesi
Go, sınıf kalıtımını bilinçli olarak içermez. Alışılmış yaklaşım birleştirmedir: davranışı küçük türleri ve arayüzleri birleştirerek oluşturun.
Kalıtım Neden Kullanılmaz
Derin kalıtım ağaçları kırılgandır: temel sınıftaki bir değişiklik öngörülemeyen biçimde her yere yayılır. Birleştirme, ilişkileri açık ve esnek tutar.
Kalıtım Yerine Sahiplik
“Bir yönetici çalışandır” demek yerine, “bir yönetici, gömme veya alanlar aracılığıyla bir çalışanın verilerine ve yeteneklerine sahiptir” modelini kullanın.
package main
import "fmt"
type Employee struct{ Name string }
func (e Employee) Work() string { return e.Name + " works" }
type Manager struct {
Employee
Reports int
}
func main() {
m := Manager{Employee{"Lin"}, 3}
fmt.Println(m.Work(), "-", m.Reports, "reports")
}Arayüzlere Göre Programlayın
Davranışı küçük arayüzlerle tanımlayın, ardından bunları kabul edin. Uygulamalar birbirinin yerine kullanılabilir; kolayca değiştirilebilir veya taklit edilebilir.
package main
import "fmt"
type Notifier interface{ Notify(msg string) }
type Email struct{}
func (Email) Notify(msg string) { fmt.Println("email:", msg) }
func alert(n Notifier, m string) { n.Notify(m) }
func main() {
alert(Email{}, "deploy done")
}Uygulamaları Değiştirme
İşlev bir arayüze bağlı olduğundan, işlevi değiştirmeden herhangi bir uygulamayı geçirebilirsiniz.
package main
import "fmt"
type Notifier interface{ Notify(msg string) }
type Email struct{}
type SMS struct{}
func (Email) Notify(m string) { fmt.Println("email:", m) }
func (SMS) Notify(m string) { fmt.Println("sms:", m) }
func alert(n Notifier, m string) { n.Notify(m) }
func main() {
alert(Email{}, "hi")
alert(SMS{}, "hi")
}Davranışları Birleştirme
Bağımsız ve sınanabilir parçalardan zengin özelliklere sahip bir tür oluşturmak için birden çok küçük bileşeni gömün.
package main
import "fmt"
type Logger struct{}
func (Logger) Log(s string) { fmt.Println("log:", s) }
type Cache struct{ data map[string]string }
func (c Cache) Get(k string) string { return c.data[k] }
type Service struct {
Logger
Cache
}
func main() {
s := Service{Cache: Cache{data: map[string]string{"k": "v"}}}
s.Log("started")
fmt.Println(s.Get("k"))
}Bağımlılık Enjeksiyonu
Bağımlılıkları (arayüzler olarak) sabit kodlamak yerine oluşturuculara geçirin. Bu, bağlantıların yapılandırılmasına uygulanmış bileşimdir.
package main
import "fmt"
type Store interface{ Save(s string) }
type MemStore struct{ items []string }
func (m *MemStore) Save(s string) { m.items = append(m.items, s) }
type App struct{ store Store }
func NewApp(s Store) *App { return &App{store: s} }
func main() {
app := NewApp(&MemStore{})
app.store.Save("x")
fmt.Println("saved")
}Küçük Arayüzler Kazanır
Bir arayüz ne kadar küçükse, onu karşılayan türlerin sayısı o kadar fazla ve sınanması o kadar kolay olur. Arayüz büyüdükçe soyutlama zayıflar.
Kırılgan Temel Sınıftan Kaçınma
Kalıtım olmadığında bozulabilecek bir temel sınıf da olmaz. Birleştirilen her parça bağımsız olarak gelişir ve bağımlılık azalır.
Arayüzleri Kabul Edin, Yapılar Döndürün
Yaygın bir Go yönergesi: işlevler arayüzleri (esnek girdileri) kabul eder ve somut yapılar (açık, kullanılabilir çıktılar) döndürür.
Bileşim Denetim Listesi
- Sahiplik ilişkisini modelleyin, tür ilişkisini değil
- Küçük bileşenleri gömün
- Küçük arayüzlere bağımlı olun
- Bağımlılıkları enjekte edin
Hızlı Denetim
Bileşim felsefesi bilginizi sınayın.
Özet
Go'nun bileşim felsefesini öğrendiniz.
- Kalıtım yoktur; gömme ve arayüzlerle bileşim oluşturun
- Sahiplik ilişkisini tür ilişkisinin önüne koyun
- Küçük arayüzlere göre programlayın, bağımlılıkları enjekte edin
- Arayüzleri kabul edin, yapılar döndürün
Sıkça Sorulan Sorular
“Kalıtım Yerine Birleştirme” dersi ücretsiz mi?
Evet — “Kalıtım Yerine Birleştirme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.
“Kalıtım Yerine Birleştirme” dersinde ne öğreneceğim?
Go tasarım felsefesi Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Go Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Kalıtım Yerine Birleştirme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Struct Gömme
- Arayüz Gömme
- Yöntem Yükseltme
- Kalıtım Yerine Birleştirme