Menu
Coddy logo textTech

Ö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.

challenge icon

Görev

Kolay

Bir şirketin gerçek dünya organizasyon yapılarını kompozisyonun (composition) nasıl zarif bir şekilde modellediğini gösteren bir çalışan hiyerarşisi sistemi kuralım. Özel rollerin kendi benzersiz davranışlarıyla genişletebileceği temel bir çalışan türü oluşturacaksınız.

Kodunuzu üç dosya halinde düzenleyeceksiniz:

  • employee.go: ID, Name ve BaseSalary (float64) alanlarını içeren bir Employee yapısı (struct) ile temeli oluşturun. Ona iki metot ekleyin:
    • [ID] [Name] döndüren Info() string
    • Temel maaşın %10'unu döndüren CalculateBonus() float64
  • roles.go: Employee yapısını gömen (embed) iki özel çalışan türü oluşturun:
    • TeamSize alanına (int) sahip Manager — yöneticiler daha yüksek bir bonus alır: temel maaşın %20'si artı ekip üyesi başına 100$. Bunu uygulamak için CalculateBonus metodunu gölgeleyin (shadow).
    • Language alanına (string) sahip Developer — geliştiriciler standart bonusu korur ancak programlama dillerini eklemek için Info metodunu gölgelerler: [ID] [Name] ([Language])
  • main.go: Girdiden çalışan ayrıntılarını okuyun, bir Manager ve bir Developer oluşturun, ardından her çalışanın bilgisini ve hesaplanan bonusunu görüntüleyin.

Aşağıdaki girdiler sağlanacaktır:

  • Satır 1: Manager ID
  • Satır 2: Manager name
  • Satır 3: Manager base salary (float64)
  • Satır 4: Manager team size (integer)
  • Satır 5: Developer ID
  • Satır 6: Developer name
  • Satır 7: Developer base salary (float64)
  • Satır 8: Developer programming language

Her çalışan için, bilgilerini ve ardından bir sonraki satırda bonuslarını yazdırın. Bonusları iki ondalık basamakla formatlayın.

Ö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.00

Yöneticinin bonus hesaplamasının (80000'in %20'si + 5×100 = 16500) Geliştiricinin standart %10 bonusundan nasıl farklılaştığına ve Geliştiricinin bilgilerinin nasıl görüntülendiğini nasıl özelleştirdiğine dikkat edin. Her iki tür de gömülü Employee alanlarına erişmeye devam eder ve gerektiğinde orijinal metotları çağırabilir.

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şturun
	// Hint: Kompozisyon kullanın - Manager, Employee yapısını gömer

	// TODO: Okunan değerleri kullanarak bir Developer oluşturun
	// Hint: Kompozisyon kullanın - Developer, Employee yapısını gömer

	// TODO: Manager bilgilerini ve bonusunu yazdırın (bonus 2 ondalık basamakla formatlanmış olmalı)
	// Formatlama için "%.2f" ile fmt.Printf kullanın

	// TODO: Developer bilgilerini ve bonusunu yazdırın (bonus 2 ondalık basamakla formatlanmış olmalı)
}

Nesne Yönelimli Programlama bölümündeki tüm dersler