S3 est le système de classes le plus ancien et le plus simple de R. Il est basé sur une approche informelle et flexible de la programmation orientée objet. Les objets S3 sont essentiellement des listes avec un attribut class qui spécifie leur classe. La distribution des méthodes se fait par des fonctions génériques, qui appellent des méthodes spécifiques en fonction de la classe de l’objet.
2 Création d’objets S3
Pour créer un objet S3, vous devez :
Créer une liste (ou un autre type d’objet).
Attribuer un nom de classe à l’objet en utilisant la fonction class().
Example 1 (Première approche)
Code
# ConstructeurPersonne <-function(nom, age) { personne <-list(nom = nom, age = age)class(personne) <-"Personne"# Attribution de la classe "Personne"return(personne)}# Création d'un objet "personne"john <-Personne("John Doe", 30)# Printprint(john)
Les fonctions génériques sont des fonctions qui se comportent différemment en fonction de la classe de l’objet qui leur est passé. Les méthodes S3 sont des fonctions spécifiques à une classe qui définissent le comportement de cette classe.
Example 3 (Classe Personne)
Code
# Définition de la méthode print.personneprint.Personne <-function(x, ...) {cat("Personne :", x$nom, "\n")cat("Âge :", x$age, "ans\n")}# Appel de la fonction print (qui utilise la méthode print.personne)print(john)
Personne : John Doe
Âge : 30 ans
3.1 Mutabilité des objets S3
Les objets S3 sont fondamentalement des listes (ou d’autres types de données) avec un attribut de classe. Les listes en R sont mutables, ce qui signifie que vous pouvez modifier leurs éléments après leur création. Cependant, il est généralement recommandé d’éviter de modifier directement les attributs d’un objet S3, surtout si cet objet est utilisé par des fonctions génériques, car cela peut entraîner des comportements imprévus. Il est préférable de créer de nouveaux objets S3 avec les modifications souhaitées, plutôt que de modifier les objets existants.
Example 4
Code
# Modification directe d'un attribut (à éviter)john$age <-31print(john)
Personne : John Doe
Âge : 31 ans
Code
# Création d'un nouvel objet avec l'âge modifié (préférable)john_modifie <-Personne(nom = john$nom, age =35)john_modifie
Personne : John Doe
Âge : 35 ans
3.2 Exemples pratiques (avec des cas d’utilisation courants)
S3 est couramment utilisé pour :
Les modèles statistiques (par exemple, les objets lm pour les modèles linéaires).
Les objets de type date et heure.
Les facteurs.
3.3 Avantages et limites de S3
Avantages
Simplicité et facilité d’utilisation.
Flexibilité pour gérer différents types d’objets.
Largement utilisé dans les packages R.
Limites
Moins formel et rigoureux que S4 ou R6.
Peut entraîner des comportements inattendus si les méthodes ne sont pas définies correctement.
Manque de vérification des types de données.
Dans la section suivante, nous explorerons le système de classes S4, qui offre une approche plus formelle et rigoureuse de la POO en R.