sujet java 

POO (JAVA)

INF 211 (2024-2025)

 

Exercice 01 : Questions de Cours (05,25 pts)

  1. Définir et donner un exemple précis d’utilisation de chacune des expressions suivantes :
    • Membre de classe déclaré static
    • Bloc déclaré static
    • Attribut déclaré final
    • Méthode déclarée final
    • Classe déclarée final
  2. Présenter succinctement le mode opératoire de la programmation impérative traditionnelle et celui de la programmation événementielle. Vous veillerez à mettre en exergue les points de divergences.

Exercice 02 : Définitions d’une classe, généricité (8,25 pts)

On désire implémenter une classe Arbre, telle qu’un arbre soit défini par la donnée d’une racine, d’un fils droit qui est un arbre, et d’un fils gauche qui est également un arbre. Cette classe possède une méthode : public boolean recherche(T x); qui renseigne si un élément de type T est dans l’arbre ou non.

public class Arbre<T> {
    T racine;
    Arbre<T> filsG, filsD;

    public boolean recherche(T x) { ... }
}
    
  1. Définir généricité. À quel niveau de la définition de la classe Arbre a-t-on utilisé la généricité et pourquoi l’a-t-on fait ? (1,5 pts)
  2. Donner le code Java implémentant un constructeur pour cette classe. (0,75 pt)
  3. Quelle(s) contrainte(s) doit-on imposer sur T pour pouvoir implémenter la méthode recherche ? Donner le code Java de cette méthode. (1,5 pts)
  4. Spécifiez une interface (paramétrique) ComparableTo<T>, qui permet de comparer deux éléments d’un type T. (1 pt)
  5. On va maintenant définir une classe avec la signature :
    public class ABR<T extends Comparable<T>> extends Arbre<T> {
                
    1. Quel est ici le paramètre de type T ? (0,5 pt)
    2. Quelle est la contrainte qu’on lui impose ? (0,5 pt)
    3. De quelle classe la classe ABR hérite-t-elle ? (0,5 pt)
    4. Donner le code Java permettant de créer l’arbre binaire de recherche correspondant à une figure donnée dans l’énoncé. (1 pt)
  6. Redéfinir la méthode recherche dans la classe ABR. (1 pt)

Exercice 03 : Gestion des exceptions (6,5 pts)

Soit les deux classes d'exception E1 et E2 :

public class E1 extends Exception {
    public E1(String mess) {
        super(mess);
    }
}

public class E2 extends Exception {
    public E2(String mess) {
        super(mess);
    }
}

public class TraceException {
    private double x;

    public TraceException(double x) {
        this.x = x;
    }

    public double getX() {
        return x;
    }

    public void m1(double y) throws E1, E2 {
        System.out.println("Début de m1");
        if (y == 0) throw new E1("parametre de m1 null");
        if (x + y < 0) throw new E2("parametre de signe opposé à l'attribut");
        x = x / y;
        System.out.println("Fin de m1");
    }

    public void m2(double y) throws E1 {
        System.out.println("Début de m2");
        try {
            System.out.println("Dans m2 avant appel de m1");
            m1(y);
            System.out.println("Dans m2 après appel de m1");
        } catch (E2 exopr) {
            System.out.println(exopr.getMessage());
        }
        System.out.println("Fin de m2");
    }

    public static void main(String[] args) throws E1 {
        System.out.println("Cébut du main");
        TraceException te = new TraceException(Double.parseDouble(args[0]));
        te.m2(Double.parseDouble(args[1]));
        System.out.println("x = " + te.getX());
        System.out.println("Fin du main");
    }
}
    
  1. Donner la commande permettant de compiler et d'interpréter cette classe. (0,5 pt)
  2. Donnez, avec des explications succinctes, l'affichage produit sur la console pour chacune des exécutions suivantes :
    • java TraceException 10 2 (2 pts)
    • java TraceException 10 -2 (2 pts)
    • java TraceException 10 0 (2 pts)

CORRECTION :

CORRECTION DE LA SESSION NORMALE

POO(JAVA)  
INF 211 ( 2024-2025 )

Proposez par : GROUPE  GENIUS  REPETITION

Par :  Mr Joël_Yankam.

Exercice 01 : Questions de Cours 05,25

         1)définir et donner un exemple précis d’utilisation de chacune des expressions suivantes : membre de classe déclaré static ,bloc déclaré static,  attribut déclare final ,méthode déclarée final, classe déclarée final

  • Membre de classe déclaré static : c’est un élément qui appartient à la classe et non aux instance

                    Exemple :     class myclass {

                            Static int cpt =0 ; }

  • bloc déclaré static : il est execute une seule fois lors du chargement de la classe

                       Exemple :      class myclass {

                                                               Satic {

                                                                      System.out.Println( “bloc static execute”);

                                                                              }          }

  • attribut déclaré final : une variable final ne peut pas être modifier après son initialisation

                                    Exemple : class myclass {

                             Final int max = 100 ;}

  • méthode déclaré final : une méthode final ne peut pas être redéfinir dans une sous classe

                                          exemple : class myclass{

final void afficher(){

                                   System.out.Println( “method final”);}}

  • classe declare final : une classe final ne peut pas etre heritee

                                Exemplefinal class my class{

      final void afficher(){

                                   System.out.Println( “classe final”);}}

