POO avec R: Exercices

Authors

Wilson Toussile1 2

1ENSPY, 2ESSFAR

Published

May 29, 2025

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

  1. Créez une fonction constructeur Rectangle(longueur, largeur), qui prend en entrée la longueur et la largeur et renvoie un objet S3 de classe “Rectangle”. Faites ensorte de vérifier l’intégrité des données.

  2. Définissez une méthode print.Rectangle qui affiche convenablement un “Rectangle”.

  3. Définissez une méthode aire.Rectangle, qui calcule et renvoie l’aire d’un “Rectangle”.

  4. Définissez une méthode perimetre.Rectangle(), qui calcule et renvoie le périmètre d’un “Rectanle”.

  5. 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”

  1. 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.
  2. 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”

  1. 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” et nombrePortes, et appelle le constructeur de la classe de base.
  2. 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”

  1. 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” et capaciteChargement, et appelle le constructeur de la classe de base.
  2. 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

  1. Créez un objet “Voiture” :

    • Utilisez le constructeur Voiture() pour créer une voiture avec des informations de votre choix.
  2. Créez un objet “Camion” :

    • Utilisez le constructeur Camion() pour créer un camion avec des informations de votre choix.
  3. Appelez la méthode print :

    • Appelez la méthode print pour les objets “Voiture” et “Camion” créés.

Conseils

  • Utilisez setClass() pour définir les classes S4.
  • Utilisez setMethod() pour définir les méthodes.
  • Utilisez contains dans setClass() 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”

  1. 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.
  2. 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é.
  3. 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”

  1. 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” et bonus, et appelle la méthode initialize() de la classe de base.
  2. 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é.
  3. 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”

  1. 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” et heuresTravaillees, tauxHoraire et appelle la méthode initialize() de la classe de base.
  2. 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é.
  3. 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

  1. Créez un objet “EmployeTempsPlein” :

    • Utilisez le constructeur EmployeTempsPlein$new() pour créer un employé à temps plein avec des informations de votre choix.
  2. Créez un objet “EmployeTempsPartiel” :

    • Utilisez le constructeur EmployeTempsPartiel$new() pour créer un employé à temps partiel avec des informations de votre choix.
  3. Appelez les méthodes calculerSalaire() et print :**

    • Appelez les méthodes calculerSalaire() et print pour les objets créés.

Conseils

  • Utilisez R6Class() pour définir les classes R6.
  • Utilisez inherit dans R6Class() pour l’héritage.
  • Utilisez super$methodName() dans les méthodes redéfinies pour appeler la méthode de la classe de base.