Menu
CoddyTech

Ringkasan: Hierarki Karyawan

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 26 dari 91.

challenge icon

Tantangan

Mudah

Mari buat sistem hierarki karyawan yang menggabungkan semua konsep pewarisan yang telah kamu pelajari di bab ini. Kamu akan membuat class dasar abstrak yang menentukan hal-hal yang harus dimiliki setiap karyawan, lalu mengembangkannya menjadi tipe karyawan khusus yang menghitung bonus dengan cara berbeda.

Kamu akan mengatur kodemu dalam empat file:

  • Employee.php: Definisikan class abstrak Employee sebagai dasar untuk semua tipe karyawan. Class ini harus memiliki property protected $name dan $salary. Constructor menerima kedua nilai tersebut dan menetapkannya. Sertakan method getName() yang mengembalikan nama, method getSalary() yang mengembalikan gaji, dan method abstrak calculateBonus() yang harus diimplementasikan oleh class turunan. Tambahkan juga method getSummary() yang mengembalikan "[name] earns $[salary] with bonus: $[bonus]", dengan [bonus] sebagai hasil pemanggilan calculateBonus().
  • Manager.php: Definisikan class Manager yang mewarisi Employee. Sertakan file Employee di bagian atas. Manager menerima bonus berdasarkan persentase. Tambahkan property protected $bonusPercentage. Constructor harus menerima nama, gaji, dan persentase bonus: gunakan parent::__construct() untuk dua nilai pertama, lalu tetapkan sendiri persentasenya. Implementasikan calculateBonus() agar mengembalikan hasil perkalian gaji dengan persentase bonus, lalu dibagi 100.
  • Developer.php: Definisikan class Developer yang mewarisi Employee. Sertakan file Employee di bagian atas. Developer menerima bonus tetap untuk penyelesaian proyek. Tambahkan property protected $projectBonus. Constructor harus menerima nama, gaji, dan jumlah bonus proyek: gunakan parent::__construct() untuk dua nilai pertama, lalu tetapkan sendiri bonus proyeknya. Implementasikan calculateBonus() agar langsung mengembalikan jumlah bonus proyek yang tetap.
  • main.php: Sertakan file Manager dan Developer. Kamu akan menerima enam input: nama manager, gaji manager, persentase bonus manager, nama developer, gaji developer, dan bonus proyek developer. Buat Manager dan Developer menggunakan nilai-nilai tersebut. Cetak hasil pemanggilan getSummary() pada manager terlebih dahulu, lalu pada developer, masing-masing di baris tersendiri.

Tantangan ini menunjukkan bagaimana class abstrak menegakkan kontrak: setiap karyawan harus dapat menghitung bonusnya, tetapi logika penghitungannya berbeda-beda sesuai peran. Manager menggunakan persentase dari gajinya, sedangkan Developer menerima jumlah tetap. Method bersama getSummary() di class induk dapat bekerja dengan lancar dengan kedua perhitungan bonus melalui polimorfisme.

Coba sendiri

<?php
require_once 'Manager.php';
require_once 'Developer.php';

// Baca input
$managerName = trim(fgets(STDIN));
$managerSalary = floatval(trim(fgets(STDIN)));
$managerBonusPercentage = floatval(trim(fgets(STDIN)));
$developerName = trim(fgets(STDIN));
$developerSalary = floatval(trim(fgets(STDIN)));
$developerProjectBonus = floatval(trim(fgets(STDIN)));

// TODO: Buat object Manager dengan input manajer

// TODO: Buat object Developer dengan input pengembang

// TODO: Cetak ringkasan manajer (getSummary())

// TODO: Cetak ringkasan pengembang (getSummary())
?>

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler PHP online