Powtórka — dane studentów
Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 35 z 70.
Wyzwanie
ŁatwyZbudujmy system ewidencji uczniów, który łączy wszystkie techniki enkapsulacji poznane w tym rozdziale. Utworzysz bezpieczny system, w którym dane uczniów są odpowiednio chronione, oceny są weryfikowane, a niektóre informacje pozostają niezmienne po utworzeniu.
Rozmieścisz kod w dwóch plikach:
Student.cs: Utwórz klasęStudentw przestrzeni nazwRecords, która demonstruje prawidłową enkapsulację. Twoja klasa ucznia powinna mieć:- Pole
readonlyName(string), które jest publicznie dostępne, ale można je ustawić wyłącznie podczas konstruowania obiektu - Prywatne pole
readonlyprzechowujące identyfikator ucznia (string) — nie powinno być bezpośrednio dostępne z zewnątrz - Prywatną listę do przechowywania ocen (liczb całkowitych)
- Publiczną właściwość tylko do odczytu
Average, która oblicza i zwraca średnią wszystkich ocen lub0, jeśli nie ma żadnych ocen - Publiczną metodę
AddGrade(int grade), która akceptuje tylko oceny z przedziału od 0 do 100 (włącznie) — nieprawidłowe oceny powinny być po cichu ignorowane - Publiczną metodę
GetGradeCount(), która zwraca liczbę zapisanych prawidłowych ocen - Publiczną metodę
GetStudentInfo(), która zwraca ciąg znaków w formacie"{Name} (ID: {last 4 characters of student ID})"— zauważ, że udostępniasz tylko zamaskowaną wersję identyfikatora!
- Pole
Program.cs: W pliku głównym utwórz ucznia i dodaj kilka ocen, aby zademonstrować działanie enkapsulacji. Pokażesz, że prawidłowe oceny są akceptowane, nieprawidłowe odrzucane, a średnia obliczana poprawnie.
Otrzymasz pięć danych wejściowych:
- Imię i nazwisko ucznia
- Identyfikator ucznia (co najmniej 4 znaki)
- Pierwsza dodawana ocena (liczba całkowita)
- Druga dodawana ocena (liczba całkowita, może być nieprawidłowa, np. -5 lub 150)
- Trzecia dodawana ocena (liczba całkowita)
Wyświetl wynik w tym formacie:
{GetStudentInfo() result}
Grades recorded: {GetGradeCount()}
Average: {Average}Na przykład, jeśli danymi wejściowymi są Emma Wilson, STU12345, 85, 150 i 90, wynik powinien być następujący:
Emma Wilson (ID: 2345)
Grades recorded: 2
Average: 87.5Zauważ, że nieprawidłowa ocena 150 została po cichu odrzucona, więc zapisano tylko dwie oceny. Identyfikator ucznia jest chroniony — kod zewnętrzny nigdy nie może zobaczyć pełnego identyfikatora, a jedynie jego zamaskowaną wersję za pośrednictwem GetStudentInfo(). Imię i nazwisko można odczytać, ale nie można go zmienić. Tak właśnie współdziałają techniki enkapsulacji, tworząc solidną i dobrze chronioną klasę!
Spróbuj swoich sił
using System;
using Records;
class Program
{
public static void Main(string[] args)
{
// Odczytaj dane wejściowe
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: Utwórz obiekt Student z wartościami name i studentId
// TODO: Dodaj wszystkie trzy oceny za pomocą metody AddGrade
// TODO: Wyświetl wynik w wymaganym formacie:
// {wynik GetStudentInfo()}
// Grades recorded: {GetGradeCount()}
// Średnia: {Average}
}
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrznePrzestrzenie nazw i dyrektywyWprowadzenie do klas i obiektówSłowo kluczowe „this”Metody i parametryPola a właściwościKonstruktoryInicjalizatory obiektówPodsumowanie — prosty kalkulator4Dziedziczenie
Podstawowa składnia dziedziczenia (:)Słowo kluczowe 'base'Słowa kluczowe virtual i overrideKlasy sealedBazowa klasa 'object'Powtórzenie – hierarchia pracowników7Zaawansowane funkcje
Przeciążanie operatorówIndeksery (this[])Nadpisywanie ToString()Metody rozszerzającePodsumowanie – własna lista2Właściwości i składowe statyczne
Właściwości automatyczneWłaściwości tylko do odczytu i zapisuPola i metody statyczneKlasy statyczneSkładowe z ciałem wyrażeniowym5Polimorfizm i interfejsy
Polimorfizm czasu kompilacji a czasu wykonaniaInterfejs a klasa abstrakcyjnaWiele interfejsówJawne implementowanie interfejsówRzutowanie w górę i w dółPowtórka — kalkulator kształtów8Zaawansowane koncepcje OOP
Kompozycja zamiast dziedziczeniaTypy generyczne (klasy i metody)Delegaty i zdarzeniaAtrybuty i refleksjaIDisposable i instrukcja usingPodstawy wstrzykiwania zależności11Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu3Architektura klas
Dane instancji a dane statyczneSłowa kluczowe 'readonly' i 'const'Pola zapasowePowtórzenie — menedżer kont bankowych6Hermetyzacja
Modyfikatory dostępuWłaściwości w hermetyzacjiImplementacja ukrywania danychWzorce niezmiennościPowtórka — dane studentów9Argumenty zmiennej liczby
Słowo kluczowe „params”Parametry opcjonalneArgumenty nazwanePrzeciążanie metodPoćwicz samodzielnie: Kompilator C# online