Transfer Dana
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 24 dari 70.
Tantangan
MudahBank Digitalku hampir selesai! Fitur utama terakhir adalah kemampuan untuk mentransfer uang antar rekening. Di sinilah desain berorientasi objekmu benar-benar menonjol: satu object rekening dapat berinteraksi langsung dengan object rekening lainnya.
Kamu akan menambahkan method :transfer(targetAccount, amount) yang memindahkan uang dari satu rekening ke rekening lainnya. Pikirkan apa saja yang terjadi dalam operasi ini: penarikan dari rekening sumber, lalu diikuti setoran ke rekening tujuan. Keunggulannya, kamu dapat menggunakan kembali method yang sudah kamu buat!
Lanjutkan mengembangkan file yang sudah ada:
Account.lua: Tambahkan method:transfer(targetAccount, amount)ke class Account-mu. Method ini harus mencoba menarik jumlah tersebut dariself, dan jika berhasil, menyetorkan jumlah tersebut ketargetAccount. Jika penarikan gagal karena dana tidak mencukupi, transfer tidak boleh dilakukan. Pertahankan semua fungsionalitas yang sudah ada, yaitu constructor dengan ID, deposit, withdraw, getBalance, dan __tostring.main.lua: Buat beberapa rekening dan tunjukkan transfer di antara rekening-rekening tersebut, serta perlihatkan perubahan saldo pada object rekening yang berbeda.
Kamu akan menerima lima input:
- ID rekening pertama
- ID rekening kedua
- Setoran awal ke rekening pertama
- Jumlah transfer pertama (dari rekening 1 ke rekening 2)
- Jumlah transfer kedua (dari rekening 1 ke rekening 2)
Di file utama, buat dua rekening dengan ID yang diberikan (keduanya dimulai dengan saldo 0), setorkan jumlah awal ke rekening pertama, lalu coba lakukan kedua transfer dari rekening pertama ke rekening kedua. Setelah setiap percobaan transfer, cetak kedua rekening (__tostring akan menampilkan kondisinya saat ini).
Contohnya, jika inputnya adalah 101, 102, 500, 200, dan 400, outputnya seharusnya:
Account [101]: Balance = 300
Account [102]: Balance = 200
Insufficient funds
Account [101]: Balance = 300
Account [102]: Balance = 200Rekening pertama memiliki saldo 500 setelah setoran. Transfer pertama sebesar 200 berhasil, sehingga rekening 101 memiliki saldo 300 dan rekening 102 memiliki saldo 200. Transfer kedua sebesar 400 gagal karena rekening 101 hanya memiliki saldo 300, jadi kedua saldo tetap tidak berubah.
Coba sendiri
-- Muat module Account dengan require
local Account = require('Account')
-- Baca kelima input
local id1 = io.read()
local id2 = io.read()
local initialDeposit = tonumber(io.read())
local transfer1 = tonumber(io.read())
local transfer2 = tonumber(io.read())
-- Buat dua akun dengan ID
local account1 = Account:new(id1)
local account2 = Account:new(id2)
-- Setorkan jumlah awal ke akun pertama
account1:deposit(initialDeposit)
-- TODO: Coba transfer pertama dari account1 ke account2
-- TODO: Cetak kedua akun setelah transfer pertama
-- TODO: Coba transfer kedua dari account1 ke account2
-- TODO: Cetak kedua akun setelah transfer kedua
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 BentukLatihan sendiri: Compiler Lua online