Dziedziczenie

Tworzenie podklasy jest łatwe; musimy po prostu wywołać funkcję setClass tak jak poprzednio i wysłać parametr contains z nazwą klasy, z której będzie dziedziczyć. S4 obsługuje wielokrotne dziedziczenie, ale nie jest to coś, czemu będziemy się przyglądać. Zainteresowanych czytelników zachęcamy do zajrzenia do dokumentacji. Ciekawą cechą klas S4 jest to, że jeśli klasa rozszerza jeden z podstawowych typów R, pojawi się slot o nazwie .Data zawierająca dane z podstawowego typu obiektu. Kod, który działa na podstawowym typie obiektu, będzie działał bezpośrednio na części .Data obiektu, dzięki czemu nasze programowanie będzie nieco łatwiejsze:

setClass(„S4Square”,contains = „S4Rectangle”)

Zwróć uwagę, że kiedy tworzymy instancję klasy S4Square, będziemy musieli przekazać oba atrybuty dla długości i upewnić się, że są takie same. Jak widać, klasa obiektu jest poprawnie identyfikowana, a zdefiniowana wcześniej metoda polimorficzna S4print działa w porządku:

S4_square <- new („S4Square”, a = 4, b = 4, olor = new(„S4Color”, color = „red”))

class(S4_square)

#> [1] “S4Square”

#> attr (, “pakiet”)

#> [1] “.GlobalEnv”

S4print(S4_square)

#> [1] “czerwony prostokąt: 4 x 4 == 16”

Ponownie, dla kompletności, zastępujemy metodę S4print() taką, która używa słowa „square”  zamiast tego i widzimy, że działa zgodnie z oczekiwaniami:

setMethod(„S4print”, „S4square”, function(Self) {

print(paste (

S4color(self), „square:”,

self@a,”x”, self@b . „==”, S4area(self)

))

})

#> [1] “S4print”

S4print(s4_square)

#> [1] “czerwony kwadrat: 4 x 4 == 16”

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *