Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
departement_info:personnels:pb:pa3 [2025/06/06 13:48] – [Récapitulons] Brutus Philippe | departement_info:personnels:pb:pa3 [2025/06/26 16:45] (Version actuelle) – [Contrôle de connaissances] Brutus Philippe |
---|
Compléter le projet pour que les préférences lues dans le fichier alarmes.xml soient prises en compte. | 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). | Ce travail est à rendre par courrier électronique sous l'intitulé "TP08 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). |
| |
---- | ---- |
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. | 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). | 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:lst25.zip|Cette version du projet}} implante une commande pour les deux invocateurs. | {{:departement_info:personnels:pb:pa3:lst25.zip|Cette version du projet}} implante une commande pour les deux invocateurs. |
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. | 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). | Ce travail est à rendre par courrier électronique sous l'intitulé "TP10 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. | {{: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 ==== | ==== Récapitulons ==== |
| |
Les arrangements caractéristiques vus précédemment sont reconnus comme bonnes pratiques en réponse à des problèmes récurrents. On les appelle {{:departement_info:personnels:pb:pa3:carte_des_patrons.pdf|patrons de conception}}. | 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}}. |
| |
| ==== Introspection (réflexivité) ==== |
| |
| L'introspection pour un langage de programmation est la capacité à traiter non seulement du domaine dans lequel on écrit un programme mais aussi à traiter du programme lui-même. Elle confère aux langages qui en sont capables des possibilités inédites. |
| |
| L'introspection est rendue possible par les méthodes proposées dans les classes Object, Class, Field et Method du paquetage java.lang.reflect, dont les principales sont présentées dans {{:departement_info:personnels:pb:pa3:introspection.pdf|ce document}}. |
| |
| {{:departement_info:personnels:pb:pa3:introspection.zip|exemple d'introspection}} |
| |
| ==== Injection de dépendances ==== |
| |
| L'injection de dépendances applique le principe d'inversion de contrôle pour créer dynamiquement (injecter) les dépendances entre les différents objets en s'appuyant sur une description (fichier de configuration ou métadonnées) ou par programme. |
| |
| Elle est utile pour remplacer une classe par une autre, notamment pour la réalisation de tests unitaires avec des objets factices ([[http://easymock.org/|easymock]], [[https://site.mockito.org/|mockito]]). |
| |
| L'{{:departement_info:personnels:pb:pa3:injection_de_dépendances.pdf|injection de dépendances}} est expliquée dans l'[[https://martinfowler.com/articles/injection.html|article de Martin Fowler]] qui évoque les frameworks permettant d'en faire (Spring par exemple). |
| |
==== Contrôle de connaissances ==== | ==== Contrôle de connaissances ==== |
| |
{{:departement_info:personnels:pb:pa3:sujet1_2021.pdf|le sujet de l'examen de première session de 2021 à Caen}} | {{: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:sujet1_2025.pdf|Le sujet}} et {{:departement_info:personnels:pb:pa3:corrigé1_2025.pdf|un corrigé}} de l'examen de première session de 2025 à Caen. |
| |
| |