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 dossiers d'étudiants qui regroupe toutes les techniques d'encapsulation que vous avez apprises dans ce chapitre. Vous allez créer un système sécurisé où 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.
Vous organiserez votre code sur deux fichiers :
Student.cs: Créez une classeStudentdans l'espace de nomsRecordsqui démontre une encapsulation appropriée. Votre étudiant doit avoir :- Un champ
readonlyName(chaîne de caractères) qui est accessible publiquement mais 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 de 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 des 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})"- remarquez comment vous n'exposez qu'une version masquée de l'ID !
- Un champ
Program.cs: Dans votre fichier principal, créez un étudiant et ajoutez plusieurs notes pour démontrer le fonctionnement de l'encapsulation. Vous montrerez que les notes valides sont acceptées, les notes invalides sont rejetées et la moyenne est calculée correctement.
Vous recevrez cinq entrées :
- Nom de l'étudiant
- ID de l'étudiant (au moins 4 caractères)
- Première note à ajouter (entier)
- Deuxième note à ajouter (entier, peut être invalide comme -5 ou 150)
- Troisième note à ajouter (entier)
Affichez 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 devrait être :
Emma Wilson (ID: 2345)
Grades recorded: 2
Average: 87.5Remarquez comment la note invalide de 150 a été silencieusement rejetée, de sorte que 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, seulement la version masquée via GetStudentInfo(). Le nom est lisible mais immuable. C'est l'encapsulation qui travaille de concert 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()}
// Notes enregistrées : {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 Utilisateur