3.3 · البرمجة الكائنية (الفئات) في WLangage

المستوى 3 · المتقدم: التعمق في WLangage

3.3البرمجة الكائنية (الفئات) في WLangage

الهدف: فهم الفئة والكائن والتغليف والوراثة، ثم تقرير متى تمنح البرمجة الكائنية الوضوح بشكل عملي.
الوقت المقدّر: 12 دقيقة · قراءة ذاتية · إذا كان لديك 5 دقائق فقط: اقرأ «الأساسي في 30 ثانية» + المخطط.

الأساسي في 30 ثانية

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

حالة مصغّرة متسلسلة — ياسين ينمذج العملاء والأرصدة المستحقة

يدير ياسين عملاء الشركة الصغيرة لتجارة المعدات الكهربائية في وهران: أفراد وشركات ومُثبّتون. حتى الآن كان يتنقّل بمتغيرات مبعثرة وشروط في كل مكان لحساب رصيد مستحق والتحقق من الملاءة. ينشئ فئة Client بمنشئ، وعضو للرصيد المستحق، وطريقة EstSolvable. ثم يجعل ClientEntreprise يرث Client لإضافة سقف تفاوضي، دون تكرار الأساس. ولم تعد الأعضاء الحساسة تُعدَّل مباشرة: كل شيء يمر عبر EnregistreFacture وEstSolvable. لكن ياسين يبقي إجراءات الحساب البسيطة خارج الفئات: ويسجّل المبدأ: البرمجة الكائنية حيث توضّح، لا بشكل منهجي.

حالة مستقلة لهذا القسم: تعود في الدرس والمخطط والسيناريو وتحدي 48 ساعة في القسم 3.3.

1. الفئة، الكائن، الأعضاء والطرق

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

2. التغليف، الوراثة، تعدد الأشكال

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

3. كائنية مفيدة، لا إلزامية

تتألق البرمجة الكائنية في التطبيقات المعقدة، وقواعد الأعمال الغنية، والشيفرة المعدّة لإعادة الاستخدام، والعمل الجماعي. لكنها ليست إلزامية: تطبيق إدارة كلاسيكي يُطوَّر جيدًا جدًا إجرائيًا، بإجراءات منظّمة في مجموعات. والمبدأ هو العملية. يستخدم ياسين فئة عندما يحمل مفهوم فعليًا قواعد وحالة متماسكة — عميل برصيده المستحق — ويبقي إجراءات بسيطة للحسابات المعزولة.

خطأ شائع في الفهم: «البرمجة الكائنية إلزامية في WinDev؛ والفئة تحتوي بيانات فقط؛ والوراثة تُستخدم لنسخ شيفرة فئة في أخرى». لا، ثلاثة أخطاء. البرمجة الكائنية مفيدة لكن اختيارية: يكفي غالبًا نهج إجرائي جيد البنية في الإدارة. والفئة تحتوي بيانات ومعالجات، مع تغليف ومنشئ؛ أما البنية فلا تحمل إلا بيانات. وأخيرًا، الوراثة لا تنسخ: بل تخصّص أساسًا مشتركًا، وهو ما يجنّب التكرار بالضبط. يختار ياسين الكائنية حيث تمنح الوضوح.
الفئة والكائن والوراثة النموذج يحدّد البيانات والسلوكيات؛ والكائنات تنسخه. فئةنموذج وقواعد+كائننسخة ملموسة+وراثةتخصيص دون تكرار غلّف البيانات الحساسة خلف طرق.
النموذج يحدّد البيانات والسلوكيات؛ والكائنات تنسخه.
نص المخطط (SEO / قارئات الشاشة / الترجمة): 1) ياسين، مطوّر WinDev في شركة صغيرة لتجارة المعدات الكهربائية في وهران، ينمذج عملاء تطبيق إدارته بفئة Client: أعضاء للرمز والاسم والرصيد المستحق، ومنشئ للتهيئة، وطريقتا EnregistreFacture وEstSolvable. 2) يحمي الرصيد المستحق خلف هذه الطرق ويجعل ClientEntreprise يرث Client لإضافة سقف تفاوضي دون نسخ الأساس. 3) يُبقي في الإجراءات الحسابات المعزولة التي لا حالة لها، لأن الكائنية ليست إلزامًا. الدرس: الفئة توضّح مفهومًا يحمل قواعد وبيانات؛ ولا تحل محل كل ما تبقى.

