Memperluas dengan contains
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan R di Coddy. Pelajaran 32 dari 57.
contains = "Animal" menjadikan class S4 baru sebagai subclass dari Animal. Subclass memiliki semua slot dari parent-nya, ditambah slotnya sendiri, dan new() menerima semuanya:
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)Output:
[1] "breed" "name" "age"
Rex collieMethod yang ditulis untuk induknya juga berfungsi untuk anaknya. Jika generic tidak memiliki method untuk Dog, S4 menggunakan method untuk Animal:
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")))Output:
[1] "I am Rex"Class turunan mengganti method class induk dengan mendefinisikan method sendiri untuk generic yang sama. Class yang paling spesifik akan dipilih, sementara subclass lainnya tetap menggunakan method milik class induk:
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")))Output:
woof ...is(x, "Animal") bernilai TRUE untuk anjing, dan slot yang dideklarasikan sebagai "Animal" menerima Dog. Kode yang ditulis untuk class induk berfungsi dengan setiap subclass:
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"))Output:
TRUE TRUETantangan
MudahKaryawan dan manajer adalah class S4 dalam dua file. Employee.R mendeklarasikan Employee (slot name, salary) dan generic describe(), serta memerlukan method untuk Employee yang mengembalikan Bo earns 40000. Dalam Manager.R, deklarasikan Manager, yang berisi Employee dan menambahkan slot reports (numeric), lalu override describe() agar mengembalikan Ada earns 60000 and manages 4.
Kode yang disediakan membaca baris employee Bo 40000 atau manager Ada 60000 4, lalu mencetak describe(), apakah object tersebut adalah karyawan, dan slot-slotnya.
Tulis kodemu di Employee.R dan Manager.R. main.R berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
source("Employee.R")
source("Manager.R")
# Kode input/output yang disediakan: biarkan apa adanya
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 = "")
}
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 Parkir7S4 Pewarisan
Memperluas dengan containscallNextMethodClass VirtualMemeriksa Tipe dengan is()Ulasan, Penjaga Kebun Binatang2S3 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