Comme je suis assez nouveau dans R, je ne sais pas ce que sont les méthodes et les objets S3. J'ai trouvé qu'il existe des systèmes d'objets S3 et S4, et certains recommandent d'utiliser S3 sur S4 si possible (voir le guide de style R de Google à http://google-styleguide.googlecode.com/svn/trunk/google-r-style. html ) *. Cependant, je ne connais pas la définition exacte des méthodes / objets S3.
Mise à jour: à partir de 2019, le lien hypertexte du guide de style R de Google est maintenant disponible .
Voici un aperçu rapide mis à jour des nombreux systèmes d'objets R selon "Advanced R, 2nd edition" (CRC Press, 2019) par Hadley Wickham (Chief Scientist chez RStudio), qui a une représentation Web ici , basée sur le chapitre sur Object -Programmation orientée .
La première édition de 2015 a une représentation Web ici , avec le chapitre correspondant sur OO ici .
Approches des systèmes OO
Hadley définit ce qui suit pour distinguer deux approches distinctes de la programmation OO:
POO fonctionnelle : les méthodes (morceaux de code appelables) appartiennent à des fonctions génériques (à ne pas confondre avec les méthodes génériques Java / C # ). Considérez les méthodes comme étant situées dans une table de recherche globale. La méthode à exécuter est trouvée par le système d'exécution en fonction du nom de la fonction et du type (ou de la classe d'objet) d'un ou plusieurs arguments passés à cette fonction (c'est ce qu'on appelle la «méthode de répartition»). Syntaxe-sage, les appels de méthode peut ressembler à des appels de fonctions ordinaires:
myfunc(object, arg1, arg2)
. Cet appel conduirait le runtime à rechercher la méthode associée à la paire ("myfunc", typeof (object)) ou éventuellement ("myfunc", typeof (object), typeof (arg1), typeof (arg2))si la langue prend en charge cela. Dans S3 de R, le nom complet de la fonction générique donne la paire (nom-fonction, classe) . Par exemple:mean.Date
est la méthode pour calculer la moyenne des dates. Essayezmethods("mean")
de lister les méthodes génériques avec le nom de la fonctionmean
. L'approche fonctionnelle OOP se retrouve par exemple dans le pionnier OO Smalltalk , le Common Lisp Object System et Julia . Hadley note que "Par rapport à R, l'implémentation de Julia est entièrement développée et extrêmement performante."POO encapsulée : les méthodes appartiennent à des objets ou à des classes, et les appels de méthode ressemblent généralement à
object.method(arg1, arg2)
. Cela s'appelle encapsulé car l'objet encapsule à la fois les données (champs) et le comportement (méthodes). Considérez la méthode comme étant située dans une table de consultation attachée à l'objet ou à la description de classe de l'objet. Le runtime recherche la méthode en fonction du nom de la méthode et éventuellement du type d'un ou plusieurs arguments. C'est l'approche que l'on trouve dans les langages OO "populaires" comme C ++, Java, C #.Dans les deux cas, si l'héritage est pris en charge (c'est probablement le cas), le moteur d'exécution peut parcourir la hiérarchie de classes vers le haut jusqu'à ce qu'il ait trouvé une correspondance pour la clé de recherche d'appel.
Comment savoir à quel système appartient un objet R
Les systèmes d'objets R
S3
S4
RC aka "Classes de référence"
R6
library(R6)
)self
,private
,super
) et les fonctions membres (fonctions assignées aux champs, mais qui ne sont pas seulement les méthodes, fonctions)Autres
Il y en a d'autres, comme R.oo (similaire à RC), proto (basé sur un prototype, pensez JavaScript) et Mutatr . Cependant, "Advanced R" dit:
N'oubliez pas de lire également le chapitre sur les compromis dans "Advanced R, 2nd edition" .
la source