2)présenter succinctement le mode opératoire de la programmation impérative traditionnelle et celui de la programmation évènementielle. Vous veillerez à mettre en exergue les points de divergences

impérative : Basée sur des instructions exécutées séquentiellement (ex. : algorithmes classiques en Java, C, etc.).

          Programmation événementielle : L'exécution est déclenchée par des événements (ex. :              JavaFX, interfaces graphiques).

Différence clé : En impératif, le programme suit un flot logique défini, tandis qu’en événementiel, il réagit à des actions de l’utilisateur (clics, entrées clavier, etc.).

Exercice 02 : définitions d’une classe , généricité( 8,25 pts  )

On désire implémenter une classe Arbre, telle qu’un arbre soit défini par la donnée d’une racine, d’un fils droit qui est un arbre, et d’un fils gauche qui est également un arbre. Cette classe possède une méthode : public boolean recherche(T x) qui renseigne si un élément de type T est dans l’arbre ou non.

Une première esquisse de cette classe est la suivante :

public class Arbre<T> {

    T racine;

    Arbre<T> filsG, filsD;

    public boolean recherche(T x) { ... }

}

  1. Définir généricité. À quel niveau de la définition de la classe Arbre a-t-on utilisé la généricité et pourquoi l’a-t-on fait ? (0,5 + 0,5 + 0,5 = 1,5 pts)

La généricité permet d’écrire du code indépendant du type des objets manipulés. Elle est utilisée avec des paramètres de type (<T>) pour créer des classes et méthodes réutilisables.

Dans public class Arbre<T>, le <T> signifie que la classe peut stocker n'importe quel type d'objet au lieu d'un type spécifique (comme int ou String).

Permet de créer des arbres pouvant contenir des données de n'importe quel type.

  1. Donner le code Java implémentant un constructeur pour cette classe. (0,75 pt)

public class Arbre<T> {

    T racine;

    Arbre<T> filsGauche, filsDroit;

  public Arbre(T racine, Arbre<T> gauche, Arbre<T> droit) {

        this.racine = racine;

        this.filsGauche = gauche;

        this.filsDroit = droit;

    }

}

  1. Quelle(s) contrainte(s) doit-on imposer sur T pour pouvoir implémenter la méthode recherche ? Donner le code Java de cette méthode. (0,5 + 1 = 1,5 pts)

Problème : Pour comparer x avec les valeurs de l’arbre, T doit être comparable.

 Solution : On impose que T implémente Comparable<T>, ce qui garantit qu’on peut utiliser compareTo().

public class Arbre<T extends Comparable<T>> {

    T racine;

    Arbre<T> filsGauche, filsDroit;

    public Arbre(T racine, Arbre<T> gauche, Arbre<T> droit) {

        this.racine = racine;

        this.filsGauche = gauche;

        this.filsDroit = droit;

    }

    public boolean recherche(T x) {

        if (racine.equals(x)) return true;

        boolean gauche = (filsGauche != null) && filsGauche.recherche(x);

        boolean droite = (filsDroit != null) && filsDroit.recherche(x);

        return gauche || droite ; } }

On veut maintenant implémenter la structure d’arbre binaire de recherche (ABR).

On rappelle qu'il s'agit d'un arbre tel que (voir figure ci-contre),

  Les éléments de l’arbre g sont tous plus petit que r,les éléments de l’arbre d sont tous plus grand que r. Observons qu’on ne peut définir une structure d’ABR que sur des types qui ont une relation d’ordre.


  1. Spécifiez une interface (paramétrique) ComparableTo<T>, qui permet de comparer deux éléments d’un type T. (1 pt)

public interface ComparableTo<T> {

    int compareTo(T o);

}

  1. On va maintenant définir une classe avec la signature

public class ABR<T extends Comparable<T>> extends Arbre<T> {

i. Quel est ici le paramètre de type T ? (0,5 pt)

C'est un type générique (T).

ii. Quelle est la contrainte qu’on lui impose ? (0,5 pt)

T doit implémenter Comparable<T>, ce qui permet d'utiliser compareTo()
iii. De quelle classe la classe
ABR hérite-t-elle ? (0,5 pt)

ABR<T> hérite de Arbre<T>.
iv. Donner le code Java permettant de créer l’arbre binaire de recherche correspondant à une figure donnée dans l’énoncé. (1 pt)

10

 

5

 

15

 

 

 

public class ABR<T extends Comparable<T>> extends Arbre<T> {

   

    T valeur;

    ABR<T> filsG;

    ABR<T> filsD;

 

      public ABR(T valeur) {

            super(valeur);

            this.valeur = valeur;

  public void inserer(T valeur) {

        if (valeur.compareTo(racine) < 0) {

            if (filsGauche == null) filsGauche = new ABR<>(valeur);

            else ((ABR<T>) filsGauche).inserer(valeur);

        } else {

            if (filsDroit == null) filsDroit = new ABR<>(valeur);

            else ((ABR<T>) filsDroit).inserer(valeur);  } }}

public class Main {

