ماهو الكونستركتر ؟.. Constructor.. وأنواعة

ما هو الكونستركتر

إن CONSTRUCTOR هو طريقة خاصة لفئة أو لبنية معين في

البرمجة

وتكون موجهة للكائنات التي تعمل على تهيئة كائن تم إنشاؤه حديثاً، فعندما يتم إنشاء كائن يتم استدعاء الكونستركتر بشكل تلقائي، وإنه شبيه بطريقة المثيل التي عادة يكون لها نفس اسم الفئة، وتستخدم لتعيين قيم أعضاء الكائن، فإما أن تكون

القيم

الافتراضية أو القيم

المعرفة

من قبل المستخدم، وإن الكونستركتر لا يعتبر طريقة مناسبة لأنه لا يحتوي على نوع الإرجاع، فبدلاً أن يقوم بتنفيذ مهمة عن طريق تنفيذ تعليمات برمجية محددة، فيقوم الكونستركتر بتهيئة الكائن، ولا يمكن أن يكون ثابتاً ولا مجرداً ولا متزامناً.[1]

وإن تعريف الكونستركتر يتجلى في أنه هو نوع خاص من الوظائف بعيد عن الإرجاع، ويجب أن يكون اسمه هو نفس اسم الفئة، يتم

تحديد

طريقة داخل الفئة، ومن الممكن تعريفه أيضاً وهو داخل الفئة، ويتم استدعاؤه بشكل تلقائي عندما نقوم بإنشاء كائن من فئة، ولا يمكننا استدعاؤه بشكل صريح ومباشر.

ما هو الكونستركتر في البايثون

إن الكونستركتر هو طريقة يتم استدعاؤها عندما يتم إنشاء كائن، ويتم تعريف هذه الطريقة في فئة محددة ومن الممكن أن تستخدم لتهيئة المتغيرات الأساسية، فإذا قام المستخدم بإنشاء أربعة كائنات فسيتم استدعاء الكونستركتر الخاص بالفئة أربع مرات، حيث أن كل فئة لها كونستركتر خاص بها، وإن في كل مرة يتم فيها إنشاء كائن يتم فيه استدعاء طريقة وهذا الأسلوب يعرف باسم الكونستركتر، ويتم إنشاؤه باستخدام التابع init ويكتب فيه الكلمة الأساسية الذاتية التي تشير إلى نفسها أي “الكائن”، فالعملية تكون كالشكل التالي:

ماهو الكونستركتر ؟.. Constructor.. وأنواعة

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

ماهو الكونستركتر ؟.. Constructor.. وأنواعة

شرح constructors في c++

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

ويجدر التنويه أن أي كلاس تقوم بتعريفه يكون لديه كونستركتور افتراضي خاص به حتى لو لم تقم بتعريفه، حيث أنه ليس من الممكن أبداً أن يتم إنشاء أي كائن من الكلاس إلا عن طريق الكونستركتور التابع لهذا الكلاس، لهذا فاعلم أن مترجم لغة c++ سينشئ كونستركتور افتراضي فارغ في حال عدم تعريف الكلاس بكونستركتور خاص به، وإن هناك بعض البنود الهامة المتعلقة بالكونستركتور في لغة c++ تتجلى في:

  • أن كل كلاس في لغة c++ تحتوي على كونستركتور خاص بها، حيث أن كل كلاس له كونستركتور واحد على الأقل، وإن لم يتم تعريفه بكونستركتور خاص فمترجم هذه اللغة سيقوم بإعطاء الكلاس كونستركتور افتراضي.
  • في كل مرة يُنشأ كائن جديد من كلاس يجب أن يتم استدعاء كونستركتور من الكلاس حتى يتم إنشاء الكائن.
  • إن هناك قاعدة أساسية يجب أن

    تتبع

    بإنشاء كائن وهو أنه يجب أن يحمل الكونستركتور نفس اسم الكلاس وأن يكون نوعه public .
  • في حال تعريف كونستركتور فإن مترجم لغة c++ لن يقم بإنشاء واحد افتراضي.
  • يمكن للمبرمج أن يُعرِّف أكثر من كونستركتور، ومن الممكن أيضاً أن يتم إنشاء واحد فارغ، ويستخدم الكونستركتور الفارغ في حال عدم إعطاء قيم أولية محددة للخصائص عندما يتم إنشاء الكائن.