🔎 مثال ملموس — 🔎 مثال ملموس — فئة Client تحمي رصيدها المستحق

يغلّف ياسين الرصيد المستحق والتحقق من الملاءة في الفئة:

Client est une classe
    m_sCode est une chaine
    m_sNom est une chaine
    m_nEncours est un monetaire

    PROCEDURE Constructeur(sCode est une chaine, sNom est une chaine)
        m_sCode = sCode
        m_sNom = sNom
        m_nEncours = 0
    FIN

    PROCEDURE EnregistreFacture(nMontant est un monetaire)
        m_nEncours = m_nEncours + nMontant
    FIN

    PROCEDURE EstSolvable(nPlafond est un monetaire) : booleen
        RENVOIE m_nEncours <= nPlafond
    FIN
FIN

cClient est un Client("CLI042", "Dupont Materiel Electrique")
cClient.EnregistreFacture(12500)
SI PAS cClient.EstSolvable(20000) ALORS
    Info("Encours depasse : relance commerciale")
FIN

القراءة: الرصيد المستحق لا يُعدّل إلا بـEnregistreFacture، ولا يُعدّل مباشرة أبدًا.

الدرس: قاعدة الملاءة تسافر مع البيانات التي تخصها.

مفردات القسم

فئة
نموذج يصف بيانات مفهوم ومعالجاته، وتُنشأ منه الكائنات.

مثال بسيط: فئة Client تصف الرمز والاسم والرصيد المستحق والطرق المرتبطة.

ما ليس كذلك: كائن ملموس مثل العميل Dupont.

رد فعل: مخطط مفهوم → الفئة.

كائن (نسخة)
فرد ملموس يُنشأ من فئة، بقيم أعضائه الخاصة.

مثال بسيط: cClient نسخة من Client للعميل Dupont Matériel Électrique.

ما ليس كذلك: نموذج Client الذي لا يملك قيمًا بعد.

رد فعل: فرد قابل للاستخدام → كائن.

تغليف
حماية بيانات كائن خلف طرق تضمن القواعد.

مثال بسيط: الرصيد المستحق يتغيّر فقط عبر EnregistreFacture.

ما ليس كذلك: عضو قابل للتعديل مباشرة من أي شاشة.

رد فعل: بيانات حساسة → تغليف.

وراثة
إنشاء فئة من أخرى باسترجاع أساسها وتخصيصه.

مثال بسيط: ClientEntreprise يرث Client ويضيف سقفًا تفاويضيًا.

ما ليس كذلك: نسخ كل شيفرة Client في فئة ثانية.

رد فعل: تخصيص دون تكرار → وراثة.

منشئ
طريقة تُستدعى تلقائيًا عند إنشاء كائن لتهيئته.

مثال بسيط: منشئ Client يحدّد الرمز والاسم ورصيدًا مستحقًا صفريًا.

ما ليس كذلك: كائن يُنشأ بأعضاء غير مهيّأة.

رد فعل: التهيئة عند الإنشاء → منشئ.

في التطبيق — عمليًا — إنشاء فئة واستخدامها

  1. أنشئ فئة تمثل مفهومًا تجاريًا (Client، Commande) بأعضائها وطرقها، كما يفعل ياسين.
  2. أضف منشئًا لتهيئة الكائن، واحمِ الأعضاء الحساسة بالتغليف.
  3. أنشئ كائنًا واستدعِ طرقه: البيانات والمعالجات تسافران معًا.
  4. إذا تقاسمت عدة أشكال أساسًا مشتركًا، استخدم الوراثة (ClientEntreprise) بدلًا من تكرار الشيفرة.
تعرف كيف تنشئ فئات لهيكلة الحالات المعقدة، مع إدراك أن الكائنية تبقى خيارًا عمليًا.

سيناريو خطوة بخطوة — نمذجة عميل كما يفعل ياسين (5 دقائق)

