first commit

This commit is contained in:
2025-10-07 16:46:34 +02:00
commit 9484b7ad82
11 changed files with 596 additions and 0 deletions

60
travaux/Amphi.java Normal file
View File

@@ -0,0 +1,60 @@
package travaux;
import java.util.*;
public class Amphi extends Salle {
//-------------------------------------------------------------------------
// PROPRIETES
private ArrayList<Salle> sallesVoisines;
private int hauteurSousPlafond;
//-------------------------------------------------------------------------
// CONSTRUCTEURS
public Amphi() {
sallesVoisines = new ArrayList<Salle>();
hauteurSousPlafond = 0;
}
public Amphi(String numSalle, int ht) {
setNumero(numSalle);
sallesVoisines = new ArrayList<Salle>();
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;
}
}

60
travaux/Batiment.java Normal file
View File

@@ -0,0 +1,60 @@
package travaux;
import java.util.ArrayList;
public class Batiment {
//-------------------------------------------------------------------------
// PROPRIETES
private String nom;
private ArrayList<Salle> listeSalles;
//-------------------------------------------------------------------------
// CONSTRUCTEURS
public Batiment() {
listeSalles = new ArrayList<Salle>();
nom = "NC"; // non connu
}
public Batiment(String n) {
listeSalles = new ArrayList<Salle>();
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;
}
}

33
travaux/Fenetre.java Normal file
View File

@@ -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;
}
}

View File

@@ -0,0 +1,20 @@
package travaux;
import java.util.*;
public class GestionTravaux {
/**
* Association Type = Batiment
*/
private ArrayList<Batiment> listeBatiments;
/**
* Association Type = Ouverture
*/
private ArrayList<Ouverture> listeOuvertures;
/**
* Association Type = Technicien
*/
private ArrayList<Technicien> listeTechiniciens;
}

70
travaux/Ouverture.java Normal file
View File

@@ -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;
}
}

143
travaux/README.md Normal file
View File

@@ -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

28
travaux/Responsable.java Normal file
View File

@@ -0,0 +1,28 @@
package travaux;
import java.util.*;
public class Responsable extends Technicien {
public Responsable(String nom, int anneesExperience, ArrayList<Ouverture> listeOuvertures) {
super(nom, anneesExperience, listeOuvertures);
// TODO Auto-generated constructor stub
}
/**
* Association Type = Ouverture
*/
private ArrayList<Ouverture> listeSupervisions;
public void getFicheInfo() {
// TODO - implement Responsable.getFicheInfo
//throw new UnsupportedOperationException();
super.getFicheInfo();
}
}

64
travaux/Salle.java Normal file
View File

@@ -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<Ouverture> listeOuvertures;
//-------------------------------------------------------------------------
// CONSTRUCTEURS
public Salle() {
listeOuvertures = new ArrayList<Ouverture>(); // ne pas oublier ce new
numero = "NC"; // NC pour "non connu"
}
public Salle(String num) {
listeOuvertures = new ArrayList<Ouverture>(); // 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;
}
}

51
travaux/Technicien.java Normal file
View File

@@ -0,0 +1,51 @@
package travaux;
import java.util.*;
public class Technicien {
/**
* Association Type = Ouverture
*/
private ArrayList<Ouverture> listeOuvertures;
private String nom;
private int anneesExperience;
public Technicien(String nom,int anneesExperience,ArrayList<Ouverture> listeOuvertures) {
setNom(nom);
setAnneesExperience( anneesExperience);
listeOuvertures = new ArrayList<Ouverture>();
}
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<Ouverture> getListeOuvertures() {
return listeOuvertures;
}
public void setListeOuvertures(ArrayList<Ouverture> 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;
}
}

56
travaux/ZeMain.java Normal file
View File

@@ -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 !");
}
}

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$" isTestSource="false" packagePrefix="travaux" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>