Menu
CoddyTech

Rangkuman: Hierarki Bentuk

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

challenge icon

Tantangan

Mudah

Mari kita bangun hierarki bentuk yang lengkap dari awal! Kamu akan membuat class induk Shape yang menjadi induk bagi semua bentuk, lalu membuat class turunan Circle dan Square yang masing-masing memiliki properti unik sekaligus berbagi fungsi umum.

Kamu akan menyusun kodemu dalam empat file:

  • Shape.lua: Class dasar yang akan menjadi induk bagi semua bentuk. Class ini harus memiliki konstruktor :new(color) yang menyimpan warna bentuk, serta method :getColor() yang mengembalikan warna tersebut. Karena properti ini digunakan bersama, setiap bentuk, baik lingkaran maupun persegi, akan memiliki warna.
  • Circle.lua: Class turunan yang mewarisi dari Shape. Konstruktor :new(color, radius) harus memanggil konstruktor induk untuk menetapkan warna, lalu menambahkan radius sebagai atribut unik. Sertakan method :describe() yang mencetak detail lingkaran.
  • Square.lua: Class turunan lain yang mewarisi dari Shape. Konstruktor :new(color, side) juga harus memanggil konstruktor induk, lalu menyimpan panjang sisi. Sertakan juga method :describe() untuk persegi.
  • main.lua: Satukan semuanya dengan membuat instance dari kedua bentuk dan menunjukkan bahwa keduanya mewarisi dari Shape dengan benar sekaligus mempertahankan properti uniknya.

Kamu akan menerima dua input:

  1. Data Circle: warna dan radius yang dipisahkan dengan koma (misalnya, blue,5)
  2. Data Square: warna dan panjang sisi yang dipisahkan dengan koma (misalnya, red,4)

Di file utamamu, buat Circle dan Square dengan nilai yang diberikan. Lalu cetak hal-hal berikut pada baris terpisah:

  1. Panggil :describe() pada lingkaran
  2. Panggil :describe() pada persegi
  3. Cetak warna lingkaran menggunakan :getColor()
  4. Cetak warna persegi menggunakan :getColor()

Method :describe() untuk Circle harus mencetak:

Circle with radius {radius}

Method :describe() untuk Square harus mencetak:

Square with side {side}

Misalnya, jika inputnya adalah blue,5 dan red,4, outputnya harus seperti berikut:

Circle with radius 5
Square with side 4
blue
red

Ini menunjukkan pola pewarisan yang lengkap: kedua bentuk mewarisi :getColor() dari Shape (keduanya tidak pernah mendefinisikannya sendiri), sementara masing-masing memiliki atribut unik dan method :describe()!

Coba sendiri

-- main.lua: Gabungkan semuanya

local Circle = require('Circle')
local Square = require('Square')

-- Baca input untuk lingkaran (color,radius)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)

-- Baca input untuk persegi (color,side)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)

-- TODO: Buat instance Circle dengan warna dan jari-jari yang diberikan

-- TODO: Buat instance Square dengan warna dan panjang sisi yang diberikan

-- TODO: Panggil :describe() pada lingkaran

-- TODO: Panggil :describe() pada persegi

-- TODO: Cetak warna lingkaran menggunakan :getColor()

-- TODO: Cetak warna persegi menggunakan :getColor()

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler Lua online