1) حدّد مفهومًا يحمل بيانات وقواعد معًا (عميل، طلب). 2) اسرد أعضاءه والطرق التي يجب أن تحميها. 3) اكتب المنشئ لضمان تهيئة صحيحة. 4) أنشئ كائنًا في شاشة واستدعِ طرقه. 5) إذا تقاسمت حالة مجاورة الأساس، اجعلها ترث بدلًا من نسخ الشيفرة.

احتفظ بهذا المعيار: الفئة تبرَّر عندما يستحق السلوك والقواعد أن يسافرا مع البيانات.

قالب للنسخ واللصق — بطاقة الكائنية عند ياسين

الفئة        : نموذج (بيانات + طرق + منشئ)
الكائن       : نسخة ملموسة بقيمها
التغليف      : حماية الأعضاء الحساسة عبر طرق
الوراثة      : تخصيص أساس مشترك دون تكرار
العملي       : كائنية إذا كانت القواعد غنية / أشكال / مكوّنات؛ وإلا إجرائي

عميل شركة

يجعل ياسين ClientEntreprise يرث Client لإضافة سقف تفاوضي.

رصيد مستحق غير متماسك

الرصيد المستحق لا يُعدّل إلا بـEnregistreFacture: القاعدة مركزية.

حساب معزول

يبقي ياسين CalculeMontantTTC إجراءً: لا بيانات حالة لتغليفها.

منشئ منسي

كائن يُنشأ دون تهيئة ينتج رصيدًا مستحقًا عبثيًا: فيضيف ياسين منشئًا.

✓ ممارسات جيدة

  • نمذج فئة عندما تصاحب قواعد البيانات.
  • احمِ الأعضاء الحساسة بـالتغليف.
  • استخدم الوراثة للتخصيص، لا للنسخ.

✗ أخطاء شائعة

  • إنشاء فئة تحمل بيانات فقط.
  • ترك رصيد مستحق أو حالة يُعدَّل مباشرة.
  • محاولة تحويل كل شيء إلى كائنات كمبدأ.

النقاط الأساسية

  • الفئة = نموذج، الكائن = نسخة، الأعضاء = بيانات، الطرق = معالجات.
  • المنشئ يهيّئ الكائن عند إنشائه.
  • التغليف والوراثة يجنّبان التناقضات والتكرار.
  • الكائنية مفيدة لكن غير إلزامية: العملي أولًا.

تحدي 48 ساعة — طبّقه غدًا

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

قائمة الخروج من القسم
  • أميّز الفئة والكائن والأعضاء والطرق والمنشئ.
  • أفهم التغليف والوراثة وتعدد الأشكال.
  • أعرف كيف أقرّر متى تمنح الكائنية الوضوح.
تقييم ذاتي 1-5: هل أنمذج مفهومًا بقواعده؟تقييم ذاتي 1-5: هل أتجنّب الكائنية الزخرفية؟

أسئلة شائعة

هل يجب استخدام الكائنية في مشروع WinDev إداري كلاسيكي؟

ليس بالضرورة: تطبيق الإدارة يُطوَّر جيدًا جدًا إجرائيًا منظّمًا، بإجراءات منظمة في مجموعات. تصبح الكائنية مثيرة للاهتمام عندما يحمل مفهوم قواعد غنية، أو عندما يلزم التغليف، أو عندما تتقاسم عدة أشكال أساسًا، أو عندما يجب إعادة استخدام الشيفرة كمكوّن. إنها أداة، لا إلزام.

ما الفرق بين البنية والفئة؟

البنية تجمع بيانات فقط، دون سلوك أو حماية: مثالية لنقل عنوان أو سطر مستورد. والفئة تجمع بيانات ومعالجات، مع منشئ وتغليف ووراثة: وتبرَّر عندما يوجد سلوك وقواعد يجب ضمانها. عند الشك، ابدأ بالبنية إذا كنت تحتاج فقط إلى تجميع معلومات.

تحقّق من فهمك

ماذا تجمع الفئة في WLangage؟

موارد إضافية (اختياري، للتعمّق أكثر)

اختبار المستوى 3أسئلة جديدة وأصعب للتحقق من مكتسباتك