متغير مثيل

في البرمجة الكائنية التوجه القائمة على الأصناف ، يُعرف متغير النسخة بأنه متغير مُعرَّف في صنف (أي متغير عضو )، ولكل كائن مُنشأ من هذا الصنف نسخة منفصلة منه . [ 1 ] [ 2 ] يتشابه متغير النسخة مع متغير الصنف ، [ 3 ] ولكنه غير ثابت . في لغتي C++ أو Java، يُصرَّح عن متغير النسخة داخل الصنف ولكن خارج الدوال البانية أو الدوال أو الكتل البرمجية . تُنشأ متغيرات النسخة عند إنشاء كائن، وتكون متاحة لجميع الدوال البانية والدوال والكتل البرمجية في الصنف. ويمكن إضافة مُعدِّلات الوصول إلى متغير النسخة.

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

[ 5 ] يبقى كل متغير من متغيرات النسخة في الذاكرة طوال فترة حياة الكائن الذي يملكه.

المتغيرات الخاصة بالكائن هي خصائصه. لكل نسخة من فئة ما نسختها الخاصة من هذه المتغيرات، حتى لو كانت قيمتها متطابقة. يمكن لنسخة واحدة من الفئة تغيير قيم متغيراتها الخاصة دون التأثير على النسخ الأخرى. قد تحتوي الفئة على متغيرات خاصة بها ومتغيرات خاصة بها .

يمكن استخدام متغيرات النسخة بواسطة جميع توابع النسخة الخاصة بالكائن، ولكن لا يجوز استخدامها بواسطة توابع الفئة. كما يمكن تغيير متغير النسخة مباشرةً، شريطة تحديد قيود الوصول . [ 6 ]

أمثلة

لغة سي++

class Request { private : static inline int count1 = 0 ; int number ; public : // الدالة البانية تُعدّل متغير النسخة "this->number" Request () : number { count1 } { ++ count1 ; // تُعدّل متغير الفئة "Request::count1" }};

في هذا المثال بلغة C++ ، يُعدّ متغير النسخة Request::numberنسخةً من متغير الفئة،Request::count1 حيث تُسند لكل نسخة مُنشأة قيمة تسلسلية count1قبل زيادتها . وبما أن numberمتغير النسخة هو متغير خاص بالنسخة، فإن كل Requestكائن يحتوي على قيمته المميزة؛ في المقابل، لا يوجد سوى كائن واحد Request::count1متاح لجميع نسخ الفئة بنفس القيمة.

جافا

class MyInteger { private int x = 0 ;public MyInteger () {}public MyInteger ( int x ) { this.x = x ; } public void set ( int x ) { this.x = x ; }public int get () { return this . x ; } }public class Main { public static void main ( String [] args ) { MyInteger myInt1 = new MyInteger (); MyInteger myInt2 = new MyInteger (); // بما أن set() دالة خاصة بالمثيل، فيمكنها أيضًا الوصول إلى المتغير myInt2 . set ( - 10 ); assert myInt1 . get () == 10 ; assert myInt2 . get () == - 10 ; } }

في مثال جافا هذا ، يمكننا أن نرى كيف يمكن تعديل متغيرات النسخة في نسخة واحدة دون التأثير على نسخة أخرى.

بايثون

class Dog : def __init__ ( self , breed : str ) -> None : self.breed = breed # متغير مثيل# dog_1 هو كائن # وهو أيضًا نسخة من فئة Dog ، dog_1 : Dog = Dog ( "Border Collie" )

في كود بايثون أعلاه ، يتم إنشاء متغير المثيل عند تحليل وسيطة إلى المثيل، مع تحديد وسيطة موضع السلالة.

مراجع

  1. "متغيرات النسخ في برمجة C++" . دريميندو . تم الاسترجاع في 2024-03-08 .
  2. "متغيرات جافا" . جيكس فور جيكس . 2017-02-06 . تم الاطلاع عليه بتاريخ 2024-03-08 .
  3. "دليل جافا التعليمي، المتغيرات" . docs.oracle.com . أوراكل. مؤرشف من الأصل بتاريخ 23 أكتوبر 2014. تم الاطلاع عليه بتاريخ 23 أكتوبر 2014 .
  4. "الفرق بين متغير النسخة ومتغير الفئة" . GeeksforGeeks . 2021-04-26 . تم الاطلاع عليه بتاريخ 2024-03-08 .
  5. "دروس جافا التعليمية، فهم أعضاء الفئة" . docs.oracle.com . أوراكل. مؤرشف من الأصل في 11 أكتوبر 2014. تم الاطلاع عليه في 23 أكتوبر 2014 .
  6. ماتوسزيك، ديفيد. "ثابت" . cis.upenn.edu . جامعة بنسلفانيا. مؤرشف من الأصل في 23 أكتوبر 2014. تم الاسترجاع في 23 أكتوبر 2014 .