סקירה של רמות הגישה
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Java של Coddy. שיעור 10 מתוך 87.
משני גישה קובעים מאילו מקומות ניתן לגשת לשדות ולמתודות. ב-Java יש ארבע רמות של בקרת גישה.
| משנה גישה | אותה מחלקה | אותה חבילה | מחלקה יורשת | בכל מקום |
|---|---|---|---|---|
private | כן | לא | לא | לא |
| ברירת מחדל (ללא מילת מפתח) | כן | כן | לא | לא |
protected | כן | כן | כן | לא |
public | כן | כן | כן | כן |
public class BankAccount {
private double balance; // רק במחלקה זו
String accountType; // ברירת מחדל: רק באותה חבילה
protected String owner; // אותה חבילה + מחלקות יורשות
public String bankName; // נגיש מכל מקום
}private הוא המגביל ביותר — השתמשו בו לנתונים פנימיים שאסור לגשת אליהם ישירות לעולם. public הוא הפתוח ביותר — השתמשו בו למתודות שמחלקות אחרות צריכות לקרוא להן.
כשלא מציינים שום משנה גישה, Java משתמשת בגישה default (שנקראת גם גישה ברמת החבילה). כך הגישה מתאפשרת רק בתוך אותה חבילה.
class Helper { // מחלקה עם גישת ברירת מחדל
void assist() { } // מתודה עם גישת ברירת מחדל
}בחרו את רמת הגישה המגבילה ביותר שעדיין מאפשרת לקוד שלכם לפעול. כך תגן על הנתונים שלכם ותקל על תחזוקת הקוד.
אתגר
קלבואו נבנה מערכת רשומות של Student שמדגימה כיצד משנה גישה שולטים בנראות בין קבצים שונים.
תיצרו שני קבצים כדי לארגן את הקוד שלכם:
Student.java: הגדירו מחלקת Student עם שדות המשתמשים ברמות גישה שונות:- שדה
private:studentId(String) - נגיש רק בתוך מחלקת Student - שדה ברירת מחדל (ללא משנה גישה):
grade(int) - נגיש בתוך אותה חבילה - שדה
protected:name(String) - נגיש באותה חבילה ובמחלקות יורשות - שדה
public:school(String) - נגיש מכל מקום
publicבשםgetInfo()שמחזירה מחרוזת בפורמט:"[studentId] name - Grade grade at school"- שדה
Main.java: צרו אובייקט Student והדגימו לאילו שדות ניתן לגשת ישירות מחוץ למחלקה. הדפיסו ישירות את השדהschool, ולאחר מכן הדפיסו את התוצאה שלgetInfo()כדי להציג את כל פרטי התלמיד.
תקבלו ארבעה קלטים: studentId, name, grade ו-school (בסדר הזה).
הפלט שלכם צריך להכיל שתי שורות: שם בית הספר שאליו ניגשים ישירות, ולאחריו פרטי התלמיד המלאים שמתקבלים מהמתודה getInfo().
נסו בעצמכם
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// קראו את ערכי הקלט
String studentId = scanner.nextLine();
String name = scanner.nextLine();
int grade = Integer.parseInt(scanner.nextLine());
String school = scanner.nextLine();
// TODO: צרו אובייקט Student עם ערכי הקלט
// TODO: הדפיסו את השדה school ישירות (ניתן לגשת אליו כי הוא public)
// TODO: הדפיסו את התוצאה של getInfo() כדי להציג את כל המידע על התלמיד
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמבוא לתכנות מונחה עצמיםמחלקות לעומת אובייקטיםמילת המפתח thisמתודותשדות (מאפיינים)מתודת הבנאיהעמסת בנאיםחזרה – מחשבון פשוט4ירושה
ירושה בסיסית (extends)מילת המפתח superדריסת מתודות (@Override)שרשור בנאיםהמחלקה Objectירושה יחידה ורב־רמתיתלמה אין ירושה מרובה של מחלקותסיכום – היררכיית עובדים7מתודות מיוחדות ומחלקת Object
מתודת toString()equals() ו-hashCode()מתודת clone()compareTo() ו-Comparableהממשק Comparatorסיכום – מיון מותאם אישית2מצייני גישה ואנקפסולציה
סקירה של רמות הגישהמתודות Getter ו-Setterהסתרת מידעמילת המפתח finalסיכום – מנהל חשבון בנק5פולימורפיזם
יסודות העמסת מתודותדריסת מתודות (בזמן ריצה)המרה כלפי מעלה וכלפי מטההאופרטור instanceofמחלקות ומתודות מופשטותסיכום – מחשבון צורות8מושגי OOP מתקדמים
הרכבה מול ירושהאגרגציה מול הרכבהמחלקות פנימיות, מקוננות ואנונימיותEnums ומתודות של EnumRecords (Java 16+)מחלקות חתומות (Java 17+)3מאפייני מחלקה וחברים סטטיים
משתני מופע לעומת משתנים סטטייםמתודות סטטיותבלוקים סטטייםקבועים (static final)סיכום — מונה ומחלקת עזר6ממשקים ומחלקות מופשטות
מבוא לממשקיםמימוש ממשקיםמימוש של כמה ממשקיםמתודות ברירת מחדל וסטטיות בממשקמחלקות מופשטות לעומת ממשקיםממשקים פונקציונלייםסיכום – מערכת תשלומיםתרגלו בעצמכם: קומפיילר Java אונליין