הפרק הזה מציג חזרה קצרה על מושגי יסוד במחלקות בשפת #C לקראת המשך הקורס. הבנה של מושגים אלו תעזור לתלמידים לעבוד עם מבני נתונים מורכבים בהמשך.
סקירה כללית
תזכורת חשובה: מחלקה היא תבנית ליצירת אובייקטים. היא מתארת את השדות (data) והפעולות (methods) שהאובייקטים יודעים לבצע. ב‑#C מחלקות הן יישות מונחית‑עצמים מלאה, המאפשרת להגדיר קונסטרוקטורים, תכונות (Properties), מימושי ממשקים וירושה.
קריאה והגדרה של מחלקות
public class Student
{
private string _firstName; // 1. שדה לשם פרטי
private string _lastName; // 1. שדה לשם משפחה
private double grade; // 1. שדה לציון (בדרך כלל נקרא לזה תכונה)
public Student() { }
// 2. קונסטרקטור מלא
public Student(string firstName, string lastName, double grade)
{
_firstName = firstName;
_lastName = lastName;
this.grade = grade; // 2. כדי להבדיל בין הפרמטר לשדה this- שימוש ב
}
// ====================== מה שאנחנו נכתוב ===========================
// 3a. Java-style getter - לשים לב: ג'אווה סטייל הוא התחביר היחיד שמותר בבחינות!
// !!!וזה משנה מפני שאלו פעולות והקריאה היא עם סוגריים בסוף!!!
public double GetGrade()
{
return grade;
}
// 3b. Java-style getter - לשים לב: זהו התחביר היחיד שמותר בבחינות!
public string GetFirstName() => _firstName;
// 3c. Java-style setter - לשים לב: זהו התחביר היחיד שמותר בבחינות!
public void SetFirstName(string firstName) => _firstName = firstName;
// 3d. Java-style setter - לשים לב: זהו התחביר היחיד שמותר בבחינות!
public void SetGrade(double grade)
{
this.grade = grade;
}
// 4. Get-סתם פעולה ולכן השם לא מתחיל ב
public bool IsPassed() => grade >= 60.0;
// ====================== כל מה שלא נכתוב ===========================
// 5. Native C# Properties - אבל ככה כותבים את זה
private int classNum;
// 5a. Property מלא בסגנון C#
public int ClassNum
{
get { return classNum; }
set { classNum = value; }
}
// 5b. Property לשם פרטי :מקוצר field תחביר מקוצר לפרופרטי. לא צריך שדה
public string FirstName { get; set; }
// 5c. Property מקוצר עבור שם משפחה prop
public string LastName { get; set; }
// 5d. Property תחביר גטר סטר סי-שארפ מלא עם תחביר פונקציה מקוצר (=>) עבור הציון
public double Grade
{
get => grade;
set => grade = value;
}
}
בקוד זה מוגדרת מחלקה Student
עם שדות, קונסטרוקטורים, מאפיינים ומתודה. ההגדרות הללו מתארות כיצד ניצור אובייקט מסוג Student ונעבוד איתו.
טבלה – מבנה מחלקה טיפוסי
תפקיד | English term |
---|---|
שדה – משתנה פרטי של המחלקה שמחזיק מידע אודות האובייקט | field |
תכונה (מאפיין) – עטיפה לשדה המאפשרת גישה מבוקרת ומנגנוני Get/Set | property |
בנאי – מתודה מיוחדת שמאותחלת בעת יצירת האובייקט | constructor |
פונקציה / פעולה /מתודה – פעולה שהאובייקט יודע לבצע | method |
ירושה – מחלקה יכולה לרשת מחלקה אחרת ולקבל את שדותיה ופעולותיה | inheritance |
דגשים חשובים
א. חשוב להגדיר שדות כ‑private
ולהשתמש במאפיינים (Properties / תכונות) לגישה בטוחה.
ב. שם מחלקה ב‑#C מתחיל באות גדולה ונכתב ב-PascalCase.
ג. ניתן להגדיר כמה קונסטרוקטורים עם חתימות שונות (overloading).
ד. ירושה מתבצעת באמצעות הסימן :
ושימוש במילה base
בקונסטרוקטור של המחלקה היורשת.
תרגול
להטמעת החומר מומלץ ליצור מחלקה פשוטה משלכם שמייצגת אובייקט בעולם אמיתי ולכתוב קונסטרוקטור, מאפיינים ומתודות. למשל: מחלקת Book
עם שדות שם הספר, מחבר ומחיר.
מקום לפתרון
כאן תוכלו להוסיף קוד שלכם ותרגל את הנושא.