متغير الفئة
في البرمجة الكائنية التوجه القائمة على الأصناف ، يُعرَّف متغير الصنف بأنه متغير مُعرَّف في صنف توجد منه نسخة واحدة فقط، بغض النظر عن عدد مثيلات هذا الصنف. [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ]
متغير الصنف ليس متغيرًا خاصًا بالمثيل . إنه نوع خاص من سمات الصنف (أو خصائصه، أو حقوله ، أو عناصر بياناته). وينطبق التمييز نفسه بين عناصر المثيل وعناصر الصنف على الدوال ("دوال الأعضاء") أيضًا؛ فقد يحتوي الصنف على دوال خاصة بالمثيل ودوال خاصة بالصنف .
المتغيرات العضوية الثابتة والدوال العضوية الثابتة
في بعض لغات البرمجة، تُحدد متغيرات الفئات وأساليبها إما بشكل ثابت، وليس عبر التوزيع الديناميكي ، أو تُخصص ذاكرتها بشكل ثابت أثناء الترجمة (مرة واحدة للفئة بأكملها، كمتغيرات ثابتة )، وليس بشكل ديناميكي أثناء التشغيل (عند كل إنشاء لكائن). أما في حالات أخرى، فيكون أحد هذين الخيارين أو كلاهما ديناميكيًا. على سبيل المثال، إذا كان من الممكن تعريف الفئات ديناميكيًا (أثناء التشغيل)، تُخصص متغيرات هذه الفئات ديناميكيًا عند تعريف الفئة، وفي بعض اللغات تُوزع أساليب الفئات ديناميكيًا أيضًا.
لذا، في بعض اللغات، يُستخدم مصطلحا "متغير عضو ثابت" أو "دالة عضو ثابتة " كمرادفين أو بدلاً من "متغير فئة" أو "دالة فئة"، لكنهما ليسا مترادفين بين اللغات. يشيع استخدام هذين المصطلحين في لغات جافا وسي شارب [5 ] وسي ++ ، حيث تُعلن متغيرات الفئة وأساليبها باستخدام staticالكلمة المفتاحية ، ويُشار إليها بمتغيرات أعضاء ثابتة أو دوال أعضاء ثابتة .
أمثلة
لغة سي++
class Order { private : inline static int nextId = 0 ; int id ; public : Order () : id { nextId ++ } {} };Order::nextIdفي هذا المثال بلغة C++، يتم زيادة قيمة متغير الفئة في كل استدعاء للدالة البانية ، بحيث Order::nextIdيحتوي دائمًا على عدد Orderالكائنات التي تم إنشاؤها، ويتم Orderإعطاء كل كائن جديد numberقيمةً بالتسلسل. وبما nextIdأن متغير الفئة، فلا يوجد سوى كائن واحد Order::nextId؛ في المقابل، يحتوي كل Orderكائن على حقله الخاص والمميز id.
لاحظ أيضًا أن المتغير Order::nextIdيتم تهيئته مرة واحدة فقط (كما هو الحال في inline static، يتم تهيئته داخل الفئة؛ قبل C++17 ، كان يتم تهيئته فقط staticوكان يجب تهيئته خارج الفئة).
لا يمكن للفئة التي تحتوي على staticأعضاء هي نسخ من نفسها أن تُعلن عن الحقول إلا constأولاً، بينما يجب أن تكون تعريفات constexpr خارج الفئة. محاولة تعريف constexprنسخة من فئة كعضو ثابت في نفسها تفشل، إذ لا يمكن تعريف أي كائن كنوع غير مكتمل، وبالتالي تظل الفئة غير مكتملة حتى يتم إغلاقها. [ 6 ]
بنية اللون { uint8_t r ; uint8_t g ; uint8_t b ;constexpr Color ( uint8_t r , uint8_t g , uint8_t b ) noexcept : r { r }, g { g }, b { b } {}constexpr ~ Color () = default ;static const Color BLACK ; static const Color RED ; static const Color GREEN ; static const Color YELLOW ; static const Color BLUE ; static const Color MAGENTA ; static const Color CYAN ; static const Color WHITE ; };inline constexpr Color Color :: BLACK = Color ( 0 , 0 , 0 ); inline constexpr Color Color :: RED = Color ( 255 , 0 , 0 ); inline constexpr Color Color :: GREEN = Color ( 0 , 255 , 0 ); inline constexpr Color Color :: YELLOW = Color ( 255 , 255 , 0 ); inline constexpr Color Color :: BLUE = Color ( 0 , 0 , 255 ); inline constexpr Color Color :: MAGENTA = Color ( 255 , 0 , 255 ); inline constexpr Color Color :: CYAN = Color ( 0 , 255 , 255 ); inline constexpr Color Color :: WHITE = Color ( 255 , 255 , 255 );بايثون
class Dog : vertebrate_group : str = "mammals" # متغير الفئةdog : Dog = Dog () print ( dog . vertebrate_group ) # الوصول إلى متغير الفئةفي كود بايثون المذكور أعلاه، لا يُقدّم الكثير من المعلومات، إذ يوجد فقط متغير فئة يُشير إلى Dogمجموعة الفقاريات التي ينتمي إليها الكلب، وهي الثدييات. أما في متغيرات النسخة، فيمكن تخصيص الكائن (في هذه الحالة، dog) بإضافة متغير نسخة واحد أو أكثر إلى Dogالفئة.
يمكن أيضًا تحديد نوع هذا باستخدام ClassVar.
من typing استورد ClassVarclass Dog : vertebrate_group : ClassVar [ str ] = "mammals"ملحوظات
- ↑ "دليل جافا التعليمي، المتغيرات" . تم الاطلاع عليه بتاريخ 21-10-2010 .
- ↑ "دليل جافا التعليمي، فهم أعضاء المثيل والفئة" . تم الاطلاع عليه بتاريخ 21-10-2010 .
- ↑ "مرجع لغة بايثون، العبارات المركبة" . تم الاطلاع عليه بتاريخ 21-10-2010 .
- ↑ "مرجع وقت تشغيل Objective-C" . مطورو Apple . تم الاطلاع عليه في 1 أبريل 2018 .
- 1 2 "متغيرات الفئة في لغة C#" . Syntaxdb . تم الاطلاع عليه في 1 أبريل 2018 .
- ↑ WG21 (23 أبريل 2026). "مسودة معيار C++ - التصريحات والتعريفات" . eel.is. WG21.
في تعريف الكائن، يجب ألا يكون نوع هذا الكائن نوعًا غير مكتمل ([basic.types.general])، أو نوع فئة مجردة ([class.abstract])، أو مصفوفة (ربما متعددة الأبعاد) منه.
{{cite web}}: صيانة CS1: الأسماء الرقمية: قائمة المؤلفين ( رابط )
- البرمجة الكائنية التوجه
- متغير (علوم الحاسوب)
