اذهب إلى المحتوى
  • 0

ما هو التغليف Encapsulation في لغة جافا؟

khaled0mohammed

السؤال

Recommended Posts

  • 0

- التغليف هو أشبه بكبسولة الدواء التي تحتوي داخلها خليطاً من المواد الطبية.
- يعتبر التغليف أحد المفاهيم الأساسية في البرمجة الشيئية (OOP).
- إليك عدة تعاريف لمفهوم التغليف (Encapsulation):

  • هو العملية التي نقوم من خلالها بتغطية الكود والبيانات مع بعضها ضمن وحدة واحدة.
  • هو فكرة مضمونها تجميع البيانات والطرق التي تعمل على تلك البيانات في وحدة واحدة، على سبيل المثال ، Class في Java.
  • هو عبارة عن أسلوب يمكن اتباعه لإخفاء البيانات الأساسية في الكلاس, أي لإخفاء الخصائص الموجودة فيه ( Global Variables ), و جعل الكلاسات الأخرى قادرة على التعامل مع هذه الخصائص فقط من خلال دوال يقوم بإنشائها المبرمج الأساسي للكلاس.

- من الناحية العملية، فإنه في التغليف، يتم إخفاء المتغيرات أو البيانات الخاصة بالكلاس عن أي كلاء آخر ولا يمكن الوصول إليها إلا من خلال دالة عضو من نفس الكلاس.
- يتم تحقيق مبدأ التغليف عن طريق التصريح عن جميع المتغيرات في الكلاس كمتغيرات خاصة (private) وكتابة طرق (دوال) عامة (public) في الكلاس لتعيين قيم المتغيرات والحصول عليها.

- فوائد التغليف:

  1. من خلال توفير طريقة (دالة) setter أو getter فقط، يمكنك جعل الكلاس للقراءة فقط أو للكتابة فقط (زيادة المرونة) على سبيل المثال، إذا أردنا جعل الكلاس قابل للقراءة فقط "class read-only" نقوم بحذف دوال الضبط setter، وفي حال أردنا جعله للكتابة فقط نقوم بحذف دوال ال getter.
  2. يوفر لك التحكم في البيانات.
  3. طريقة لتحقيق إخفاء البيانات في Java.
  4. لن يكون لدى المستخدم أي فكرة عن التنفيذ الداخلي للكلاس، حيث لن يكون مرئياً للمستخدم كيف يخزن الكلاس القيم في المتغيرات. سيعرف المستخدم فقط أننا نقوم بتمرير القيم إلى طريقة الضبط setter ويتم تهيئة المتغيرات بهذه القيمة الممررة.
  5. قابلية إعادة الاستخدام: يحسن التغليف أيضاً من قابلية إعادة الاستخدام ويسهل تغييره مع المتطلبات الجديدة.

مثال:
سنعطي الآن مثالاً بسيطاً للتغليف، حيث سنقوم بتعريف كلاس يحقق مبدأ التغليف و يحتوي على حقل واحد فقط مع دالة setter  ودالة getter.

package com.javaproject;  
public class Student{  
  // private هنا قمنا بتعريف متغير يمثل اسم الطالب وحددنا الوصول إليه ك
  private String studentName;  
  // هنا قمنا بتعريف متغير للحصول على هذا المتغير 
  // getter  أي أننا عرفنا دالة 
  public String getName(){  
    return studentName;  
  }  
  // هنا قمنا بتعريف دالة لضبط قيمة هذا المتغير 
  // أي قمنا بتعريف دالة تقوم بتحديد اسم الطالب
  // setter أي أننا عرفنا دالة
  public void setName(String studentName){  
    this.studentName=studentName;  
  }  
}  

الآن سنقوم باختبار الكلاس السابق الذي قمنا بتغليفه:

package com.javatproject;  
class Test{  
public static void main(String[] args){  
// إنشاء كائن من الكلاس السابق
// أو بمعنى آخر تعريف طالب
Student stu=new Student();  
// تحديد اسم لهذا الطالب
stu.setName(Ali");  
// طباعة اسم هذا الطالب
System.out.println(stu.getName());  
}  
}  

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

الغرض من التغليف:

يحمي الكود من الآخرين.
قابلية صيانة الكود.

مثال:


public class Addition(){
	int age=5; // هذا المتغير لا يمكن ان يكون سالب، لانه لا يوجد عمر بالسالب
}

إذا قام شخص ما بتغيير المتغير إلى 5- فهو غير واقعي.

للتغلب على المشكلة نحتاج إلى اتباع الخطوات التالية:

يمكننا جعل المتغير خاصًا أو محميًا.
بحيث يمكن تعديل الكود أعلاه على النحو التالي:

public class Addition(){
private int a = 5; // هنا يتم تمييز المتغير على أنه خاص
  
  // Setter
  public integer setAge(int a){
	if(a > 0){// هنا يتم تطبيق الشرط ونضمن ان لا تكون قيمة المتغير سالبة
      $this.a = a;
	}
  }
  
  // Getter
  public integer getAge() { // هذه الدالة للوصول الى المتغير لانك لا تستطيع الوصول له مباشرة لانه محمي
    return a; 
  }
  
}

للتغليف ، نحتاج إلى جعل جميع متغيرات الصنف خاصة وإنشاء دالة ادخال القيمة للمتغير ودالة للوصول الى المتغير. وهذا بدوره سيجبر الآخرين على الاتصال بالدوال بدلاً من الوصول إلى البيانات مباشرة. 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...