Rangkuman: Perakitan Robot
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 54 dari 70.
Tantangan
MudahMari rakit Robot dari komponen-komponen terpisah! Alih-alih menggunakan inheritance, kamu akan membangun robot dengan menyusunnya dari object Arm, Leg, dan Head yang terpisah, masing-masing dengan perilaku khususnya sendiri. Robot akan mengoordinasikan komponen-komponen ini melalui delegasi.
Kamu akan mengatur kodemu dalam lima file:
Arm.lua: Buat class Arm dengan constructor:new(side)yang menyimpan sisi tempat arm berada (misalnya, "left" atau "right"). Sertakan method:raise()yang mencetak{side} arm raiseddan method:lower()yang mencetak{side} arm lowered.Leg.lua: Buat class Leg dengan constructor:new(side)yang menyimpan sisinya. Sertakan method:step()yang mencetak{side} leg steps forward.Head.lua: Buat class Head dengan constructor:new(). Sertakan method:nod()yang mencetakHead nodsdan method:shake()yang mencetakHead shakes.Robot.lua: Buat class Robot yang constructornya:new(name)menyimpan nama dan membuat semua komponen secara internal: arm kiri, arm kanan, leg kiri, leg kanan, dan head. Robot harus memiliki method berikut yang mendelegasikan tugas kepada komponennya::greet(): mencetak{name} says hello!, lalu mengangkat arm kanan, kemudian menurunkannya:walk(): membuat leg kiri melangkah, lalu leg kanan melangkah:respond(answer): jika jawabannya adalah"yes", head mengangguk; jika"no", head menggeleng
main.lua: Baca input berupa nama robot dan jawaban ya/tidak. Buat Robot, minta robot menyapa, berjalan, lalu merespons berdasarkan input.
Kamu akan menerima dua input:
- Nama robot (sebuah string)
- Jawaban:
yesatauno
Outputmu harus menunjukkan robot yang mengoordinasikan komponen-komponennya:
{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nodsAtau jika jawabannya no:
{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head shakesMisalnya, jika inputnya adalah Robo dan yes, outputnya harus seperti berikut:
Robo says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nodsPerhatikan bahwa Robot tidak tahu bagaimana arm diangkat atau leg melangkah. Robot hanya memberi tahu setiap komponen apa yang harus dilakukan. Setiap komponen bersifat mandiri dan dapat digunakan kembali, sementara robot bertindak sebagai koordinator yang menyatukan semuanya!
Coba sendiri
-- main.lua: Titik awal tantangan komposisi Robot
local Robot = require('Robot')
-- Baca input
local name = io.read()
local answer = io.read()
-- TODO: Buat Robot dengan nama yang diberikan
-- TODO: Buat robot menyapa
-- TODO: Buat robot berjalan
-- TODO: Buat robot merespons berdasarkan input jawaban
Semua pelajaran di Pemrograman Berorientasi Object
1Konsep "Self"
Tabel dengan Fungsi'self' EksplisitSintaks Titik DuaTitik vs Titik DuaRangkuman, Titik Bergerak4Proyek: Bank Digital
Penyiapan Proyekmethod Setoran7Polimorfisme & Overriding
Menimpa methodMemanggil method indukDuck TypingAntarmuka UmumMemeriksa TipeRingkasan: Peran Karyawan10Proyek: Pengelola Bentuk
Penyiapan Proyekclass Rectangleclass Circlemethod KelilingKumpulan BentukLuas TotalSaring Bentuk2Pola Prototype untuk class
Konsep PrototypeMenghubungkan dengan __indexKonstruktor :new()Menginisialisasi AtributInstans yang MandiriRangkuman: Pabrik Mobil5Pembebanan Operator dalam OOP
Menjumlahkan ObjekMengurangkan ObjekMenggabungkan ObjekMembandingkan Objek (<, >)Ulasan: Aritmetika Dompet8Enkapsulasi
Konvensi PenamaanClosure untuk PrivasiAkses melalui ClosureTabel Hanya-BacaLogika ValidasiRangkuman: Brankas Aman11Pola Desain (Ringan)
Fungsi FactoryTabel SingletonPola IteratorObserver (Listener)Rangkuman, Factory Logger3State dan Behavior pada object
Variabel InstansGetter methodSetter methodProperty TerhitungMemformat stringPemeriksaan KesetaraanRangkuman: Nilai Siswa6Dasar-Dasar Pewarisan
Menyiapkan PewarisanMewarisi methodMemperluas KonstruktorMenambahkan method untuk ChildSama vs UnikRangkuman: Hierarki Bentuk9Komposisi & Mixins
Hubungan Has-ADelegasiMixins SederhanaMenerapkan Beberapa MixinsMixins vs PewarisanRangkuman: Perakitan RobotLatihan sendiri: Compiler Lua online