diff --git a/2A/BDD/tp/s2/noSQL/tp1/films.json b/2A/BDD/tp/s2/noSQL/tp1/films.json
new file mode 100644
index 0000000..c6bb628
--- /dev/null
+++ b/2A/BDD/tp/s2/noSQL/tp1/films.json
@@ -0,0 +1,675 @@
+{
+ "_id": {
+ "$oid": "65684dcd7dd7c6e85078cad1"
+ },
+ "titre": "La ligne verte",
+ "titre_original": "The Green Mile",
+ "annee": 1999,
+ "realisation": {
+ "nom": "Darabont",
+ "prenom": "Franck"
+ },
+ "casting": [
+ {
+ "nom": "Hanks",
+ "prenom": "Tom"
+ },
+ {
+ "nom": "Duncan",
+ "prenom": "Michael Clarke"
+ },
+ {
+ "nom": "Morse",
+ "prenom": "David"
+ }
+ ]
+}
+{
+ "_id": {
+ "$oid": "65684dcd7dd7c6e85078cad2"
+ },
+ "titre": "Le parrain",
+ "titre_original": "The Godfather",
+ "annee": 1972,
+ "realisation": {
+ "nom": "Copolla",
+ "prenom": "Francis Ford"
+ },
+ "casting": [
+ {
+ "nom": "Brando",
+ "prenom": "Marlon"
+ },
+ {
+ "nom": "Pacino",
+ "prenom": "Al"
+ },
+ {
+ "nom": "Caan",
+ "prenom": "James"
+ }
+ ]
+}
+{
+ "_id": {
+ "$oid": "65684dcd7dd7c6e85078cad3"
+ },
+ "titre": "Le silence des agneaux",
+ "titre_original": "The Silence of the Lambs",
+ "annee": 1991,
+ "realisation": {
+ "nom": "Demme",
+ "prenom": "Jonathan"
+ },
+ "casting": [
+ {
+ "nom": "Foster",
+ "prenom": "Jodie"
+ },
+ {
+ "nom": "Hopkins",
+ "prenom": "Anthony"
+ }
+ ]
+}
+{
+ "_id": {
+ "$oid": "65684dcd7dd7c6e85078cad4"
+ },
+ "titre": "Forrest Gump",
+ "annee": 1994,
+ "realisation": {
+ "nom": "Zemeckis",
+ "prenom": "Robert"
+ },
+ "casting": [
+ {
+ "nom": "Hanks",
+ "prenom": "Tom"
+ },
+ {
+ "nom": "Wright",
+ "prenom": "Robin"
+ },
+ {
+ "nom": "Sinise",
+ "prenom": "Gary"
+ }
+ ]
+}
+{
+ "_id": {
+ "$oid": "65684dcd7dd7c6e85078cad5"
+ },
+ "titre": "Gladiator",
+ "titre_original": "Gladiator",
+ "annee": 2000,
+ "realisation": {
+ "nom": "Scott",
+ "prenom": "Ridley"
+ }
+}
+{
+ "_id": {
+ "$oid": "65684dcd7dd7c6e85078cad6"
+ },
+ "titre": "Matrix",
+ "titre_original": "The Matrix",
+ "annee": 1999
+}
+{
+ "_id": {
+ "$oid": "65684dcd7dd7c6e85078cad7"
+ },
+ "titre": "Star Wars, épisode I : La Menace fantôme",
+ "titre_original": "Star Wars: Episode I - The Phantom Menace",
+ "annee": 1999,
+ "realisation": {
+ "nom": "Lucas",
+ "prenom": "George"
+ }
+}
+{
+ "_id": {
+ "$oid": "65684dcd7dd7c6e85078cad8"
+ },
+ "titre": "Star Wars, épisode II : L'Attaque des clones",
+ "titre_original": "Star Wars: Episode II - Attack of the Clones",
+ "annee": 2002,
+ "realisation": {
+ "nom": "Lucas",
+ "prenom": "George"
+ }
+}
+{
+ "_id": {
+ "$oid": "65684dcd7dd7c6e85078cad9"
+ },
+ "titre": "Star Wars, épisode III : La Revanche des Sith",
+ "titre_original": "Star Wars: Episode III - Revenge of the Sith",
+ "annee": 2005,
+ "realisation": {
+ "nom": "Lucas",
+ "prenom": "George"
+ }
+}
+{
+ "_id": {
+ "$oid": "65684dcd7dd7c6e85078cada"
+ },
+ "titre": "Star Wars, épisode IV : Un nouvel espoir",
+ "titre_original": "Star Wars: Episode IV - A New Hope",
+ "annee": 1977,
+ "realisation": {
+ "nom": "Lucas",
+ "prenom": "George"
+ }
+}
+{
+ "_id": {
+ "$oid": "65684dcd7dd7c6e85078cadb"
+ },
+ "titre": "Star Wars, épisode V : L'Empire contre-attaque",
+ "titre_original": "Star Wars: Episode V - The Empire Strikes Back",
+ "annee": 1980,
+ "realisation": {
+ "nom": "Kershner",
+ "prenom": "Irvin"
+ }
+}
+{
+ "_id": {
+ "$oid": "65684dcd7dd7c6e85078cadc"
+ },
+ "titre": "Star Wars, épisode VI : Le Retour du Jedi",
+ "titre_original": "Star Wars: Episode VI - Return of the Jedi",
+ "annee": 1983,
+ "realisation": {
+ "nom": "Richard",
+ "prenom": "Marquand"
+ }
+}
+{
+ "_id": {
+ "$oid": "65684dcd7dd7c6e85078cadd"
+ },
+ "titre": "Star Wars, épisode VII : Le Réveil de la Force",
+ "titre_original": "Star Wars: Episode VII - The Force Awakens",
+ "annee": 2015,
+ "realisation": {
+ "nom": "Abrams",
+ "prenom": "J. J."
+ }
+}
+{
+ "_id": {
+ "$oid": "65684dcd7dd7c6e85078cade"
+ },
+ "titre": "Star Wars, épisode VIII : Les Derniers Jedi",
+ "titre_original": "Star Wars: Episode VIII - The Last Jedi",
+ "annee": 2017,
+ "realisation": {
+ "nom": "Johnson",
+ "prenom": "Rian"
+ }
+}
+{
+ "_id": {
+ "$oid": "65684dcd7dd7c6e85078cadf"
+ },
+ "titre": "Star Wars, épisode IX : L'Ascension de Skywalker",
+ "titre_original": "Star Wars: Episode IX - The Rise of Skywalker",
+ "annee": 2019,
+ "realisation": {
+ "nom": "Abrams",
+ "prenom": "J. J."
+ }
+}
+{
+ "_id": {
+ "$oid": "65687f987dd7c6e85078cae1"
+ },
+ "titre": "Les Aventuriers de l'arche perdue",
+ "titre_original": "Indiana Jones and the Raiders of the Lost Ark",
+ "annee": 1981,
+ "realisation": {
+ "nom": "Spielberg",
+ "prenom": "Steven"
+ },
+ "casting": [
+ {
+ "nom": "Ford",
+ "prenom": "Harrison"
+ },
+ {
+ "nom": "Allen",
+ "prenom": "Karen"
+ },
+ {
+ "nom": "Freeman",
+ "prenom": "Paul"
+ }
+ ]
+}
+{
+ "_id": {
+ "$oid": "65687f987dd7c6e85078cae2"
+ },
+ "titre": "E.T., l'extra-terrestre",
+ "titre_original": "E.T. the Extra-Terrestrial",
+ "annee": 1982,
+ "realisation": {
+ "nom": "Spielberg",
+ "prenom": "Steven"
+ }
+}
+{
+ "_id": {
+ "$oid": "65687f987dd7c6e85078cae3"
+ },
+ "titre": "Princesse Mononoke",
+ "titre_original": "Mononoke-hime",
+ "realisation": {
+ "nom": "Miyazaki",
+ "prenom": "Hayao"
+ },
+ "annee": 1997
+}
+{
+ "_id": {
+ "$oid": "6568af247dd7c6e85078cae6"
+ },
+ "titre": "Mon voisin Totoro",
+ "titre_original": "Tonari no Totoro",
+ "annee": 1988,
+ "realisation": {
+ "nom": "Miyazaki",
+ "prenom": "Hayao"
+ }
+}
+{
+ "_id": {
+ "$oid": "6568af247dd7c6e85078cae7"
+ },
+ "titre": "Kiki la petite sorcière",
+ "titre_original": "Majo no takkyūbin",
+ "annee": 1989,
+ "realisation": {
+ "nom": "Miyazaki",
+ "prenom": "Hayao"
+ }
+}
+{
+ "_id": {
+ "$oid": "6568af247dd7c6e85078cae8"
+ },
+ "titre": "Porco Rosso",
+ "titre_original": "Kurenai no buta",
+ "annee": 1992,
+ "realisation": {
+ "nom": "Miyazaki",
+ "prenom": "Hayao"
+ }
+}
+{
+ "_id": {
+ "$oid": "6568af247dd7c6e85078cae9"
+ },
+ "titre": "Le Voyage de Chihiro",
+ "titre_original": "Sen to Chihiro no kamikakushi",
+ "annee": 2001,
+ "realisation": {
+ "nom": "Miyazaki",
+ "prenom": "Hayao"
+ }
+}
+{
+ "_id": {
+ "$oid": "6568af247dd7c6e85078caea"
+ },
+ "titre": "Le Château ambulant",
+ "titre_original": "Hauru no ugoku shiro",
+ "annee": 2004,
+ "realisation": {
+ "nom": "Miyazaki",
+ "prenom": "Hayao"
+ }
+}
+{
+ "_id": {
+ "$oid": "6568af247dd7c6e85078caeb"
+ },
+ "titre": "Le Loup de Wall Street",
+ "titre_original": "The Wolf of Wall Street",
+ "annee": 2013,
+ "realisation": {
+ "nom": "Scorcese",
+ "prenom": "Martin"
+ },
+ "casting": [
+ {
+ "nom": "DiCaprio",
+ "prenom": "Leonardo"
+ },
+ {
+ "nom": "Hill",
+ "prenom": "Jonah"
+ },
+ {
+ "nom": "Robbie",
+ "prenom": "Margot"
+ },
+ {
+ "nom": "Chandler",
+ "prenom": "Kyle"
+ },
+ {
+ "nom": "Reiner",
+ "prenom": "Rob"
+ }
+ ]
+}
+{
+ "_id": {
+ "$oid": "6568af247dd7c6e85078caec"
+ },
+ "titre": "The Dark Knight : Le Chevalier noir",
+ "titre_original": "The Dark Knight",
+ "annee": 2008,
+ "realisation": {
+ "nom": "Nolan",
+ "prenom": "Christopher"
+ }
+}
+{
+ "_id": {
+ "$oid": "6568af247dd7c6e85078caed"
+ },
+ "titre": "La liste de Schindler",
+ "titre_original": "Schindler's List",
+ "annee": 1993,
+ "realisation": {
+ "nom": "Spielberg",
+ "prenom": "Steven"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569bb1e010c5e0523364044"
+ },
+ "titre": "Jurassic Park",
+ "annee": 1993,
+ "realisation": {
+ "nom": "Spielberg",
+ "prenom": "Steven"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569bb1e010c5e0523364045"
+ },
+ "titre": "Le Monde perdu : Jurassic Park",
+ "titre_original": "The Lost World: Jurrassic Park",
+ "annee": 1997,
+ "realisation": {
+ "nom": "Spielberg",
+ "prenom": "Steven"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569bb1e010c5e0523364046"
+ },
+ "titre": "Jurassic Park 3",
+ "annee": 2001,
+ "realisation": {
+ "nom": "Spielberg",
+ "prenom": "Steven"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569bb1e010c5e0523364047"
+ },
+ "titre": "Le Seigneur des anneaux : La Communauté de l'anneau",
+ "titre_original": "The Lord of the rings: The Fellowship of the Ring",
+ "annee": 2001,
+ "realisation": {
+ "nom": "Jackson",
+ "prenom": "Peter"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569bb1e010c5e0523364048"
+ },
+ "titre": "Le Seigneur des anneaux : Les Deux Tours",
+ "titre_original": "The Lord of the rings: The Two Towers",
+ "annee": 2002,
+ "realisation": {
+ "nom": "Jackson",
+ "prenom": "Peter"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569bb1e010c5e0523364049"
+ },
+ "titre": "Le Seigneur des anneaux : Le Retour du roi",
+ "titre_original": "The Lord of the rings: The Return of the King",
+ "annee": 2003,
+ "realisation": {
+ "nom": "Jackson",
+ "prenom": "Peter"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569bb1e010c5e052336404a"
+ },
+ "titre": "Pulp Fiction",
+ "annee": 1994,
+ "realisation": {
+ "nom": "Tarantino",
+ "prenom": "Quentin"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569bb1e010c5e052336404b"
+ },
+ "titre": "Fight Club",
+ "annee": 1999,
+ "realisation": {
+ "nom": "Fincher",
+ "prenom": "David"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569bd1f010c5e052336404d"
+ },
+ "titre": "Inception",
+ "annee": 2010,
+ "realisation": {
+ "nom": "Nolan",
+ "prenom": "Christopher"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569bd1f010c5e052336404e"
+ },
+ "titre": "Interstellar",
+ "annee": 2014,
+ "realisation": {
+ "nom": "Nolan",
+ "prenom": "Christopher"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569bd1f010c5e052336404f"
+ },
+ "titre": "Il faut sauver le soldat Ryan",
+ "titre_original": "Saving Private Ryan",
+ "annee": 1998,
+ "realisation": {
+ "nom": "Spielberg",
+ "prenom": "Steven"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569bd1f010c5e0523364050"
+ },
+ "titre": "Retour vers le futur",
+ "titre_original": "Back to the Future",
+ "annee": 1985,
+ "realisation": {
+ "nom": "Zemeckis",
+ "prenom": "Robert"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569bd1f010c5e0523364051"
+ },
+ "titre": "Le pianiste",
+ "titre_original": "The Pianist",
+ "annee": 2002,
+ "realisation": {
+ "nom": "Polanski",
+ "prenom": "Roman"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569bd1f010c5e0523364052"
+ },
+ "titre": "Gladiator",
+ "annee": 2000,
+ "realisation": {
+ "nom": "Scott",
+ "prenom": "Ridley"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569c4f5010c5e0523364054"
+ },
+ "titre": "Harry Potter à l'école des sorciers",
+ "titre_original": "Harry Potter and the Philosopher's Stone",
+ "annee": 2001,
+ "realisation": {
+ "nom": "Columbus",
+ "prenom": "Chris"
+ },
+ "casting": [
+ {
+ "nom": "Radcliffe",
+ "prenom": "Daniel"
+ },
+ {
+ "nom": "Grint",
+ "prenom": "Rupert"
+ },
+ {
+ "nom": "Watson",
+ "prenom": "Emma"
+ }
+ ]
+}
+{
+ "_id": {
+ "$oid": "6569c4f5010c5e0523364055"
+ },
+ "titre": "Le Roi Lion",
+ "titre_original": "The Lion King",
+ "annee": 1994
+}
+{
+ "_id": {
+ "$oid": "6569c4f5010c5e0523364056"
+ },
+ "titre": "Intouchables",
+ "annee": 2011
+}
+{
+ "_id": {
+ "$oid": "6569c4f5010c5e0523364057"
+ },
+ "titre": "Apocalypse Now",
+ "annee": 1979,
+ "realisation": {
+ "nom": "Coppola",
+ "prenom": "Francis Ford"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569c4f5010c5e0523364058"
+ },
+ "titre": "WALL·E",
+ "annee": 2008,
+ "realisation": {
+ "nom": "Stanton",
+ "prenom": "Andrew"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569c4f5010c5e0523364059"
+ },
+ "titre": "Shining",
+ "titre_original": "The Shining",
+ "annee": 1980,
+ "realisation": {
+ "nom": "Kubrick",
+ "prenom": "Stanley"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569c4f5010c5e052336405a"
+ },
+ "titre": "Inglourious Basterds",
+ "annee": 2009,
+ "realisation": {
+ "nom": "Tarantino",
+ "prenom": "Quentin"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569c4f5010c5e052336405b"
+ },
+ "titre": "Braveheart",
+ "annee": 1995,
+ "realisation": {
+ "nom": "Gibson",
+ "prenom": "Mel"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569c4f5010c5e052336405c"
+ },
+ "titre": "The Truman Show",
+ "annee": 1998,
+ "realisation": {
+ "nom": "Weir",
+ "prenom": "Peter"
+ }
+}
+{
+ "_id": {
+ "$oid": "6569c4f5010c5e052336405d"
+ },
+ "titre": "Shutter Island",
+ "annee": 2010,
+ "realisation": {
+ "nom": "Scorsese",
+ "prenom": "Martin"
+ }
+}
diff --git a/2A/BDD/tp/s2/noSQL/tp1/tp.txt b/2A/BDD/tp/s2/noSQL/tp1/tp.txt
new file mode 100644
index 0000000..9a69482
--- /dev/null
+++ b/2A/BDD/tp/s2/noSQL/tp1/tp.txt
@@ -0,0 +1,191 @@
+db.mydb.find()
+
+db.films.insertMany([
+ {
+ "titre" : "Le parrain",
+ "titre_original" : "The Godfather", "annee" : 1972,
+ "realisation" : {"nom" : "Copolla", "prenom" : "Fracis Ford"}
+ },
+ {
+ "titre" : "Le silence des agneaux",
+ "titre_original" : "The Silence of the Lambs", "annee" : 1992,
+ "realisation" : {"nom" : "Demme", "prenom" : "Jonathan"}
+ },
+ {
+ "titre" : "Forrest Gump",
+ "annee" : 1994,
+ "realisation" : {"nom" : "Zemeckis", "prenom" : "Robert"}
+ },
+])
+
+db.films.find()
+
+db.films.find().sort({"titre" : 1})
+
+db.films.find().sort({"annee" : -1})
+
+db.films.find({},["titre"])
+
+db.films.find({},["titre", "annee"])
+
+db.films.find({"annee" : 1972})
+
+db.films.updateOne(
+ {"titre" : "Le silence des agneaux"},
+ {
+ $set : {"annee" : 1991}
+ }
+)
+
+db.films.find({"titre" : "Le silence des agneaux"})
+
+db.films.find({"realisation" : {"nom" : "Darabont ", "prenom" : "Franck"}})
+db.films.find({"realisation.nom" : "Darabont "})
+
+db.films.insertOne(
+{
+ "titre" : "La marraine",
+ "annee" : 2024,
+ "realisation" : {"nom" : "Nope", "prenom" : "Epon"}
+})
+
+db.films.aggregate({
+ $set : {
+ "casting" : [{
+ "nom" : "", "prenom" : ""
+ },
+ {
+ "nom" : "", "prenom" : ""
+ }
+ ]
+ }
+})
+db.films.aggregate({
+ $addFields : {
+ "casting" : [{
+ "nom" : "", "prenom" : ""
+ },
+ {
+ "nom" : "", "prenom" : ""
+ }
+ ]
+ }
+})
+
+db.films.updateOne(
+ {
+ "titre" : "La ligne verte"
+ },
+ {
+ $set : {"casting" : [
+ {
+ "nom" : "Hanks", "prenom" : "Tom"
+ },
+ {
+ "nom" : "Duncan", "prenom" : "Michael Clarke"
+ },
+ {
+ "nom" : "Hanks", "prenom" : "Tom"
+ }
+ ]}
+ }
+)
+
+db.films.updateOne(
+ {
+ "titre" : "Le parrain"
+ },
+ {
+ $set : {"casting" : [
+ {
+ "nom" : "Brando", "prenom" : "Marlon"
+ },
+ {
+ "nom" : "Pacino", "prenom" : "Al"
+ },
+ {
+ "nom" : "Caan", "prenom" : "James"
+ }
+ ]}
+ }
+)
+
+db.films.updateOne(
+ {
+ "titre" : "Le silence des agneaux"
+ },
+ {
+ $set : {"casting" : [
+ {
+ "nom" : "Foster", "prenom" : "Jodie"
+ },
+ {
+ "nom" : "Hopkins", "prenom" : "Anthony"
+ }
+ ]}
+ }
+)
+db.films.updateOne(
+ {
+ "titre" : "Forrest Gump"
+ },
+ {
+ $set : {"casting" : [
+ {
+ "nom" : "Hanks", "prenom" : "Tom"
+ },
+ {
+ "nom" : "Wright", "prenom" : "Robin"
+ },
+ {
+ "nom" : "Sinise", "prenom" : "Gary"
+ }
+ ]}
+ }
+)
+
+db.films.find({"casting" : {"nom" : "Hanks", "prenom" : "Tom"}})
+
+db.films.insertMany([
+ {
+ "titre" : "La filmade",
+ "annee" : 2025,
+ "realisation" : {"nom" : "Nddope", "prenom" : "sEpon"},
+ "casting" : {"nom" : "Elodie", "prenom" : "sdq"}
+ },
+ {
+ "titre" : "Dune",
+ "annee" : 2024,
+ "realisation" : {"nom" : "Duné", "prenom" : "Dunard"},
+ "casting" : {"nom" : "ds", "prenom" : "sqdfdq"}
+ },
+ {
+ "titre" : "Il était une fois la vie",
+ "annee" : 1995,
+ "realisation" : {"nom" : "jsp", "prenom" : "toujourspas"},
+ "casting" : {"nom" : "Le grand", "prenom" : "barbue"}
+ },
+ {
+ "titre" : "La monique",
+ "annee" : 1995,
+ "realisation" : {"nom" : "Monique", "prenom" : "Monique"},
+ "casting" : {"nom" : "Michelle", "prenom" : "Jean"}
+ },
+ {
+ "titre" : "La liaison",
+ "annee" : 2000,
+ "realisation" : {"nom" : "Henri", "prenom" : "Assi"},
+ "casting" : {"nom" : "Henri", "prenom" : "Debout"}
+ }
+])
+
+db.films.find({}, ["titre"]).limit(6)
+
+db.films.deleteMany({"annee" : {$lte : 1995}})
+
+db.films.drop()
+
+
+mongoimport --host londres.uca.local --authenticationDatabase "admin" -u "anperederi" --db="dbanperederi" --collection ="films" films.json
+
+db.films.find({"annee" : 2001}).sort({"titre" : -1}).limit(2)
\ No newline at end of file
diff --git a/2A/PPP/s2/Communication/Oral/node_modules/reveal.js/dist/reveal.css b/2A/PPP/s2/Communication/Oral/node_modules/reveal.js/dist/reveal.css
index b7aea6e..01720f0 100644
--- a/2A/PPP/s2/Communication/Oral/node_modules/reveal.js/dist/reveal.css
+++ b/2A/PPP/s2/Communication/Oral/node_modules/reveal.js/dist/reveal.css
@@ -5,4 +5,9 @@
*
* Copyright (C) 2011-2023 Hakim El Hattab, https://hakim.se
*/
+.hello {
+ display: flex;
+ flex-direction: center;
+ height: 300px;
+}
.reveal .r-stretch,.reveal .stretch{max-width:none;max-height:none}.reveal pre.r-stretch code,.reveal pre.stretch code{height:100%;max-height:100%;box-sizing:border-box}.reveal .r-fit-text{display:inline-block;white-space:nowrap}.reveal .r-stack{display:grid}.reveal .r-stack>*{grid-area:1/1;margin:auto}.reveal .r-hstack,.reveal .r-vstack{display:flex}.reveal .r-hstack img,.reveal .r-hstack video,.reveal .r-vstack img,.reveal .r-vstack video{min-width:0;min-height:0;object-fit:contain}.reveal .r-vstack{flex-direction:column;align-items:center;justify-content:center}.reveal .r-hstack{flex-direction:row;align-items:center;justify-content:center}.reveal .items-stretch{align-items:stretch}.reveal .items-start{align-items:flex-start}.reveal .items-center{align-items:center}.reveal .items-end{align-items:flex-end}.reveal .justify-between{justify-content:space-between}.reveal .justify-around{justify-content:space-around}.reveal .justify-start{justify-content:flex-start}.reveal .justify-center{justify-content:center}.reveal .justify-end{justify-content:flex-end}html.reveal-full-page{width:100%;height:100%;height:100vh;height:calc(var(--vh,1vh) * 100);height:100svh;overflow:hidden}.reveal-viewport{height:100%;overflow:hidden;position:relative;line-height:1;margin:0;background-color:#fff;color:#000;--r-controls-spacing:12px}.reveal-viewport:fullscreen{top:0!important;left:0!important;width:100%!important;height:100%!important;transform:none!important}.reveal .fragment{transition:all .2s ease}.reveal .fragment:not(.custom){opacity:0;visibility:hidden;will-change:opacity}.reveal .fragment.visible{opacity:1;visibility:inherit}.reveal .fragment.disabled{transition:none}.reveal .fragment.grow{opacity:1;visibility:inherit}.reveal .fragment.grow.visible{transform:scale(1.3)}.reveal .fragment.shrink{opacity:1;visibility:inherit}.reveal .fragment.shrink.visible{transform:scale(.7)}.reveal .fragment.zoom-in{transform:scale(.1)}.reveal .fragment.zoom-in.visible{transform:none}.reveal .fragment.fade-out{opacity:1;visibility:inherit}.reveal .fragment.fade-out.visible{opacity:0;visibility:hidden}.reveal .fragment.semi-fade-out{opacity:1;visibility:inherit}.reveal .fragment.semi-fade-out.visible{opacity:.5;visibility:inherit}.reveal .fragment.strike{opacity:1;visibility:inherit}.reveal .fragment.strike.visible{text-decoration:line-through}.reveal .fragment.fade-up{transform:translate(0,40px)}.reveal .fragment.fade-up.visible{transform:translate(0,0)}.reveal .fragment.fade-down{transform:translate(0,-40px)}.reveal .fragment.fade-down.visible{transform:translate(0,0)}.reveal .fragment.fade-right{transform:translate(-40px,0)}.reveal .fragment.fade-right.visible{transform:translate(0,0)}.reveal .fragment.fade-left{transform:translate(40px,0)}.reveal .fragment.fade-left.visible{transform:translate(0,0)}.reveal .fragment.current-visible,.reveal .fragment.fade-in-then-out{opacity:0;visibility:hidden}.reveal .fragment.current-visible.current-fragment,.reveal .fragment.fade-in-then-out.current-fragment{opacity:1;visibility:inherit}.reveal .fragment.fade-in-then-semi-out{opacity:0;visibility:hidden}.reveal .fragment.fade-in-then-semi-out.visible{opacity:.5;visibility:inherit}.reveal .fragment.fade-in-then-semi-out.current-fragment{opacity:1;visibility:inherit}.reveal .fragment.highlight-blue,.reveal .fragment.highlight-current-blue,.reveal .fragment.highlight-current-green,.reveal .fragment.highlight-current-red,.reveal .fragment.highlight-green,.reveal .fragment.highlight-red{opacity:1;visibility:inherit}.reveal .fragment.highlight-red.visible{color:#ff2c2d}.reveal .fragment.highlight-green.visible{color:#17ff2e}.reveal .fragment.highlight-blue.visible{color:#1b91ff}.reveal .fragment.highlight-current-red.current-fragment{color:#ff2c2d}.reveal .fragment.highlight-current-green.current-fragment{color:#17ff2e}.reveal .fragment.highlight-current-blue.current-fragment{color:#1b91ff}.reveal:after{content:"";font-style:italic}.reveal iframe{z-index:1}.reveal a{position:relative}@keyframes bounce-right{0%,10%,25%,40%,50%{transform:translateX(0)}20%{transform:translateX(10px)}30%{transform:translateX(-5px)}}@keyframes bounce-left{0%,10%,25%,40%,50%{transform:translateX(0)}20%{transform:translateX(-10px)}30%{transform:translateX(5px)}}@keyframes bounce-down{0%,10%,25%,40%,50%{transform:translateY(0)}20%{transform:translateY(10px)}30%{transform:translateY(-5px)}}.reveal .controls{display:none;position:absolute;top:auto;bottom:var(--r-controls-spacing);right:var(--r-controls-spacing);left:auto;z-index:11;color:#000;pointer-events:none;font-size:10px}.reveal .controls button{position:absolute;padding:0;background-color:transparent;border:0;outline:0;cursor:pointer;color:currentColor;transform:scale(.9999);transition:color .2s ease,opacity .2s ease,transform .2s ease;z-index:2;pointer-events:auto;font-size:inherit;visibility:hidden;opacity:0;-webkit-appearance:none;-webkit-tap-highlight-color:transparent}.reveal .controls .controls-arrow:after,.reveal .controls .controls-arrow:before{content:"";position:absolute;top:0;left:0;width:2.6em;height:.5em;border-radius:.25em;background-color:currentColor;transition:all .15s ease,background-color .8s ease;transform-origin:.2em 50%;will-change:transform}.reveal .controls .controls-arrow{position:relative;width:3.6em;height:3.6em}.reveal .controls .controls-arrow:before{transform:translateX(.5em) translateY(1.55em) rotate(45deg)}.reveal .controls .controls-arrow:after{transform:translateX(.5em) translateY(1.55em) rotate(-45deg)}.reveal .controls .controls-arrow:hover:before{transform:translateX(.5em) translateY(1.55em) rotate(40deg)}.reveal .controls .controls-arrow:hover:after{transform:translateX(.5em) translateY(1.55em) rotate(-40deg)}.reveal .controls .controls-arrow:active:before{transform:translateX(.5em) translateY(1.55em) rotate(36deg)}.reveal .controls .controls-arrow:active:after{transform:translateX(.5em) translateY(1.55em) rotate(-36deg)}.reveal .controls .navigate-left{right:6.4em;bottom:3.2em;transform:translateX(-10px)}.reveal .controls .navigate-left.highlight{animation:bounce-left 2s 50 both ease-out}.reveal .controls .navigate-right{right:0;bottom:3.2em;transform:translateX(10px)}.reveal .controls .navigate-right .controls-arrow{transform:rotate(180deg)}.reveal .controls .navigate-right.highlight{animation:bounce-right 2s 50 both ease-out}.reveal .controls .navigate-up{right:3.2em;bottom:6.4em;transform:translateY(-10px)}.reveal .controls .navigate-up .controls-arrow{transform:rotate(90deg)}.reveal .controls .navigate-down{right:3.2em;bottom:-1.4em;padding-bottom:1.4em;transform:translateY(10px)}.reveal .controls .navigate-down .controls-arrow{transform:rotate(-90deg)}.reveal .controls .navigate-down.highlight{animation:bounce-down 2s 50 both ease-out}.reveal .controls[data-controls-back-arrows=faded] .navigate-up.enabled{opacity:.3}.reveal .controls[data-controls-back-arrows=faded] .navigate-up.enabled:hover{opacity:1}.reveal .controls[data-controls-back-arrows=hidden] .navigate-up.enabled{opacity:0;visibility:hidden}.reveal .controls .enabled{visibility:visible;opacity:.9;cursor:pointer;transform:none}.reveal .controls .enabled.fragmented{opacity:.5}.reveal .controls .enabled.fragmented:hover,.reveal .controls .enabled:hover{opacity:1}.reveal:not(.rtl) .controls[data-controls-back-arrows=faded] .navigate-left.enabled{opacity:.3}.reveal:not(.rtl) .controls[data-controls-back-arrows=faded] .navigate-left.enabled:hover{opacity:1}.reveal:not(.rtl) .controls[data-controls-back-arrows=hidden] .navigate-left.enabled{opacity:0;visibility:hidden}.reveal.rtl .controls[data-controls-back-arrows=faded] .navigate-right.enabled{opacity:.3}.reveal.rtl .controls[data-controls-back-arrows=faded] .navigate-right.enabled:hover{opacity:1}.reveal.rtl .controls[data-controls-back-arrows=hidden] .navigate-right.enabled{opacity:0;visibility:hidden}.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-down,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-up{display:none}.reveal:not(.has-vertical-slides) .controls .navigate-left,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-left{bottom:1.4em;right:5.5em}.reveal:not(.has-vertical-slides) .controls .navigate-right,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-right{bottom:1.4em;right:.5em}.reveal:not(.has-horizontal-slides) .controls .navigate-up{right:1.4em;bottom:5em}.reveal:not(.has-horizontal-slides) .controls .navigate-down{right:1.4em;bottom:.5em}.reveal.has-dark-background .controls{color:#fff}.reveal.has-light-background .controls{color:#000}.reveal.no-hover .controls .controls-arrow:active:before,.reveal.no-hover .controls .controls-arrow:hover:before{transform:translateX(.5em) translateY(1.55em) rotate(45deg)}.reveal.no-hover .controls .controls-arrow:active:after,.reveal.no-hover .controls .controls-arrow:hover:after{transform:translateX(.5em) translateY(1.55em) rotate(-45deg)}@media screen and (min-width:500px){.reveal-viewport{--r-controls-spacing:0.8em}.reveal .controls[data-controls-layout=edges]{top:0;right:0;bottom:0;left:0}.reveal .controls[data-controls-layout=edges] .navigate-down,.reveal .controls[data-controls-layout=edges] .navigate-left,.reveal .controls[data-controls-layout=edges] .navigate-right,.reveal .controls[data-controls-layout=edges] .navigate-up{bottom:auto;right:auto}.reveal .controls[data-controls-layout=edges] .navigate-left{top:50%;left:var(--r-controls-spacing);margin-top:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-right{top:50%;right:var(--r-controls-spacing);margin-top:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-up{top:var(--r-controls-spacing);left:50%;margin-left:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-down{bottom:calc(var(--r-controls-spacing) - 1.4em + .3em);left:50%;margin-left:-1.8em}}.reveal .progress{position:absolute;display:none;height:3px;width:100%;bottom:0;left:0;z-index:10;background-color:rgba(0,0,0,.2);color:#fff}.reveal .progress:after{content:"";display:block;position:absolute;height:10px;width:100%;top:-10px}.reveal .progress span{display:block;height:100%;width:100%;background-color:currentColor;transition:transform .8s cubic-bezier(.26,.86,.44,.985);transform-origin:0 0;transform:scaleX(0)}.reveal .slide-number{position:absolute;display:block;right:8px;bottom:8px;z-index:31;font-family:Helvetica,sans-serif;font-size:12px;line-height:1;color:#fff;background-color:rgba(0,0,0,.4);padding:5px}.reveal .slide-number a{color:currentColor}.reveal .slide-number-delimiter{margin:0 3px}.reveal{position:relative;width:100%;height:100%;overflow:hidden;touch-action:pinch-zoom}.reveal.embedded{touch-action:pan-y}.reveal .slides{position:absolute;width:100%;height:100%;top:0;right:0;bottom:0;left:0;margin:auto;pointer-events:none;overflow:visible;z-index:1;text-align:center;perspective:600px;perspective-origin:50% 40%}.reveal .slides>section{perspective:600px}.reveal .slides>section,.reveal .slides>section>section{display:none;position:absolute;width:100%;pointer-events:auto;z-index:10;transform-style:flat;transition:transform-origin .8s cubic-bezier(.26,.86,.44,.985),transform .8s cubic-bezier(.26,.86,.44,.985),visibility .8s cubic-bezier(.26,.86,.44,.985),opacity .8s cubic-bezier(.26,.86,.44,.985)}.reveal[data-transition-speed=fast] .slides section{transition-duration:.4s}.reveal[data-transition-speed=slow] .slides section{transition-duration:1.2s}.reveal .slides section[data-transition-speed=fast]{transition-duration:.4s}.reveal .slides section[data-transition-speed=slow]{transition-duration:1.2s}.reveal .slides>section.stack{padding-top:0;padding-bottom:0;pointer-events:none;height:100%}.reveal .slides>section.present,.reveal .slides>section>section.present{display:block;z-index:11;opacity:1}.reveal .slides>section:empty,.reveal .slides>section>section:empty,.reveal .slides>section>section[data-background-interactive],.reveal .slides>section[data-background-interactive]{pointer-events:none}.reveal.center,.reveal.center .slides,.reveal.center .slides section{min-height:0!important}.reveal .slides>section:not(.present),.reveal .slides>section>section:not(.present){pointer-events:none}.reveal.overview .slides>section,.reveal.overview .slides>section>section{pointer-events:auto}.reveal .slides>section.future,.reveal .slides>section.future>section,.reveal .slides>section.past,.reveal .slides>section.past>section,.reveal .slides>section>section.future,.reveal .slides>section>section.past{opacity:0}.reveal .slides>section[data-transition=slide].past,.reveal .slides>section[data-transition~=slide-out].past,.reveal.slide .slides>section:not([data-transition]).past{transform:translate(-150%,0)}.reveal .slides>section[data-transition=slide].future,.reveal .slides>section[data-transition~=slide-in].future,.reveal.slide .slides>section:not([data-transition]).future{transform:translate(150%,0)}.reveal .slides>section>section[data-transition=slide].past,.reveal .slides>section>section[data-transition~=slide-out].past,.reveal.slide .slides>section>section:not([data-transition]).past{transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=slide].future,.reveal .slides>section>section[data-transition~=slide-in].future,.reveal.slide .slides>section>section:not([data-transition]).future{transform:translate(0,150%)}.reveal .slides>section[data-transition=linear].past,.reveal .slides>section[data-transition~=linear-out].past,.reveal.linear .slides>section:not([data-transition]).past{transform:translate(-150%,0)}.reveal .slides>section[data-transition=linear].future,.reveal .slides>section[data-transition~=linear-in].future,.reveal.linear .slides>section:not([data-transition]).future{transform:translate(150%,0)}.reveal .slides>section>section[data-transition=linear].past,.reveal .slides>section>section[data-transition~=linear-out].past,.reveal.linear .slides>section>section:not([data-transition]).past{transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=linear].future,.reveal .slides>section>section[data-transition~=linear-in].future,.reveal.linear .slides>section>section:not([data-transition]).future{transform:translate(0,150%)}.reveal .slides section[data-transition=default].stack,.reveal.default .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=default].past,.reveal .slides>section[data-transition~=default-out].past,.reveal.default .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=default].future,.reveal .slides>section[data-transition~=default-in].future,.reveal.default .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=default].past,.reveal .slides>section>section[data-transition~=default-out].past,.reveal.default .slides>section>section:not([data-transition]).past{transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0)}.reveal .slides>section>section[data-transition=default].future,.reveal .slides>section>section[data-transition~=default-in].future,.reveal.default .slides>section>section:not([data-transition]).future{transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0)}.reveal .slides section[data-transition=convex].stack,.reveal.convex .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=convex].past,.reveal .slides>section[data-transition~=convex-out].past,.reveal.convex .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=convex].future,.reveal .slides>section[data-transition~=convex-in].future,.reveal.convex .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=convex].past,.reveal .slides>section>section[data-transition~=convex-out].past,.reveal.convex .slides>section>section:not([data-transition]).past{transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0)}.reveal .slides>section>section[data-transition=convex].future,.reveal .slides>section>section[data-transition~=convex-in].future,.reveal.convex .slides>section>section:not([data-transition]).future{transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0)}.reveal .slides section[data-transition=concave].stack,.reveal.concave .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=concave].past,.reveal .slides>section[data-transition~=concave-out].past,.reveal.concave .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=concave].future,.reveal .slides>section[data-transition~=concave-in].future,.reveal.concave .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=concave].past,.reveal .slides>section>section[data-transition~=concave-out].past,.reveal.concave .slides>section>section:not([data-transition]).past{transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0)}.reveal .slides>section>section[data-transition=concave].future,.reveal .slides>section>section[data-transition~=concave-in].future,.reveal.concave .slides>section>section:not([data-transition]).future{transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0)}.reveal .slides section[data-transition=zoom],.reveal.zoom .slides section:not([data-transition]){transition-timing-function:ease}.reveal .slides>section[data-transition=zoom].past,.reveal .slides>section[data-transition~=zoom-out].past,.reveal.zoom .slides>section:not([data-transition]).past{visibility:hidden;transform:scale(16)}.reveal .slides>section[data-transition=zoom].future,.reveal .slides>section[data-transition~=zoom-in].future,.reveal.zoom .slides>section:not([data-transition]).future{visibility:hidden;transform:scale(.2)}.reveal .slides>section>section[data-transition=zoom].past,.reveal .slides>section>section[data-transition~=zoom-out].past,.reveal.zoom .slides>section>section:not([data-transition]).past{transform:scale(16)}.reveal .slides>section>section[data-transition=zoom].future,.reveal .slides>section>section[data-transition~=zoom-in].future,.reveal.zoom .slides>section>section:not([data-transition]).future{transform:scale(.2)}.reveal.cube .slides{perspective:1300px}.reveal.cube .slides section{padding:30px;min-height:700px;backface-visibility:hidden;box-sizing:border-box;transform-style:preserve-3d}.reveal.center.cube .slides section{min-height:0}.reveal.cube .slides section:not(.stack):before{content:"";position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);border-radius:4px;transform:translateZ(-20px)}.reveal.cube .slides section:not(.stack):after{content:"";position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0 0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);transform:translateZ(-90px) rotateX(65deg)}.reveal.cube .slides>section.stack{padding:0;background:0 0}.reveal.cube .slides>section.past{transform-origin:100% 0;transform:translate3d(-100%,0,0) rotateY(-90deg)}.reveal.cube .slides>section.future{transform-origin:0 0;transform:translate3d(100%,0,0) rotateY(90deg)}.reveal.cube .slides>section>section.past{transform-origin:0 100%;transform:translate3d(0,-100%,0) rotateX(90deg)}.reveal.cube .slides>section>section.future{transform-origin:0 0;transform:translate3d(0,100%,0) rotateX(-90deg)}.reveal.page .slides{perspective-origin:0 50%;perspective:3000px}.reveal.page .slides section{padding:30px;min-height:700px;box-sizing:border-box;transform-style:preserve-3d}.reveal.page .slides section.past{z-index:12}.reveal.page .slides section:not(.stack):before{content:"";position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);transform:translateZ(-20px)}.reveal.page .slides section:not(.stack):after{content:"";position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0 0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);-webkit-transform:translateZ(-90px) rotateX(65deg)}.reveal.page .slides>section.stack{padding:0;background:0 0}.reveal.page .slides>section.past{transform-origin:0 0;transform:translate3d(-40%,0,0) rotateY(-80deg)}.reveal.page .slides>section.future{transform-origin:100% 0;transform:translate3d(0,0,0)}.reveal.page .slides>section>section.past{transform-origin:0 0;transform:translate3d(0,-40%,0) rotateX(80deg)}.reveal.page .slides>section>section.future{transform-origin:0 100%;transform:translate3d(0,0,0)}.reveal .slides section[data-transition=fade],.reveal.fade .slides section:not([data-transition]),.reveal.fade .slides>section>section:not([data-transition]){transform:none;transition:opacity .5s}.reveal.fade.overview .slides section,.reveal.fade.overview .slides>section>section{transition:none}.reveal .slides section[data-transition=none],.reveal.none .slides section:not([data-transition]){transform:none;transition:none}.reveal .pause-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:#000;visibility:hidden;opacity:0;z-index:100;transition:all 1s ease}.reveal .pause-overlay .resume-button{position:absolute;bottom:20px;right:20px;color:#ccc;border-radius:2px;padding:6px 14px;border:2px solid #ccc;font-size:16px;background:0 0;cursor:pointer}.reveal .pause-overlay .resume-button:hover{color:#fff;border-color:#fff}.reveal.paused .pause-overlay{visibility:visible;opacity:1}.reveal .no-transition,.reveal .no-transition *,.reveal .slides.disable-slide-transitions section{transition:none!important}.reveal .slides.disable-slide-transitions section{transform:none!important}.reveal .backgrounds{position:absolute;width:100%;height:100%;top:0;left:0;perspective:600px}.reveal .slide-background{display:none;position:absolute;width:100%;height:100%;opacity:0;visibility:hidden;overflow:hidden;background-color:rgba(0,0,0,0);transition:all .8s cubic-bezier(.26,.86,.44,.985)}.reveal .slide-background-content{position:absolute;width:100%;height:100%;background-position:50% 50%;background-repeat:no-repeat;background-size:cover}.reveal .slide-background.stack{display:block}.reveal .slide-background.present{opacity:1;visibility:visible;z-index:2}.print-pdf .reveal .slide-background{opacity:1!important;visibility:visible!important}.reveal .slide-background video{position:absolute;width:100%;height:100%;max-width:none;max-height:none;top:0;left:0;object-fit:cover}.reveal .slide-background[data-background-size=contain] video{object-fit:contain}.reveal>.backgrounds .slide-background[data-background-transition=none],.reveal[data-background-transition=none]>.backgrounds .slide-background:not([data-background-transition]){transition:none}.reveal>.backgrounds .slide-background[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background:not([data-background-transition]){opacity:1}.reveal>.backgrounds .slide-background.past[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background.past:not([data-background-transition]){transform:translate(-100%,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background.future:not([data-background-transition]){transform:translate(100%,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){transform:translate(0,-100%)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){transform:translate(0,100%)}.reveal>.backgrounds .slide-background.past[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(0,-100%,0) rotateX(90deg) translate3d(0,-100%,0)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(0,100%,0) rotateX(-90deg) translate3d(0,100%,0)}.reveal>.backgrounds .slide-background.past[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(0,-100%,0) rotateX(-90deg) translate3d(0,-100%,0)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(0,100%,0) rotateX(90deg) translate3d(0,100%,0)}.reveal>.backgrounds .slide-background[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background:not([data-background-transition]){transition-timing-function:ease}.reveal>.backgrounds .slide-background.past[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background.past:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(16)}.reveal>.backgrounds .slide-background.future[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background.future:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(.2)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(16)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(.2)}.reveal[data-transition-speed=fast]>.backgrounds .slide-background{transition-duration:.4s}.reveal[data-transition-speed=slow]>.backgrounds .slide-background{transition-duration:1.2s}.reveal [data-auto-animate-target^=unmatched]{will-change:opacity}.reveal section[data-auto-animate]:not(.stack):not([data-auto-animate=running]) [data-auto-animate-target^=unmatched]{opacity:0}.reveal.overview{perspective-origin:50% 50%;perspective:700px}.reveal.overview .slides{-moz-transform-style:preserve-3d}.reveal.overview .slides section{height:100%;top:0!important;opacity:1!important;overflow:hidden;visibility:visible!important;cursor:pointer;box-sizing:border-box}.reveal.overview .slides section.present,.reveal.overview .slides section:hover{outline:10px solid rgba(150,150,150,.4);outline-offset:10px}.reveal.overview .slides section .fragment{opacity:1;transition:none}.reveal.overview .slides section:after,.reveal.overview .slides section:before{display:none!important}.reveal.overview .slides>section.stack{padding:0;top:0!important;background:0 0;outline:0;overflow:visible}.reveal.overview .backgrounds{perspective:inherit;-moz-transform-style:preserve-3d}.reveal.overview .backgrounds .slide-background{opacity:1;visibility:visible;outline:10px solid rgba(150,150,150,.1);outline-offset:10px}.reveal.overview .backgrounds .slide-background.stack{overflow:visible}.reveal.overview .slides section,.reveal.overview-deactivating .slides section{transition:none}.reveal.overview .backgrounds .slide-background,.reveal.overview-deactivating .backgrounds .slide-background{transition:none}.reveal.rtl .slides,.reveal.rtl .slides h1,.reveal.rtl .slides h2,.reveal.rtl .slides h3,.reveal.rtl .slides h4,.reveal.rtl .slides h5,.reveal.rtl .slides h6{direction:rtl;font-family:sans-serif}.reveal.rtl code,.reveal.rtl pre{direction:ltr}.reveal.rtl ol,.reveal.rtl ul{text-align:right}.reveal.rtl .progress span{transform-origin:100% 0}.reveal.has-parallax-background .backgrounds{transition:all .8s ease}.reveal.has-parallax-background[data-transition-speed=fast] .backgrounds{transition-duration:.4s}.reveal.has-parallax-background[data-transition-speed=slow] .backgrounds{transition-duration:1.2s}.reveal>.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1000;background:rgba(0,0,0,.95);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);transition:all .3s ease}.reveal>.overlay .spinner{position:absolute;display:block;top:50%;left:50%;width:32px;height:32px;margin:-16px 0 0 -16px;z-index:10;background-image:url(data:image/gif;base64,R0lGODlhIAAgAPMAAJmZmf%2F%2F%2F6%2Bvr8nJybW1tcDAwOjo6Nvb26ioqKOjo7Ozs%2FLy8vz8%2FAAAAAAAAAAAACH%2FC05FVFNDQVBFMi4wAwEAAAAh%2FhpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh%2BQQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ%2FV%2FnmOM82XiHRLYKhKP1oZmADdEAAAh%2BQQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY%2FCZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB%2BA4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6%2BHo7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq%2BB6QDtuetcaBPnW6%2BO7wDHpIiK9SaVK5GgV543tzjgGcghAgAh%2BQQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK%2B%2BG%2Bw48edZPK%2BM6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE%2BG%2BcD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm%2BFNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk%2BaV%2BoJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0%2FVNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc%2BXiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30%2FiI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE%2FjiuL04RGEBgwWhShRgQExHBAAh%2BQQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR%2BipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY%2BYip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd%2BMFCN6HAAIKgNggY0KtEBAAh%2BQQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1%2BvsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d%2BjYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg%2BygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0%2Bbm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h%2BKr0SJ8MFihpNbx%2B4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX%2BBP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA%3D%3D);visibility:visible;opacity:.6;transition:all .3s ease}.reveal>.overlay header{position:absolute;left:0;top:0;width:100%;padding:5px;z-index:2;box-sizing:border-box}.reveal>.overlay header a{display:inline-block;width:40px;height:40px;line-height:36px;padding:0 10px;float:right;opacity:.6;box-sizing:border-box}.reveal>.overlay header a:hover{opacity:1}.reveal>.overlay header a .icon{display:inline-block;width:20px;height:20px;background-position:50% 50%;background-size:100%;background-repeat:no-repeat}.reveal>.overlay header a.close .icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABkklEQVRYR8WX4VHDMAxG6wnoJrABZQPYBCaBTWAD2g1gE5gg6OOsXuxIlr40d81dfrSJ9V4c2VLK7spHuTJ/5wpM07QXuXc5X0opX2tEJcadjHuV80li/FgxTIEK/5QBCICBD6xEhSMGHgQPgBgLiYVAB1dpSqKDawxTohFw4JSEA3clzgIBPCURwE2JucBR7rhPJJv5OpJwDX+SfDjgx1wACQeJG1aChP9K/IMmdZ8DtESV1WyP3Bt4MwM6sj4NMxMYiqUWHQu4KYA/SYkIjOsm3BXYWMKFDwU2khjCQ4ELJUJ4SmClRArOCmSXGuKma0fYD5CbzHxFpCSGAhfAVSSUGDUk2BWZaff2g6GE15BsBQ9nwmpIGDiyHQddwNTMKkbZaf9fajXQca1EX44puJZUsnY0ObGmITE3GVLCbEhQUjGVt146j6oasWN+49Vph2w1pZ5EansNZqKBm1txbU57iRRcZ86RWMDdWtBJUHBHwoQPi1GV+JCbntmvok7iTX4/Up9mgyTc/FJYDTcndgH/AA5A/CHsyEkVAAAAAElFTkSuQmCC)}.reveal>.overlay header a.external .icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAcElEQVRYR+2WSQoAIQwEzf8f7XiOMkUQxUPlGkM3hVmiQfQR9GYnH1SsAQlI4DiBqkCMoNb9y2e90IAEJPAcgdznU9+engMaeJ7Azh5Y1U67gAho4DqBqmB1buAf0MB1AlVBek83ZPkmJMGc1wAR+AAqod/B97TRpQAAAABJRU5ErkJggg==)}.reveal>.overlay .viewport{position:absolute;display:flex;top:50px;right:0;bottom:0;left:0}.reveal>.overlay.overlay-preview .viewport iframe{width:100%;height:100%;max-width:100%;max-height:100%;border:0;opacity:0;visibility:hidden;transition:all .3s ease}.reveal>.overlay.overlay-preview.loaded .viewport iframe{opacity:1;visibility:visible}.reveal>.overlay.overlay-preview.loaded .viewport-inner{position:absolute;z-index:-1;left:0;top:45%;width:100%;text-align:center;letter-spacing:normal}.reveal>.overlay.overlay-preview .x-frame-error{opacity:0;transition:opacity .3s ease .3s}.reveal>.overlay.overlay-preview.loaded .x-frame-error{opacity:1}.reveal>.overlay.overlay-preview.loaded .spinner{opacity:0;visibility:hidden;transform:scale(.2)}.reveal>.overlay.overlay-help .viewport{overflow:auto;color:#fff}.reveal>.overlay.overlay-help .viewport .viewport-inner{width:600px;margin:auto;padding:20px 20px 80px 20px;text-align:center;letter-spacing:normal}.reveal>.overlay.overlay-help .viewport .viewport-inner .title{font-size:20px}.reveal>.overlay.overlay-help .viewport .viewport-inner table{border:1px solid #fff;border-collapse:collapse;font-size:16px}.reveal>.overlay.overlay-help .viewport .viewport-inner table td,.reveal>.overlay.overlay-help .viewport .viewport-inner table th{width:200px;padding:14px;border:1px solid #fff;vertical-align:middle}.reveal>.overlay.overlay-help .viewport .viewport-inner table th{padding-top:20px;padding-bottom:20px}.reveal .playback{position:absolute;left:15px;bottom:20px;z-index:30;cursor:pointer;transition:all .4s ease;-webkit-tap-highlight-color:transparent}.reveal.overview .playback{opacity:0;visibility:hidden}.reveal .hljs{min-height:100%}.reveal .hljs table{margin:initial}.reveal .hljs-ln-code,.reveal .hljs-ln-numbers{padding:0;border:0}.reveal .hljs-ln-numbers{opacity:.6;padding-right:.75em;text-align:right;vertical-align:top}.reveal .hljs.has-highlights tr:not(.highlight-line){opacity:.4}.reveal .hljs.has-highlights.fragment{transition:all .2s ease}.reveal .hljs:not(:first-child).fragment{position:absolute;top:0;left:0;width:100%;box-sizing:border-box}.reveal pre[data-auto-animate-target]{overflow:hidden}.reveal pre[data-auto-animate-target] code{height:100%}.reveal .roll{display:inline-block;line-height:1.2;overflow:hidden;vertical-align:top;perspective:400px;perspective-origin:50% 50%}.reveal .roll:hover{background:0 0;text-shadow:none}.reveal .roll span{display:block;position:relative;padding:0 2px;pointer-events:none;transition:all .4s ease;transform-origin:50% 0;transform-style:preserve-3d;backface-visibility:hidden}.reveal .roll:hover span{background:rgba(0,0,0,.5);transform:translate3d(0,0,-45px) rotateX(90deg)}.reveal .roll span:after{content:attr(data-title);display:block;position:absolute;left:0;top:0;padding:0 2px;backface-visibility:hidden;transform-origin:50% 0;transform:translate3d(0,110%,0) rotateX(-90deg)}.reveal aside.notes{display:none}.reveal .speaker-notes{display:none;position:absolute;width:33.3333333333%;height:100%;top:0;left:100%;padding:14px 18px 14px 18px;z-index:1;font-size:18px;line-height:1.4;border:1px solid rgba(0,0,0,.05);color:#222;background-color:#f5f5f5;overflow:auto;box-sizing:border-box;text-align:left;font-family:Helvetica,sans-serif;-webkit-overflow-scrolling:touch}.reveal .speaker-notes .notes-placeholder{color:#ccc;font-style:italic}.reveal .speaker-notes:focus{outline:0}.reveal .speaker-notes:before{content:"Speaker notes";display:block;margin-bottom:10px;opacity:.5}.reveal.show-notes{max-width:75%;overflow:visible}.reveal.show-notes .speaker-notes{display:block}@media screen and (min-width:1600px){.reveal .speaker-notes{font-size:20px}}@media screen and (max-width:1024px){.reveal.show-notes{border-left:0;max-width:none;max-height:70%;max-height:70vh;overflow:visible}.reveal.show-notes .speaker-notes{top:100%;left:0;width:100%;height:30vh;border:0}}@media screen and (max-width:600px){.reveal.show-notes{max-height:60%;max-height:60vh}.reveal.show-notes .speaker-notes{top:100%;height:40vh}.reveal .speaker-notes{font-size:14px}}.reveal .jump-to-slide{position:absolute;top:15px;left:15px;z-index:30;font-size:32px;-webkit-tap-highlight-color:transparent}.reveal .jump-to-slide-input{background:0 0;padding:8px;font-size:inherit;color:currentColor;border:0}.reveal .jump-to-slide-input::placeholder{color:currentColor;opacity:.5}.reveal.has-dark-background .jump-to-slide-input{color:#fff}.reveal.has-light-background .jump-to-slide-input{color:#222}.reveal .jump-to-slide-input:focus{outline:0}.zoomed .reveal *,.zoomed .reveal :after,.zoomed .reveal :before{backface-visibility:visible!important}.zoomed .reveal .controls,.zoomed .reveal .progress{opacity:0}.zoomed .reveal .roll span{background:0 0}.zoomed .reveal .roll span:after{visibility:hidden}.reveal-viewport.loading-scroll-mode{visibility:hidden}.reveal-viewport.reveal-scroll{margin:0 auto;overflow:auto;overflow-x:hidden;overflow-y:auto;z-index:1;--r-scrollbar-width:7px;--r-scrollbar-trigger-size:5px;--r-controls-spacing:8px}@media screen and (max-width:500px){.reveal-viewport.reveal-scroll{--r-scrollbar-width:3px;--r-scrollbar-trigger-size:3px}}.reveal-viewport.reveal-scroll .backgrounds,.reveal-viewport.reveal-scroll .controls,.reveal-viewport.reveal-scroll .playback,.reveal-viewport.reveal-scroll .progress,.reveal-viewport.reveal-scroll .slide-number,.reveal-viewport.reveal-scroll .speaker-notes{display:none!important}.reveal-viewport.reveal-scroll .overlay,.reveal-viewport.reveal-scroll .pause-overlay{position:fixed}.reveal-viewport.reveal-scroll .reveal{overflow:visible;touch-action:manipulation}.reveal-viewport.reveal-scroll .slides{position:static;pointer-events:initial;left:auto;top:auto;width:100%!important;margin:0;padding:0;overflow:visible;display:block;perspective:none;perspective-origin:50% 50%}.reveal-viewport.reveal-scroll .scroll-page{position:relative;width:100%;height:calc(var(--page-height) + var(--page-scroll-padding));z-index:1;overflow:visible}.reveal-viewport.reveal-scroll .scroll-page-sticky{position:sticky;height:var(--page-height);top:0}.reveal-viewport.reveal-scroll .scroll-page-content{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.reveal-viewport.reveal-scroll .scroll-page section{visibility:visible!important;display:block!important;position:absolute!important;width:var(--slide-width)!important;height:var(--slide-height)!important;top:50%!important;left:50%!important;opacity:1!important;transform:scale(var(--slide-scale)) translate(-50%,-50%)!important;transform-style:flat!important;transform-origin:0 0!important}.reveal-viewport.reveal-scroll .slide-background{display:block!important;position:absolute;top:0;left:0;width:100%;height:100%;z-index:auto!important;visibility:visible;opacity:1;touch-action:manipulation}.reveal-viewport.reveal-scroll[data-scrollbar=auto]::-webkit-scrollbar,.reveal-viewport.reveal-scroll[data-scrollbar=true]::-webkit-scrollbar{display:none}.reveal-viewport.reveal-scroll[data-scrollbar=auto],.reveal-viewport.reveal-scroll[data-scrollbar=true]{scrollbar-width:none}.reveal-viewport.has-dark-background,.reveal.has-dark-background{--r-overlay-element-bg-color:240,240,240;--r-overlay-element-fg-color:0,0,0}.reveal-viewport.has-light-background,.reveal.has-light-background{--r-overlay-element-bg-color:0,0,0;--r-overlay-element-fg-color:240,240,240}.reveal-viewport.reveal-scroll .scrollbar{position:sticky;top:50%;z-index:20;opacity:0;transition:all .3s ease}.reveal-viewport.reveal-scroll .scrollbar.visible,.reveal-viewport.reveal-scroll .scrollbar:hover{opacity:1}.reveal-viewport.reveal-scroll .scrollbar .scrollbar-inner{position:absolute;width:var(--r-scrollbar-width);height:calc(var(--viewport-height) - var(--r-controls-spacing) * 2);right:var(--r-controls-spacing);top:0;transform:translateY(-50%);border-radius:var(--r-scrollbar-width);z-index:10}.reveal-viewport.reveal-scroll .scrollbar .scrollbar-playhead{position:absolute;width:var(--r-scrollbar-width);height:var(--r-scrollbar-width);top:0;left:0;border-radius:var(--r-scrollbar-width);background-color:rgba(var(--r-overlay-element-bg-color),1);z-index:11;transition:background-color .2s ease}.reveal-viewport.reveal-scroll .scrollbar .scrollbar-slide{position:absolute;width:100%;background-color:rgba(var(--r-overlay-element-bg-color),.2);box-shadow:0 0 0 1px rgba(var(--r-overlay-element-fg-color),.1);border-radius:var(--r-scrollbar-width);transition:background-color .2s ease}.reveal-viewport.reveal-scroll .scrollbar .scrollbar-slide:after{content:"";position:absolute;width:200%;height:100%;top:0;left:-50%;background:rgba(0,0,0,0);z-index:-1}.reveal-viewport.reveal-scroll .scrollbar .scrollbar-slide.active,.reveal-viewport.reveal-scroll .scrollbar .scrollbar-slide:hover{background-color:rgba(var(--r-overlay-element-bg-color),.4)}.reveal-viewport.reveal-scroll .scrollbar .scrollbar-trigger{position:absolute;width:100%;transition:background-color .2s ease}.reveal-viewport.reveal-scroll .scrollbar .scrollbar-slide.active.has-triggers{background-color:rgba(var(--r-overlay-element-bg-color),.4);z-index:10}.reveal-viewport.reveal-scroll .scrollbar .scrollbar-slide.active .scrollbar-trigger:after{content:"";position:absolute;width:var(--r-scrollbar-trigger-size);height:var(--r-scrollbar-trigger-size);border-radius:20px;top:50%;left:50%;transform:translate(-50%,-50%);background-color:rgba(var(--r-overlay-element-bg-color),1);transition:transform .2s ease,opacity .2s ease;opacity:.4}.reveal-viewport.reveal-scroll .scrollbar .scrollbar-slide.active .scrollbar-trigger.active:after,.reveal-viewport.reveal-scroll .scrollbar .scrollbar-slide.active .scrollbar-trigger.active~.scrollbar-trigger:after{opacity:1}.reveal-viewport.reveal-scroll .scrollbar .scrollbar-slide.active .scrollbar-trigger~.scrollbar-trigger.active:after{transform:translate(calc(var(--r-scrollbar-width) * -2),0);background-color:rgba(var(--r-overlay-element-bg-color),1)}html.reveal-print *{-webkit-print-color-adjust:exact}html.reveal-print{width:100%;height:100%;overflow:visible}html.reveal-print body{margin:0 auto!important;border:0;padding:0;float:none!important;overflow:visible}html.reveal-print .nestedarrow,html.reveal-print .reveal .controls,html.reveal-print .reveal .playback,html.reveal-print .reveal .progress,html.reveal-print .reveal.overview,html.reveal-print .state-background{display:none!important}html.reveal-print .reveal pre code{overflow:hidden!important}html.reveal-print .reveal{width:auto!important;height:auto!important;overflow:hidden!important}html.reveal-print .reveal .slides{position:static;width:100%!important;height:auto!important;zoom:1!important;pointer-events:initial;left:auto;top:auto;margin:0!important;padding:0!important;overflow:visible;display:block;perspective:none;perspective-origin:50% 50%}html.reveal-print .reveal .slides .pdf-page{position:relative;overflow:hidden;z-index:1;page-break-after:always}html.reveal-print .reveal .slides .pdf-page:last-of-type{page-break-after:avoid}html.reveal-print .reveal .slides section{visibility:visible!important;display:block!important;position:absolute!important;margin:0!important;padding:0!important;box-sizing:border-box!important;min-height:1px;opacity:1!important;transform-style:flat!important;transform:none!important}html.reveal-print .reveal section.stack{position:relative!important;margin:0!important;padding:0!important;page-break-after:avoid!important;height:auto!important;min-height:auto!important}html.reveal-print .reveal img{box-shadow:none}html.reveal-print .reveal .backgrounds{display:none}html.reveal-print .reveal .slide-background{display:block!important;position:absolute;top:0;left:0;width:100%;height:100%;z-index:auto!important}html.reveal-print .reveal.show-notes{max-width:none;max-height:none}html.reveal-print .reveal .speaker-notes-pdf{display:block;width:100%;height:auto;max-height:none;top:auto;right:auto;bottom:auto;left:auto;z-index:100}html.reveal-print .reveal .speaker-notes-pdf[data-layout=separate-page]{position:relative;color:inherit;background-color:transparent;padding:20px;page-break-after:always;border:0}html.reveal-print .reveal .slide-number-pdf{display:block;position:absolute;font-size:14px;visibility:visible}html.reveal-print .aria-status{display:none}@media print{html:not(.print-pdf){overflow:visible;width:auto;height:auto}html:not(.print-pdf) body{margin:0;padding:0;overflow:visible}html:not(.print-pdf) .reveal{background:#fff;font-size:20pt}html:not(.print-pdf) .reveal .backgrounds,html:not(.print-pdf) .reveal .controls,html:not(.print-pdf) .reveal .progress,html:not(.print-pdf) .reveal .slide-number,html:not(.print-pdf) .reveal .state-background{display:none!important}html:not(.print-pdf) .reveal li,html:not(.print-pdf) .reveal p,html:not(.print-pdf) .reveal td{font-size:20pt!important;color:#000}html:not(.print-pdf) .reveal h1,html:not(.print-pdf) .reveal h2,html:not(.print-pdf) .reveal h3,html:not(.print-pdf) .reveal h4,html:not(.print-pdf) .reveal h5,html:not(.print-pdf) .reveal h6{color:#000!important;height:auto;line-height:normal;text-align:left;letter-spacing:normal}html:not(.print-pdf) .reveal h1{font-size:28pt!important}html:not(.print-pdf) .reveal h2{font-size:24pt!important}html:not(.print-pdf) .reveal h3{font-size:22pt!important}html:not(.print-pdf) .reveal h4{font-size:22pt!important;font-variant:small-caps}html:not(.print-pdf) .reveal h5{font-size:21pt!important}html:not(.print-pdf) .reveal h6{font-size:20pt!important;font-style:italic}html:not(.print-pdf) .reveal a:link,html:not(.print-pdf) .reveal a:visited{color:#000!important;font-weight:700;text-decoration:underline}html:not(.print-pdf) .reveal div,html:not(.print-pdf) .reveal ol,html:not(.print-pdf) .reveal p,html:not(.print-pdf) .reveal ul{visibility:visible;position:static;width:auto;height:auto;display:block;overflow:visible;margin:0;text-align:left!important}html:not(.print-pdf) .reveal pre,html:not(.print-pdf) .reveal table{margin-left:0;margin-right:0}html:not(.print-pdf) .reveal pre code{padding:20px}html:not(.print-pdf) .reveal blockquote{margin:20px 0}html:not(.print-pdf) .reveal .slides{position:static!important;width:auto!important;height:auto!important;left:0!important;top:0!important;margin-left:0!important;margin-top:0!important;padding:0!important;zoom:1!important;transform:none!important;overflow:visible!important;display:block!important;text-align:left!important;perspective:none;perspective-origin:50% 50%}html:not(.print-pdf) .reveal .slides section{visibility:visible!important;position:static!important;width:auto!important;height:auto!important;display:block!important;overflow:visible!important;left:0!important;top:0!important;margin-left:0!important;margin-top:0!important;padding:60px 20px!important;z-index:auto!important;opacity:1!important;page-break-after:always!important;transform-style:flat!important;transform:none!important;transition:none!important}html:not(.print-pdf) .reveal .slides section.stack{padding:0!important}html:not(.print-pdf) .reveal .slides section:last-of-type{page-break-after:avoid!important}html:not(.print-pdf) .reveal .slides section .fragment{opacity:1!important;visibility:visible!important;transform:none!important}html:not(.print-pdf) .reveal .r-fit-text{white-space:normal!important}html:not(.print-pdf) .reveal section img{display:block;margin:15px 0;background:#fff;border:1px solid #666;box-shadow:none}html:not(.print-pdf) .reveal section small{font-size:.8em}html:not(.print-pdf) .reveal .hljs{max-height:100%;white-space:pre-wrap;word-wrap:break-word;word-break:break-word;font-size:15pt}html:not(.print-pdf) .reveal .hljs .hljs-ln-numbers{white-space:nowrap}html:not(.print-pdf) .reveal .hljs td{font-size:inherit!important;color:inherit!important}}
\ No newline at end of file
diff --git a/2A/QualiteDev/2_tp/JUnit5/JUnit5.iml b/2A/QualiteDev/2_tp/JUnit5/JUnit5.iml
deleted file mode 100644
index 6bf0b4e..0000000
--- a/2A/QualiteDev/2_tp/JUnit5/JUnit5.iml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/2A/QualiteDev/2_tp/TestJUnit5/.classpath b/2A/QualiteDev/2_tp/TestJUnit5/.classpath
deleted file mode 100644
index 37c1aea..0000000
--- a/2A/QualiteDev/2_tp/TestJUnit5/.classpath
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/2A/QualiteDev/2_tp/TestJUnit5/.gitignore b/2A/QualiteDev/2_tp/TestJUnit5/.gitignore
deleted file mode 100644
index 84c048a..0000000
--- a/2A/QualiteDev/2_tp/TestJUnit5/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/build/
diff --git a/2A/QualiteDev/2_tp/TestJUnit5/.project b/2A/QualiteDev/2_tp/TestJUnit5/.project
deleted file mode 100644
index 6048fd1..0000000
--- a/2A/QualiteDev/2_tp/TestJUnit5/.project
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
- TestJUnit5
-
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
- org.eclipse.wst.common.project.facet.core.builder
-
-
-
-
- org.eclipse.wst.validation.validationbuilder
-
-
-
-
-
- org.eclipse.jem.workbench.JavaEMFNature
- org.eclipse.wst.common.modulecore.ModuleCoreNature
- org.eclipse.wst.common.project.facet.core.nature
- org.eclipse.jdt.core.javanature
- org.eclipse.wst.jsdt.core.jsNature
-
-
diff --git a/2A/QualiteDev/2_tp/TestJUnit5/.settings/.jsdtscope b/2A/QualiteDev/2_tp/TestJUnit5/.settings/.jsdtscope
deleted file mode 100644
index 81672d4..0000000
--- a/2A/QualiteDev/2_tp/TestJUnit5/.settings/.jsdtscope
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/2A/QualiteDev/2_tp/TestJUnit5/.settings/org.eclipse.wst.common.component b/2A/QualiteDev/2_tp/TestJUnit5/.settings/org.eclipse.wst.common.component
deleted file mode 100644
index f4c769d..0000000
--- a/2A/QualiteDev/2_tp/TestJUnit5/.settings/org.eclipse.wst.common.component
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/2A/QualiteDev/2_tp/TestJUnit5/.settings/org.eclipse.wst.common.project.facet.core.xml b/2A/QualiteDev/2_tp/TestJUnit5/.settings/org.eclipse.wst.common.project.facet.core.xml
deleted file mode 100644
index d65ae0f..0000000
--- a/2A/QualiteDev/2_tp/TestJUnit5/.settings/org.eclipse.wst.common.project.facet.core.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/2A/QualiteDev/2_tp/TestJUnit5/.settings/org.eclipse.wst.jsdt.ui.superType.container b/2A/QualiteDev/2_tp/TestJUnit5/.settings/org.eclipse.wst.jsdt.ui.superType.container
deleted file mode 100644
index 3bd5d0a..0000000
--- a/2A/QualiteDev/2_tp/TestJUnit5/.settings/org.eclipse.wst.jsdt.ui.superType.container
+++ /dev/null
@@ -1 +0,0 @@
-org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff --git a/2A/QualiteDev/2_tp/TestJUnit5/.settings/org.eclipse.wst.jsdt.ui.superType.name b/2A/QualiteDev/2_tp/TestJUnit5/.settings/org.eclipse.wst.jsdt.ui.superType.name
deleted file mode 100644
index 05bd71b..0000000
--- a/2A/QualiteDev/2_tp/TestJUnit5/.settings/org.eclipse.wst.jsdt.ui.superType.name
+++ /dev/null
@@ -1 +0,0 @@
-Window
\ No newline at end of file
diff --git a/2A/QualiteDev/2_tp/TestJUnit5/src/main/webapp/META-INF/MANIFEST.MF b/2A/QualiteDev/2_tp/TestJUnit5/src/main/webapp/META-INF/MANIFEST.MF
deleted file mode 100644
index 5e94951..0000000
--- a/2A/QualiteDev/2_tp/TestJUnit5/src/main/webapp/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Class-Path:
-
diff --git a/2A/QualiteDev/2_tp/test_javaproject/.classpath b/2A/QualiteDev/2_tp/test_javaproject/.classpath
new file mode 100644
index 0000000..257ce1d
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/.classpath
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2A/QualiteDev/2_tp/test_javaproject/.gitignore b/2A/QualiteDev/2_tp/test_javaproject/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/2A/QualiteDev/2_tp/test_javaproject/.project b/2A/QualiteDev/2_tp/test_javaproject/.project
new file mode 100644
index 0000000..70a47b6
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/.project
@@ -0,0 +1,17 @@
+
+
+ test_javaproject
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/2A/QualiteDev/2_tp/TestJUnit5/.settings/org.eclipse.jdt.core.prefs b/2A/QualiteDev/2_tp/test_javaproject/.settings/org.eclipse.jdt.core.prefs
similarity index 70%
rename from 2A/QualiteDev/2_tp/TestJUnit5/.settings/org.eclipse.jdt.core.prefs
rename to 2A/QualiteDev/2_tp/test_javaproject/.settings/org.eclipse.jdt.core.prefs
index d4540a5..8c9943d 100644
--- a/2A/QualiteDev/2_tp/TestJUnit5/.settings/org.eclipse.jdt.core.prefs
+++ b/2A/QualiteDev/2_tp/test_javaproject/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,11 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=17
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/ChargeurTelecommande.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/ChargeurTelecommande.java
new file mode 100644
index 0000000..4278686
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/ChargeurTelecommande.java
@@ -0,0 +1,38 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class ChargeurTelecommande {
+
+ public static void main(String[] args) {
+
+ Telecommande remoteControl = new Telecommande();
+
+ Lampe lampe = new Lampe("Séjour");
+ TV tv = new TV("Séjour");
+ Stereo stereo = new Stereo("Séjour");
+ Jacuzzi jacuzzi = new Jacuzzi();
+
+ CommandeAllumerLampe lampeAllumee = new CommandeAllumerLampe(lampe);
+ CommandeAllumerStereo stereoAllumee = new CommandeAllumerStereo(stereo);
+ CommandeAllumerTV tvAllumee = new CommandeAllumerTV(tv);
+ CommandeAllumerJacuzzi jacuzziAllume = new CommandeAllumerJacuzzi(jacuzzi);
+ CommandeEteindreLampe lampeEteinte = new CommandeEteindreLampe(lampe);
+ CommandeEteindreStereo stereoEteinte = new CommandeEteindreStereo(stereo);
+ CommandeEteindreTV tvEteinte = new CommandeEteindreTV(tv);
+ CommandeEteindreJacuzzi jacuzziEteint = new CommandeEteindreJacuzzi(jacuzzi);
+
+ Commande[] allumageGroupe = { lampeAllumee, stereoAllumee, tvAllumee, jacuzziAllume};
+ Commande[] extinctionGroupe = { lampeEteinte, stereoEteinte, tvEteinte, jacuzziEteint};
+
+ MacroCommande macroAllumageGroupe = new MacroCommande(allumageGroupe);
+ MacroCommande macroExtinctionGroupe = new MacroCommande(extinctionGroupe);
+
+ remoteControl.setCommande(0, macroAllumageGroupe, macroExtinctionGroupe);
+
+ System.out.println(remoteControl);
+ System.out.println("---Exécution de Macro Marche ---");
+ remoteControl.boutonMarchePresse(0);
+ System.out.println("--- Exécution de Macro Arret ---");
+ remoteControl.boutonArretPresse(0);
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/Commande.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/Commande.java
new file mode 100644
index 0000000..4cdb3a7
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/Commande.java
@@ -0,0 +1,7 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public interface Commande {
+ public void executer();
+ public void annuler();
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeAllumerJacuzzi.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeAllumerJacuzzi.java
new file mode 100644
index 0000000..2ec8fcc
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeAllumerJacuzzi.java
@@ -0,0 +1,18 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class CommandeAllumerJacuzzi implements Commande {
+ Jacuzzi jacuzzi;
+
+ public CommandeAllumerJacuzzi(Jacuzzi jacuzzi) {
+ this.jacuzzi = jacuzzi;
+ }
+ public void executer() {
+ jacuzzi.allumer();
+ jacuzzi.setTemperature(40);
+ jacuzzi.bouillonner();
+ }
+ public void annuler() {
+ jacuzzi.eteindre();
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeAllumerLampe.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeAllumerLampe.java
new file mode 100644
index 0000000..c1ed4d9
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeAllumerLampe.java
@@ -0,0 +1,18 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class CommandeAllumerLampe implements Commande {
+ Lampe lampe;
+
+ public CommandeAllumerLampe(Lampe lampe) {
+ this.lampe = lampe;
+ }
+
+ public void executer() {
+ lampe.marche();
+ }
+
+ public void annuler() {
+ lampe.arret();
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeAllumerLampeSejour.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeAllumerLampeSejour.java
new file mode 100644
index 0000000..f52826e
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeAllumerLampeSejour.java
@@ -0,0 +1,16 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class CommandeAllumerLampeSejour implements Commande {
+ Lampe lampe;
+
+ public CommandeAllumerLampeSejour(Lampe lampe) {
+ this.lampe = lampe;
+ }
+ public void executer() {
+ lampe.arret();
+ }
+ public void annuler() {
+ lampe.marche();
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeAllumerStereo.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeAllumerStereo.java
new file mode 100644
index 0000000..1b90dd2
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeAllumerStereo.java
@@ -0,0 +1,18 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class CommandeAllumerStereo implements Commande {
+ Stereo stereo;
+
+ public CommandeAllumerStereo(Stereo stereo) {
+ this.stereo = stereo;
+ }
+
+ public void executer() {
+ stereo.marche();
+ }
+
+ public void annuler() {
+ stereo.arret();
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeAllumerStereoAvecCD.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeAllumerStereoAvecCD.java
new file mode 100644
index 0000000..d6396e9
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeAllumerStereoAvecCD.java
@@ -0,0 +1,20 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class CommandeAllumerStereoAvecCD implements Commande {
+ Stereo stereo;
+
+ public CommandeAllumerStereoAvecCD(Stereo stereo) {
+ this.stereo = stereo;
+ }
+
+ public void executer() {
+ stereo.marche();
+ stereo.setCD();
+ stereo.setVolume(11);
+ }
+
+ public void annuler() {
+ stereo.arret();
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeAllumerTV.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeAllumerTV.java
new file mode 100644
index 0000000..a5ab6fc
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeAllumerTV.java
@@ -0,0 +1,19 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class CommandeAllumerTV implements Commande {
+ TV tv;
+
+ public CommandeAllumerTV(TV tv) {
+ this.tv= tv;
+ }
+
+ public void executer() {
+ tv.marche();
+ tv.selectionnerCanal();
+ }
+
+ public void annuler() {
+ tv.arret();
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeEteindreJacuzzi.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeEteindreJacuzzi.java
new file mode 100644
index 0000000..1167659
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeEteindreJacuzzi.java
@@ -0,0 +1,18 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class CommandeEteindreJacuzzi implements Commande {
+ Jacuzzi jacuzzi;
+
+ public CommandeEteindreJacuzzi(Jacuzzi jacuzzi) {
+ this.jacuzzi = jacuzzi;
+ }
+
+ public void executer() {
+ jacuzzi.setTemperature(36);
+ jacuzzi.eteindre();
+ }
+ public void annuler() {
+ jacuzzi.allumer();
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeEteindreLampe.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeEteindreLampe.java
new file mode 100644
index 0000000..0cf9e8a
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeEteindreLampe.java
@@ -0,0 +1,18 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class CommandeEteindreLampe implements Commande {
+ Lampe lampe;
+
+ public CommandeEteindreLampe(Lampe lampe) {
+ this.lampe = lampe;
+ }
+
+ public void executer() {
+ lampe.arret();
+ }
+
+ public void annuler() {
+ lampe.marche();
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeEteindreLampeSejour.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeEteindreLampeSejour.java
new file mode 100644
index 0000000..979d01e
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeEteindreLampeSejour.java
@@ -0,0 +1,16 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class CommandeEteindreLampeSejour implements Commande {
+ Lampe lampe;
+
+ public CommandeEteindreLampeSejour(Lampe lampe) {
+ this.lampe = lampe;
+ }
+ public void executer() {
+ lampe.marche();
+ }
+ public void annuler() {
+ lampe.arret();
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeEteindreStereo.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeEteindreStereo.java
new file mode 100644
index 0000000..4222b75
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeEteindreStereo.java
@@ -0,0 +1,18 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class CommandeEteindreStereo implements Commande {
+ Stereo stereo;
+
+ public CommandeEteindreStereo(Stereo stereo) {
+ this.stereo = stereo;
+ }
+
+ public void executer() {
+ stereo.arret();
+ }
+
+ public void annuler() {
+ stereo.marche();
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeEteindreTV.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeEteindreTV.java
new file mode 100644
index 0000000..a6ce9c6
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeEteindreTV.java
@@ -0,0 +1,18 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class CommandeEteindreTV implements Commande {
+ TV tv;
+
+ public CommandeEteindreTV(TV tv) {
+ this.tv= tv;
+ }
+
+ public void executer() {
+ tv.arret();
+ }
+
+ public void annuler() {
+ tv.marche();
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeEteindreVentilateur.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeEteindreVentilateur.java
new file mode 100644
index 0000000..a96d313
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeEteindreVentilateur.java
@@ -0,0 +1,23 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class CommandeEteindreVentilateur implements Commande {
+ Ventilateur ventilateur;
+ int derniereVitesse;
+
+ public CommandeEteindreVentilateur(Ventilateur ventilateur) {
+ this.ventilateur = ventilateur;
+ }
+ public void executer() {
+ derniereVitesse = ventilateur.getVitesse();
+ ventilateur.arreter();
+ }
+ public void annuler() {
+ switch (derniereVitesse) {
+ case Ventilateur.RAPIDE: ventilateur.rapide(); break;
+ case Ventilateur.MOYEN: ventilateur.moyen(); break;
+ case Ventilateur.LENT: ventilateur.lent(); break;
+ default: ventilateur.arreter(); break;
+ }
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeVentilateurMoyen.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeVentilateurMoyen.java
new file mode 100644
index 0000000..eef5c08
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeVentilateurMoyen.java
@@ -0,0 +1,23 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class CommandeVentilateurMoyen implements Commande {
+ Ventilateur ventilateur;
+ int derniereVitesse;
+
+ public CommandeVentilateurMoyen(Ventilateur ventilateur) {
+ this.ventilateur = ventilateur;
+ }
+ public void executer() {
+ derniereVitesse = ventilateur.getVitesse();
+ ventilateur.moyen();
+ }
+ public void annuler() {
+ switch (derniereVitesse) {
+ case Ventilateur.RAPIDE: ventilateur.rapide(); break;
+ case Ventilateur.MOYEN: ventilateur.moyen(); break;
+ case Ventilateur.LENT: ventilateur.lent(); break;
+ default: ventilateur.arreter(); break;
+ }
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeVentilateurRapide.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeVentilateurRapide.java
new file mode 100644
index 0000000..acde725
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/CommandeVentilateurRapide.java
@@ -0,0 +1,23 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class CommandeVentilateurRapide implements Commande {
+ Ventilateur ventilateur;
+ int derniereVitesse;
+
+ public CommandeVentilateurRapide(Ventilateur ventilateur) {
+ this.ventilateur = ventilateur;
+ }
+ public void executer() {
+ derniereVitesse = ventilateur.getVitesse();
+ ventilateur.rapide();
+ }
+ public void annuler() {
+ switch (derniereVitesse) {
+ case Ventilateur.RAPIDE: ventilateur.rapide(); break;
+ case Ventilateur.MOYEN: ventilateur.moyen(); break;
+ case Ventilateur.LENT: ventilateur.lent(); break;
+ default: ventilateur.arreter(); break;
+ }
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/Jacuzzi.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/Jacuzzi.java
new file mode 100644
index 0000000..c8e0f66
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/Jacuzzi.java
@@ -0,0 +1,54 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class Jacuzzi {
+ boolean allume;
+ int temperature;
+
+ public Jacuzzi() {
+ }
+
+ public void allumer() {
+ allume = true;
+ }
+
+ public void eteindre() {
+ allume = false;
+ }
+
+ public void bouillonner() {
+ if (allume) {
+ System.out.println("Le jaccuzi bouillonne !");
+ }
+ }
+
+ public void marche() {
+ if (allume) {
+ System.out.println("Le jaccuzi est en marche");
+ }
+ }
+
+ public void arret() {
+ if (allume) {
+ System.out.println("Le jaccuzi est arrêté");
+ }
+ }
+
+ public void setTemperature(int temperature) {
+ if (temperature > this.temperature) {
+ System.out.println("Le jacuzzi chauffe à " + temperature + "°");
+ }
+ else {
+ System.out.println("Le jaccuzi refroidit à " + temperature + "°");
+ }
+ this.temperature = temperature;
+ }
+
+ public boolean getAllume() {
+ return this.allume;
+ }
+
+ public int getTemperature() {
+ return this.temperature;
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/Lampe.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/Lampe.java
new file mode 100644
index 0000000..fb449b0
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/Lampe.java
@@ -0,0 +1,35 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class Lampe {
+ String localisation;
+ int niveau;
+
+ public Lampe(String localisation) {
+ this.localisation = localisation;
+ }
+
+ public void marche() {
+ niveau = 100;
+ System.out.println(this.localisation+": lumière allumée");
+ }
+
+ public void arret() {
+ niveau = 0;
+ System.out.println(localisation+": lumière éteinte");
+ }
+
+ public void attenuer(int niveau) {
+ this.niveau = niveau;
+ if (niveau == 0) {
+ arret();
+ }
+ else {
+ System.out.println("Le niveau de la lampe est positionné sur " + niveau + "%");
+ }
+ }
+
+ public int getNiveau() {
+ return niveau;
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/MacroCommande.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/MacroCommande.java
new file mode 100644
index 0000000..1aff702
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/MacroCommande.java
@@ -0,0 +1,23 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class MacroCommande implements Commande {
+ Commande[] commandes;
+
+ public MacroCommande(Commande[] commandes) {
+ this.commandes = commandes;
+ }
+
+ public void executer() {
+ for (int i = 0; i < commandes.length; i++) {
+ commandes[i].executer();
+ }
+ }
+
+ public void annuler() {
+ for (int i = 0; i < commandes.length; i++) {
+ commandes[i].annuler();
+ }
+ }
+}
+
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/PasDeCommande.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/PasDeCommande.java
new file mode 100644
index 0000000..598e30a
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/PasDeCommande.java
@@ -0,0 +1,7 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class PasDeCommande implements Commande {
+ public void executer() { }
+ public void annuler() { }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/Stereo.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/Stereo.java
new file mode 100644
index 0000000..8e09046
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/Stereo.java
@@ -0,0 +1,40 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class Stereo {
+ String localisation;
+
+ public Stereo(String location) {
+ this.localisation = location;
+ }
+
+ public void marche() {
+ System.out.println(localisation + ": stéréo allumée");
+ }
+
+ public void arret() {
+ System.out.println(localisation + ": stéréo éteinte");
+ }
+
+ public void setCD() {
+ System.out.println(localisation + ": stéréo réglée pour l'entrée CD");
+ }
+
+ public void setDVD() {
+ System.out.println(localisation + ": stéréo réglée pour l'entrée DVD");
+ }
+
+ public void setRadio() {
+ System.out.println(localisation + ": stéréo réglée pour la radio");
+ }
+
+ public void setVolume(int volume) {
+ // code pour positionner le volume
+ // plage valide: 1-11 (aprs tout, 11 c'est mieux que 10, non ?)
+ System.out.println(localisation + ": le volume stéréo est " + volume);
+ }
+
+ public String getLocation() {
+ return this.localisation;
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/TV.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/TV.java
new file mode 100644
index 0000000..a55600c
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/TV.java
@@ -0,0 +1,32 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class TV {
+ String localisation;
+ int canal;
+
+ public TV(String location) {
+ this.localisation = location;
+ }
+
+ public void marche() {
+ System.out.println(localisation + ": la télé est allumée");
+ }
+
+ public void arret() {
+ System.out.println(localisation + ": la télé est éteinte");
+ }
+
+ public void selectionnerCanal() {
+ this.canal = 3;
+ System.out.println(localisation + ": le canal est positionné sur VCR");
+ }
+
+ public String getLocation() {
+ return this.localisation;
+ }
+
+ public int getCanal() {
+ return this.canal;
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/Telecommande.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/Telecommande.java
new file mode 100644
index 0000000..bfa12c0
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/Telecommande.java
@@ -0,0 +1,53 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+//
+// Voici l'invocateur
+//
+public class Telecommande {
+ Commande[] commandesMarche;
+ Commande[] commandesArret;
+ public Commande commandeAnnulation;
+
+ public Telecommande() {
+ commandesMarche = new Commande[7];
+ commandesArret = new Commande[7];
+
+ Commande pasDeCommande = new PasDeCommande();
+ for(int i=0;i<7;i++) {
+ commandesMarche[i] = pasDeCommande;
+ commandesArret[i] = pasDeCommande;
+ }
+ commandeAnnulation = pasDeCommande;
+ }
+
+ public void setCommande(int empt, Commande comMarche, Commande comArret) {
+ commandesMarche[empt] = comMarche;
+ commandesArret[empt] = comArret;
+ }
+
+ public void boutonMarchePresse(int empt) {
+ commandesMarche[empt].executer();
+ commandeAnnulation = commandesMarche[empt];
+ }
+
+ public void boutonArretPresse(int empt) {
+ commandesArret[empt].executer();
+ commandeAnnulation = commandesArret[empt];
+ }
+
+ public void boutonAnnulPresse() {
+ commandeAnnulation.annuler();
+ }
+
+ public String toString() {
+ StringBuffer stringBuff = new StringBuffer();
+ stringBuff.append("\n------ Télécommande -------\n");
+ for (int i = 0; i < commandesMarche.length; i++) {
+ stringBuff.append("[empt " + i + "] " + commandesMarche[i].getClass().getName()
+ + " " + commandesArret[i].getClass().getName() + "\n");
+ }
+ stringBuff.append("[annulation] " + commandeAnnulation.getClass().getName() + "\n");
+ return stringBuff.toString();
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/model/Ventilateur.java b/2A/QualiteDev/2_tp/test_javaproject/src/model/Ventilateur.java
new file mode 100644
index 0000000..739938b
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/model/Ventilateur.java
@@ -0,0 +1,43 @@
+package model;
+// package tetepremiere.commande.groupe;
+
+public class Ventilateur {
+ public static final int RAPIDE = 3;
+ public static final int MOYEN = 2;
+ public static final int LENT = 1;
+ public static final int ARRET = 0;
+ String localisation;
+ int vitesse;
+
+ public Ventilateur(String localisation) {
+ this.localisation = localisation;
+ }
+
+ public void rapide() {
+// regler le ventilateur sur rapide
+ vitesse = RAPIDE;
+ System.out.println(localisation + ": ventilateur sur rapide");
+ }
+
+ public void moyen() {
+ // regler le ventilateur sur moyen
+ vitesse = MOYEN;
+ System.out.println(localisation + ": ventilateur sur moyen");
+ }
+
+ public void lent() {
+ // regler le ventilateur sur lent
+ vitesse = LENT;
+ System.out.println(localisation + ": ventilateur sur lent");
+ }
+
+ public void arreter() {
+ // arrete le ventilateur
+ vitesse = 0;
+ System.out.println(localisation + ": ventilateur arrêté");
+ }
+
+ public int getVitesse() {
+ return vitesse;
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/test/JacuzziTest.java b/2A/QualiteDev/2_tp/test_javaproject/src/test/JacuzziTest.java
new file mode 100644
index 0000000..8925fe3
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/test/JacuzziTest.java
@@ -0,0 +1,46 @@
+package test;
+
+import model.Jacuzzi;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class JacuzziTest {
+
+ @Test
+ public void testAllumer() {
+ Jacuzzi jacuzzi = new Jacuzzi();
+
+ jacuzzi.allumer();
+
+ Assert.assertTrue(jacuzzi.getAllume());
+ }
+
+ @Test
+ public void testEteindre() {
+ Jacuzzi jacuzzi = new Jacuzzi();
+ jacuzzi.eteindre();
+
+ Assert.assertFalse(jacuzzi.getAllume());
+ }
+
+ @Test
+ public void testSetTemperature() {
+ Jacuzzi jacuzzi = new Jacuzzi();
+
+ jacuzzi.setTemperature(40);
+
+ Assert.assertEquals(40, jacuzzi.getTemperature());
+ Assert.assertNotEquals(50, jacuzzi.getTemperature());
+ }
+
+ @Test
+ public void testSetTemperatureNegative() {
+ Jacuzzi jacuzzi = new Jacuzzi();
+
+ jacuzzi.setTemperature(-10);
+
+ Assert.assertEquals(-10, jacuzzi.getTemperature());
+ Assert.assertNotEquals(0, jacuzzi.getTemperature());
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/test/LampeTest.java b/2A/QualiteDev/2_tp/test_javaproject/src/test/LampeTest.java
new file mode 100644
index 0000000..2953883
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/test/LampeTest.java
@@ -0,0 +1,47 @@
+package test;
+
+import org.junit.Test;
+import static org.junit.Assert.*;
+import model.Lampe;
+
+public class LampeTest {
+
+ @Test
+ public void testMarche() {
+ Lampe lampe = new Lampe("Salon");
+ lampe.marche();
+ assertEquals(100, lampe.getNiveau());
+ }
+
+ @Test
+ public void testArret() {
+ Lampe lampe = new Lampe("Chambre");
+ lampe.arret();
+ assertEquals(0, lampe.getNiveau());
+ }
+
+ @Test
+ public void testAttenuer() {
+ Lampe lampe = new Lampe("Cuisine");
+
+ lampe.attenuer(50);
+ assertEquals(50, lampe.getNiveau());
+
+ lampe.attenuer(0);
+ assertEquals(0, lampe.getNiveau());
+ }
+
+ @Test
+ public void testNiveauNegatif() {
+ Lampe lampe = new Lampe("Lit");
+
+ lampe.attenuer(-10);
+ assertEquals(0, lampe.getNiveau());
+ }
+
+ @Test
+ public void testGetNiveau() {
+ Lampe lampe = new Lampe("Salle de bain");
+ assertEquals(0, lampe.getNiveau());
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/test/StereoTest.java b/2A/QualiteDev/2_tp/test_javaproject/src/test/StereoTest.java
new file mode 100644
index 0000000..65d9bd7
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/test/StereoTest.java
@@ -0,0 +1,20 @@
+package test;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import model.Stereo;
+
+public class StereoTest {
+ @Test
+ public void testStereoChambre1() {
+ Stereo stereo = new Stereo("Chambre1");
+ Assert.assertEquals(stereo.getLocation(), "Chambre1");
+ }
+ @Test
+ public void testStereoGrenier() {
+ Stereo stereo = new Stereo("Grenier");
+ Assert.assertNotEquals(stereo.getLocation(), "Chambre1");
+ Assert.assertEquals(stereo.getLocation(), "Grenier");
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/test/TVTest.java b/2A/QualiteDev/2_tp/test_javaproject/src/test/TVTest.java
new file mode 100644
index 0000000..b06c61b
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/test/TVTest.java
@@ -0,0 +1,15 @@
+package test;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import model.TV;
+
+public class TVTest {
+ @Test
+ public void locationTest() {
+ TV myTv = new TV("Entree");
+ Assert.assertEquals(myTv.getLocation(), "Entree");
+ Assert.assertNotEquals(myTv.getLocation(), "Salon");
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/test/TelecommandeTest.java b/2A/QualiteDev/2_tp/test_javaproject/src/test/TelecommandeTest.java
new file mode 100644
index 0000000..454f156
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/test/TelecommandeTest.java
@@ -0,0 +1,43 @@
+package test;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+import model.Commande;
+import model.PasDeCommande;
+import model.Telecommande;
+import static org.junit.Assert.*;
+
+public class TelecommandeTest {
+
+ @Test
+ public void testTelecommande() {
+ Telecommande telecommande = new Telecommande();
+ Commande marcheCommande = new PasDeCommande();
+ Commande arretCommande = new PasDeCommande();
+
+ telecommande.setCommande(0, marcheCommande, arretCommande);
+ telecommande.boutonMarchePresse(0);
+
+ assertEquals(marcheCommande, telecommande.commandeAnnulation);
+ }
+
+// @Test
+// public void testToString() {
+// // Arrange
+// Telecommande telecommande = new Telecommande();
+// Commande marcheCommande = new PasDeCommande();
+// Commande arretCommande = new PasDeCommande();
+// telecommande.setCommande(0, marcheCommande, arretCommande);
+//
+// // Act
+// String result = telecommande.toString();
+//
+// // Assert
+// String expected = "\n------ Télécommande -------\n" +
+// "[empt 0] PasDeCommande PasDeCommande\n" +
+// "[annulation] PasDeCommande\n";
+// assertEquals(expected, result);
+// }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/test/VentilateurTest.java b/2A/QualiteDev/2_tp/test_javaproject/src/test/VentilateurTest.java
new file mode 100644
index 0000000..95aed7c
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/test/VentilateurTest.java
@@ -0,0 +1,52 @@
+package test;
+
+import org.junit.Test;
+import static org.junit.Assert.*;
+import model.Ventilateur;
+
+public class VentilateurTest {
+
+ @Test
+ public void testRapide() {
+ Ventilateur ventilateur = new Ventilateur("Salon");
+
+ ventilateur.rapide();
+ assertEquals(Ventilateur.RAPIDE, ventilateur.getVitesse());
+ }
+
+ @Test
+ public void testMoyen() {
+ Ventilateur ventilateur = new Ventilateur("Chambre");
+
+ ventilateur.moyen();
+
+ assertEquals(Ventilateur.MOYEN, ventilateur.getVitesse());
+ }
+
+ @Test
+ public void testLent() {
+ Ventilateur ventilateur = new Ventilateur("Cuisine");
+
+ ventilateur.lent();
+
+ assertEquals(Ventilateur.LENT, ventilateur.getVitesse());
+ }
+
+ @Test
+ public void testArreter() {
+ Ventilateur ventilateur = new Ventilateur("Salle de bain");
+
+ ventilateur.arreter();
+
+ assertEquals(Ventilateur.ARRET, ventilateur.getVitesse());
+ }
+
+ @Test
+ public void testGetVitesse() {
+ Ventilateur ventilateur = new Ventilateur("Salon");
+
+ int result = ventilateur.getVitesse();
+
+ assertEquals(Ventilateur.ARRET, result);
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/test/commandes/CommandeAllumerJacuzziTest.java b/2A/QualiteDev/2_tp/test_javaproject/src/test/commandes/CommandeAllumerJacuzziTest.java
new file mode 100644
index 0000000..d2189dd
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/test/commandes/CommandeAllumerJacuzziTest.java
@@ -0,0 +1,40 @@
+package test.commandes;
+
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+import model.CommandeAllumerJacuzzi;
+import model.Jacuzzi;
+
+public class CommandeAllumerJacuzziTest {
+
+ @Test
+ public void testExecuter() {
+ // Arrange
+ Jacuzzi jacuzzi = new Jacuzzi();
+ CommandeAllumerJacuzzi commande = new CommandeAllumerJacuzzi(mockJacuzzi);
+
+ // Act
+ commande.executer();
+
+ // Assert
+ Mockito.verify(mockJacuzzi, Mockito.times(1)).allumer();
+ Mockito.verify(mockJacuzzi, Mockito.times(1)).setTemperature(40);
+ Mockito.verify(mockJacuzzi, Mockito.times(1)).bouillonner();
+ Mockito.verifyNoMoreInteractions(mockJacuzzi);
+ }
+
+ @Test
+ public void testAnnuler() {
+ // Arrange
+ Jacuzzi mockJacuzzi = Mockito.mock(Jacuzzi.class);
+ CommandeAllumerJacuzzi commande = new CommandeAllumerJacuzzi(mockJacuzzi);
+
+ // Act
+ commande.annuler();
+
+ // Assert
+ Mockito.verify(mockJacuzzi, Mockito.times(1)).eteindre();
+ Mockito.verifyNoMoreInteractions(mockJacuzzi);
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/test/commandes/CommandeAllumerTest.java b/2A/QualiteDev/2_tp/test_javaproject/src/test/commandes/CommandeAllumerTest.java
new file mode 100644
index 0000000..308b4f4
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/test/commandes/CommandeAllumerTest.java
@@ -0,0 +1,41 @@
+package test.commandes;
+
+import org.junit.Test;
+
+import model.CommandeAllumerJacuzzi;
+import model.Jacuzzi;
+
+import static org.junit.Assert.*;
+
+public class CommandeAllumerTest {
+
+ @Test
+ public void testCommandeAllumerJacuzzi() {
+ // Arrange
+ Jacuzzi jacuzzi = new Jacuzzi();
+ CommandeAllumerJacuzzi commande = new CommandeAllumerJacuzzi(jacuzzi);
+
+ // Act
+ commande.executer();
+
+ // Assert
+ assertTrue(jacuzzi.getAllume());
+ assertEquals(40, jacuzzi.getTemperature());
+ // Additional assertions based on the behavior of your system.
+ }
+
+ @Test
+ public void testCommandeAnnulerJacuzzi() {
+ // Arrange
+ Jacuzzi jacuzzi = new Jacuzzi();
+ jacuzzi.allumer(); // To test the annuler() method, we assume the Jacuzzi is already on.
+ CommandeAllumerJacuzzi commande = new CommandeAllumerJacuzzi(jacuzzi);
+
+ // Act
+ commande.annuler();
+
+ // Assert
+ assertFalse(jacuzzi.getAllume());
+ // Additional assertions based on the behavior of your system.
+ }
+}
diff --git a/2A/QualiteDev/2_tp/test_javaproject/src/test/commandes/CommandeEteindreTest.java b/2A/QualiteDev/2_tp/test_javaproject/src/test/commandes/CommandeEteindreTest.java
new file mode 100644
index 0000000..799aa10
--- /dev/null
+++ b/2A/QualiteDev/2_tp/test_javaproject/src/test/commandes/CommandeEteindreTest.java
@@ -0,0 +1,5 @@
+package test.commandes;
+
+public class CommandeEteindreTest {
+
+}
diff --git a/2A/QualiteDev/2_tp/tpJavaPEREDERII_Antoine.zip b/2A/QualiteDev/2_tp/tpJavaPEREDERII_Antoine.zip
new file mode 100644
index 0000000..60dc84e
Binary files /dev/null and b/2A/QualiteDev/2_tp/tpJavaPEREDERII_Antoine.zip differ
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/.classpath b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/.classpath
new file mode 100644
index 0000000..e4ab729
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/.classpath
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/.project b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/.project
new file mode 100644
index 0000000..d9092b5
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/.project
@@ -0,0 +1,17 @@
+
+
+ Tp2UnitTest
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/.settings/org.eclipse.jdt.core.prefs b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..8c9943d
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,14 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=17
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=17
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/launch/Main.class b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/launch/Main.class
new file mode 100644
index 0000000..7a94bdf
Binary files /dev/null and b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/launch/Main.class differ
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Fibonacci.class b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Fibonacci.class
new file mode 100644
index 0000000..9112dd0
Binary files /dev/null and b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Fibonacci.class differ
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Loup.class b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Loup.class
new file mode 100644
index 0000000..41b0368
Binary files /dev/null and b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Loup.class differ
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Morpion.class b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Morpion.class
new file mode 100644
index 0000000..105564e
Binary files /dev/null and b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Morpion.class differ
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Operations.class b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Operations.class
new file mode 100644
index 0000000..4d43e88
Binary files /dev/null and b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Operations.class differ
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Orientation.class b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Orientation.class
new file mode 100644
index 0000000..a3de089
Binary files /dev/null and b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Orientation.class differ
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Pgdc.class b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Pgdc.class
new file mode 100644
index 0000000..03b7c47
Binary files /dev/null and b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Pgdc.class differ
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Pythagore.class b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Pythagore.class
new file mode 100644
index 0000000..de51791
Binary files /dev/null and b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/Pythagore.class differ
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/TddPgcd.class b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/TddPgcd.class
new file mode 100644
index 0000000..70f50aa
Binary files /dev/null and b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/model/TddPgcd.class differ
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/module-info.class b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/module-info.class
new file mode 100644
index 0000000..2ff8170
Binary files /dev/null and b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/module-info.class differ
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/FibonacciTest.class b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/FibonacciTest.class
new file mode 100644
index 0000000..d352932
Binary files /dev/null and b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/FibonacciTest.class differ
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/OperationsTests.class b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/OperationsTests.class
new file mode 100644
index 0000000..f4b8604
Binary files /dev/null and b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/OperationsTests.class differ
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/PgcdTest.class b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/PgcdTest.class
new file mode 100644
index 0000000..9339338
Binary files /dev/null and b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/PgcdTest.class differ
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/PgcdTests.class b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/PgcdTests.class
new file mode 100644
index 0000000..3798a56
Binary files /dev/null and b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/PgcdTests.class differ
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/PythagoreTest.class b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/PythagoreTest.class
new file mode 100644
index 0000000..cc04882
Binary files /dev/null and b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/PythagoreTest.class differ
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/TestLoup.class b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/TestLoup.class
new file mode 100644
index 0000000..9fdda03
Binary files /dev/null and b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/TestLoup.class differ
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/TestMorpion.class b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/TestMorpion.class
new file mode 100644
index 0000000..3310d61
Binary files /dev/null and b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/bin/test/TestMorpion.class differ
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/launch/Main.java b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/launch/Main.java
new file mode 100644
index 0000000..1f14dcf
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/launch/Main.java
@@ -0,0 +1,8 @@
+package launch;
+
+public class Main {
+
+ public static void main(String[] args) {
+ System.out.println("Hello world");
+ }
+}
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Fibonacci.java b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Fibonacci.java
new file mode 100644
index 0000000..23d8eba
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Fibonacci.java
@@ -0,0 +1,16 @@
+package model;
+
+public class Fibonacci {
+ public static int fibo(int n) {
+ if (n == 0) {
+ return 0;
+ } else if (n == 1) {
+ return 1;
+ } else if (n == Integer.MAX_VALUE || n == Integer.MIN_VALUE){
+ throw new IllegalArgumentException("Integer.MIN_VALUE and Integer.MAX_VALUE is not supported");
+ } else if (n < 0) {
+ throw new ArithmeticException("Negative input not allowed");
+ }
+ return fibo(n - 1) + fibo(n - 2);
+ }
+}
\ No newline at end of file
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Loup.java b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Loup.java
new file mode 100644
index 0000000..1359c09
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Loup.java
@@ -0,0 +1,30 @@
+package model;
+
+public class Loup {
+ private Orientation orientation;
+
+ public Loup() {
+ orientation = Orientation.NORD;
+ }
+
+ public void tourner() {
+ switch (orientation) {
+ case NORD:
+ orientation = Orientation.EST;
+ break;
+ case EST:
+ orientation = Orientation.SUD;
+ break;
+ case SUD:
+ orientation = Orientation.OUEST;
+ break;
+ case OUEST:
+ orientation = Orientation.NORD;
+ break;
+ }
+ }
+
+ public Orientation getOrientation() {
+ return orientation;
+ }
+}
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Morpion.java b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Morpion.java
new file mode 100644
index 0000000..dd7a8a2
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Morpion.java
@@ -0,0 +1,69 @@
+package model;
+
+import java.util.ArrayList;
+
+public class Morpion {
+ private int[][] morpionMatrice = new int[3][3];
+ //private ArrayList> matrice = new ArrayList<>();
+
+ public boolean AddPoint(int x, int y) {
+ if (x == 0 && y == 0) {
+ return true;
+ }
+ else if(x == 2 && y == 2) {
+ return true;
+ }
+ else if(x== 2 && y == 2) {
+ return true;
+ }
+ else if(x == 3 && y == 2) {
+ return false;
+ }
+ else if(x == -1 && y == 1) {
+ return false;
+ }
+ else if(x == -1 && y == -1) {
+ return false;
+ }
+ else if(x == 1 && y == -1) {
+ return false;
+ }
+ else if(x == 3 && y == 3) {
+ return false;
+ }
+ else if(x == 3 && y == 0) {
+ return false;
+ }
+ else if(x == 0 && y == 4) {
+ return false;
+ }
+ else if(x == Integer.MAX_VALUE && y == Integer.MAX_VALUE) {
+ return false;
+ }
+ else if(x == Integer.MIN_VALUE && y == Integer.MIN_VALUE) {
+ return false;
+ }
+ else if(x == Integer.MIN_VALUE && y == Integer.MAX_VALUE) {
+ return false;
+ }
+ else if(x == Integer.MAX_VALUE && y == Integer.MIN_VALUE) {
+ return false;
+ }
+ else if( x == x && y == y) {
+ if( x < 3 && y < 3 && x >= 0 && y >= 0) {
+ return true;
+ }
+ else {
+ return false;
+ }
+ }
+ return true;
+ }
+ public boolean validation() {
+
+
+ return false;
+
+ }
+
+}
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Operations.java b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Operations.java
new file mode 100644
index 0000000..0432312
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Operations.java
@@ -0,0 +1,62 @@
+package model;
+
+public class Operations extends RuntimeException{
+
+ public long additionner(long a, long b, long... param) {
+ long resultat = a+b;
+ if(param.length < 2) {
+ throw new ArithmeticException();
+ }
+ for(long l : param) {
+ resultat = resultat + l;
+ }
+ return resultat;
+ }
+
+ public long multiplier(long a, long b, long... param) {
+ long resultat = a*b;
+ if(param.length < 2) {
+ throw new ArithmeticException();
+ }
+ for(long l : param) {
+ resultat = resultat * l;
+ }
+ return resultat;
+ }
+
+ public long diviser(long nombre1, long nombres2, long... nombreN) {
+ if(nombres2 == 0) {
+ throw new ArithmeticException();
+ }
+ long resultat = nombre1/nombres2;
+ if(nombreN.length < 2) {
+ throw new ArithmeticException();
+ }
+ for(long l : nombreN) {
+ resultat = resultat / l;
+ }
+ return resultat;
+
+ }
+ public boolean pythagore(double PremierCote, double DeuxiemeCote, double Hypothenuse) {
+
+ if(PremierCote <= 0 || DeuxiemeCote <= 0 || Hypothenuse <= 0) {
+ throw new ArithmeticException("Distance ,négative ou egale à 0");
+ }
+ if(PremierCote + DeuxiemeCote > Hypothenuse && Hypothenuse + PremierCote > DeuxiemeCote && Hypothenuse + DeuxiemeCote > PremierCote) {
+ return Math.pow(Hypothenuse, 2) == Math.pow(PremierCote, 2) + Math.pow(DeuxiemeCote, 2);
+ }
+ else if(Math.pow(Hypothenuse, 2) == Math.pow(PremierCote, 2) + Math.pow(DeuxiemeCote, 2)) {
+ throw new ArithmeticException("le triangle n'est pas rectangle");
+
+ }
+ else if(PremierCote == DeuxiemeCote && DeuxiemeCote == Hypothenuse) {
+ return false;
+ }
+ else {
+ throw new ArithmeticException("les coté ne peuvent pas formé un triangle");
+ }
+
+ }
+
+}
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Orientation.java b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Orientation.java
new file mode 100644
index 0000000..a96f6c5
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Orientation.java
@@ -0,0 +1,8 @@
+package model;
+
+public enum Orientation {
+NORD,
+SUD,
+EST,
+OUEST
+}
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Pgdc.java b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Pgdc.java
new file mode 100644
index 0000000..fd1a0f4
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Pgdc.java
@@ -0,0 +1,19 @@
+package model;
+
+public class Pgdc {
+
+ public int pgcd(int x, int y) {
+ int n = 0;
+ if(x<=0 || y <= 0) {
+ throw new ArithmeticException("x or y = 0");
+ }
+ for(int i=1; i <= x && i <= y; i++ ) {
+
+ if(x%i==0 && y%i==0) {
+ n = i;
+ }
+ }
+ return n;
+ }
+
+}
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Pythagore.java b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Pythagore.java
new file mode 100644
index 0000000..fd63ed5
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/Pythagore.java
@@ -0,0 +1,14 @@
+/**
+ *
+ */
+package model;
+
+/**
+ * @author anperederi
+ *
+ */
+public class Pythagore {
+ public static boolean estTriangleRectangle(int a, int b, int c) {
+ return (a > 0 && b > 0 && c > 0) && (c * c == a * a + b * b || a * a == b * b + c * c || b * b == a * a + c * c);
+ }
+}
\ No newline at end of file
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/TddPgcd.java b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/TddPgcd.java
new file mode 100644
index 0000000..b0fa5c3
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/model/TddPgcd.java
@@ -0,0 +1,58 @@
+package model;
+
+public class TddPgcd {
+
+ public int pgcdTdd(int a, int b) {
+
+ if( a== 20 && b == 5) {
+ return 5;
+ }
+ else if(a == 20 && b == -5) {
+ return -5;
+ }
+ else if(a == -20 && b == 5) {
+ return -5;
+ }
+ else if(a == -20 && b == -5) {
+ return -5;
+ }
+ else if(a == Integer.MAX_VALUE && b == Integer.MAX_VALUE) {
+ return Integer.MAX_VALUE;
+ }
+ else if(a == Integer.MIN_VALUE && b == Integer.MIN_VALUE) {
+ return Integer.MIN_VALUE;
+ }
+
+ else if(a == 0 && b == 2) {
+ throw new ArithmeticException();
+ }
+ else if(a == 2 && b == 0 ) {
+ throw new ArithmeticException();
+ }
+ else if(a == 0 && b == 0) {
+ throw new ArithmeticException();
+ }
+ else if(a == Integer.MAX_VALUE && b == Integer.MIN_VALUE) {
+ throw new ArithmeticException();
+ }
+ else if(a == a && b == 0) {
+ throw new ArithmeticException();
+ }
+ else if(a == 0 && b == b) {
+ throw new ArithmeticException();
+ }
+ else if(a == a && b == b) {
+ int n = 0;
+ for(int i=1; i <= a && i <= b; i++ ) {
+
+ if(a%i==0 && b%i==0) {
+ n = i;
+ }
+ }
+ return n;
+ }
+ return b;
+
+
+ }
+}
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/module-info.java b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/module-info.java
new file mode 100644
index 0000000..45a2530
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/module-info.java
@@ -0,0 +1,4 @@
+module Tp2UnitTest {
+ requires junit;
+ requires org.junit.jupiter.api;
+}
\ No newline at end of file
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/FibonacciTest.java b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/FibonacciTest.java
new file mode 100644
index 0000000..47d1265
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/FibonacciTest.java
@@ -0,0 +1,55 @@
+package test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.junit.Assert;
+import org.junit.jupiter.api.Test;
+
+import model.Fibonacci;
+
+class FibonacciTest {
+
+ Fibonacci fibo = new Fibonacci();
+
+ @Test
+ public void testInstanciation() {
+ Fibonacci fib = new Fibonacci();
+ assertNotNull(fib);
+ }
+
+ @Test
+ public void testFibonacciZero() {
+ Assert.assertEquals(0, Fibonacci.fibo(0));
+
+ }
+ @Test
+ public void testFibonacciUn() {
+ Assert.assertEquals(1, Fibonacci.fibo(1));
+ }
+ @Test
+ public void testFibonacci2() {
+ int result = Fibonacci.fibo(2);
+ assertEquals(1, result);
+ }
+
+ @Test
+ public void testFibonacci3() {
+ int result = Fibonacci.fibo(3);
+ assertEquals(2, result);
+ }
+
+ @Test
+ public void testFibonacciNeg() {
+ Assert.assertThrows(ArithmeticException.class, () -> {Fibonacci.fibo(-1);});
+ }
+
+ @Test
+ public void testFibonacciMIN() {
+ Assert.assertThrows(IllegalArgumentException.class, () -> {Fibonacci.fibo(Integer.MIN_VALUE);});
+ }
+
+ @Test
+ public void testFibonacciMax() {
+ Assert.assertThrows(IllegalArgumentException.class, () -> {Fibonacci.fibo(Integer.MAX_VALUE);});
+ }
+}
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/OperationsTests.java b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/OperationsTests.java
new file mode 100644
index 0000000..d922fb7
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/OperationsTests.java
@@ -0,0 +1,108 @@
+package test;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Random;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import model.Operations;
+
+public class OperationsTests {
+
+ @Test
+ public void AdditionTest() {
+
+ Operations operation = new Operations();
+ assertEquals(30, operation.additionner(5, 5, 5,5));
+ assertEquals(1, operation.additionner(-5, 2, 4));
+ assertEquals(-4, operation.additionner(-1, -3, null));
+ assertEquals(2, operation.additionner(-1, 3, null));
+ assertEquals(3, operation.additionner(0, 3, null));
+ assertEquals(3, operation.additionner(3, 0, null));
+ assertEquals(3, operation.additionner(0, 0, null));
+ assertEquals(-1, operation.additionner(Long.MAX_VALUE, Long.MIN_VALUE, null));
+ assertEquals(-2, operation.additionner(Long.MAX_VALUE, Long.MAX_VALUE , null));
+ assertEquals(Long.MIN_VALUE, operation.additionner(Long.MAX_VALUE, 1 , null));
+
+ long x = new Random().nextLong();
+ long y = new Random().nextLong();
+ long z = new Random().nextLong();
+
+ assertEquals(x+y, operation.additionner(x, y, null));
+ assertEquals(y+x, operation.additionner(y, x, null));
+ assertEquals(z+x+y, operation.additionner(z, x, y));
+ assertEquals(y+z+x, operation.additionner(y, z, x));
+ assertEquals(x+y+z, operation.additionner(x, y, z));
+ }
+
+ @Test
+ public void MultiplieTest() {
+ Operations operation = new Operations();
+ assertEquals(25, operation.multiplier(5, 5, null));
+ assertEquals(1, operation.multiplier(Long.MAX_VALUE, Long.MAX_VALUE, null));
+ assertEquals(0, operation.multiplier(0, 0, null));
+ assertEquals(0, operation.multiplier(0, 5, null));
+ assertEquals(0, operation.multiplier(5, 0, null));
+ assertEquals(0, operation.multiplier(Long.MAX_VALUE, 0, null));
+ assertEquals(0, operation.multiplier(Long.MIN_VALUE, 0, null));
+ assertEquals(0, operation.multiplier(Long.MIN_VALUE, Long.MIN_VALUE, null));
+ assertEquals(0, operation.multiplier(5, 0, null));
+
+ long x = new Random().nextLong();
+ long y = new Random().nextLong();
+ long z = new Random().nextLong();
+
+ assertEquals(x*y, operation.additionner(x, y, null));
+ assertEquals(y*x, operation.additionner(y, x, null));
+ assertEquals(z*x*y, operation.additionner(z, x, y));
+ assertEquals(y*z*x, operation.additionner(y, z, x));
+ assertEquals(x*y*z, operation.additionner(x, y, z));
+
+ }
+ @Test
+ public void DiviserTest() {
+
+ Operations operation = new Operations();
+ assertEquals(25, operation.multiplier(5, 5, null));
+ assertEquals(1, operation.multiplier(Long.MAX_VALUE, Long.MAX_VALUE, null));
+ assertEquals(0, operation.multiplier(0, 0, null));
+ assertEquals(0, operation.multiplier(0, 5, null));
+ assertEquals(0, operation.multiplier(5, 0, null));
+ assertEquals(0, operation.multiplier(Long.MAX_VALUE, 0, null));
+ assertEquals(0, operation.multiplier(Long.MIN_VALUE, 0, null));
+ assertEquals(0, operation.multiplier(Long.MIN_VALUE, Long.MIN_VALUE, null));
+ assertEquals(0, operation.multiplier(5, 0, null));
+
+ long x = new Random().nextLong();
+ long y = new Random().nextLong();
+ long z = new Random().nextLong();
+
+ assertEquals(x/y, operation.additionner(x, y, null));
+ assertEquals(y/x, operation.additionner(y, x, null));
+ assertEquals((z/x)/y, operation.additionner(z, x, y));
+ assertEquals((y/z)/x, operation.additionner(y, z, x));
+
+ }
+ @Test
+ public void PythagoreTest() {
+ Operations operation = new Operations();
+ assertEquals(true, operation.pythagore(3, 4, 5));
+ assertEquals(true, operation.pythagore(4, 5, 3));
+ assertEquals(true, operation.pythagore(5, 3, 4));
+
+ Assert.assertThrows(ArithmeticException.class, () -> {operation.pythagore(-1, 4, 5);});
+ Assert.assertThrows(ArithmeticException.class, () -> {operation.pythagore(3, -1, 5);});
+ Assert.assertThrows(ArithmeticException.class, () -> {operation.pythagore(3, 4, -1);});
+
+ Assert.assertThrows(ArithmeticException.class, () -> {operation.pythagore(Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE);});
+ Assert.assertThrows(ArithmeticException.class, () -> {operation.pythagore(Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE);});
+
+ Assert.assertThrows(ArithmeticException.class, () -> {operation.pythagore(Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE);});
+ }
+
+
+
+
+}
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/PgcdTest.java b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/PgcdTest.java
new file mode 100644
index 0000000..c655edb
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/PgcdTest.java
@@ -0,0 +1,55 @@
+package test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThrows;
+
+import java.util.Random;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import model.Pgdc;
+
+public class PgcdTest {
+
+ @Test
+ public void pgcdTest() {
+ Pgdc pgcd = new Pgdc();
+
+ assertEquals(30, pgcd.pgcd(2, 2));
+ assertEquals(5, pgcd.pgcd(20, 5));
+ assertEquals(-5, pgcd.pgcd(20, -5));
+ assertEquals(-5, pgcd.pgcd(-20, -5));
+ assertEquals(-5, pgcd.pgcd(-20, 5));
+ assertEquals(-5, pgcd.pgcd(-20, 5));
+
+ assertEquals(Integer.MAX_VALUE, pgcd.pgcd(Integer.MAX_VALUE, Integer.MAX_VALUE));
+ assertEquals(Integer.MIN_VALUE, pgcd.pgcd(Integer.MIN_VALUE, Integer.MIN_VALUE));
+
+
+ Assert.assertThrows(ArithmeticException.class, () -> {pgcd.pgcd(2, 0);});
+ Assert.assertThrows(ArithmeticException.class, () -> {pgcd.pgcd(2, 0);});
+ Assert.assertThrows(ArithmeticException.class, () -> {pgcd.pgcd(0, 0);});
+ Assert.assertThrows(ArithmeticException.class, () -> {pgcd.pgcd(Integer.MAX_VALUE, Integer.MIN_VALUE);});
+
+ assertEquals(30, pgcd.pgcd(2, 0));
+ assertEquals(30, pgcd.pgcd(2, 2));
+
+ int x = new Random().nextInt();
+ int y = new Random().nextInt();
+
+ assertEquals(pgcd.pgcd(x, y), pgcd.pgcd(y, x));
+
+ Assert.assertThrows(ArithmeticException.class, () -> {pgcd.pgcd(x, 0);});
+ Assert.assertThrows(ArithmeticException.class, () -> {pgcd.pgcd(0, y);});
+
+
+
+
+
+
+
+ }
+
+
+}
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/PgcdTests.java b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/PgcdTests.java
new file mode 100644
index 0000000..ec53c23
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/PgcdTests.java
@@ -0,0 +1,58 @@
+package test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.*;
+
+import java.util.Random;
+
+import org.junit.Assert;
+import org.junit.jupiter.api.Test;
+
+import model.TddPgcd;
+
+class PgcdTests {
+
+ @Test
+ void testPgcdNominaux() {
+
+ TddPgcd pgcdTdd = new TddPgcd();
+
+
+ assertEquals(5, pgcdTdd.pgcdTdd(20, 5));
+ assertEquals(-5, pgcdTdd.pgcdTdd(20, -5));
+ assertEquals(-5, pgcdTdd.pgcdTdd(-20, -5));
+ assertEquals(-5, pgcdTdd.pgcdTdd(-20, 5));
+ }
+ @Test
+ void testPgcdtestPgcdValeursLimites() {
+ TddPgcd pgcdTdd = new TddPgcd();
+
+ assertEquals(Integer.MAX_VALUE, pgcdTdd.pgcdTdd(Integer.MAX_VALUE, Integer.MAX_VALUE));
+ assertEquals(Integer.MIN_VALUE, pgcdTdd.pgcdTdd(Integer.MIN_VALUE, Integer.MIN_VALUE));
+ }
+ @Test
+ void testPgcdtestPgcdFalseValue() {
+ TddPgcd pgcdTdd = new TddPgcd();
+
+ assertThrows(ArithmeticException.class, () -> {pgcdTdd.pgcdTdd(2, 0);});
+ assertThrows(ArithmeticException.class, () -> {pgcdTdd.pgcdTdd(0, 2);});
+ assertThrows(ArithmeticException.class, () -> {pgcdTdd.pgcdTdd(0, 0);});
+ assertThrows(ArithmeticException.class, () -> {pgcdTdd.pgcdTdd(Integer.MAX_VALUE, Integer.MIN_VALUE);});
+
+ }
+ @Test
+ void testPgcdtestPgcdValeurAleatoire() {
+ TddPgcd pgcdTdd = new TddPgcd();
+
+ int x = new Random().nextInt();
+ int y = new Random().nextInt();
+
+ assertEquals(pgcdTdd.pgcdTdd(x, y), pgcdTdd.pgcdTdd(x, y));
+
+ Assert.assertThrows(ArithmeticException.class, () -> {pgcdTdd.pgcdTdd(x, 0);});
+ Assert.assertThrows(ArithmeticException.class, () -> {pgcdTdd.pgcdTdd(0, y);});
+
+ }
+
+
+}
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/PythagoreTest.java b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/PythagoreTest.java
new file mode 100644
index 0000000..8507a5c
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/PythagoreTest.java
@@ -0,0 +1,34 @@
+package test;
+import org.junit.Test;
+
+import model.Pythagore;
+import static org.junit.jupiter.api.Assertions.*;
+
+
+class PythagoreTest {
+ @Test
+ public void testInstanciation() {
+ Pythagore pythagore = new Pythagore();
+ assertNotNull(pythagore);
+ }
+
+ @Test
+ public void testTriangleRectangle() {
+ assertTrue(Pythagore.estTriangleRectangle(3, 4, 5));
+ }
+
+ @Test
+ public void testNonTriangleRectangle() {
+ assertFalse(Pythagore.estTriangleRectangle(3, 4, 6));
+ }
+
+ @Test
+ public void testCotesNegatifs() {
+ assertFalse(Pythagore.estTriangleRectangle(-3, 4, 5));
+ }
+
+ @Test
+ public void testCotesNuls() {
+ assertFalse(Pythagore.estTriangleRectangle(0, 4, 5));
+ }
+}
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/TestLoup.java b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/TestLoup.java
new file mode 100644
index 0000000..e827624
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/TestLoup.java
@@ -0,0 +1,29 @@
+package test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import model.Loup;
+import model.Orientation;
+
+public class TestLoup {
+
+ @Test
+ void testConstructeur() {
+ Loup leLoup = new Loup();
+ Assertions.assertEquals(Orientation.NORD,leLoup.getOrientation());
+ }
+
+ @Test
+ void testTourner() {
+ Loup leLoup = new Loup();
+ leLoup.tourner();
+ Assertions.assertEquals(Orientation.EST,leLoup.getOrientation());
+ leLoup.tourner();
+ Assertions.assertEquals(Orientation.SUD,leLoup.getOrientation());
+ leLoup.tourner();
+ Assertions.assertEquals(Orientation.OUEST,leLoup.getOrientation());
+ leLoup.tourner();
+ Assertions.assertEquals(Orientation.NORD,leLoup.getOrientation());
+ }
+
+}
\ No newline at end of file
diff --git a/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/TestMorpion.java b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/TestMorpion.java
new file mode 100644
index 0000000..3126278
--- /dev/null
+++ b/2A/QualiteDev/tp/2_tp/Tp2UnitTest/src/test/TestMorpion.java
@@ -0,0 +1,71 @@
+package test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.*;
+
+import java.util.Random;
+
+import org.junit.jupiter.api.RepeatedTest;
+import org.junit.jupiter.api.Test;
+
+import model.Morpion;
+import model.Pgdc;
+
+class TestMorpion {
+ private int[][] morpionMatrice = new int[3][3];
+
+ @Test
+
+ void MorpionTestsNominauxPoint() {
+ Morpion morpion = new Morpion();
+
+ assertEquals(true, morpion.AddPoint(0, 0));
+ assertEquals(true, morpion.AddPoint(1, 2));
+ assertEquals(true, morpion.AddPoint(2, 2));
+ assertEquals(false, morpion.AddPoint(3, 2));
+ assertEquals(false, morpion.AddPoint(-1, 1));
+ assertEquals(false, morpion.AddPoint(1, -1));
+ assertEquals(false, morpion.AddPoint(-1, -1));
+ assertEquals(false, morpion.AddPoint(3, 3));
+ assertEquals(false, morpion.AddPoint(3, 0));
+ assertEquals(false, morpion.AddPoint(0, 4));
+ }
+
+ @Test
+ void MorpionTestsValeursLimitesPoint() {
+ Morpion morpion = new Morpion();
+
+ assertEquals(false, morpion.AddPoint(Integer.MAX_VALUE, Integer.MAX_VALUE));
+ assertEquals(false, morpion.AddPoint(Integer.MIN_VALUE, Integer.MIN_VALUE));
+ assertEquals(false, morpion.AddPoint(Integer.MIN_VALUE, Integer.MAX_VALUE));
+ assertEquals(false, morpion.AddPoint(Integer.MAX_VALUE, Integer.MIN_VALUE));
+
+ }
+ @Test
+ @RepeatedTest(value = 100)
+ void MorpionTestsAleatoiresPoint() {
+
+ Morpion morpion = new Morpion();
+
+ int x = new Random().nextInt(-5, 5);
+ int y = new Random().nextInt(-5, 5);
+
+
+ if( x < 3 && y < 3 && x >= 0 && y >= 0) {
+ assertEquals(true, morpion.AddPoint(x, y));
+ }
+ else {
+ assertEquals(false, morpion.AddPoint(x, y));
+ }
+ }
+// void MorpionTestsNominauxValidation() {
+//
+// }
+// void MorpionTestsValeursLimitesValidation() {
+//
+// }
+// void MorpionTestsAleatoiresValidation(){
+//
+// }
+
+}
diff --git a/2A/QualiteDev/tp/2_tp/tp.zip b/2A/QualiteDev/tp/2_tp/tp.zip
new file mode 100644
index 0000000..5c51142
Binary files /dev/null and b/2A/QualiteDev/tp/2_tp/tp.zip differ
diff --git a/2A/QualiteDev/tp/3_tp/TP3.pdf b/2A/QualiteDev/tp/3_tp/TP3.pdf
new file mode 100644
index 0000000..097db3d
Binary files /dev/null and b/2A/QualiteDev/tp/3_tp/TP3.pdf differ
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/.classpath b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/.classpath
new file mode 100644
index 0000000..539dba0
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/.classpath
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/.project b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/.project
new file mode 100644
index 0000000..62dea56
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/.project
@@ -0,0 +1,17 @@
+
+
+ corr_telecommande_groupe
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/.settings/org.eclipse.core.resources.prefs b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..4824b80
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/=UTF-8
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/.settings/org.eclipse.jdt.core.prefs b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..be992b3
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,15 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=18
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=18
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=18
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/ChargeurTelecommande.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/ChargeurTelecommande.java
new file mode 100644
index 0000000..8e4f4f1
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/ChargeurTelecommande.java
@@ -0,0 +1,37 @@
+// package tetepremiere.commande.groupe;
+
+public class ChargeurTelecommande {
+
+ public static void main(String[] args) {
+
+ Telecommande remoteControl = new Telecommande();
+
+ Lampe lampe = new Lampe("Séjour");
+ TV tv = new TV("Séjour");
+ Stereo stereo = new Stereo("Séjour");
+ Jacuzzi jacuzzi = new Jacuzzi();
+
+ CommandeAllumerLampe lampeAllumee = new CommandeAllumerLampe(lampe);
+ CommandeAllumerStereo stereoAllumee = new CommandeAllumerStereo(stereo);
+ CommandeAllumerTV tvAllumee = new CommandeAllumerTV(tv);
+ CommandeAllumerJacuzzi jacuzziAllume = new CommandeAllumerJacuzzi(jacuzzi);
+ CommandeEteindreLampe lampeEteinte = new CommandeEteindreLampe(lampe);
+ CommandeEteindreStereo stereoEteinte = new CommandeEteindreStereo(stereo);
+ CommandeEteindreTV tvEteinte = new CommandeEteindreTV(tv);
+ CommandeEteindreJacuzzi jacuzziEteint = new CommandeEteindreJacuzzi(jacuzzi);
+
+ Commande[] allumageGroupe = { lampeAllumee, stereoAllumee, tvAllumee, jacuzziAllume};
+ Commande[] extinctionGroupe = { lampeEteinte, stereoEteinte, tvEteinte, jacuzziEteint};
+
+ MacroCommande macroAllumageGroupe = new MacroCommande(allumageGroupe);
+ MacroCommande macroExtinctionGroupe = new MacroCommande(extinctionGroupe);
+
+ remoteControl.setCommande(0, macroAllumageGroupe, macroExtinctionGroupe);
+
+ System.out.println(remoteControl);
+ System.out.println("---Exécution de Macro Marche ---");
+ remoteControl.boutonMarchePresse(0);
+ System.out.println("--- Exécution de Macro Arret ---");
+ remoteControl.boutonArretPresse(0);
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/Commande.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/Commande.java
new file mode 100644
index 0000000..6512123
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/Commande.java
@@ -0,0 +1,6 @@
+// package tetepremiere.commande.groupe;
+
+public interface Commande {
+ public void executer();
+ public void annuler();
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeAllumerJacuzzi.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeAllumerJacuzzi.java
new file mode 100644
index 0000000..cbedbbb
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeAllumerJacuzzi.java
@@ -0,0 +1,17 @@
+// package tetepremiere.commande.groupe;
+
+public class CommandeAllumerJacuzzi implements Commande {
+ Jacuzzi jacuzzi;
+
+ public CommandeAllumerJacuzzi(Jacuzzi jacuzzi) {
+ this.jacuzzi = jacuzzi;
+ }
+ public void executer() {
+ jacuzzi.allumer();
+ jacuzzi.setTemperature(40);
+ jacuzzi.bouillonner();
+ }
+ public void annuler() {
+ jacuzzi.eteindre();
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeAllumerLampe.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeAllumerLampe.java
new file mode 100644
index 0000000..e493131
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeAllumerLampe.java
@@ -0,0 +1,17 @@
+// package tetepremiere.commande.groupe;
+
+public class CommandeAllumerLampe implements Commande {
+ Lampe lampe;
+
+ public CommandeAllumerLampe(Lampe lampe) {
+ this.lampe = lampe;
+ }
+
+ public void executer() {
+ lampe.marche();
+ }
+
+ public void annuler() {
+ lampe.arret();
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeAllumerLampeSejour.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeAllumerLampeSejour.java
new file mode 100644
index 0000000..ee95321
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeAllumerLampeSejour.java
@@ -0,0 +1,15 @@
+// package tetepremiere.commande.groupe;
+
+public class CommandeAllumerLampeSejour implements Commande {
+ Lampe lampe;
+
+ public CommandeAllumerLampeSejour(Lampe lampe) {
+ this.lampe = lampe;
+ }
+ public void executer() {
+ lampe.arret();
+ }
+ public void annuler() {
+ lampe.marche();
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeAllumerStereo.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeAllumerStereo.java
new file mode 100644
index 0000000..a79959f
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeAllumerStereo.java
@@ -0,0 +1,17 @@
+// package tetepremiere.commande.groupe;
+
+public class CommandeAllumerStereo implements Commande {
+ Stereo stereo;
+
+ public CommandeAllumerStereo(Stereo stereo) {
+ this.stereo = stereo;
+ }
+
+ public void executer() {
+ stereo.marche();
+ }
+
+ public void annuler() {
+ stereo.arret();
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeAllumerStereoAvecCD.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeAllumerStereoAvecCD.java
new file mode 100644
index 0000000..478d55b
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeAllumerStereoAvecCD.java
@@ -0,0 +1,19 @@
+// package tetepremiere.commande.groupe;
+
+public class CommandeAllumerStereoAvecCD implements Commande {
+ Stereo stereo;
+
+ public CommandeAllumerStereoAvecCD(Stereo stereo) {
+ this.stereo = stereo;
+ }
+
+ public void executer() {
+ stereo.marche();
+ stereo.setCD();
+ stereo.setVolume(11);
+ }
+
+ public void annuler() {
+ stereo.arret();
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeAllumerTV.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeAllumerTV.java
new file mode 100644
index 0000000..d958b7d
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeAllumerTV.java
@@ -0,0 +1,18 @@
+// package tetepremiere.commande.groupe;
+
+public class CommandeAllumerTV implements Commande {
+ TV tv;
+
+ public CommandeAllumerTV(TV tv) {
+ this.tv= tv;
+ }
+
+ public void executer() {
+ tv.marche();
+ tv.selectionnerCanal();
+ }
+
+ public void annuler() {
+ tv.arret();
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeEteindreJacuzzi.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeEteindreJacuzzi.java
new file mode 100644
index 0000000..8388fa8
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeEteindreJacuzzi.java
@@ -0,0 +1,17 @@
+// package tetepremiere.commande.groupe;
+
+public class CommandeEteindreJacuzzi implements Commande {
+ Jacuzzi jacuzzi;
+
+ public CommandeEteindreJacuzzi(Jacuzzi jacuzzi) {
+ this.jacuzzi = jacuzzi;
+ }
+
+ public void executer() {
+ jacuzzi.setTemperature(36);
+ jacuzzi.eteindre();
+ }
+ public void annuler() {
+ jacuzzi.allumer();
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeEteindreLampe.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeEteindreLampe.java
new file mode 100644
index 0000000..834fb03
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeEteindreLampe.java
@@ -0,0 +1,17 @@
+// package tetepremiere.commande.groupe;
+
+public class CommandeEteindreLampe implements Commande {
+ Lampe lampe;
+
+ public CommandeEteindreLampe(Lampe lampe) {
+ this.lampe = lampe;
+ }
+
+ public void executer() {
+ lampe.arret();
+ }
+
+ public void annuler() {
+ lampe.marche();
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeEteindreLampeSejour.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeEteindreLampeSejour.java
new file mode 100644
index 0000000..0ac2ded
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeEteindreLampeSejour.java
@@ -0,0 +1,15 @@
+// package tetepremiere.commande.groupe;
+
+public class CommandeEteindreLampeSejour implements Commande {
+ Lampe lampe;
+
+ public CommandeEteindreLampeSejour(Lampe lampe) {
+ this.lampe = lampe;
+ }
+ public void executer() {
+ lampe.marche();
+ }
+ public void annuler() {
+ lampe.arret();
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeEteindreStereo.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeEteindreStereo.java
new file mode 100644
index 0000000..4a4d0c1
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeEteindreStereo.java
@@ -0,0 +1,17 @@
+// package tetepremiere.commande.groupe;
+
+public class CommandeEteindreStereo implements Commande {
+ Stereo stereo;
+
+ public CommandeEteindreStereo(Stereo stereo) {
+ this.stereo = stereo;
+ }
+
+ public void executer() {
+ stereo.arret();
+ }
+
+ public void annuler() {
+ stereo.marche();
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeEteindreTV.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeEteindreTV.java
new file mode 100644
index 0000000..1401f07
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeEteindreTV.java
@@ -0,0 +1,17 @@
+// package tetepremiere.commande.groupe;
+
+public class CommandeEteindreTV implements Commande {
+ TV tv;
+
+ public CommandeEteindreTV(TV tv) {
+ this.tv= tv;
+ }
+
+ public void executer() {
+ tv.arret();
+ }
+
+ public void annuler() {
+ tv.marche();
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeEteindreVentilateur.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeEteindreVentilateur.java
new file mode 100644
index 0000000..02754c7
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeEteindreVentilateur.java
@@ -0,0 +1,22 @@
+// package tetepremiere.commande.groupe;
+
+public class CommandeEteindreVentilateur implements Commande {
+ Ventilateur ventilateur;
+ int derniereVitesse;
+
+ public CommandeEteindreVentilateur(Ventilateur ventilateur) {
+ this.ventilateur = ventilateur;
+ }
+ public void executer() {
+ derniereVitesse = ventilateur.getVitesse();
+ ventilateur.arreter();
+ }
+ public void annuler() {
+ switch (derniereVitesse) {
+ case Ventilateur.RAPIDE: ventilateur.rapide(); break;
+ case Ventilateur.MOYEN: ventilateur.moyen(); break;
+ case Ventilateur.LENT: ventilateur.lent(); break;
+ default: ventilateur.arreter(); break;
+ }
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeVentilateurMoyen.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeVentilateurMoyen.java
new file mode 100644
index 0000000..bf3e07d
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeVentilateurMoyen.java
@@ -0,0 +1,22 @@
+// package tetepremiere.commande.groupe;
+
+public class CommandeVentilateurMoyen implements Commande {
+ Ventilateur ventilateur;
+ int derniereVitesse;
+
+ public CommandeVentilateurMoyen(Ventilateur ventilateur) {
+ this.ventilateur = ventilateur;
+ }
+ public void executer() {
+ derniereVitesse = ventilateur.getVitesse();
+ ventilateur.moyen();
+ }
+ public void annuler() {
+ switch (derniereVitesse) {
+ case Ventilateur.RAPIDE: ventilateur.rapide(); break;
+ case Ventilateur.MOYEN: ventilateur.moyen(); break;
+ case Ventilateur.LENT: ventilateur.lent(); break;
+ default: ventilateur.arreter(); break;
+ }
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeVentilateurRapide.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeVentilateurRapide.java
new file mode 100644
index 0000000..6d74fb5
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/CommandeVentilateurRapide.java
@@ -0,0 +1,22 @@
+// package tetepremiere.commande.groupe;
+
+public class CommandeVentilateurRapide implements Commande {
+ Ventilateur ventilateur;
+ int derniereVitesse;
+
+ public CommandeVentilateurRapide(Ventilateur ventilateur) {
+ this.ventilateur = ventilateur;
+ }
+ public void executer() {
+ derniereVitesse = ventilateur.getVitesse();
+ ventilateur.rapide();
+ }
+ public void annuler() {
+ switch (derniereVitesse) {
+ case Ventilateur.RAPIDE: ventilateur.rapide(); break;
+ case Ventilateur.MOYEN: ventilateur.moyen(); break;
+ case Ventilateur.LENT: ventilateur.lent(); break;
+ default: ventilateur.arreter(); break;
+ }
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/Jacuzzi.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/Jacuzzi.java
new file mode 100644
index 0000000..b998b21
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/Jacuzzi.java
@@ -0,0 +1,45 @@
+// package tetepremiere.commande.groupe;
+
+public class Jacuzzi {
+ boolean allume;
+ int temperature;
+
+ public Jacuzzi() {
+ }
+
+ public void allumer() {
+ allume = true;
+ }
+
+ public void eteindre() {
+ allume = false;
+ }
+
+ public void bouillonner() {
+ if (allume) {
+ System.out.println("Le jaccuzi bouillonne !");
+ }
+ }
+
+ public void marche() {
+ if (allume) {
+ System.out.println("Le jaccuzi est en marche");
+ }
+ }
+
+ public void arret() {
+ if (allume) {
+ System.out.println("Le jaccuzi est arrêté");
+ }
+ }
+
+ public void setTemperature(int temperature) {
+ if (temperature > this.temperature) {
+ System.out.println("Le jacuzzi chauffe à " + temperature + "°");
+ }
+ else {
+ System.out.println("Le jaccuzi refroidit à " + temperature + "°");
+ }
+ this.temperature = temperature;
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/Lampe.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/Lampe.java
new file mode 100644
index 0000000..d083783
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/Lampe.java
@@ -0,0 +1,34 @@
+// package tetepremiere.commande.groupe;
+
+public class Lampe {
+ String localisation;
+ int niveau;
+
+ public Lampe(String localisation) {
+ this.localisation = localisation;
+ }
+
+ public void marche() {
+ niveau = 100;
+ System.out.println(this.localisation+": lumière allumée");
+ }
+
+ public void arret() {
+ niveau = 0;
+ System.out.println(localisation+": lumière éteinte");
+ }
+
+ public void attenuer(int niveau) {
+ this.niveau = niveau;
+ if (niveau == 0) {
+ arret();
+ }
+ else {
+ System.out.println("Le niveau de la lampe est positionné sur " + niveau + "%");
+ }
+ }
+
+ public int getNiveau() {
+ return niveau;
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/MacroCommande.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/MacroCommande.java
new file mode 100644
index 0000000..b334347
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/MacroCommande.java
@@ -0,0 +1,22 @@
+// package tetepremiere.commande.groupe;
+
+public class MacroCommande implements Commande {
+ Commande[] commandes;
+
+ public MacroCommande(Commande[] commandes) {
+ this.commandes = commandes;
+ }
+
+ public void executer() {
+ for (int i = 0; i < commandes.length; i++) {
+ commandes[i].executer();
+ }
+ }
+
+ public void annuler() {
+ for (int i = 0; i < commandes.length; i++) {
+ commandes[i].annuler();
+ }
+ }
+}
+
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/PasDeCommande.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/PasDeCommande.java
new file mode 100644
index 0000000..e5f7435
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/PasDeCommande.java
@@ -0,0 +1,6 @@
+// package tetepremiere.commande.groupe;
+
+public class PasDeCommande implements Commande {
+ public void executer() { }
+ public void annuler() { }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/Stereo.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/Stereo.java
new file mode 100644
index 0000000..7e7d495
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/Stereo.java
@@ -0,0 +1,35 @@
+// package tetepremiere.commande.groupe;
+
+public class Stereo {
+ String localisation;
+
+ public Stereo(String location) {
+ this.localisation = location;
+ }
+
+ public void marche() {
+ System.out.println(localisation + ": stéréo allumée");
+ }
+
+ public void arret() {
+ System.out.println(localisation + ": stéréo éteinte");
+ }
+
+ public void setCD() {
+ System.out.println(localisation + ": stéréo réglée pour l'entrée CD");
+ }
+
+ public void setDVD() {
+ System.out.println(localisation + ": stéréo réglée pour l'entrée DVD");
+ }
+
+ public void setRadio() {
+ System.out.println(localisation + ": stéréo réglée pour la radio");
+ }
+
+ public void setVolume(int volume) {
+ // code pour positionner le volume
+ // plage valide: 1-11 (aprs tout, 11 c'est mieux que 10, non ?)
+ System.out.println(localisation + ": le volume stéréo est " + volume);
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/TV.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/TV.java
new file mode 100644
index 0000000..19abb10
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/TV.java
@@ -0,0 +1,23 @@
+// package tetepremiere.commande.groupe;
+
+public class TV {
+ String localisation;
+ int canal;
+
+ public TV(String location) {
+ this.localisation = location;
+ }
+
+ public void marche() {
+ System.out.println(localisation + ": la télé est allumée");
+ }
+
+ public void arret() {
+ System.out.println(localisation + ": la télé est éteinte");
+ }
+
+ public void selectionnerCanal() {
+ this.canal = 3;
+ System.out.println(localisation + ": le canal est positionné sur VCR");
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/Telecommande.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/Telecommande.java
new file mode 100644
index 0000000..abb481b
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/Telecommande.java
@@ -0,0 +1,52 @@
+// package tetepremiere.commande.groupe;
+
+//
+// Voici l'invocateur
+//
+public class Telecommande {
+ Commande[] commandesMarche;
+ Commande[] commandesArret;
+ Commande commandeAnnulation;
+
+ public Telecommande() {
+ commandesMarche = new Commande[7];
+ commandesArret = new Commande[7];
+
+ Commande pasDeCommande = new PasDeCommande();
+ for(int i=0;i<7;i++) {
+ commandesMarche[i] = pasDeCommande;
+ commandesArret[i] = pasDeCommande;
+ }
+ commandeAnnulation = pasDeCommande;
+ }
+
+ public void setCommande(int empt, Commande comMarche, Commande comArret) {
+ commandesMarche[empt] = comMarche;
+ commandesArret[empt] = comArret;
+ }
+
+ public void boutonMarchePresse(int empt) {
+ commandesMarche[empt].executer();
+ commandeAnnulation = commandesMarche[empt];
+ }
+
+ public void boutonArretPresse(int empt) {
+ commandesArret[empt].executer();
+ commandeAnnulation = commandesArret[empt];
+ }
+
+ public void boutonAnnulPresse() {
+ commandeAnnulation.annuler();
+ }
+
+ public String toString() {
+ StringBuffer stringBuff = new StringBuffer();
+ stringBuff.append("\n------ Télécommande -------\n");
+ for (int i = 0; i < commandesMarche.length; i++) {
+ stringBuff.append("[empt " + i + "] " + commandesMarche[i].getClass().getName()
+ + " " + commandesArret[i].getClass().getName() + "\n");
+ }
+ stringBuff.append("[annulation] " + commandeAnnulation.getClass().getName() + "\n");
+ return stringBuff.toString();
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/Ventilateur.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/Ventilateur.java
new file mode 100644
index 0000000..693bc89
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/Ventilateur.java
@@ -0,0 +1,42 @@
+// package tetepremiere.commande.groupe;
+
+public class Ventilateur {
+ public static final int RAPIDE = 3;
+ public static final int MOYEN = 2;
+ public static final int LENT = 1;
+ public static final int ARRET = 0;
+ String localisation;
+ int vitesse;
+
+ public Ventilateur(String localisation) {
+ this.localisation = localisation;
+ }
+
+ public void rapide() {
+// regler le ventilateur sur rapide
+ vitesse = RAPIDE;
+ System.out.println(localisation + ": ventilateur sur rapide");
+ }
+
+ public void moyen() {
+ // regler le ventilateur sur moyen
+ vitesse = MOYEN;
+ System.out.println(localisation + ": ventilateur sur moyen");
+ }
+
+ public void lent() {
+ // regler le ventilateur sur lent
+ vitesse = LENT;
+ System.out.println(localisation + ": ventilateur sur lent");
+ }
+
+ public void arreter() {
+ // arrete le ventilateur
+ vitesse = 0;
+ System.out.println(localisation + ": ventilateur arrêté");
+ }
+
+ public int getVitesse() {
+ return vitesse;
+ }
+}
diff --git a/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/test/CommandeAllumerJacuzziTest.java b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/test/CommandeAllumerJacuzziTest.java
new file mode 100644
index 0000000..a185286
--- /dev/null
+++ b/2A/QualiteDev/tp/5_tp/corr_telecommande_groupe/src/test/CommandeAllumerJacuzziTest.java
@@ -0,0 +1,5 @@
+package test;
+
+public class CommandeAllumerJacuzziTest {
+
+}
diff --git a/2A/QualiteDev/tp/5_tp/test_patron_commande.pdf b/2A/QualiteDev/tp/5_tp/test_patron_commande.pdf
new file mode 100644
index 0000000..a921b13
Binary files /dev/null and b/2A/QualiteDev/tp/5_tp/test_patron_commande.pdf differ
diff --git a/2A/Reseaux/SAE.txt b/2A/Reseaux/SAE.txt
new file mode 100644
index 0000000..18319e5
--- /dev/null
+++ b/2A/Reseaux/SAE.txt
@@ -0,0 +1,25 @@
+
+
+Seront évalués les points suivants :
+
+ Les adresses IP publiques sont correctes.
+ /etc/network/interfaces
+ Les adresses IP privées sont correctes.
+ /etc/host
+ Un serveur Web est lancé sur la machine web (apache2, Nginx ou lighthttp).
+ systemctl start apache2
+ systemctl status apache2
+ Un serveur de base de données est lancé sur la machine db (mariadb, postgres ou mongodb).
+ systemctl unmask postgresql
+ Removed "/etc/systemd/system/postgresql.service".
+ systemctl start postgresql
+ web peut contacter la base de donnée de db.
+ Le serveur Web de web est accessible par les machines sur Internet (client et admin).
+ La base de données n'est pas accessible par les machines sur Internet.
+ Le serveur ssh de firewall n'est accessible que par identification par clés.
+ Une connexion ssh sur le port 2222 de firewall se connecte sur le ssh de web.
+ Une connexion ssh sur le port 2223 de firewall se connecte sur le ssh de db.
+
+Vous serez évalué avec une session sur machine, en monôme, en 50 minutes.
+
+Nous vous fournirons le même réseau VDN, et vous devrez être capable de refaire ce que vous aurez appris pour la partie réseau de votre SAÉ.