Ponieważ jestem całkiem nowy w R, nie wiem, jakie są metody i obiekty S3. Odkryłem, że istnieją systemy obiektowe S3 i S4, a niektórzy zalecają używanie S3 zamiast S4, jeśli to możliwe (zobacz Przewodnik po stylu R firmy Google pod adresem http://google-styleguide.googlecode.com/svn/trunk/google-r-style. html ) *. Nie znam jednak dokładnej definicji metod / obiektów S3.
Aktualizacja: Począwszy od roku 2019, R Style Guide hiperłącza Google jest teraz tutaj .
Tutaj jest zaktualizowana szybko zniszczony z licznych systemów R obiektów według „Zaawansowane badania, wydanie 2” (CRC Press, 2019) przez Hadley Wickham (Chief Scientist w RStudio), który ma reprezentację internetowej tutaj , na podstawie rozdziału na temat obiektu -Zorientowane programowanie .
Pierwsza edycja z 2015 r. Ma tutaj reprezentację internetową , a odpowiedni rozdział o OO tutaj .
Podejścia do systemów OO
Hadley definiuje następujące elementy, aby rozróżnić dwa różne podejścia do programowania obiektowego:
Funkcjonalne OOP : metody (wywoływalne fragmenty kodu) należą do funkcji ogólnych (nie należy ich mylić z metodami ogólnymi Java / C # ). Pomyśl o metodach jako znajdujących się w globalnej tabeli odnośników. Metoda do wykonania jest znajdowana przez system wykonawczy na podstawie nazwy funkcji i typu (lub klasy obiektu) co najmniej jednego argumentu przekazanego do tej funkcji (jest to nazywane „wysyłką metody”). Składnia mądry, wywołania metod może wyglądać zwykłych wywołań funkcji:
myfunc(object, arg1, arg2)
. To wywołanie spowodowałoby, że środowisko wykonawcze szukało metody skojarzonej z parą („myfunc”, typeof (object)) lub prawdopodobnie („myfunc”, typeof (object), typeof (arg1), typeof (arg2))jeśli język to obsługuje. W S3 języka R pełna nazwa funkcji ogólnej daje parę (nazwa funkcji, klasa) . Na przykład:mean.Date
to metoda obliczania średniej z dat. Spróbujmethods("mean")
wymienić ogólne metody z nazwą funkcjimean
. Podejście funkcjonalne OOP można znaleźć na przykład w pionierze OO Smalltalk , Common Lisp Object System i Julii . Hadley zauważa, że „W porównaniu z R, implementacja Julii jest w pełni rozwinięta i niezwykle wydajna”.Hermetyzowane OOP : metody należą do obiektów lub klas, a wywołania metod zwykle wyglądają jak
object.method(arg1, arg2)
. Nazywa się to hermetyzacją, ponieważ obiekt hermetyzuje zarówno dane (pola), jak i zachowanie (metody). Wyobraź sobie, że metoda znajduje się w tabeli przeglądowej dołączonej do obiektu lub opisu klasy obiektu. Środowisko wykonawcze wyszukuje metodę na podstawie nazwy metody i prawdopodobnie typu co najmniej jednego argumentu. Jest to podejście stosowane w „popularnych” językach obiektowych, takich jak C ++, Java, C #.W obu przypadkach, jeśli dziedziczenie jest obsługiwane (prawdopodobnie jest), środowisko wykonawcze może przechodzić przez hierarchię klas w górę, dopóki nie znajdzie dopasowania dla klucza wyszukiwania wywołania.
Jak dowiedzieć się, do jakiego systemu należy obiekt R.
Systemy obiektowe R.
S3
S4
RC, czyli „Klasy referencyjne”
R6
library(R6)
)self
,private
,super
) oraz funkcje składowe (funkcje przypisane do pól, które nie są jednak metody, funkcje Just)Inni
Istnieją inne, takie jak R.oo (podobne do RC), proto (oparte na prototypach, myślę, że JavaScript) i Mutatr . Jednak „Advanced R” mówi:
Koniecznie przeczytaj także rozdział poświęcony kompromisom w „Advanced R, wydanie 2” .
źródło