Encapsulation: private fields, getters, setters
Protect your data
- Encapsulation means hiding an object's data and only changing it through methods.
- This keeps the data safe. Other code cannot put a bad value into it.
- The main tools are the words
privateandpublic.
حماية بياناتك
- التغليف يعني إخفاء بيانات الكائن وتغييرها فقط من خلال الطرق.
- يحافظ هذا على سلامة البيانات. لا يمكن للكود الآخر وضع قيمة خاطئة فيها.
- الأدوات الرئيسية هي كلمات
privateوpublic.
private fields
- Mark instance variables
privateso code outside the class cannot touch them directly. - Methods inside the same class can still use them.
- This is the normal style for AP CSA: fields are
private.
حقول private
- عيّن متغيرات العينة بـ
privateبحيث لا يستطيع الكود خارج الفئة الوصول إليها مباشرة. - يمكن للطرق الموجودة داخل نفس الفئة استخدامها.
- هذا هو النمط المعتاد في AP CSA: الحقول تكون
private.
public class BankAccount {
private double balance; // hidden from outside code
public BankAccount(double start) {
this.balance = start;
}
}
Accessors (getters)
- A field is private, so we add a
publicmethod to read it. - A method that returns a field is called an accessor or getter.
- It usually starts with
get, likegetBalance().
المُلحقات (getters)
- بما أن الحقل خاص، فإننا نضيف طريقة
publicلـ قراءته. - تسمى الطريقة التي تُرجع حقلًا مُلحقًا أو مُلقِّفًا (getter).
- تبدأ عادةً بـ
get، مثلgetBalance().
public class BankAccount {
private double balance;
public BankAccount(double start) {
this.balance = start;
}
public double getBalance() {
return this.balance;
}
}
Mutators (setters)
- A method that changes a field is called a mutator or setter.
- It can check the new value first and refuse a bad one.
- Below,
depositignores a negative amount, so the balance stays safe.
المُعدِّلات (setters)
- الطريقة التي تُغيّر حقلًا تسمى مُعدِّلًا أو مُعدِّلًا (setter).
- يمكنها فحص القيمة الجديدة أولاً ورفض القيمة الخاطئة.
- في الأسفل، يتجاهل
depositالمبلغ السلبي، لذا يبقى الرصيد آمنًا.
public class BankAccount {
private double balance;
public BankAccount(double start) {
this.balance = start;
}
public void deposit(double amount) {
if (amount > 0) {
this.balance = this.balance + amount;
}
}
public double getBalance() {
return this.balance;
}
}
static vs instance
- An instance field belongs to one object. Each object has its own.
- A
staticfield belongs to the class itself — it is shared by all objects. - Below,
countrises by 1 every time anyRobotis built.
static مقابل العينة
- حقل العينة ينتمي إلى كائن واحد. لكل كائن خاص به.
- حقل
staticينتمي إلى الفئة نفسها — وهو مشترك بين جميع الكائنات. - في الأسفل، يرتفع
countبمقدار 1 في كل مرة يتم فيها بناء أيRobot.
public class Robot {
private static int count = 0; // shared by all robots
public Robot() {
count = count + 1;
}
public static int getCount() {
return count;
}
}
toString()
toString()returns text that describes the object.- Java calls it automatically when you print the object or join it with
+. - It takes no parameters and returns a
String.
toString()
- يُرجع
toString()نصًا يصف الكائن. - تستدعي Java ذلك تلقائيًا عند طباعة الكائن أو دمجه مع
+. - لا تأخذ معاملات ولا تُرجع نوعًا
String.
public class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public String toString() {
return "(" + this.x + ", " + this.y + ")";
}
}
Common mistakes
- Make fields
privateand reach them through getters and setters. - A setter can check a value before storing it.
أخطاء شائعة
- اجعل الحقول
privateووصل إليها من خلال الملحق والمُعدِّل. - يمكن للمُعدِّل فحص قيمة قبل تخزينها.
Now you try
- Fill in each class so its private data is changed only through safe methods.
- A hidden Harness builds the object, calls the methods, and checks the results.
- Press Run to compile, then Check answer.
الآن جرب بنفسك
- املأ كل فئة بحيث تتغير بياناتها الخاصة فقط من خلال طرق آمنة.
- يقوم محرّك الاختبار المخفي بإنشاء الكائن، واستدعاء الطرق، وفحص النتائج.
- اضغط تشغيل للتجميع، ثم فحص الإجابة.
Complete BankAccount. Keep balance private. deposit(amount) adds the amount only if it is greater than 0. withdraw(amount) subtracts only if the amount is greater than 0 and not more than the balance (no overdraft). getBalance() returns the balance.
Click Run to see the output here. · اضغط تشغيل لرؤية المخرجات هنا.
Complete Temperature. The constructor stores an int degrees in a private field. toString() returns the degrees followed by C — for 21 it returns 21C.
Click Run to see the output here. · اضغط تشغيل لرؤية المخرجات هنا.
Complete Widget. A private static field count starts at 0. Every time a Widget is built, the constructor adds 1 to count. The static method getCount() returns how many widgets have been built.
Click Run to see the output here. · اضغط تشغيل لرؤية المخرجات هنا.