Kitaplar ve Üyeler
Coddy'nin R Journey'sinin Nesne Tabanlı Programlama bölümünün bir parçası. Ders 50 / 57.
Bu projede, program çalışırken kitaplar ve üyeler değiştiği için Referans Sınıfları kullanarak bir kütüphane sisteminin temelini oluşturacaksın: kitap ödünç verilir ve geri getirilir, bir üyenin ödünç aldığı kitapların listesi uzar ve kısalır. Bir Library nesnesi, her satırda bir tane olmak üzere komutları alır ve her birine yanıt verir. Beş adımda kitap ve üye eklemeyi, kitap ödünç verip geri almayı, kataloğu aramayı ve rapor yazdırmayı öğrenir.
ADD_BOOK 1 Dune
JOIN ada
BORROW ada 1
RETURN ada 1
SEARCH dune
REPORTProgramda her dosyada bir sınıf bulunur. Book.R ve Member.R iki küçük sınıfı, Library.R ise bunları adlandırılmış iki listede saklayan ve komutları yanıtlayan sınıfı içerir. RC nesneleri başvuru türünde 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 bu komuta ait yöntemi çağırmak için ilk sözcüğü üzerinde switch() kullanır. Her yöntem yanıtlarını bir karakter vektörü olarak döndürür; bu nedenle REPORT gibi bir komut birden fazla satırla yanıt verebilir. Bir başlık boşluk içerebilir, bu yüzden 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 (alanları id, title, borrower) ve Member (alanları name, borrowed) sınıfları verilmiştir. Library sınıfının Library.R dosyasındaki iki metodunu tamamlayın:
ADD_BOOK <id> <title>içinadd_book(id, title): yeni bir kitabıas.character(id)altında saklayın veadded book 1: Duneyanıtını verin; id kullanımda olduğundabook 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 mevcut olduğundaada is already a memberyanıtını verin.
Sağlanan kod, her girdi satırını lib$handle(line) işlevine gönderir ve döndürülen her yanıtı ayrı bir satıra yazdırır. Üye adları tek kelimelik ve tamamen küçük harflidir; kitap kimlikleri tam sayıdır ve girdi yalnızca şimdiye kadar açıklanan komutları içerir. Diğer tüm komutlar unknown command yanıtını verir.
Kodunuzu Book.R, Member.R ve Library.R dosyalarına yazın. main.R, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
source("Book.R")
source("Member.R")
source("Library.R")
# Sağlanan giriş/çıkış 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