contains ile Genişletme
Coddy'nin R Journey'sinin Nesne Tabanlı Programlama bölümünün bir parçası. Ders 32 / 57.
contains = "Animal" yeni bir S4 sınıfını Animal alt sınıfı yapar. Alt sınıf, üst sınıfının tüm slotlarına ek olarak kendi slotlarına da sahip olur ve new() hepsini alır:
setClass("Animal", slots = c(name = "character", age = "numeric"))
setClass("Dog", contains = "Animal", slots = c(breed = "character"))
rex <- new("Dog", name = "Rex", age = 3, breed = "collie")
print(slotNames("Dog"))
cat(rex@name, rex@breed)Çıktı:
[1] "breed" "name" "age"
Rex collieEbeveyn için yazılan yöntemler çocuk için de çalışır. Bir generic'in Dog için yöntemi yoksa S4, Animal için olanı kullanır:
setClass("Animal", slots = c(name = "character"))
setClass("Dog", contains = "Animal")
invisible(setGeneric("intro", function(a) standardGeneric("intro")))
setMethod("intro", "Animal", function(a) paste("I am", a@name))
print(intro(new("Dog", name = "Rex")))Çıktı:
[1] "I am Rex"Bir alt sınıf, aynı jenerik için kendi metodunu tanımlayarak üst sınıf metodunu geçersiz kılar. En özgül sınıf kazanır, diğer alt sınıflar ise üst sınıfın metodunu kullanmaya devam eder:
setClass("Animal", slots = c(name = "character"))
setClass("Dog", contains = "Animal")
setClass("Cat", contains = "Animal")
invisible(setGeneric("sound", function(a) standardGeneric("sound")))
setMethod("sound", "Animal", function(a) "...")
setMethod("sound", "Dog", function(a) "woof")
cat(sound(new("Dog", name = "Rex")), sound(new("Cat", name = "Tom")))Çıktı:
woof ...Bir köpek için is(x, "Animal") değeri TRUE olur ve "Animal" olarak tanımlanan bir yuva Dog kabul eder. Üst sınıf için yazılan kod, tüm alt sınıflarla çalışır:
setClass("Animal", slots = c(name = "character"))
setClass("Dog", contains = "Animal")
setClass("Owner", slots = c(pet = "Animal"))
rex <- new("Dog", name = "Rex")
o <- new("Owner", pet = rex)
cat(is(rex, "Animal"), is(o@pet, "Dog"))Çıktı:
TRUE TRUEGörev
KolayÇalışanlar ve yöneticiler iki dosyadaki S4 sınıflarıdır. Employee.R, Employee sınıfını (name, salary yuvaları) ve genel describe() işlevini tanımlar; ayrıca Bo earns 40000 döndüren bir Employee yöntemi gerekir. Manager.R içinde, Employee sınıfını içeren ve reports yuvasını (numeric) ekleyen Manager sınıfını tanımlayın ve describe() işlevini Ada earns 60000 and manages 4 döndürecek şekilde geçersiz kılın.
Sağlanan kod, employee Bo 40000 veya manager Ada 60000 4 satırlarını okur ve describe() sonucunu, nesnenin çalışan olup olmadığını ve yuvalarını yazdırır.
Kodunuzu Employee.R ve Manager.R dosyalarına yazın. main.R, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
source("Employee.R")
source("Manager.R")
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
for (line in input) {
p <- strsplit(line, " ")[[1]]
x <- if (p[1] == "manager") {
new("Manager", name = p[2], salary = as.numeric(p[3]), reports = as.numeric(p[4]))
} else {
new("Employee", name = p[2], salary = as.numeric(p[3]))
}
cat(describe(x), "\n", sep = "")
cat("is an employee: ", is(x, "Employee"), ", slots: ", paste(slotNames(x), collapse = ", "), "\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 - Parkmetre7S4 Kalıtım
contains ile GenişletmecallNextMethodSanal Sınıflaris() ile Türleri Kontrol EtmeTekrar - Hayvanat Bahçesi Bakıcısı2S3 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