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 sınıfının alt sınıfı yapar. Alt sınıf, üst sınıfının tüm slot'larına ek olarak kendi slot'una da sahip olur ve new() bunların tümünü 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 collieÜst sınıf için yazılan yöntemler alt sınıf için de çalışır. Bir generic’in Dog için yöntemi olmadığında, 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ı generic için kendi metodunu tanımlayarak üst sınıf metodunu geçersiz kılar. En özgül sınıf kazanır ve diğer alt sınıflar üst sınıfın metodunu korur:
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 ...is(x, "Animal") bir köpek için TRUE değerindedir ve "Animal" olarak tanımlanan bir slot, bir Dog kabul eder. Üst sınıf için yazılan kod, her alt sınıfla ç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 dosyada S4 sınıflarıdır. Employee.R, Employee sınıfını (name, salary yuvaları) ve genel describe() işlevini bildirir ve Bo earns 40000 döndüren Employee için bir yönteme ihtiyaç duyar. Manager.R içinde, Employee içeren ve reports yuvasını (numeric) ekleyen Manager sınıfını bildirin ve Ada earns 60000 and manages 4 döndürecek şekilde describe() işlevini geçersiz kılın.
Sağlanan kod, employee Bo 40000 veya manager Ada 60000 4 satırlarını okur ve describe() işlevinin sonucunu, nesnenin çalışan olup olmadığını ve yuvalarını yazdırır.
Kodunuz Employee.R ve Manager.R dosyalarına gider. main.R, sağlanan giriş/çıkış 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