Buku dan Anggota
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan R di Coddy. Pelajaran 50 dari 57.
Dalam proyek ini, kamu membangun inti sistem library dengan Reference Classes, karena buku dan anggota berubah saat program berjalan: buku dipinjam dan dikembalikan, daftar pinjaman anggota bertambah dan berkurang. object Library menerima perintah, satu per baris, lalu membalas setiap perintah. Dalam lima langkah, kamu akan belajar menambahkan buku dan anggota, meminjam dan mengembalikan buku, mencari katalog, serta mencetak laporan.
ADD_BOOK 1 Dune
JOIN ada
BORROW ada 1
RETURN ada 1
SEARCH dune
REPORTProgram ini menggunakan satu class untuk setiap file. Book.R dan Member.R menyimpan dua class kecil, dan Library.R menyimpan class yang menyimpan keduanya dalam dua list bernama dan menanggapi perintah. Karena object RC adalah referensi, perubahan pada buku yang dicari dalam list juga mengubah buku di perpustakaan:
Book <- setRefClass("Book", fields = list(id = "numeric", title = "character", borrower = "character"))
books <- list()
books[["7"]] <- Book$new(id = 7, title = "Dune")
b <- books[["7"]]
b$borrower <- "ada"
cat(books[["7"]]$borrower, is.null(books[["9"]]))Output:
ada TRUEhandle(line) memisahkan perintah dan menggunakan switch() pada kata pertamanya untuk memanggil method bagi perintah tersebut. Setiap method mengembalikan balasannya sebagai vektor karakter, sehingga perintah seperti REPORT dapat membalas dengan beberapa baris. Judul dapat berisi spasi, jadi judul mencakup semua yang muncul setelah id:
p <- strsplit("ADD_BOOK 7 The Hobbit", " ")[[1]]
id <- as.numeric(p[2])
title <- paste(p[-(1:2)], collapse = " ")
cat(id, title, sep = ": ")Output:
7: The HobbitTantangan
Mudahclass Book (field id, title, borrower) dan Member (field name, borrowed) sudah tersedia. Lengkapi dua method Library di Library.R:
add_book(id, title)untukADD_BOOK <id> <title>: simpan buku baru dengan kuncias.character(id)dan berikan balasanadded book 1: Dune; jika id sudah digunakan, berikan balasanbook 1 exists.join(name)untukJOIN <name>: simpan member baru dengan nama tersebut dan berikan balasanwelcome ada; jika nama sudah ada, berikan balasanada is already a member.
Kode yang disediakan mengirim setiap baris input ke lib$handle(line) dan mencetak setiap balasan yang dikembalikan pada baris tersendiri. Nama member berupa satu kata dengan huruf kecil, id buku berupa bilangan bulat, dan input hanya berisi perintah yang telah dijelaskan sejauh ini. Perintah lain akan memberikan balasan unknown command.
Tulis kodemu di Book.R, Member.R, dan Library.R. main.R berisi kode input/output yang disediakan dan tidak dapat diedit.
Coba sendiri
source("Book.R")
source("Member.R")
source("Library.R")
# Kode input/output yang disediakan: biarkan apa adanya
input <- suppressWarnings(readLines(file("stdin")))
lib <- Library$new()
for (line in input) {
for (reply in lib$handle(line)) cat(reply, "\n", sep = "")
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
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