Outils pour utilisateurs

Outils du site


departement_info:personnels:pb:pa3

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
departement_info:personnels:pb:pa3 [2025/05/16 18:22] – [Java et XML] Brutus Philippedepartement_info:personnels:pb:pa3 [2025/06/07 13:18] (Version actuelle) – [Récapitulons] Brutus Philippe
Ligne 443: Ligne 443:
  - DOM : Document Object Model.  - DOM : Document Object Model.
  
-{{:departement_info:personnels:pb:pa3:sax.pdf|SAX}} permet de lire et traiter des flux XML. {{:departement_info:personnels:pb:pa3:dom.pdf|DOM}} charge le document en créant une représentation en mémoire qui peut être manipulée et reconvertie.+On utilise {{:departement_info:personnels:pb:pa3:sax.pdf|SAX}} pour extraire de l'information d'un document en définissant des déclencheurs sur certaines balises. Cela permet de lire et traiter des flux XML.
  
-En voici {{:departement_info:personnels:pb:pa3:java_XML.zip|quelques exemples d'utilisation}}.+Avec {{:departement_info:personnels:pb:pa3:dom.pdf|DOM}}, on charge le document en créant une représentation en mémoire sous forme d'arbre. Cela permet de manipuler et reconvertir le document.
  
 +Voici {{:departement_info:personnels:pb:pa3:java_XML.zip|quelques exemples d'utilisation}} de SAX et [[https://fr.wikipedia.org/wiki/JDOM|jDOM]].
  
 +----
  
 +{{:departement_info:personnels:pb:pa3:lst22.zip|Cette version du projet}} tente d'ouvrir un fichier de préférences au format XML.\\
 +En cas d'échec (fichier inexistant par exemple), elle crée un arbre des préférences par défaut puis l'enregistre.\\
  
 +==== Exercice pour la prochaine séance ====
 +
 +Compléter le projet pour que les préférences lues dans le fichier alarmes.xml soient prises en compte.
 +
 +Ce travail est à rendre par courrier électronique sous l'intitulé "TP07 NFP121" à l'adresse "philippe.brutus (à) caensup.fr" pour le 02/06/2025 à 8h00 avec en pièce jointe l'archive contenant les seuls fichiers modifiés ou ajoutés (dans leurs paquets respectifs).
 +
 +----
 +
 +{{:departement_info:personnels:pb:pa3:lst23.zip|Cette version du projet}} tente d'ouvrir un fichier de préférences au format XML.\\
 +En cas d'échec (fichier inexistant par exemple), elle crée un arbre des préférences par défaut puis l'enregistre.\\
 +En cas de succès, elle prend en compte les 2 préférences lues dans le fichier (couleur d'affichage des alarmes actives et son émis quand il est l'heure d'une alarme active).
 +
 +==== Commande ====
 +
 +Il s'agit de transformer une action à effectuer en un objet autonome (réification) qui contient tous les détails de cette action. Cette transformation permet de paramétrer des méthodes avec différentes actions, planifier leur exécution, ou les mettre dans une file d’attente.
 +
 +Cela permet de séparer complètement le code initiateur de l'action, du code de l'action elle-même.
 +
 +On utilise beaucoup cette solution dans les interfaces graphiques où, par exemple, un item de menu et un bouton sont connectés à la même commande.
 +
 +{{:departement_info:personnels:pb:pa3:commande.png?380x0&nolink}}
 +
 +==== Exercice ====
 +
 +Compléter {{:departement_info:personnels:pb:pa3:lst24.zip|cette version du projet}} pour que l'item "Nouvelle" du menu "Alarme" et le bouton "Nouvelle alarme" réalisent la même action en utilisant cette solution.
 +
 +Ce travail est à rendre par courrier électronique sous l'intitulé "TP08 NFP121" à l'adresse "philippe.brutus (à) caensup.fr" avec en pièce jointe l'archive contenant les seuls fichiers modifiés ou ajoutés (dans leurs paquets respectifs).
 +
 +{{:departement_info:personnels:pb:pa3:lst25.zip|Cette version du projet}} implante une commande pour les deux invocateurs.
 +
 +==== Memento ====
 +
 +Il s'agit de conserver l'état d'un objet pour le restaurer par la suite si nécessaire... C'est un gardien qui se charge de conserver l'état à restaurer. Si plusieurs modifications sont effectuées, le gardien peut conserver les différents états pour en rétablir un parmi ceux qu'il conserve.
 +
 +Dans les interfaces graphiques, on trouve cette solution dans le concept de presse-papiers.
 +
 +{{:departement_info:personnels:pb:pa3:memento.png?550x0&nolink}}
 +
 +==== Exercice ====
 +
 +Compléter {{:departement_info:personnels:pb:pa3:lst26.zip|cette version du projet}} pour que l'item "Annuler" du menu "Edition" soit opérationnel en permettant de revenir en arrière plusieurs fois si possible.
 +
 +Ce travail est à rendre par courrier électronique sous l'intitulé "TP09 NFP121" à l'adresse "philippe.brutus (à) caensup.fr" avec en pièce jointe l'archive contenant les seuls fichiers modifiés ou ajoutés (dans leurs paquets respectifs).
 +
 +{{:departement_info:personnels:pb:pa3:lst27.zip|Cette version du projet}} implante un état dans la classe Alarme et définit une variable d'instance de type Gardien dans la classe Controleur pour stocker des Mémentos à l'ajout, la modification ou la suppression d'une alarme, ce qui permet de définir une méthode "annule" pour restaurer la situation précédente de la liste d'alarmes.
 +
 +==== Récapitulons ====
 +
 +Les arrangements caractéristiques vus précédemment sont reconnus comme bonnes pratiques en réponse à des problèmes récurrents. Ils décrivent les grandes lignes d'une solution. On peut les modifier ou les adapter en fonction des besoins. On les appelle {{:departement_info:personnels:pb:pa3:patrons.pdf|patrons de conception}}.
 +
 +{{:departement_info:personnels:pb:pa3:carte_des_patrons.pdf|Carte des patrons de conception}}.
 +
 +==== Contrôle de connaissances ====
 +
 +L'Unité d'Enseignement est évaluée par un examen écrit noté sur 20 auquel s'ajoute un bonus pouvant aller jusqu'à 3 points pour les exercices rendus.
 +
 +{{:departement_info:personnels:pb:pa3:sujet1_2021.pdf|le sujet de l'examen de première session de 2021 à Caen}}
 +
 + public class TacheElementaire extends Tâche{
 +   private int coût;
 +   public TacheElementaire(String nom, int coût) throws RuntimeException{
 +     super(nom);
 +     if (coût < 0)
 +       throw new RuntimeException("Tentative de création d'une tâche avec un coût (" + coût + ") négatif !");
 +     this.coût = coût;
 +   }
 +   public int coût() {
 +     return coût;
 +   }
 + }
 +
 + import java.util.List;
 + import java.util.LinkedList;
 +
 + public class TâcheComplexe
 + extends Tâche
 + //implements TâcheI
 + {
 +     private List<Tâche> contenu;
 +     public TâcheComplexe(String nom) {
 +       super(nom);
 +       contenu = new LinkedList<Tâche>();
 +     }
 +     public void ajoute(Tâche t) {
 +       contenu.add(t);
 +     }
 +     public int coût() {
 +       int total = 0;
 +       for(Tâche t : contenu) {
 +         total += t.coût();
 +       }
 +       return total;
 +     }
 +     public int taille() {
 +       return contenu.size();
 +     }
 +     public void retire(int index) {
 +       contenu.remove(index);
 +     }
 + }
 +
 + //===============================================
 +
 + interface Image {
 +     public void displayImage();
 + }
 + class RealImage implements Image {
 + //...
 + }
 +
 + class ProxyImage implements Image {
 +     private RealImage image;
 +   private String nomFichier;
 +     public ProxyImage(String filename) {
 +         image = null;
 +     nomFichier = filename;
 +     }
 +     public void displayImage() {
 +         if (image == null)
 +       image = new RealImage(nomFichier);
 +     image.displayImage();
 +     }
 + }
 +
 + public class LesImages {
 +   private List<Image>contenu;
 +   public LesImages() {
 +     contenu = new LinkedList<ProxyImage>();
 +   }
 +   public void ajoute(String filename) {
 +     contenu.add(new ProxyImage(filename);
 +   }
 +   public void displayImage(int index) {
 +     contenu.get(index).displayImage();
 +   }
 +   public int taille() {
 +     return contenu.size();
 +   }
 + }
 +
 + LesImages images = new LesImages();
 + images.ajoute("fruit");
 + images.displayImage(0);
 +
  
  
departement_info/personnels/pb/pa3.1747419768.txt.gz · Dernière modification : 2025/05/16 18:22 de Brutus Philippe

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki