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

اقرأ في هذا المقال


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

التغليف هو أحد المفاهيم الأساسية في البرمجة الموجهة للكائنات (OOP)، حيث يصف فكرة تجميع السمات والطرق التي تعمل على تلك السمات في وحدة واحدة، على سبيل المثال، (Class) في لغة (Java).

  • السمات “attributes”، هي البيانات الموجودة في الـ “class”.
  • الطرق “methods”، هي الدوال الموجودة في الـ “class”.

غالبًا ما يستخدم هذا المفهوم أيضًا لإخفاء التمثيل الداخلي، أو الحالة لـ (object) ما من الخارج، وهذا ما يسمى بإخفاء المعلومات، الفكرة العامة لآلية إخفاء المعلومات بسيطة، وتعني إذا كان سمات الـ (object) غير مرئية من خارج، وتقوم بتجميعها مع طرق توفر (هذه الطرق) إمكانية الوصول لقراءة السمات أو الكتابة فيها، فيمكنك إذاً إخفاء معلومات محددة والتحكم في الوصول إلى الحالة الداخلية لـ (object).

وإذا كنت معتادًا على أي لغة برمجة موجهة للكائنات، فمن المحتمل أنك تعلم هذه الدوال “getter” و “setter”، وكما تشير الأسماء، فإن دالة “getter” تسترد السمات، ودالة “setter” تقوم بتغيير على السمات، اعتمادًا على طريقة التي يتم بها كتابة الكود الخاص بكل دالة، يمكنك أن تحدد فيما إذا كان يمكن قراءة وتغيير السمات، أو ما إذا كانت للقراءة فقط، أو ما إذا كانت غير مرئية على الإطلاق.

إخفاء المعلومات Information hiding:

كما هو موضح في البداية، يمكنك استخدام مفهوم التغليف لتنفيذ آلية إخفاء المعلومات، يعد هذا أحد أكثر الآليات استخدامًا في (Java)، حيث يمكنك العثور على أمثلة لها في جميع الـ (Classes) المُنفذة جيدًا في (Java) تقريبًا، يمكنك القيام بتنفيذ آلية إخفاء المعلومات هذه عن طريق جعل سمات الـ (Class) الخاصة بك غير قابلة للوصول من الخارج، ومن خلال توفير طرق مثل، (getter) و (setter) للسمات التي يجب أن تكون قابلة للقراءة أو قابلة للتحديث بواسطة الـ (Classes) الأخرى.

مُعدِّلات الوصول في لغة جافا Access Modifiers:

هناك اختلافات بسيطة في عمل مُعدِّلات وصول من لغة لأخرى، ففي لغة (Java)، هناك أربعة مُعدِّلات وصول يمكنك استخدامها لتحديد رؤية الـ (Classes) والطرق والسمات، يحدد كل واحد منهم مستوى مختلفًا من إمكانية الوصول، ويمكنك استخدام مُعدِّل واحد فقط لكل طريقة أو سمة، كقاعدة عامة، يجب عليك دائمًا استخدام المُعدِّل الأكثر تقييدًا، والذي لا يزال يسمح لك بتنفيذ منطق عملك، تبدأ هذه المُعدِّلات من الأكثر تقييدًا إلى الأقل تقييدًا:

  • private:

هذا هو معدّل الوصول الأكثر تقييدًا والأكثر استخدامًا، إذا كنت تستخدم المُعدِّل “private” مع سمة أو طريقة، فلا يمكن الوصول إليه إلا من داخل الـ (Class)، لا يمكن لـ (Classes) الفرعية، أو أي (Class) أخر داخل نفس الحزمة (package) أو الحزم المختلفة الوصول إلى هذه السمة أو الطريقة.

كقاعدة عامة، يجب أن يكون المُعدِّل “private” هو خيارك الافتراضي لجميع السمات والطرق الداخلية التي لا ينبغي استدعاؤها من (Classes) الخارجية، وقد تحتاج إلى إجراء استثناء لهذه القاعدة عند استخدام الوراثة، وتحتاج بعض (Class) الفرعية إلى وصول مباشر إلى سمة أو طريقة داخلية، في هذه الحالة، يجب عليك استخدام المُعدِّل “protected” بدلاً من “private”.

  • عدم وضع مُعدل:

في لغة (java)، عندما لا تضع أي مُعدِّل وصول للسمة أو الطريقة، يمكنك الوصول إليها داخل الـ (Class)، ومن جميع الـ (Class) داخل الحزمة نفسها.

  • protected:

يمكن الوصول إلى السمات والطرق التي تحتوي على مُعدِّل الوصول “protected” داخل (Class) الخاص بك، ومن خلال جميع (Classes) داخل نفس الحزمة، ومن خلال جميع (Class) الفرعية داخل نفس الحزم أو الحزم الأخرى، يتم استخدام المُعدِّل “protected” في الغالب للطرق الداخلية التي تحتاج إلى استدعاؤها بواسطة (Classes) الفرعية، يمكنك أيضًا استخدامه للسماح ل (Classes) الفرعية بالوصول إلى السمات الداخلية مباشرةً.

  • public:

هذا هو مُعدِّل الوصول الأقل تقييدًا، حيث يمكن الوصول إلى الطرق والسمات التي تستخدم المُعدِّل “public” داخل (class) الحالي ومن خلال جميع (class) الأخرى، تصبح الطرق والسمات الـ “public” جزءًا من واجهة برمجة التطبيقات العامة (API) ل (class) وأي مكون تقوم بتضمينها فيه، و “public” ليست فكرة جيدة أبدًا لأي سمة، إذ يجب أن تفكر مليًا قبل استخدام هذا المعدل في الطرق.

إذا كانت الطرق متاحة كـ “public”، فستحتاج إلى التأكد من أنها موثّقة جيدًا، وأنها تتعامل مع أي قيم إدخال بصرامة، ضع في اعتبارك أيضًا أنه سيتم استخدام هذه الطريقة عاجلاً أم آجلاً بواسطة كجزء من التطبيق الخاص بك مما سيجعل من الصعب تغييرها أو إزالتها، بشكل عام، يجب أن تكون واجهة برمجة التطبيقات العامة الخاصة بك بسيطة قدر الإمكان، وأن تتضمن فقط الطرق التي يُقصد استخدامها بواسطة أجزاء أخرى من التطبيق، أو بواسطة عملاء الخارجيين.

المصدر: Access Modifiers in JavaOOP Concept for Beginners: What is EncapsulationJava - Encapsulation?What is Encapsulationc++ like protected in java


شارك المقالة: