إخفاء البيانات
جزء من قسم Object Oriented Programming في رحلة Java على Coddy — الدرس 12 من 87.
إخفاء المعلومات هو مبدأ تقييد الوصول المباشر إلى البيانات الداخلية للكائن. من خلال دمج حقول private مع دوال الجلب (getters) ودوال التعيين (setters)، فإنك تنشئ حاجزاً وقائياً حول حالة الكائن الخاص بك.
تأمل ما يحدث بدون إخفاء المعلومات:
public class Temperature {
public double celsius; // مكشوفة بشكل مباشر
}
// يمكن لأي شخص تعيين قيم غير صالحة
Temperature t = new Temperature();
t.celsius = -500; // أقل من الصفر المطلق - مستحيل!باستخدام إخفاء المعلومات، يمكنك التحكم في كيفية الوصول إلى البيانات وتعديلها:
public class Temperature {
private double celsius;
public void setCelsius(double celsius) {
if (celsius >= -273.15) {
this.celsius = celsius;
}
}
public double getCelsius() {
return celsius;
}
}الآن يتم رفض درجات الحرارة غير الصالحة تلقائيًا. التمثيل الداخلي مخفي - يمكنك لاحقًا تغيير كيفية تخزين درجة الحرارة داخليًا (ربما إلى كلفن) دون التأثير على الكود الذي يستخدم الفئة (class).
يوفر هذا النهج ثلاث فوائد رئيسية: التحقق من الصحة يضمن سلامة البيانات، والمرونة تسمح بإجراء تغييرات داخلية دون كسر الكود الخارجي، والتحكم يتيح لك تحديد العمليات المسموح بها بالضبط على بياناتك.
التحدي
سهللنقم ببناء فئة Password لإدارة كلمات المرور توضح مفهوم إخفاء المعلومات (information hiding) من خلال حماية البيانات الحساسة وفرض قواعد الأمان عبر الوصول المتحكم فيه.
ستقوم بإنشاء ملفين لتنظيم الكود الخاص بك:
Password.java: قم بإنشاء فئة Password تخفي بياناتها الداخلية وتتحكم في كيفية تعيين كلمات المرور والوصول إليها:- حقل
passwordخاص (String) يخزن كلمة المرور الفعلية - حقل
minLengthخاص (int) يحدد الحد الأدنى لطول كلمة المرور المقبول - منشئ (constructor) يأخذ متطلب الحد الأدنى للطول
- دالة تعيين (setter) باسم
setPassword(String password)تقبل فقط كلمات المرور التي تستوفي متطلب الحد الأدنى للطول. إذا كانت صالحة، قم بتخزينها وإرجاعtrue؛ وإذا كانت قصيرة جدًا، لا تغير كلمة المرور وأرجعfalse - دالة جلب (getter) باسم
getMaskedPassword()ترجع كلمة المرور مع استبدال جميع الأحرف بعلامات النجمة (*) - لا تكشف أبدًا عن كلمة المرور الفعلية! - دالة
checkPassword(String attempt)ترجعtrueإذا كانت المحاولة تطابق كلمة المرور المخزنة، وfalseبخلاف ذلك - دالة جلب (getter) باسم
getLength()ترجع طول كلمة المرور الحالية (أو 0 إذا لم يتم تعيين كلمة مرور)
- حقل
Main.java: قم بإنشاء كائن Password بحد أدنى للطول يبلغ 6، ثم اقرأ مدخلين: كلمة مرور لتعيينها ومحاولة للتحقق منها. اطبع ثلاثة أسطر:Set: trueأوSet: false(نتيجة تعيين كلمة المرور)Masked: ******(النسخة المقنعة من كلمة المرور)Match: trueأوMatch: false(نتيجة التحقق من المحاولة)
ستتلقى مدخلين: كلمة المرور المراد تعيينها، ومحاولة كلمة المرور للتحقق منها.
لاحظ كيف لا يمكن الوصول إلى كلمة المرور الفعلية مباشرة من خارج الفئة - هذا هو تطبيق لمفهوم إخفاء المعلومات. تتحكم الفئة تمامًا في المعلومات التي يتم الكشف عنها وكيفية تعديل كلمة المرور.
ورقة مرجعية
يؤدي إخفاء المعلومات (Information hiding) إلى تقييد الوصول المباشر إلى البيانات الداخلية للكائن باستخدام حقول private مقترنة بأساليب الجلب (getters) والتعيين (setters).
بدون إخفاء المعلومات، تكون الحقول مكشوفة ويمكن تعيينها لقيم غير صالحة:
public class Temperature {
public double celsius; // Exposed directly
}
Temperature t = new Temperature();
t.celsius = -500; // Invalid value allowedمع إخفاء المعلومات، يمكنك التحكم في الوصول والتحقق من صحة البيانات:
public class Temperature {
private double celsius;
public void setCelsius(double celsius) {
if (celsius >= -273.15) {
this.celsius = celsius;
}
}
public double getCelsius() {
return celsius;
}
}الفوائد الرئيسية لإخفاء المعلومات:
- التحقق من الصحة (Validation): يضمن سلامة البيانات من خلال رفض القيم غير الصالحة
- المرونة (Flexibility): يسمح بإجراء تغييرات داخلية دون التأثير على الكود الخارجي
- التحكم (Control): يتيح لك تحديد العمليات المسموح بها على بياناتك
جرّب بنفسك
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// قراءة كلمة المرور لتعيينها
String passwordToSet = scanner.nextLine();
// قراءة محاولة كلمة المرور للتحقق منها
String passwordAttempt = scanner.nextLine();
// TODO: إنشاء كائن Password بطول أدنى قدره 6
// TODO: تعيين كلمة المرور وطباعة النتيجة ("Set: true" أو "Set: false")
// TODO: طباعة كلمة المرور المقنعة ("Masked: ******")
// TODO: التحقق من محاولة كلمة المرور وطباعة النتيجة ("Match: true" أو "Match: false")
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Object Oriented Programming
1أساسيات الـ OOP
الملفات الخارجيةمقدمة في الـ OOPالفئات (Classes) مقابل الكائنات (Objects)الكلمة المفتاحية thisالدوال (Methods)الحقول (Attributes)دالة البناء (Constructor)تعدد أشكال دالة البناء (Constructor Overloading)مراجعة - آلة حاسبة بسيطة4الوراثة
الوراثة الأساسية (extends)الكلمة المفتاحية superإعادة تعريف الدوال (@Override)تسلسل المنشئات (Constructor Chaining)كلاس Objectالوراثة الأحادية ومتعددة المستوياتلماذا لا توجد وراثة متعددة للكلاساتمراجعة - هيكلية الموظفين7الدوال الخاصة وفئة Object
دالة toString()equals() و hashCode()دالة clone()compareTo() و Comparableواجهة Comparatorمراجعة - الترتيب المخصص2محددات الوصول والتغليف
نظرة عامة على مستويات الوصولدوال Getter و Setterإخفاء البياناتالكلمة المفتاحية finalمراجعة - مدير الحساب البنكي5تعدد الأشكال (Polymorphism)
أساسيات الـ Method Overloadingالـ Method Overriding (في وقت التشغيل)الـ Upcasting والـ Downcastingمعامل الـ instanceofالفئات والدوال المجردة (Abstract)مراجعة - حاسبة الأشكال8مفاهيم OOP المتقدمة
الـ Composition مقابل الـ Inheritanceالـ Aggregation مقابل الـ Compositionالفئات الداخلية والمتداخلة والمجهولة (Inner, Nested & Anonymous)الـ Enums ودوالهاالـ Records (Java 16+)الـ Sealed Classes (Java 17+)11أنماط التصميم - الجزء الأول
مقدمة في أنماط التصميمنمط Singletonنمط Factoryنمط Builderنمط Observerنمط Strategy3خصائص الفئة والعضو الساكن
المتغيرات الخاصة بالكائن مقابل المتغيرات الساكنةالدوال الساكنةالكتل البرمجية الساكنةالثوابت (static final)ملخص - العداد والأدوات المساعدة6الواجهات (Interfaces) والأصناف المجردة (Abstract Classes)
مقدمة في الواجهات (Interfaces)تنفيذ الواجهات (Interfaces)تنفيذ واجهات متعددةالـ Default و Static في الواجهاتالأصناف المجردة مقابل الواجهاتالواجهات الوظيفية (Functional Interfaces)مراجعة - نظام الدفع9الأنواع العامة (Generics)
مقدمة في الأنواع العامةالأصناف العامة (Generic Classes)الدوال العامة (Generic Methods)معاملات الأنواع المقيدةالرموز البديلة (?, extends, super)مراجعة - الحاويات العامة12أنماط التصميم - الجزء الثاني
نمط الأمرنمط المحولنمط المزيننمط طريقة القالبنمط الحالةنمط التركيبنمط المكرر