Menu
CoddyTech

Rangkuman: Hierarki Karyawan

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 40 dari 107.

challenge icon

Tantangan

Mudah

Mari kita bangun sistem hierarki pegawai untuk sebuah perusahaan yang menunjukkan cara composition memodelkan struktur organisasi dunia nyata dengan elegan. Kamu akan membuat tipe pegawai dasar yang dapat diperluas oleh peran khusus dengan perilaku uniknya masing-masing.

Kamu akan mengatur kodemu dalam tiga file:

  • employee.go: Buat fondasinya dengan struct Employee yang berisi field ID, Name, dan BaseSalary (float64). Tambahkan dua method:
    • Info() string yang mengembalikan [ID] [Name]
    • CalculateBonus() float64 yang mengembalikan 10% dari gaji pokok
  • roles.go: Buat dua tipe pegawai khusus yang menyematkan Employee:
    • Manager dengan field TeamSize (int): manager mendapat bonus lebih besar, yaitu 20% dari gaji pokok ditambah $100 untuk setiap anggota tim. Timpa method CalculateBonus untuk menerapkan hal ini.
    • Developer dengan field Language (string): developer tetap mendapat bonus standar, tetapi menimpa method Info untuk menambahkan bahasa pemrograman mereka: [ID] [Name] ([Language])
  • main.go: Baca detail pegawai dari input, buat satu Manager dan satu Developer, lalu tampilkan info dan bonus yang dihitung untuk setiap pegawai.

Input berikut akan diberikan:

  • Baris 1: ID Manager
  • Baris 2: Nama Manager
  • Baris 3: Gaji pokok Manager (float64)
  • Baris 4: Ukuran tim Manager (integer)
  • Baris 5: ID Developer
  • Baris 6: Nama Developer
  • Baris 7: Gaji pokok Developer (float64)
  • Baris 8: Bahasa pemrograman Developer

Untuk setiap pegawai, cetak info mereka, lalu bonus pada baris berikutnya. Format bonus dengan dua angka di belakang koma.

Misalnya, jika inputnya adalah M001, Sarah Chen, 80000, 5, D001, Alex Rivera, 65000, dan Go, outputmu seharusnya:

M001 Sarah Chen
16500.00
D001 Alex Rivera (Go)
6500.00

Perhatikan bagaimana perhitungan bonus Manager (20% dari 80000 + 5×100 = 16500) berbeda dari bonus standar Developer sebesar 10%, sementara Developer menyesuaikan cara infonya ditampilkan. Kedua tipe tetap memiliki akses ke field Employee yang disematkan dan dapat memanggil method aslinya saat diperlukan.

Coba sendiri

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)

	// Baca detail Manager
	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))

	// Baca detail Developer
	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: Buat Manager menggunakan nilai yang telah kamu baca
	// Petunjuk: Gunakan komposisi. Manager menyematkan Employee

	// TODO: Buat Developer menggunakan nilai yang telah kamu baca
	// Petunjuk: Gunakan komposisi. Developer menyematkan Employee

	// TODO: Cetak info dan bonus manager (format bonus dengan 2 angka di belakang koma)
	// Gunakan fmt.Printf dengan "%.2f" untuk mengatur format

	// TODO: Cetak info dan bonus developer (format bonus dengan 2 angka di belakang koma)
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Go online