مفهوم Encapsulation ” التغليف”

Encapsulation – التغليف: وهو عبارة عن أسلوب يمكن اتباعه لإخفاء البيانات الأساسية في الكلاس, أي لإخفاء الخصائص الموجودة فيه Global Variables ) , و جعل الكلاسات الأخرى قادرة على التعامل مع هذه الخصائص فقط من خلال دوال يقوم بإنشائها المبرمج الأساسي للكلاس.

الأسلوب المتبع في عملية Encapsulation :

بما أن فكرة Encapsulation الأساسية هي إخفاء البيانات من جهة و إتاحة التعامل معها من جهة أخرى.

أول ما يجب أن يخطر في بالك هو أنه يجب تعريف جميع الخصائص ( أي المتغيرات التي ستحفظ البيانات ) الموجودة في الكلاس كـ private. لأن تعريف الخصائص كـ private يعني أنه يمكن الوصول إليهم فقط من داخل الكلاس الموجودين فيه.

ثاني شيىء عليك التفكير فيه هو إيجاد طريقة للوصول إلى هذه الخصائص من الخارج. لذلك عليك تجهيز دوال نوعها public للتعامل مع هذه الخصائص, لأن الدوال التي نوعها public يمكن الوصول إليهم من أي مكان.

إذاً لتحقيق مبدأ Encapsulation , عليك تعريف الخصائص كـ private و تعريف الدوال التي تستخدم للوصول إليهم كـ public.

 

مفهوم دوال الـ setter و الـ getter

عند التعامل مع أي متغير ( أو خاصية ) فعندك خيارين و هما إما إعطاءه قيمة جديدة و إما الحصول على القيمة الموجودة فيه. و بما أنه يجب بناء دوال للتعامل مع كل خاصية من الخصائص الموجودة في الكلاس, ينصح بإعتماد أسماء متعارف عليها كالتالي:

  • إبدأ إسم كل دالة الهدف منها إعطاء قيمة للخاصية بالكلمة set ثم إسم الخاصية.
  • إبدأ إسم كل دالة الهدف منها الحصول على قيمة الخاصية بالكلمة get ثم إسم الخاصية.

مثال :

الآن سنقوم بإنشاء كلاس إسمه Employee و فكرته تخزين معلومات الموظفين مثل الإسم name, الراتب salary, العمر age.

} public class Employee
//الكلاس Employee يملك 3 خصائص
//الإسم نوعه String لأنه عبارة عن نص ;private String name
//العمر نوعه int لأنه عبارة عن رقم ;private int age
//الراتب نوعه double لأنه عبارة عن رقم كبير يمكن أن يحتوي على منزلة عشرية ;private double salary

} (public void setName(String name
// هذه الدالة نعطيها إسم فتقوم بوضعه للخاصية name
;this.name = name
{

} ()public void getName
// هذه الدالة ترجع القيمة المخزنة في الخاصية name
;return name
{

} (public void setAge(int age
// هذه الدالة نعطيها رقم فتقوم بوضعه للخاصية age
;this.age= age
{

} ()public void getAge
// هذه الدالة ترجع القيمة المخزنة في الخاصية age
;return age
{

} (public void setSalary(double salary
// هذه الدالة نعطيها رقم فتقوم بوضعه للخاصية salary
;this.salary= salary
{

} ()public void getSalary
// هذه الدالة ترجع القيمة المخزنة في الخاصية salary
;return salary
{
{

} public class Main

//هنا قمنا بإنشاء الكائن employee من الكلاس Employee
;()Employee employee = new Employee

//هنا قمنا بوضع قيم لخصائص الكائن employee من خلال دوال الـ Setter
;(“employee.setName(“Ahmad
;(employee.setAge(25
;(employee.setSalary(800.5

//هنا قمنا بعرض قيم خصائص الكائن employee من خلال دوال الـ Getter
;(()System.out.println(“Name: ” +employee.getName
;(()System.out.println(“Age: ” +employee.getAge
;(()System.out.println(“Salary: ” +employee.getSalary
{

سنحصل على النتيجة التالية عند التشغيل.

Name: Ahmad
Age: 25
Salary: 800.5

فوائد ال Encapsulation “التغليف”

  • يمكنه جعل الأشياء الموجودة في الكلاس قابلة للقراءة أو للكتابة من قبل الكلاسات الخارجية.
  • يسمح للكلاس بوضع شروط أثناء تخزين البيانات.
  • Encapsulation يساعد أيضاً في جعل البرنامج قابل للتطوير من مبرمجين آخرين بدون حاجة هؤلاء المبرمجين إلى معرفة تفاصيل الكود الأساسي في البرنامج.