Kitaplar ve Üyeler
Coddy'nin R Journey'sinin Nesne Tabanlı Programlama bölümünün bir parçası. Ders 50 / 57.
Bu projede Reference Classes kullanarak bir kütüphane sisteminin temelini oluşturursun; çünkü program çalışırken kitaplar ve üyeler değişir: bir kitap ödünç verilir ve iade edilir, bir üyenin ödünç aldığı kitaplar listesi büyür ve küçülür. Bir Library nesnesi, her satırda bir komut alır ve her birine yanıt verir. Beş adım boyunca kitap ve üye eklemeyi, kitap ödünç vermeyi ve geri almayı, katalogda arama yapmayı ve bir rapor yazdırmayı öğrenir.
ADD_BOOK 1 Dune
JOIN ada
BORROW ada 1
RETURN ada 1
SEARCH dune
REPORTProgramda dosya başına bir sınıf bulunur. Book.R ve Member.R iki küçük sınıfı içerir; Library.R ise bunları iki adlandırılmış listede depolayan ve komutları yanıtlayan sınıfı içerir. RC nesneleri referans olduğundan, listede aranan bir kitabı değiştirmek kütüphanedeki kitabı da değiştirir:
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"]]))Çıktı:
ada TRUEhandle(line) komutu parçalara ayırır ve ilk kelimesi üzerinde switch() kullanarak o komutun yöntemini çağırır. Her yöntem yanıtlarını bir karakter vektörü olarak döndürür; bu nedenle REPORT gibi bir komut birden çok satırla yanıt verebilir. Bir başlık boşluk içerebilir; bu nedenle kimlikten sonraki her şey başlıktır:
p <- strsplit("ADD_BOOK 7 The Hobbit", " ")[[1]]
id <- as.numeric(p[2])
title <- paste(p[-(1:2)], collapse = " ")
cat(id, title, sep = ": ")Çıktı:
7: The HobbitGörev
KolayBook sınıfı (id, title, borrower alanları) ve Member sınıfı (name, borrowed alanları) verilmiştir. Library.R içinde Library sınıfının iki yöntemini tamamlayın:
ADD_BOOK <id> <title>içinadd_book(id, title): yeni bir kitabıas.character(id)anahtarı altında saklayın veadded book 1: Duneyanıtını verin; id zaten kullanılıyorsabook 1 existsyanıtını verin.JOIN <name>içinjoin(name): yeni bir üyeyi adı altında saklayın vewelcome adayanıtını verin; ad zaten mevcutsaada is already a memberyanıtını verin.
Sağlanan kod, her giriş satırını lib$handle(line) işlevine gönderir ve döndürülen her yanıtı kendi satırında yazdırır. Üye adları tek kelimelik küçük harfli adlardır, kitap kimlikleri tam sayılardır ve girdi yalnızca şimdiye kadar açıklanan komutları içerir. Diğer tüm komutlar unknown command yanıtını verir.
Kodunuz Book.R, Member.R ve Library.R dosyalarına yazılmalıdır. main.R sağlanan giriş/çıkış kodunu içerir ve düzenlenemez.
Kendin dene
source("Book.R")
source("Member.R")
source("Library.R")
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
lib <- Library$new()
for (line in input) {
for (reply in lib$handle(line)) cat(reply, "\n", sep = "")
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Tabanlı Programlama bölümündeki tüm dersler
1S3 Temelleri
Dosyalarla ÇalışmaSınıf ile ListelerYapıcı FonksiyonlarPrint ve Format MetotlarıDoğrulayıcılar ve YardımcılarTekrar - Sıcaklıklar4R'da Kapsülleme
Nesne Olarak Closure'larNesne Olarak OrtamlarErişimci FonksiyonlarDurumu KorumaÖzet - Parkmetre2S3 Generic'leri ve Metotları
Generic'ler ve UseMethodVarsayılan MetotlarTemel Generic'ler için MetotlarNextMethod TemelleriTekrar - Şekil Alanları5S4 Sınıfları
S4 Sınıflarını TanımlamaSlotlar ve ErişimGeçerlilik KontrolleriShow MetotlarıÖzet - Ürün Kataloğu8Referans Sınıfları
Referans Sınıflarını TanımlamaMetotlar ve Alan GüncellemeleriKopyalama SemantiğiKalıtım ve callSuperÖzet - Görev Kuyruğu11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç AlmaKendi başına pratik yap: Online R derleyicisi