POO avec R: Exercices
Exercise 1 (Création d’une classe “Rectangle” (S3)) Objectif
Créer une classe S3 pour représenter un rectangle avec des attributs pour la largeur et la hauteur, et des méthodes pour calculer l’aire et le périmètre.
Instructions
Créez une fonction constructeur
Rectangle(longueur, largeur), qui prend en entrée lalongueuret lalargeuret renvoie un objetS3de classe “Rectangle”. Faites ensorte de vérifier l’intégrité des données.Définissez une méthode
print.Rectanglequi affiche convenablement un “Rectangle”.Définissez une méthode
aire.Rectangle, qui calcule et renvoie l’aire d’un “Rectangle”.Définissez une méthode
perimetre.Rectangle(), qui calcule et renvoie le périmètre d’un “Rectanle”.Testez votre implémentation.
Exercise 2 (Modélisation d’une hiérarchie de véhicules (S4)) Objectif
Créer une hiérarchie de classes S4 pour représenter des véhicules, des voitures et des camions, en utilisant l’héritage.
Partie 1 : Création de la classe de base “Vehicule”
Définissez une classe S4 nommée “Vehicule” :
- Cette classe doit avoir les emplacements (slots) suivants :
marque(character)modele(character)annee(numeric)
- Créez un constructeur
Vehicule()qui prend les arguments correspondants et initialise les emplacements.
- Cette classe doit avoir les emplacements (slots) suivants :
Définissez la méthode générique
print):- Cette méthode doit afficher les informations du véhicule (marque, modèle, année).
Partie 2 : Création de la classe dérivée “Voiture”
Définissez une classe S4 nommée “Voiture” :
- Cette classe doit hériter de la classe “Vehicule”.
- Elle doit avoir un emplacement supplémentaire :
nombrePortes(integer) - Créez un constructeur
Voiture()qui prend les arguments de “Vehicule” etnombrePortes, et appelle le constructeur de la classe de base.
Redéfinissez la méthode générique
print:- Cette méthode doit afficher les informations du véhicule (marque, modèle, année) et le nombre de portes.
Partie 3 : Création de la classe dérivée “Camion”
Définissez une classe S4 nommée “Camion” :
- Cette classe doit hériter de la classe “Vehicule”.
- Elle doit avoir un emplacement supplémentaire :
capaciteChargement(numeric) - Créez un constructeur
Camion()qui prend les arguments de “Vehicule” etcapaciteChargement, et appelle le constructeur de la classe de base.
Redéfinissez la méthode générique
print:- Cette méthode doit afficher les informations du véhicule (marque, modèle, année) et la capacité de chargement.
Partie 4 : Création et utilisation des objets
Créez un objet “Voiture” :
- Utilisez le constructeur
Voiture()pour créer une voiture avec des informations de votre choix.
- Utilisez le constructeur
Créez un objet “Camion” :
- Utilisez le constructeur
Camion()pour créer un camion avec des informations de votre choix.
- Utilisez le constructeur
Appelez la méthode
print:- Appelez la méthode
printpour les objets “Voiture” et “Camion” créés.
- Appelez la méthode
Conseils
- Utilisez
setClass()pour définir les classes S4. - Utilisez
setMethod()pour définir les méthodes. - Utilisez
containsdanssetClass()pour l’héritage. - Utilisez
callNextMethod()dans les méthodes redéfinies pour appeler la méthode de la classe de base.
Exercise 3 (Modélisation d’une hiérarchie d’employés (R6)) Objectif
Créer une hiérarchie de classes R6 pour représenter des employés, des employés à temps plein et des employés à temps partiel, en utilisant l’héritage.
Partie 1 : Création de la classe de base “Employe”
Définissez une classe R6 nommée “Employe” :
- Cette classe doit avoir les champs publics suivants :
nom(character)salaire_base(numeric)
- Créez une méthode
initialize()qui prend les arguments correspondants et initialise les champs.
- Cette classe doit avoir les champs publics suivants :
Définissez une méthode
calculerSalaire():- Cette méthode doit calculer le salaire de l’employé (le salaire de base).
- Elle doit renvoyer le salaire calculé.
Définissez une méthode
print:- Cette méthode doit afficher les informations de l’employé (nom et salaire).
Partie 2 : Création de la classe dérivée “EmployeTempsPlein”
Définissez une classe R6 nommée “EmployeTempsPlein” :
- Cette classe doit hériter de la classe “Employe”.
- Elle doit avoir un champ public supplémentaire :
bonus(numeric) - Créez une méthode
initialize()qui prend les arguments de “Employe” etbonus, et appelle la méthodeinitialize()de la classe de base.
Redéfinissez la méthode
calculerSalaire:- Cette méthode doit calculer le salaire de l’employé à temps plein (salaire de base + bonus).
- Elle doit renvoyer le salaire calculé.
Redéfinissez la méthode
print:- Cette méthode doit afficher les informations de l’employé (nom et salaire).
Partie 3 : Création de la classe dérivée “EmployeTempsPartiel”
Définissez une classe R6 nommée “EmployeTempsPartiel” :
- Cette classe doit hériter de la classe “Employe”.
- Elle doit avoir un champ public supplémentaire :
heuresTravaillees(numeric)tauxHoraire(numeric)
- Créez une méthode
initialize()qui prend les arguments de “Employe” etheuresTravaillees,tauxHoraireet appelle la méthodeinitialize()de la classe de base.
Redéfinissez la méthode
calculerSalaire():- Cette méthode doit calculer le salaire de l’employé à temps partiel (heures travaillées * taux horaire).
- Elle doit renvoyer le salaire calculé.
Redéfinissez la méthode
print:- Cette méthode doit afficher les informations de l’employé (nom et salaire).
Partie 4 : Création et utilisation des objets
Créez un objet “EmployeTempsPlein” :
- Utilisez le constructeur
EmployeTempsPlein$new()pour créer un employé à temps plein avec des informations de votre choix.
- Utilisez le constructeur
Créez un objet “EmployeTempsPartiel” :
- Utilisez le constructeur
EmployeTempsPartiel$new()pour créer un employé à temps partiel avec des informations de votre choix.
- Utilisez le constructeur
Appelez les méthodes
calculerSalaire()etprint:**- Appelez les méthodes
calculerSalaire()etprintpour les objets créés.
- Appelez les méthodes
Conseils
- Utilisez
R6Class()pour définir les classes R6. - Utilisez
inheritdansR6Class()pour l’héritage. - Utilisez
super$methodName()dans les méthodes redéfinies pour appeler la méthode de la classe de base.