סיכום – רשומות תלמידים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 35 מתוך 70.
אתגר
קלבואו נבנה מערכת לניהול רשומות תלמידים שמאגדת את כל טכניקות הכימוס שלמדת בפרק הזה. תיצור מערכת מאובטחת שבה נתוני התלמידים מוגנים כראוי, הציונים עוברים אימות, ומידע מסוים נשאר בלתי ניתן לשינוי לאחר היצירה.
תארגן את הקוד שלך בשני קבצים:
Student.cs: צור מחלקהStudentבמרחב השמותRecordsשמדגימה כימוס נכון. למחלקת התלמיד שלך צריכים להיות:- שדה
readonlyבשםName(מחרוזת) שזמין לציבור, אך אפשר להגדיר אותו רק בזמן יצירת האובייקט - שדה פרטי
readonlyעבור מזהה התלמיד (מחרוזת) — אסור שתהיה גישה ישירה אליו מבחוץ - רשימה פרטית לאחסון ציונים (מספרים שלמים)
- מאפיין ציבורי לקריאה בלבד
Averageשמחשב ומחזיר את הממוצע של כל הציונים, או0אם אין ציונים - מתודה ציבורית
AddGrade(int grade)שמקבלת רק ציונים בין 0 ל־100 (כולל) — יש להתעלם בשקט מציונים לא תקינים - מתודה ציבורית
GetGradeCount()שמחזירה כמה ציונים תקינים נרשמו - מתודה ציבורית
GetStudentInfo()שמחזירה מחרוזת בתבנית"{Name} (ID: {last 4 characters of student ID})"— שים לב שאתה חושף רק גרסה מוסתרת של המזהה!
- שדה
Program.cs: בקובץ הראשי שלך, צור תלמיד והוסף כמה ציונים כדי להדגים איך הכימוס עובד. תראה שציונים תקינים מתקבלים, ציונים לא תקינים נדחים, והממוצע מחושב נכון.
תקבל חמש קלטים:
- שם התלמיד
- מזהה התלמיד (באורך של 4 תווים לפחות)
- הציון הראשון להוספה (מספר שלם)
- הציון השני להוספה (מספר שלם, עשוי להיות לא תקין כמו -5 או 150)
- הציון השלישי להוספה (מספר שלם)
הדפס את הפלט בתבנית הזו:
{GetStudentInfo() result}
Grades recorded: {GetGradeCount()}
Average: {Average}לדוגמה, אם הקלטים הם Emma Wilson, STU12345, 85, 150 ו־90, הפלט צריך להיות:
Emma Wilson (ID: 2345)
Grades recorded: 2
Average: 87.5שים לב שהציון הלא תקין 150 נדחה בשקט, ולכן נרשמו רק שני ציונים. מזהה התלמיד מוגן — קוד חיצוני לעולם לא יכול לראות את המזהה המלא, אלא רק את הגרסה המוסתרת שלו דרך GetStudentInfo(). אפשר לקרוא את השם, אך אי אפשר לשנות אותו. כך הכימוס פועל ומשתלב ליצירת מחלקה חזקה ומוגנת היטב!
נסו בעצמכם
using System;
using Records;
class Program
{
public static void Main(string[] args)
{
// קרא את הקלט
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: צור אובייקט Student עם name ו-studentId
// TODO: הוסף את כל שלושת הציונים באמצעות המתודה AddGrade
// TODO: הדפס את הפלט בפורמט הנדרש:
// {התוצאה של GetStudentInfo()}
// Grades recorded: {GetGradeCount()}
// ממוצע: {Average}
}
}
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמרחבי שמות והנחיותמבוא למחלקות ולאובייקטיםמילת המפתח 'this'מתודות ופרמטריםשדות לעומת מאפייניםבנאיםאתחול אובייקטיםסיכום – מחשבון פשוט4ירושה
תחביר ירושה בסיסית (:)מילת המפתח 'base'מילות המפתח Virtual ו-Overrideמחלקות Sealedמחלקת הבסיס 'object'סיכום – היררכיית עובדים7תכונות מתקדמות
העמסת אופרטוריםאינדקסרים (this[])דריסת ToString()מתודות הרחבהסיכום – רשימה מותאמת אישית2מאפיינים וחברים סטטיים
מאפיינים במימוש אוטומטימאפיינים לקריאה בלבד ולכתיבה בלבדשדות ומתודות סטטייםמחלקות סטטיותחברים עם גוף ביטוי5פולימורפיזם וממשקים
פולימורפיזם בזמן קומפילציה לעומת בזמן ריצהממשק לעומת מחלקה מופשטתממשקים מרוביםממשקים מפורשיםהמרה כלפי מעלה והמרה כלפי מטהחזרה: מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה במקום ירושהGenerics (מחלקות ומתודות)נציגים ואירועיםמאפיינים ורפלקציהIDisposable והצהרת usingיסודות הזרקת תלויותתרגלו בעצמכם: קומפיילר C# אונליין