🏗️ שיעור 5: יוצרים עצמים!

⏱️ 1.5 שעות | 🎯 ⭐ OOP - תפנית משמעותית! ⭐
⚠️ שיעור מפתח! זה הרגע שבו הכל משתנה. עד עכשיו כתבנו הכל ב-Main, מעכשיו נלמד איך ליצור אובייקטים משלנו!

🤔 למה צריכים Classes?

הבעיה עד עכשיו:

// רוצים לנהל מידע על תלמיד:
string studentName = "שרה";
int studentAge = 15;
double[] studentGrades = {85, 92, 78};

// עוד תלמיד? צריכים עוד משתנים!
string studentName2 = "יוסי";
int studentAge2 = 16;
double[] studentGrades2 = {88, 90, 85};

// 30 תלמידים?? בלתי אפשרי!

הפתרון: מחלקה!

מחלקה = תבנית שמגדירה איך אובייקט נראה

📦 מחלקות ואובייקטים

אנלוגיה:

מהעוגיופ אפשר ליצור המון עוגיות שונות!

🎯 הדוגמה הראשונה שלנו

using System;

namespace OOPDemo
{
    // מחלקה חדשה - תבנית לתלמיד
    class Student
    {
        // Properties - מאפיינים של תלמיד
        public string Name;
        public int Age;
        public double[] Grades;
        
        // Constructor - פונקציה שרצה כשיוצרים תלמיד חדש
        public Student(string name, int age)
        {
            Name = name;
            Age = age;
            Grades = new double[0];  // מערך ריק
        }
        
        // Method - פעולה שתלמיד יכול לעשות
        public void PrintInfo()
        {
            Console.WriteLine($"שם: {Name}");
            Console.WriteLine($"גיל: {Age}");
        }
    }
    
    class Program
    {
        static void Main()
        {
            // יצירת אובייקט - תלמיד ספציפי!
            Student student1 = new Student("שרה", 15);
            
            // גישה למאפיינים
            Console.WriteLine(student1.Name);  // "שרה"
            
            // קריאה למתודה
            student1.PrintInfo();
            
            // אפשר ליצור עוד תלמידים!
            Student student2 = new Student("יוסי", 16);
            student2.PrintInfo();
        }
    }
}

🔑 מושגים חשובים

1. public vs private

2. Constructor - בונה

3. this - הפניה לאובייקט הנוכחי

public Student(string name, int age)
{
    this.Name = name;  // this.Name = המאפיין של האובייקט
    this.Age = age;    // name/age = הפרמטרים
}

💡 דוגמה מורחבת

using System;

class Student
{
    public string Name;
    public int Age;
    public double[] Grades;
    
    public Student(string name, int age)
    {
        Name = name;
        Age = age;
        Grades = new double[0];
    }
    
    // הוספת ציון
    public void AddGrade(double grade)
    {
        // יצירת מערך חדש גדול יותר
        double[] newGrades = new double[Grades.Length + 1];
        
        // העתקת הציונים הישנים
        for (int i = 0; i < Grades.Length; i++)
        {
            newGrades[i] = Grades[i];
        }
        
        // הוספת הציון החדש
        newGrades[Grades.Length] = grade;
        Grades = newGrades;
    }
    
    // חישוב ממוצע
    public double GetAverage()
    {
        if (Grades.Length == 0) return 0;
        
        double sum = 0;
        foreach (double grade in Grades)
        {
            sum += grade;
        }
        return sum / Grades.Length;
    }
    
    public void PrintInfo()
    {
        Console.WriteLine($"שם: {Name}");
        Console.WriteLine($"גיל: {Age}");
        Console.WriteLine($"ממוצע: {GetAverage():F2}");
    }
}

class Program
{
    static void Main()
    {
        Student student = new Student("שרה", 15);
        
        student.AddGrade(95);
        student.AddGrade(88);
        student.AddGrade(92);
        
        student.PrintInfo();
        // פלט:
        // שם: שרה
        // גיל: 15
        // ממוצע: 91.67
    }
}

⚡ למה זה עוצמתי?

✍️ תרגולים

תרגיל 1: BankAccount (20 דקות)

צרו מחלקת BankAccount עם:

דוגמה:

BankAccount account = new BankAccount("12345", 1000);
account.Deposit(500);        // יתרה: 1500
account.Withdraw(200);       // יתרה: 1300
account.PrintBalance();      // "חשבון 12345: 1300 ש״ח"

תרגיל 2: Rectangle (15 דקות)

צרו מחלקת Rectangle עם:

תרגיל 3: שיפור Student (15 דקות)

הוסיפו למחלקת Student:

  1. Method GetHighestGrade() - מחזיר את הציון הגבוה ביותר
  2. Method IsPassing() - מחזיר true אם ממוצע > 60
  3. Method GetGradeCount() - מחזיר כמה ציונים יש

📝 סיכום

✅ מה למדנו:

🎯 זכרו: מעכשיו אנחנו חושבים במונחים של אובייקטים!
לא עוד "מערך של משתנים", אלא "רשימת תלמידים" שכל אחד הוא אובייקט מלא!