commit 9484b7ad8286fab055212d15fafa7e30b37aa6aa Author: Constant Eloundou Date: Tue Oct 7 16:46:34 2025 +0200 first commit diff --git a/travaux/Amphi.java b/travaux/Amphi.java new file mode 100644 index 0000000..d50ffb5 --- /dev/null +++ b/travaux/Amphi.java @@ -0,0 +1,60 @@ +package travaux; +import java.util.*; + +public class Amphi extends Salle { + + //------------------------------------------------------------------------- + // PROPRIETES + private ArrayList sallesVoisines; + private int hauteurSousPlafond; + + + //------------------------------------------------------------------------- + // CONSTRUCTEURS + public Amphi() { + sallesVoisines = new ArrayList(); + hauteurSousPlafond = 0; + } + + public Amphi(String numSalle, int ht) { + setNumero(numSalle); + sallesVoisines = new ArrayList(); + hauteurSousPlafond = ht; + } + + //------------------------------------------------------------------------- + // METHODES "INTELLIGENTES" + public void afficherInfos() { + System.out.println("Amphi :"); + super.afficherInfos(); // on exécute la méthode de la classe mère + + // on ajoute la liste des salles voisines (numéros) + System.out.print("Liste des salles voisines : "); + for (Salle s : sallesVoisines) { + System.out.println(s.getNumero()+". "); + } + + } + + + //------------------------------------------------------------------------- + // METHODES D'ACCES + + public void ajouterVoisine(Salle sa) { + sallesVoisines.add(sa); + } + + public void supprimerOuverture(Salle sa) { + sallesVoisines.remove(sa); + } + public int getHauteurSousPlafond() { + return hauteurSousPlafond; + } + + public void setHauteurSousPlafond(int hauteurSousPlafond) { + this.hauteurSousPlafond = hauteurSousPlafond; + } + + + +} \ No newline at end of file diff --git a/travaux/Batiment.java b/travaux/Batiment.java new file mode 100644 index 0000000..aa7599c --- /dev/null +++ b/travaux/Batiment.java @@ -0,0 +1,60 @@ +package travaux; + +import java.util.ArrayList; + +public class Batiment { + + //------------------------------------------------------------------------- + // PROPRIETES + private String nom; + private ArrayList listeSalles; + + //------------------------------------------------------------------------- + // CONSTRUCTEURS + + public Batiment() { + listeSalles = new ArrayList(); + nom = "NC"; // non connu + } + + public Batiment(String n) { + listeSalles = new ArrayList(); + nom = n; + } + + //------------------------------------------------------------------------- + // METHODES "INTELLIGENTES" + + public void afficherInfos() { + System.out.println("Batiment :" + nom); + + System.out.print("Liste des salles : "); + for (Salle s : listeSalles) { + s.afficherInfos(); + } + + } + //------------------------------------------------------------------------- + // METHODES D'ACCES + + public void ajouterSalle(Salle s) { + if (s==null) throw(new IllegalArgumentException("La salle ne doit pas être 'null'.")); + + listeSalles.add(s); + } + + public void supprimerSalle(Salle s) { + listeSalles.remove(s); + } + + public String getNom() { + return nom; + } + + public void setNom(String nom) { + this.nom = nom; + } + + + +} \ No newline at end of file diff --git a/travaux/Fenetre.java b/travaux/Fenetre.java new file mode 100644 index 0000000..4c91a38 --- /dev/null +++ b/travaux/Fenetre.java @@ -0,0 +1,33 @@ +package travaux; + +public class Fenetre extends Ouverture { + + private Boolean doubleVitrage; + + public Fenetre(String numS, int larg, Responsable s, boolean dv) { + super(numS,larg, s); + setDoubleVitrage(dv); + } + + public Boolean aDoubleVitrage() { + super.afficherInfos(); + if( this.doubleVitrage == true) { + System.out.println("Double vitrage: Oui"); + return true; + }else { + System.out.println("Double vitrage: Non"); + return false; + } + // TODO - implement Fenetre.aDoubleVitrage + //throw new UnsupportedOperationException(); + } + + public Boolean getDoubleVitrage() { + return doubleVitrage; + } + + public void setDoubleVitrage(Boolean doubleVitrage) { + this.doubleVitrage = doubleVitrage; + } + +} \ No newline at end of file diff --git a/travaux/GestionTravaux.java b/travaux/GestionTravaux.java new file mode 100644 index 0000000..d72aaef --- /dev/null +++ b/travaux/GestionTravaux.java @@ -0,0 +1,20 @@ +package travaux; + +import java.util.*; + +public class GestionTravaux { + + /** + * Association Type = Batiment + */ + private ArrayList listeBatiments; + /** + * Association Type = Ouverture + */ + private ArrayList listeOuvertures; + /** + * Association Type = Technicien + */ + private ArrayList listeTechiniciens; + +} \ No newline at end of file diff --git a/travaux/Ouverture.java b/travaux/Ouverture.java new file mode 100644 index 0000000..d8c8f1f --- /dev/null +++ b/travaux/Ouverture.java @@ -0,0 +1,70 @@ +package travaux; +public class Ouverture { + + //------------------------------------------------------------------------- + // PROPRIETES + + private Responsable superviseur; + private int largeur; + private String numeroSerie; + + //------------------------------------------------------------------------- + // CONSTRUCTEURS + + public Ouverture() { + largeur = 0; + numeroSerie="NC"; // non connu + } + + public Ouverture(String numS, int larg, Responsable s) { + largeur = larg; + numeroSerie = numS; + superviseur = s; + } + + + + //------------------------------------------------------------------------- + // METHODES "INTELLIGENTES" + + public void afficherInfos() { + System.out.println("Ouverture : " + numeroSerie); + System.out.println(" largeur : "+ largeur); + + if (superviseur!=null) { + // System.out.println(" superviseur : "+ superviseur.getNom()); // a activer plus tard + } else { + System.out.println(" superviseur : NC" ); + } + } + + + + //------------------------------------------------------------------------- + // METHODES D'ACCES + + public Responsable getSuperviseur() { + return superviseur; + } + + public void setSuperviseur(Responsable superviseur) { + this.superviseur = superviseur; + } + + public int getLargeur() { + return largeur; + } + + public void setLargeur(int largeur) { + this.largeur = largeur; + } + + public String getNumeroSerie() { + return numeroSerie; + } + + public void setNumeroSerie(String numeroSerie) { + this.numeroSerie = numeroSerie; + } + +} \ No newline at end of file diff --git a/travaux/README.md b/travaux/README.md new file mode 100644 index 0000000..8c0f575 --- /dev/null +++ b/travaux/README.md @@ -0,0 +1,143 @@ +***Fichier généré par IA à partir des sources et de la liste des commits*** + +# TP Ouvertures - Cheminement pédagogique + +Ce projet illustre la construction progressive d'un système de gestion de bâtiments avec leurs salles et ouvertures. L'historique Git permet de retrouver chaque étape du développement. + +## Parcours des étapes + +### Étape 00 - Démarrage du projet +**Tag:** `etape00` + +- Classes importées initialement +- Pas de méthode main +- Définition du package non faite + +**Concepts abordés:** Structure initiale d'un projet Java + +--- + +### Étape 01 - Première classe exécutable +**Tag:** `etape01` + +- Ajout de la classe `ZeMain` avec une méthode `static void main` + +**Concepts abordés:** Point d'entrée d'une application Java + +--- + +### Étape 02 - Développement de la classe Salle +**Tag:** `etape02` + +- Implémentation complète de la classe `Salle` +- Ajout des propriétés (numéro, liste des ouvertures) +- Création des constructeurs (par défaut et paramétré) +- Méthodes d'accès (getters/setters) +- Méthode `afficherInfos()` + +**Concepts abordés:** +- Encapsulation +- Constructeurs +- Collections (ArrayList) +- Association entre classes + +--- + +### Étape 03 - Spécialisation avec la classe Amphi +**Tag:** `etape03` + +- Implémentation de la classe `Amphi` qui hérite de `Salle` +- Ajout de propriétés spécifiques (hauteurSousPlafond, sallesVoisines) +- Redéfinition de la méthode `afficherInfos()` + +**Concepts abordés:** +- Héritage +- Spécialisation +- Redéfinition de méthodes (override) +- Utilisation de `super` + +--- + +### Étape 04 - Tests et validation +**Tag:** `etape04` + +- Tests dans le main pour `Ouverture`, `Salle` et `Amphi` +- Création d'instances +- Tests des méthodes d'affichage + +**Concepts abordés:** +- Tests manuels +- Instanciation d'objets +- Manipulation des collections + +--- + +### Étape 05 - Gestion des bâtiments +**Tag:** `etape05` + +- Implémentation de la classe `Batiment` +- Gestion d'une liste de salles +- Ajout de tests dans le main + +**Concepts abordés:** +- Composition +- Navigation dans les associations +- Agrégation d'objets + +--- + +### Étape 06 - Gestion des exceptions +**Tag:** `etape06` (HEAD) + +- Ajout d'une levée d'exception dans `Batiment::ajouterSalle(Salle s)` +- Exemple de traitement d'exception dans le main avec try/catch +- Validation des paramètres (vérification de null) + +**Concepts abordés:** +- Gestion des exceptions en Java +- `throw` et `IllegalArgumentException` +- Blocs try/catch +- Validation des entrées +- Différence entre exception traitée et non traitée + +--- + +## Navigation dans l'historique + +Pour revenir à une étape spécifique : +```bash +git checkout etape00 # Remplacer par le numéro d'étape souhaité +``` + +Pour revenir à la version finale : +```bash +git checkout master +``` + +Pour voir les différences entre deux étapes : +```bash +git diff etape02 etape03 +``` + +## Structure du projet + +``` +src/travaux/ +├── ZeMain.java # Point d'entrée avec tests +├── Ouverture.java # Classe de base pour fenêtres/portes +├── Salle.java # Classe représentant une salle +├── Amphi.java # Spécialisation de Salle +├── Batiment.java # Agrégation de salles +├── Responsable.java # (non utilisé dans ce TP) +└── autres classes... +``` + +## Concepts Java couverts + +1. **POO de base:** Classes, objets, encapsulation +2. **Constructeurs:** Par défaut et paramétrés +3. **Collections:** ArrayList et manipulation +4. **Héritage:** Extension de classes, super +5. **Polymorphisme:** Redéfinition de méthodes +6. **Exceptions:** Levée et traitement +7. **Associations:** Composition et agrégation diff --git a/travaux/Responsable.java b/travaux/Responsable.java new file mode 100644 index 0000000..62bd2d8 --- /dev/null +++ b/travaux/Responsable.java @@ -0,0 +1,28 @@ +package travaux; +import java.util.*; + +public class Responsable extends Technicien { + + public Responsable(String nom, int anneesExperience, ArrayList listeOuvertures) { + super(nom, anneesExperience, listeOuvertures); + // TODO Auto-generated constructor stub + } + + + + + /** + * Association Type = Ouverture + */ + private ArrayList listeSupervisions; + + + + + public void getFicheInfo() { + // TODO - implement Responsable.getFicheInfo + //throw new UnsupportedOperationException(); + super.getFicheInfo(); + } + +} \ No newline at end of file diff --git a/travaux/Salle.java b/travaux/Salle.java new file mode 100644 index 0000000..79bff7c --- /dev/null +++ b/travaux/Salle.java @@ -0,0 +1,64 @@ +package travaux; + +import java.util.ArrayList; + +public class Salle { + + //------------------------------------------------------------------------- + // PROPRIETES + private String numero; // lecture/écriture + + // traduction de l'association entre une salle et ses ouvertures + private ArrayList listeOuvertures; + + + //------------------------------------------------------------------------- + // CONSTRUCTEURS + public Salle() { + listeOuvertures = new ArrayList(); // ne pas oublier ce new + numero = "NC"; // NC pour "non connu" + } + + public Salle(String num) { + listeOuvertures = new ArrayList(); // ne pas oublier ce new + numero = num; + } + + + //------------------------------------------------------------------------- + // METHODES "INTELLIGENTES" + public void afficherInfos() { + System.out.println("Salle numero : " + numero); + System.out.println("Ouvertures : "); + + // Affichage des infos de toutes les ouvertures : + // parcours de la liste, et on demander à chaque ouverture de s'afficher + for (Ouverture ouv : listeOuvertures) { + ouv.afficherInfos(); + } + } + + + + //------------------------------------------------------------------------- + // METHODES D'ACCES + + public void ajouterOuverture(Ouverture ouv) { + listeOuvertures.add(ouv); + } + + public void supprimerOuverture(Ouverture ouv) { + listeOuvertures.remove(ouv); + } + + public String getNumero() { + return numero; + } + + + public void setNumero(String numero) { + this.numero = numero; + } + + +} \ No newline at end of file diff --git a/travaux/Technicien.java b/travaux/Technicien.java new file mode 100644 index 0000000..f2be20c --- /dev/null +++ b/travaux/Technicien.java @@ -0,0 +1,51 @@ +package travaux; +import java.util.*; + +public class Technicien { + + /** + * Association Type = Ouverture + */ + private ArrayList listeOuvertures; + private String nom; + private int anneesExperience; + + public Technicien(String nom,int anneesExperience,ArrayList listeOuvertures) { + setNom(nom); + setAnneesExperience( anneesExperience); + listeOuvertures = new ArrayList(); + } + + public void getFicheInfo() { + // TODO - implement Technicien.getFicheInfo + //throw new UnsupportedOperationException(); + System.out.println("INFO TECHNICIEN:"); + System.out.println("Nom: " +getNom()); + System.out.println("Annees experience: "+getAnneesExperience()); + } + + public ArrayList getListeOuvertures() { + return listeOuvertures; + } + + public void setListeOuvertures(ArrayList listeOuvertures) { + this.listeOuvertures = listeOuvertures; + } + + public String getNom() { + return nom; + } + + public void setNom(String nom) { + this.nom = nom; + } + + public int getAnneesExperience() { + return anneesExperience; + } + + public void setAnneesExperience(int anneesExperience) { + this.anneesExperience = anneesExperience; + } + +} \ No newline at end of file diff --git a/travaux/ZeMain.java b/travaux/ZeMain.java new file mode 100644 index 0000000..f460c56 --- /dev/null +++ b/travaux/ZeMain.java @@ -0,0 +1,56 @@ +package travaux; + +public class ZeMain { + + public static void main(String[] args) { + System.out.println("So far, so good... Yes I can spic ingliche.\n"); + + //---------------------------------------------- + + Ouverture ouv1 = new Ouverture("ouv 01", 90, null); + Ouverture ouv2 = new Ouverture("ouv 02", 70, null); + Ouverture ouv3 = new Ouverture("ouv 03", 50, null); // non ajouté, pour test plus tard + Ouverture ouv4 = new Ouverture("ouv 04", 180, null); + + Fenetre fen1 = new Fenetre("fen 01", 14, null, false); + fen1.aDoubleVitrage(); + + Salle salle1 = new Salle("S001"); + salle1.ajouterOuverture(ouv1); + salle1.ajouterOuverture(ouv2); + + + Amphi amphi1 = new Amphi("A123",500); + amphi1.ajouterOuverture(ouv4); + + Batiment bat1 = new Batiment("Usine à pizzas"); + bat1.ajouterSalle(salle1); + bat1.ajouterSalle(amphi1); + try { + bat1.ajouterSalle(null); + }catch(Exception e) { + System.out.println("Exception : " + e.getMessage()); + System.out.println("... on choisir de continuer quand même..."); + } + + + System.out.println("\n======= test salle 1 ======="); + salle1.afficherInfos(); + + System.out.println("\n======= test amphi 1 ======="); + amphi1.afficherInfos(); + + System.out.println("\n\n======= test batiment 1 ======="); + bat1.afficherInfos(); + + // Appel qui lève l'exception sans la traiter (plantage) : + bat1.ajouterSalle(null); + + //---------------------------------------------- + + System.out.println("\n\nFin du prog sans plantage ! Yeees !"); + + + } + +} diff --git a/travaux/correction-ouvertures.iml b/travaux/correction-ouvertures.iml new file mode 100644 index 0000000..dc58d13 --- /dev/null +++ b/travaux/correction-ouvertures.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file