Bonjour !
Je traîne depuis quelques semaines sur ce forum, et j'apprend le dev sous C# depuis le 27 janvier dernier et j'ai bien progressé je penses. Dernièrement j'ai refait le programme du nombre mystère en POO de a à z tout seul.
Alors avant de vous donner mon code, je vous explique le problème posé. Mon ami qui est dans la progra depuis 20 ans, m'a félicité pour mon travail mais me fait une remarque tout de même :
mon programme comporte beaucoup trop de couplage et donc d'interaction entre les classes. C'est pas souhaitable. En gros d'après lui, un bon développeur, va maximiser son découpage du programme et à contrario minimiser le nombre d'interaction entre elles.
Je veux donc améliorer ça mais j'avoue que je n'ai aucune idée de comment faire sans trop coupler les classes quoi?
Voici le code :
Classe de messages à afficher
Classe pour générer un nombre aléatoire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 using System; using System.Collections.Generic; using System.Text; namespace JeuNombrePOO { class Messages { string nombre_max = "20"; public Messages() { } public void Afficher_Bonjour() { Console.WriteLine("Bonjour! Bienvenue dans le jeu FindMyNumber.\n"); Afficher_Espace(); Console.WriteLine($"Il s'agit de deviner un nombre entre 1 et {nombre_max}.\n"); Afficher_Espace(); } public void Afficher_Espace() { Console.WriteLine("---------------------------------------------"); } public void Afficher_Demande_De_Saisie() { Console.Write($"Saisissez un nombre entre 1 et {nombre_max} : "); } public void Afficher_Victoire() { Console.WriteLine("Bravo, tu as gagné ! Rejoues encore !"); } public void Afficher_PlusGrand() { Console.WriteLine("C'est plus grand ! "); } public void Afficher_PlusPetit() { Console.WriteLine("C'est plus petit ! "); } public void Afficher_Saisie_Hors_Intervalle(Saisie_utilisateur saisie_utilisateur) { Console.WriteLine($"Oups, {saisie_utilisateur.saisie} n'est pas dans l'intervalle demandée. Essaie encore."); } public void Afficher_Saisie_Incorrecte() { Console.WriteLine("Oups, ceci n'est pas un nombre! Essaie encore."); } public void Afficher_Nombre_Dessais(Nombre_Dessais nombre_dessais) { Console.WriteLine($"\nLe nombre d'essais est de {nombre_dessais.nb_saisie}"); } } }
Classe de saisie utilisateur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 using System; using System.Collections.Generic; using System.Text; namespace JeuNombrePOO { class Nombre_aléatoire { public int nombre_aléatoire; public int min = 1, max = 20; public Nombre_aléatoire() { } public int Generer_Nombre_Aleatoire() { return nombre_aléatoire = new Random().Next(min, max); } } }
Classe de vérification de saisie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 using System; using System.Collections.Generic; using System.Text; namespace JeuNombrePOO { class Saisie_utilisateur { public int saisie; public string nouvelle_saisie; public bool nombre_correcte = false; public Saisie_utilisateur() { } public int Demander_Saisie_NombreEntier(Messages message) { message.Afficher_Demande_De_Saisie(); nouvelle_saisie = Console.ReadLine(); nombre_correcte = int.TryParse(nouvelle_saisie, out saisie); return saisie; } } }
Classe de comparaison Saisie vs Nombre aléatoire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 using System; using System.Collections.Generic; using System.Text; namespace JeuNombrePOO { class Vérification_saisie { public Vérification_saisie() { } public int Vérifier_Saisie(Saisie_utilisateur saisie_utilisateur, Nombre_aléatoire nombre_aléatoire, Messages message) { int nombre_saisie; do { nombre_saisie = saisie_utilisateur.Demander_Saisie_NombreEntier(message); if (!saisie_utilisateur.nombre_correcte) { message.Afficher_Saisie_Incorrecte(); } else if (saisie_utilisateur.saisie > nombre_aléatoire.max || saisie_utilisateur.saisie < nombre_aléatoire.min) { message.Afficher_Saisie_Hors_Intervalle(saisie_utilisateur); } } while (saisie_utilisateur.nombre_correcte == false || saisie_utilisateur.saisie > nombre_aléatoire.max || saisie_utilisateur.saisie < nombre_aléatoire.min); return nombre_saisie; } } }
Classe Compter Nombre D'essais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 using System; using System.Collections.Generic; using System.Text; namespace JeuNombrePOO { class Vérification_nombre { public Vérification_nombre() { } public int Comparer_Saisie_Et_NombreAleatoire(Saisie_utilisateur saisie_utilisateur, Nombre_aléatoire nombre_aléatoire, Messages message, Nombre_Dessais nombre_dessais, Vérification_saisie vérification_saisie, Nouvelle_Partie nouvelle_partie) { int nombre_saisie; do { nombre_saisie = vérification_saisie.Vérifier_Saisie(saisie_utilisateur, nombre_aléatoire, message); if (saisie_utilisateur.saisie == nombre_aléatoire.nombre_aléatoire) { nouvelle_partie.Generer_Nouvelle_Partie(saisie_utilisateur, nombre_aléatoire, message, nombre_dessais); } if (saisie_utilisateur.saisie < nombre_aléatoire.nombre_aléatoire) message.Afficher_PlusGrand(); else message.Afficher_PlusPetit(); nombre_dessais.Afficher_Nombre_De_Saisie(message, nombre_dessais); } while (saisie_utilisateur.saisie != nombre_aléatoire.nombre_aléatoire); return nombre_saisie; } } }
Une classe Nouvelle Partie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 using System; using System.Collections.Generic; using System.Text; namespace JeuNombrePOO { class Nombre_Dessais { public int nb_saisie = 0; public Nombre_Dessais() { } public void Afficher_Nombre_De_Saisie(Messages message, Nombre_Dessais nombre_dessais) { nb_saisie = ++nb_saisie; message.Afficher_Nombre_Dessais(nombre_dessais); message.Afficher_Espace(); } } }
Le Main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 using System; using System.Collections.Generic; using System.Text; namespace JeuNombrePOO { class Nouvelle_Partie { public Nouvelle_Partie() { } public void Generer_Nouvelle_Partie(Saisie_utilisateur saisie_utilisateur, Nombre_aléatoire nombre_aléatoire, Messages message, Nombre_Dessais nombre_dessais) { message.Afficher_Espace(); message.Afficher_Victoire(); nombre_aléatoire.Generer_Nombre_Aleatoire(); nombre_dessais.nb_saisie = 0; message.Afficher_Espace(); saisie_utilisateur.Demander_Saisie_NombreEntier(message); } } }
Je sais que je vous envoi un pavé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 using System; namespace JeuNombrePOO { class Program { static void Main(string[] args) { Nombre_aléatoire nombre_aléatoire = new Nombre_aléatoire(); Saisie_utilisateur saisie_utilisateur = new Saisie_utilisateur(); Vérification_nombre vérification_nombre = new Vérification_nombre(); Messages message = new Messages(); Nouvelle_Partie nouvelle_partie = new Nouvelle_Partie(); Vérification_saisie vérification_saisie = new Vérification_saisie(); Nombre_Dessais nombre_dessais = new Nombre_Dessais(); nombre_aléatoire.Generer_Nombre_Aleatoire(); message.Afficher_Bonjour(); vérification_nombre.Comparer_Saisie_Et_NombreAleatoire(saisie_utilisateur, nombre_aléatoire, message, nombre_dessais, vérification_saisie, nouvelle_partie); } } }, mais si vous pouvez me guider un peu dans cette quête du couplage = quasi null, je veux bien de votre aide
!
Par avance merci et au plaisir de vous lire !
Partager