Récapitulatif - Dossiers d'étudiants
Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy. Leçon 35 sur 70.
Défi
FacileConstruisons un système de gestion des dossiers étudiants qui réunit toutes les techniques d'encapsulation que tu as apprises dans ce chapitre. Tu vas créer un système sécurisé dans lequel les données des étudiants sont correctement protégées, les notes sont validées et certaines informations restent immuables après leur création.
Tu organiseras ton code sur deux fichiers :
Student.cs: crée une classeStudentdans l'espace de nomsRecordsqui démontre une encapsulation correcte. Ton étudiant doit avoir :- un champ
readonlyName(chaîne de caractères) accessible publiquement, mais qui ne peut être défini que lors de la construction - un champ privé
readonlypour l'identifiant de l'étudiant (chaîne de caractères) — celui-ci ne doit jamais être directement accessible depuis l'extérieur - une liste privée pour stocker les notes (entiers)
- une propriété publique en lecture seule
Averagequi calcule et renvoie la moyenne de toutes les notes, ou0si aucune note n'existe - une méthode publique
AddGrade(int grade)qui n'accepte que les notes comprises entre 0 et 100 (inclus) — les notes invalides doivent être ignorées silencieusement - une méthode publique
GetGradeCount()qui renvoie le nombre de notes valides enregistrées - une méthode publique
GetStudentInfo()qui renvoie une chaîne au format"{Name} (ID: {last 4 characters of student ID})"— remarque que tu n'exposes qu'une version masquée de l'identifiant !
- un champ
Program.cs: dans ton fichier principal, crée un étudiant et ajoute plusieurs notes pour montrer comment fonctionne l'encapsulation. Tu montreras que les notes valides sont acceptées, que les notes invalides sont rejetées et que la moyenne est calculée correctement.
Tu recevras cinq entrées :
- Nom de l'étudiant
- Identifiant de l'étudiant (au moins 4 caractères)
- Première note à ajouter (entier)
- Deuxième note à ajouter (entier, qui peut être invalide comme -5 ou 150)
- Troisième note à ajouter (entier)
Affiche la sortie dans ce format :
{GetStudentInfo() result}
Grades recorded: {GetGradeCount()}
Average: {Average}Par exemple, si les entrées sont Emma Wilson, STU12345, 85, 150 et 90, la sortie doit être :
Emma Wilson (ID: 2345)
Grades recorded: 2
Average: 87.5Remarque que la note invalide de 150 a été rejetée silencieusement, donc seules deux notes ont été enregistrées. L'identifiant de l'étudiant est protégé : le code externe ne peut jamais voir l'identifiant complet, mais uniquement sa version masquée via GetStudentInfo(). Le nom est lisible, mais immuable. Voilà l'encapsulation qui fonctionne conjointement pour créer une classe robuste et bien protégée !
Essayez vous-même
using System;
using Records;
class Program
{
public static void Main(string[] args)
{
// Lire les entrées
string name = Console.ReadLine();
string studentId = Console.ReadLine();
int grade1 = Convert.ToInt32(Console.ReadLine());
int grade2 = Convert.ToInt32(Console.ReadLine());
int grade3 = Convert.ToInt32(Console.ReadLine());
// TODO: Créer un objet Student avec le name et studentId
// TODO: Ajouter les trois notes en utilisant la méthode AddGrade
// TODO: Afficher la sortie dans le format requis :
// {résultat de GetStudentInfo()}
// Grades recorded: {GetGradeCount()}
// Moyenne : {Average}
}
}
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesEspaces de noms et directivesIntro aux classes et objetsLe mot-clé 'this'Méthodes et paramètresChamps vs PropriétésConstructeursInitialiseurs d'objetsRécapitulatif - Calculatrice simple4Héritage
Syntaxe de base de l'héritage (:)Le mot-clé 'base'Mots-clés Virtual & OverrideClasses scelléesLa classe de base 'object'Récapitulatif - Hiérarchie des employés7Fonctionnalités avancées
Surcharge d'opérateursIndexeurs (this[])Redéfinition de ToString()Méthodes d'extensionRécapitulatif - Liste personnalisée10Patrons de conception - Partie 1
Introduction aux patrons de conceptionSingleton Thread-SafePatron FabriquePatron Observateur (Événements)Patron Stratégie2Propriétés et membres statiques
Propriétés auto-implémentéesPropriétés en lecture/écriture seuleChamps et méthodes statiquesClasses statiquesMembres à corps d'expression5Polymorphisme & Interfaces
Polymorphisme : Compilation vs ExécutionInterface vs Classe AbstraiteInterfaces MultiplesInterfaces ExplicitesUpcasting & DowncastingRécapitulatif - Calculateur de Formes8Concepts avancés de la POO
Composition plutôt qu'héritageGénériques (Classes et Méthodes)Délégués et ÉvénementsAttributs et RéflexionIDisposable et l'instruction usingBases de l'Injection de Dépendances11Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode TemplatePatron ÉtatPatron Composite3Architecture des classes
Données d'instance vs statiquesMots-clés 'readonly' & 'const'Champs de supportRécapitulatif - Gestionnaire de compte bancaire6Encapsulation
Modificateurs d'accèsPropriétés pour l'encapsulationImplémentation du masquage de donnéesPatterns d'immuabilitéRécapitulatif - Dossiers d'étudiants12Projet : Système de gestion de bibliothèque
Structure du projetModèles Livre et UtilisateurLogique du système d'empruntLINQ pour la rechercheInterface Console / Interface d'administrationTests unitaires (NUnit/xUnit)Entraînez-vous par vous-même : Compilateur C# en ligne