ويتم استدعاء الكونستركتور في لغة البرمجة c++ بتمرير قيمة لكل باراميتر يتواجد فيه عن طريق وضع قوسين بعد اسم الكائن ويتم تمرير القيم فيه.

أنواع ال constructor

إن هناك عدة أنواع للكونستركتور  في لغة البرمجة c++تتجلى في:

  1. Default Constructor وهو المنشئ الافتراضي
  2. Parameterized Constructor وهو المنشئ ذو معلمات
  3. Copy Constructor وهو المنشئ النسخ
  4. Static Constructor وهو منشئ ثابت
  5. Private Constructor  وهو منشئ خاص[3]

وسنتطرق إلى شرح كل نوع من هذه الأنواع على حدة وتتجلى في:


-المُنشئ الافتراضي

حيث أنه لا يأخذ أي معلمة وينشئ C # compiler مُنشأً افتراضيًا  في حال عدم تحديد أي مُنشئ افتراضي داخل الفئة، يمكننا أيضًا تحديد المُنشئ الافتراضي عن طريق كتابة بعض الرموز، وسنوضح هذا النوع بالمثال التالي:

ماهو الكونستركتر ؟.. Constructor.. وأنواعة

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


-المنشئ ذو معلمات

Parameterized Constructor حيث أنه تم إنشاؤه عن طريق المطور ويأخذ هذا النوع من الكونستركتور معلمة واحدة على الأقل.

ماهو الكونستركتر ؟.. Constructor.. وأنواعة

وهنا نجد في هذا المثال أنه تم تعريف فئة واحدة باسم Adminclass و كونستركتور ذو معلمتين، وقد تم استخدام هذا النوع من المنشئ أو الكونستركتور لتعيين قيم للخصائص الخاصة للفئة، ويتم اتصال هذا المنشئ أو الكونستركتور بشكل تلقائي عندا يتم إنشاء كائن من هذه الفئة، فنستنتج أن هذا النوع من الكونستركتور يتم إنشاؤه بواسطة المطور ولا يعمل المترجم بإنشاء أي كونستركتور ذو معلمات، ويأخذ هذا النوع معلمة واحدة على الأقل، ويتم استدعاؤه عندما نقوم بإنشاء كائن من الفئة.[4]


-المنشئ الثابت

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


-المنشئ الخاص

Private Constructor يستخدم لتقييد فئة ليتم إنشاء مثيل لها ووراثتها، وإن المنشئ الخاص يستخدم عندما يحتوي الفصل على أعضاء ثابتين فقط.[4]


أما أنواع الكونستركتور في لغة الجافا تتجلى في :


  • المنشئ الافتراضي Default constructor

    حيث أن برنامج جافا compiler يقوم بإدراج منشئ افتراضي في التعليمات البرمجية الخاصة بشكل افتراضي، ولن يتم إيجاده في الكود المصدري لأنه سيُدرج في الكود أثناء التجميع ويوجد في ملف الكلاس.

  • منشئ no-arg constructor

    ويكون هذا المنشئ بدون وسيطات، ومن الممكن أن يحتوي

    الجسم

    على أي رمز عكس المنشئ الافتراضي الذي يكون جسم المنشئ فارغاً.[5]

  • منشئ ذو معلمات Parameterized constructor

    ويكون بمعرف واسم معلمتين، فعند إنشاء الكائنين obj1 و obj2 يجب أن تقوم بتمرير وسيطين حتى يتم استدعاء هذا المُنشئ بعد إنشاء obj1 و obj2.