Benutzer:SucramZ/Objektorientierung

Aus Wikibooks

Neben einfacher Funktionen ist es auch möglich in R objektorientiert zu programmieren. Bezüglich der Objektorientierung gibt ein in R zwei Ansätze, sie so genannten S3-Klassen und die S4-Klassen. Beide bieten verschiedene Implementierungsmöglichkeiten und sollen nun in den Grundzügen erläutert werden.

S3[Bearbeiten]

Bei den S3-Klassen können beliebigen Objekten (Vektoren, Listen, Matrizen, ...) noch ein Klassenname zugeordnet werden. Diese Klassennamen ermöglichen es später funktionen auf diese Objekte anzupassen. Dieser Ansatz bietet trotz recht einfacher Handhabung viele Möglichkeiten selbst geschriebene Funktionen komfortabler zu nutzen.

Die Zuordnung eines Objektes zu einer Klasse geschieht auf folgende Weise:

> klasse4 <- c(1.0 , 2.3 , 2.0 , 1.7 , 3.0 )
> class(klasse4) <- "Noten"

Nun haben wir ein Objekt klasse4 der Objektklasse Noten. Um nun Funktionen zu schreiben, die diese Klasse behandeln muss nur der Funktionsname nach folgendem Muster gewählt werden:

"Name der generischen Funktion"."Klassenname"

Als Beispiel soll hier die Funktion print für diese Klasse neu implementiert werden damit neben den Daten auch noch der Notendurchschnitt angezeigt wird.

> print.Noten <- function( x ){
+    cat( sprintf( "Noten: %.1f" x ) ); cat( "\n" )
+    cat( sprintf( "Durchschnitt: %.1f \n",mean( x ) ) )
+ } 

Wird nun die Funktion print für die Klasse Noten aufgerufen wird intern zuerst nach der Funktion print.Noten gesucht, falls keine passende Funktion gefunden wird die Funktion plot.default gewählt. Welche Klassenfunktionen zu einer Funktion gehören kann man sich mittels methods("Funktionsname") anzeigen lassen.

S4[Bearbeiten]