Menu
CoddyTech

Pemeriksaan Akhir OOP

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 70 dari 70.

challenge icon

Tantangan

Mudah

Mari gabungkan semua yang sudah kamu pelajari tentang OOP di Lua! Kamu akan membangun sistem kendaraan yang menunjukkan pewarisan, enkapsulasi melalui konvensi penamaan, dan mixin untuk kemampuan opsional.

Kamu akan menyusun kodemu dalam lima file:

  • Vehicle.lua: class dasar untuk semua kendaraan. Setiap kendaraan memiliki name dan _speed dengan konvensi privat (diinisialisasi ke 0). Sertakan getter :getName(), getter :getSpeed(), dan setter :setSpeed(value) yang menolak nilai negatif (jika nilainya negatif, cetak Speed cannot be negative dan jangan ubah nilainya). Tambahkan method :describe() yang mengembalikan "{name} moving at {speed}".
  • Refuelable.lua: tabel mixin yang berisi perilaku terkait bahan bakar. Sertakan method :refuel(amount) yang menambahkan nilai ke self._fuel, dan method :getFuel() yang mengembalikan tingkat bahan bakar saat ini.
  • Car.lua: mewarisi Vehicle dan menggunakan mixin Refuelable. Konstruktor menerima name dan menginisialisasi _fuel ke 0. Timpa :describe() agar mengembalikan "{name} moving at {speed}, fuel: {fuel}". Terapkan mixin Refuelable agar mobil memiliki kemampuan menggunakan bahan bakar.
  • Bicycle.lua: hanya mewarisi Vehicle, tidak memerlukan fungsionalitas bahan bakar. Konstruktor hanya menerima name. Sepeda menggunakan method :describe() yang diwarisi tanpa perubahan.
  • main.lua: Gabungkan semuanya! Buat mobil dan sepeda berdasarkan input, tunjukkan kemampuan keduanya yang berbeda, dan perlihatkan cara keduanya berbagi perilaku umum kendaraan sekaligus memiliki fitur yang berbeda.

Kamu akan menerima empat input:

  1. Nama mobil
  2. Nama sepeda
  3. Kecepatan yang ditetapkan untuk kedua kendaraan (angka)
  4. Jumlah bahan bakar yang ditambahkan ke mobil (angka)

Di file utama:

  1. Buat mobil dan sepeda dengan nama yang diberikan
  2. Tetapkan kecepatan untuk kedua kendaraan menggunakan input ketiga
  3. Isi bahan bakar mobil dengan input keempat
  4. Cetak deskripsi mobil
  5. Cetak deskripsi sepeda

Misalnya, jika inputnya adalah Sedan, Mountain Bike, 60, dan 45, outputnya seharusnya:

Sedan moving at 60, fuel: 45
Mountain Bike moving at 60

Jika inputnya adalah Sports Car, Road Bike, 120, dan 80, outputnya seharusnya:

Sports Car moving at 120, fuel: 80
Road Bike moving at 120

Tantangan ini menunjukkan cara pewarisan menyediakan perilaku bersama (kedua kendaraan dapat bergerak), mixin menambahkan kemampuan opsional (hanya mobil yang memerlukan bahan bakar), dan enkapsulasi melindungi integritas data (validasi kecepatan). Setiap teknik memiliki tujuan berbeda dalam desainmu!

Coba sendiri

-- main.lua: Satukan semuanya

local Car = require('Car')
local Bicycle = require('Bicycle')

-- Baca input
local carName = io.read()
local bicycleName = io.read()
local speed = tonumber(io.read())
local fuelAmount = tonumber(io.read())

-- TODO: Buat mobil dengan nama yang diberikan

-- TODO: Buat sepeda dengan nama yang diberikan

-- TODO: Atur kecepatan kedua kendaraan

-- TODO: Isi bahan bakar mobil sesuai jumlah yang diberikan

-- TODO: Tampilkan deskripsi mobil

-- TODO: Tampilkan deskripsi sepeda

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler Lua online