מחלקות (Class)

מה זו מחלקה?

מחלקה (class) היא יחידת הבנייה הבסיסית של Java. כל הקוד ב-Java חי בתוך מחלקות - אין פונקציות "חופשיות" כמו ב-Python או JavaScript.

מחלקה היא בעצם תבנית שמתארת משהו: אילו נתונים יש לו (שדות) ואילו פעולות אפשר לעשות עליו (פונקציות/מתודות).

שני סוגי מחלקות

ב-Java יש בעצם שני שימושים עיקריים למחלקות:

1. מחלקה ככלי (container ל-main)

כזו שמכילה את main ואת הפונקציות של התוכנית. למשל:

public class Calculator {
    public static void main(String[] args) {
        int result = add(5, 3);
        System.out.println(result);
    }

    public static int add(int a, int b) {
        return a + b;
    }
}

2. מחלקה כתבנית לאובייקט

כזו שמייצגת דבר-מה בעולם: אדם, רכב, חשבון בנק וכו'. נלמד על זה בשיעור 19: אובייקטים ו-OOP.

public class Person {
    String name;
    int age;

    public void greet() {
        System.out.println("שלום, אני " + name);
    }
}

חוק שם הקובץ

שם הקובץ = שם המחלקה הציבורית. אם יש לכם public class Main, הקובץ חייב להיקרא Main.java. זה לא רשות - זה חוק שהקומפיילר אוכף.

מבנה של מחלקה

public class ClassName {

    // שדות (נתונים)
    int number;
    String text;

    // בנאי (constructor)
    public ClassName() {
        // ...
    }

    // מתודות (פעולות)
    public void doSomething() {
        // ...
    }
}

static מול לא-static

  • static - שייך למחלקה עצמה. אין צורך ליצור אובייקט כדי להשתמש בזה.
  • ללא static - שייך לאובייקט ספציפי. צריך ליצור אובייקט קודם.
public class Counter {
    static int totalCount = 0;   // משותף לכל הספירות
    int myCount = 0;              // אישי לכל אובייקט
}

חוקי מתן שמות

  • שמות מחלקות - PascalCase: Person, BankAccount, UserProfile
  • שמות מתודות ושדות - camelCase: firstName, calculateTotal()
  • קבועים - UPPER_SNAKE_CASE: MAX_SIZE, PI

דוגמה מלאה

public class Greeter {

    public static void main(String[] args) {
        sayHello("נפתלי");
        sayHello("דוד");
    }

    public static void sayHello(String name) {
        System.out.println("שלום, " + name + "!");
    }
}

פלט:

שלום, נפתלי!
שלום, דוד!

מדוע הכל חייב להיות במחלקה?

ב-Java הכל מונחה עצמים. גם תוכנית פרוצדורלית פשוטה חייבת להיות עטופה במחלקה. זה מביא יציבות, סדר והרבה יותר קל לתחזק פרויקטים גדולים.

בדקו את עצמכם

נסו לענות לבד לפני שאתם פותחים את התשובה.

  1. למה כל תוכנית Java חייבת מחלקה?

    1. כדי שהקוד יהיה מהיר
    2. ב-Java כל קוד, כולל main, חייב לשבת בתוך מחלקה
    3. רק תוכניות גדולות צריכות מחלקה
    4. זו רק מוסכמה
    הצגת התשובה

    תשובה ב. Java היא שפה מונחית עצמים לגמרי: אין פונקציות או קוד מחוץ למחלקה.

  2. מה ההבדל בין מחלקה לאובייקט?

    1. אין הבדל
    2. מחלקה קיימת רק בזמן ריצה
    3. אובייקט הוא התבנית, מחלקה היא המופע
    4. מחלקה היא התבנית, אובייקט הוא מופע שנוצר ממנה
    הצגת התשובה

    תשובה ד. המחלקה מגדירה אילו שדות ופעולות יהיו, ו-new יוצר ממנה אובייקט ממשי.