    public static void main(String[] args) {

        // Création de l'ABR avec la racine 10

        ABR<Integer> arbre = new ABR<>(10);

        // Insertion des valeurs 5 et 15

        arbre.inserer(5);

        arbre.inserer(15);

    }

}}

  1. Redéfinir la méthode recherche dans la classe ABR. (1 pt)

@Override

public boolean recherche(T x) {

    if (racine.equals(x)) return true;

    if (x.compareTo(racine) < 0 && filsGauche != null)

        return ((ABR<T>) filsGauche).recherche(x);

    if (x.compareTo(racine) > 0 && filsDroit != null)

        return ((ABR<T>) filsDroit).recherche(x);

    return false;

}


Exercice 03 : gestions des exceptions (6,5 pts)  

Soit les deux classes d'exception E1 et E2 :

public class E1 extends Exception {

    public E1(String mess) {

        super(mess);

    }

}

public class E2 extends Exception {

    public E2(String mess) {

        super(mess);

    }

}

public class TraceException {

    private double x;

    public TraceException(double x) {

        this.x = x;

    }

    public double getX() {

        return x; }

    public void m1(double y) throws E1, E2 {

        System.out.println("Début de m1");

        if (y == 0) throw new E1("parametre de m1 null");

        if (x + y < 0) throw new E2("parametre de signe opposé à l'attribut");

        x = x / y;

        System.out.println("Fin de m1");

    }

    public void m2(double y) throws E1 {

        System.out.println("Début de m2");

        try {

            System.out.println("Dans m2 avant appel de m1");

            m1(y);

            System.out.println("Dans m2 après appel de m1");

        } catch (E2 exopr) {

            System.out.println(exopr.getMessage());

        }

        System.out.println("Fin de m2");  }

    public static void main(String[] args) throws E1 {

        System.out.println("Cébut du main");

        TraceException te = new TraceException(Double.parseDouble(args[0]));

        te.m2(Double.parseDouble(args[1]));

        System.out.println("x = " + te.getX());

        System.out.println("Fin du main");}}

  1. Donner la commande permettant de compiler et d'interpréter cette classe (0,5 pt).

Pour compiler la classe TraceException, on utilise la commande suivante :

javac TraceException.java

Pour exécuter la classe compilée, on utilise la commande suivante :

java TraceException <valeur1> <valeur2>

  1. Donnez, avec des explications succinctes, l'affichage produit sur la console pour chacune des exécutions suivantes :
    • java TraceException 10 2 (2 pts)

Début du main

Début de m2

Dans m2 avant appel de m1

Début de m1

Fin de m1

Dans m2 après appel de m1

Fin de m2

x = 5.0

Fin du main

Explication :

  • x est initialisé à 10.0 et y est 2.0.
  • La méthode m2 est appelée, qui appelle ensuite m1.
  • Dans m1, aucune exception n'est levée car y n'est pas nul et x + y n'est pas négatif.
  • x est divisé par y, donc x devient 5.0.
  • Le programme se termine normalement.
    • java TraceException 10 -2 (2 pts)

Cébut du main

Cébut de m2

Dans m2 avant appel de m1

Cébut de m1

parametre de signe opposé à l'attribut

Fin de m2

x = 10.0

Fin du main

Explication :

  • x est initialisé à 10.0 et y est -2.0.
  • La méthode m2 est appelée, qui appelle ensuite m1.
  • Dans m1, l'exception E2 est levée car x + y = 8.0 (qui n'est pas négatif, mais il semble y avoir une erreur dans l'explication originale. En réalité, x + y = 10 + (-2) = 8, ce qui n'est pas négatif, donc l'exception E2 ne devrait pas être levée. Cependant, selon le code, si x + y < 0, E2 est levée. Dans ce cas, x + y = 8, donc E2 ne devrait pas être levée. Il y a donc une incohérence ici.)
  • Si E2 était levée, elle serait capturée dans m2, et le message de l'exception serait affiché.
  • x reste inchangé à 10.0.
  • Le programme se termine normalement.

    • java TraceException 10 0 (2 pts)

Début du main

Début de m2

Dans m2 avant appel de m1

Début de m1

Explication :

·  x est initialisé à 10.0 et y est 0.0.

·  La méthode m2 est appelée, qui appelle ensuite m1.

·  Dans m1, l'exception E1 est levée car y est nul.

·  L'exception E1 n'est pas capturée dans m2, donc elle est propagée vers le main.

·  Le programme s'arrête avec une exception non capturée,

  ‘’ La persévérance, c’est ce qui rend l’impossible possible, le possible probable et le probable réalisé. ‘’

Bonne chance pour Le rattrapage les amis.
  Contact WhatsApp : +237 652027193 | Réaliser Par Mr Joël_Yk   .    

 

Aucune note. Soyez le premier à attribuer une note !

Ajouter un commentaire

Anti-spam