Özet - Çalışan Hiyerarşisi
Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 40 / 107.
Görev
KolayGerçek dünyadaki organizasyon yapılarını bileşimin nasıl zarif bir şekilde modellediğini gösteren bir şirket için çalışan hiyerarşisi sistemi oluşturalım. Uzmanlaşmış rollerin kendi benzersiz davranışlarıyla genişletebileceği temel bir çalışan türü oluşturacaksınız.
Kodunuzu üç dosyaya ayıracaksınız:
employee.go:Employee,IDveName(float64) alanlarını içeren birBaseSalarystruct'ı ile temeli oluşturun. Buna iki metot ekleyin:Info() string,[ID] [Name]döndürürCalculateBonus() float64, temel maaşın %10'unu döndürür
roles.go:Employee'ı gömen iki uzmanlaşmış çalışan türü oluşturun:Manager, birTeamSizealanına (int) sahip olur: yöneticiler daha yüksek bonus alır: temel maaşın %20'si artı ekip üyesi başına $100. Bunu uygulamak içinCalculateBonusmetodunu gölgeleyin.Developer, birLanguagealanına (string) sahip olur: geliştiriciler standart bonusu korur, ancak programlama dillerini eklemek içinInfometodunu gölgeler:[ID] [Name] ([Language])
main.go: Çalışan ayrıntılarını girdiden okuyun, bir Manager ve bir Developer oluşturun, ardından her çalışanın bilgilerini ve hesaplanan bonusunu görüntüleyin.
Aşağıdaki girdiler sağlanacaktır:
- 1. satır: Manager ID'si
- 2. satır: Manager adı
- 3. satır: Manager temel maaşı (float64)
- 4. satır: Manager ekip büyüklüğü (tam sayı)
- 5. satır: Developer ID'si
- 6. satır: Developer adı
- 7. satır: Developer temel maaşı (float64)
- 8. satır: Developer programlama dili
Her çalışan için bilgilerini yazdırın ve bir sonraki satırda bonusunu yazdırın. Bonusları iki ondalık basamakla biçimlendirin.
Örneğin M001, Sarah Chen, 80000, 5, D001, Alex Rivera, 65000 ve Go verildiğinde çıktınız şöyle olmalıdır:
M001 Sarah Chen
16500.00
D001 Alex Rivera (Go)
6500.00Manager'ın bonus hesaplamasının (80000'in %20'si + 5×100 = 16500) Developer'ın standart %10 bonusundan nasıl farklı olduğuna dikkat edin; Developer ise bilgilerinin görüntülenme biçimini özelleştirir. Her iki tür de gömülü Employee alanlarına erişmeye ve gerektiğinde özgün metotları çağırmaya devam eder.
Kendin dene
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
// Manager detaylarını oku
managerID, _ := reader.ReadString('\n')
managerID = strings.TrimSpace(managerID)
managerName, _ := reader.ReadString('\n')
managerName = strings.TrimSpace(managerName)
managerSalaryStr, _ := reader.ReadString('\n')
managerSalary, _ := strconv.ParseFloat(strings.TrimSpace(managerSalaryStr), 64)
teamSizeStr, _ := reader.ReadString('\n')
teamSize, _ := strconv.Atoi(strings.TrimSpace(teamSizeStr))
// Developer detaylarını oku
devID, _ := reader.ReadString('\n')
devID = strings.TrimSpace(devID)
devName, _ := reader.ReadString('\n')
devName = strings.TrimSpace(devName)
devSalaryStr, _ := reader.ReadString('\n')
devSalary, _ := strconv.ParseFloat(strings.TrimSpace(devSalaryStr), 64)
devLanguage, _ := reader.ReadString('\n')
devLanguage = strings.TrimSpace(devLanguage)
// TODO: Okunan değerleri kullanarak bir Manager oluştur
// Hint: Bileşim kullan - Manager, Employee'yi gömer
// TODO: Okunan değerleri kullanarak bir Developer oluştur
// Hint: Bileşim kullan - Developer, Employee'yi gömer
// TODO: Manager bilgilerini ve bonusunu yazdır (bonus 2 ondalık basamağa biçimlendirilmiş)
// Biçimlendirme için "%.2f" ile fmt.Printf kullan
// TODO: Developer bilgilerini ve bonusunu yazdır (bonus 2 ondalık basamağa biçimlendirilmiş)
}
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Go OOP Temelleri
Harici DosyalarGo Çalışma Alanı ve ModüllerPaketler ve İçe AktarmalarDışa Aktarılan ve Aktarılmayan İsimlerGo'da OOP'ye GirişSınıf Olarak Struct'larStruct'larda Metot TanımlamaPointer ve Değer AlıcılarStruct BaşlatmaYapıcı FonksiyonlarÖzet - Basit Hesap Makinesi4Arayüzler
Arayüzlere GirişÖrtük UygulamaSözleşme Olarak ArayüzBoş Arayüz (any)Tür OnaylamaTür SeçimiArayüz BileşimiStringer ve Error ArayüzleriÖzet - Şekil Hesaplayıcı7Kapsülleme
Dışa Aktarılan ve Aktarılmayan AlanlarPaket Seviyesinde KapsüllemeGetter ve Setter MetotlarıGo'da Bilgi GizlemeÖzet - Öğrenci Kayıtları10Generics (Go 1.18+)
Generics'e GirişTür ParametreleriTür KısıtlamalarıGeneric Struct'larGeneric Metotlar İçin Geçici ÇözümÖzet - Generic Koleksiyon13Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıAbstract Factory KalıbıObserver KalıbıStrategy Kalıbı2Türler ve Struct'lar: Derinlemesine İnceleme
Temel ve Bileşik TürlerÖzel Tür TanımlamalarıStruct EtiketleriAnonim Struct'larİç İçe Geçmiş Struct'larSıfır Değerler ve VarsayılanlarÖzet - Rehber5Kalıtım Yerine Kompozisyon
Go'da Neden Kalıtım YokStruct Gömme TemelleriMetot YükseltmeBirden Fazla Struct GömmeGömme vs AgregasyonGömülü Metotları GölgelemeÖzet - Çalışan Hiyerarşisi8Hata Yönetimi ve OOP
error ArayüzüÖzel Hata TürleriHata Sarmalama (fmt.Errorf)Sentinel Hatalarerrors.Is() ve errors.As()Panic, Defer ve RecoverÖzet - Dosya Ayrıştırıcı3İşaretçiler ve Bellek
Go'da İşaretçi TemelleriStruct İşaretçileriDeğer ile Geçme ve Referans ile Geçmenew() FonksiyonuGo'da Garbage CollectionÖzet - Linked List Oluşturucu6Go'da Polimorfizm
Interface'ler ile PolimorfizmGo'da Duck TypingInterface Karşılama KurallarıPolimorfik KoleksiyonlarDependency InjectionÖzet - Payment Processor9Eşzamanlılık ve OOP
Goroutine TemelleriKanallar ve İletişimTamponlu ve Tamponsuz KanallarSelect İfadesisync.Mutex ve sync.RWMutexsync.WaitGroupThread-Safe Struct TasarımıÖzet - Worker PoolKendi başına pratik yap: Online Go derleyicisi