Buku Besar Bank
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan R di Coddy. Pelajaran 57 dari 57.
Tantangan
SulitBuat bank kecil menggunakan Reference Classes dalam empat file. Semua definisi dibungkus dengan suppressMessages(); gunakan call. = FALSE di setiap stop().
Account.R: fieldid,owner,balance(0 di awal).deposit(x)danwithdraw(x)berhenti denganinvalid amountsaatxtidak tersedia atau kurang dari 1;withdraw()berhenti denganinsufficient funds in 2saat saldo akan turun di bawahlowest(), yaitu 0.month_end()tidak melakukan apa pun;line()mengembalikan1 ada checking: -20menggunakankind().Checking.R: jenischecking; saldo dapat turun hingga -100.Savings.R: jenissavings; paling banyak 2 penarikan per bulan (withdrawal limit on 2), hanya dihitung jika berhasil;month_end()menambahkan bunga 1%, dibulatkan ke bawah, dan mengatur ulang hitungan.Bank.R:open_account(kind, id, owner)(account 2 exists),get_account(id)(no account 9),transfer(from, to, amount), yang tidak mengubah apa pun jika penarikan gagal,month_end()untuk setiap akun, danstatement(), baris-baris semua akun yang diurutkan berdasarkan id.
Code yang disediakan membaca perintah open checking 1 ada, dep 1 100, wd 2 30, tr 1 2 50 atau month, mencetak ok atau pesan error untuk masing-masing perintah, lalu menampilkan pernyataan.
Kodemu ditulis di Account.R, Checking.R, Savings.R dan Bank.R. main.R berisi code input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
source("Account.R")
source("Checking.R")
source("Savings.R")
source("Bank.R")
# Kode input/output yang disediakan: biarkan apa adanya
input <- suppressWarnings(readLines(file("stdin")))
bank <- Bank$new()
for (line in input) {
p <- strsplit(line, " ")[[1]]
n <- suppressWarnings(as.numeric(p[-1]))
msg <- tryCatch({
switch(p[1],
open = bank$open_account(p[2], as.numeric(p[3]), p[4]),
dep = bank$get_account(n[1])$deposit(n[2]),
wd = bank$get_account(n[1])$withdraw(n[2]),
tr = bank$transfer(n[1], n[2], n[3]),
month = bank$month_end())
"ok"
}, error = function(e) conditionMessage(e))
cat(line, ": ", msg, "\n", sep = "")
}
for (l in bank$statement()) cat(l, "\n", sep = "")
Semua pelajaran di Pemrograman Berorientasi Object
1Dasar S3
Bekerja dengan fileList dengan classFungsi KonstruktorMethod print dan formatValidator dan helperUlasan: Suhu4Enkapsulasi di R
Closure sebagai objectEnvironment sebagai objectFungsi accessorMelindungi stateRangkuman: Meter Parkir2S3 Generics dan Method
Generics dan UseMethodMethod DefaultMethod untuk Base GenericsDasar-Dasar NextMethodRekap: Luas Bangun5S4 class
Mendefinisikan class S4Slots dan AksesPemeriksaan ValiditasMethod showRingkasan: Katalog Produk8Kelas Referensi
Mendefinisikan Kelas ReferensiPembaruan method dan fieldSemantik PenyalinanPewarisan dan callSuperRangkuman: Antrean Tugas11Proyek: Manajemen Perpustakaan
Buku dan AnggotaMeminjam BukuLatihan sendiri: Compiler R online