واجهة غير قابلة للتغيير

في البرمجة كائنية التوجه ، تُعدّ " الواجهة غير القابلة للتغيير " نمطًا لتصميم كائن غير قابل للتغيير . [ 1 ] يتضمن نمط الواجهة غير القابلة للتغيير تعريف نوع لا يوفر أي دوال لتغيير الحالة. وبالتالي، لا يُنظر إلى الكائنات التي يُشير إليها هذا النوع على أنها ذات حالة قابلة للتغيير، وتبدو غير قابلة للتغيير.

مثال

جافا

لنفترض وجود فئة جافا تمثل نقطة ثنائية الأبعاد.

public class Point2D { private int x ; private int y ; public Point2D ( int x , int y ) { this . x = x ; this . y = y ; }public int getX () { return this . x ; } public int getY () { return this . y ; }public void setX ( int newX ) { this . x = newX ; } public void setY ( int newY ) { this . y = newY ; } }

الفئة Point2D قابلة للتغيير: يمكن تغيير حالتها بعد الإنشاء، عن طريق استدعاء أي من طرق التعيين ( setX()أو setY()).

يمكن تعريف واجهة غير قابلة للتغيير لـ Point2D على النحو التالي:

واجهة عامة ImmutablePoint2D { دالة عامة getX (); دالة عامة getY (); }

بجعل Point2D يُطبّق واجهة ImmutablePoint2D، أصبح بإمكان كود العميل الآن الإشارة إلى نوع لا يحتوي على دوال قابلة للتغيير، وبالتالي يبدو غير قابل للتغيير. ويتضح ذلك في المثال التالي:

ImmutablePoint2D point = new Point2D ( 0 , 0 ); // يتم الإشارة إلى نسخة ملموسة من Point2D بواسطة الواجهة غير القابلة للتغيير int x = point.getX ( ); // استدعاء دالة صحيح int y = point.setX ( 42 ) ; // خطأ في الترجمة: الدالة setX ( ) غير موجودة في النوع ImmutablePoint2D

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

المزايا

  • يوضح بوضوح الغرض الثابت للنوع.
  • على عكس الأنواع التي تطبق نمط Immutable Wrapper ، لا تحتاج إلى "إلغاء" طرق التغيير عن طريق إصدار تعليمات " لا عملية "، أو طرح استثناء وقت التشغيل عند استدعاء طريقة تغيير.

العيوب

  • من الممكن تحويل الحالات المشار إليها بواسطة نوع الواجهة غير القابل للتغيير إلى نوعها الملموس القابل للتغيير، وتغيير حالتها. على سبيل المثال:
    public void mutate ( ImmutablePoint2D point ) { (( Point2D ) point ). setX ( 42 ); // هذا الاستدعاء صحيح، لأن النوع قد تم تحويله إلى فئة Point2D القابلة للتغيير }
  • يجب على الفئات الملموسة أن تُعلن صراحةً أنها تُنفذ الواجهة غير القابلة للتغيير. قد لا يكون هذا ممكنًا إذا كانت الفئة الملموسة "تنتمي" إلى كود برمجي تابع لجهة خارجية، على سبيل المثال، إذا كانت موجودة داخل مكتبة.
  • الكائن ليس ثابتًا تمامًا، وبالتالي فهو غير مناسب للاستخدام في هياكل البيانات التي تعتمد على الثبات مثل خرائط التجزئة. ويمكن تعديل الكائن في الوقت نفسه من جانب البيانات القابلة للتعديل.
  • قد لا تكون بعض تحسينات المُصرّف المتاحة للكائنات غير القابلة للتغيير متاحة للكائنات القابلة للتغيير.

البدائل

يُعد نمط الغلاف غير القابل للتغيير بديلاً لنمط الواجهة غير القابلة للتغيير .

تتميز هياكل البيانات الثابتة بأنها غير قابلة للتغيير بشكل فعال مع السماح بعرضها بشكل معدل.

مراجع