السلوكات

📄 الأصل: implementations.nfth

📦 تحميل الملف: ⬇ تحميل

🔗 عرض الملف:

	
		--- SPDX-License-Identifier: Apache-2.0
--- Copyright © The Naftah Project Authors

---*
يشرح هذا القسم كيفية تعريف المتغيرات والثوابت في لغة نفطه، مع التركيز على بناء الكائنات (Objects) التي تحتوي على حقول متعددة من أنواع مختلفة، سواء كانت بسيطة أو مركبة.

كما يوضّح القسم مفهوم السلوك (سلوك)، وهو الآلية المستخدمة لإضافة الدوال والمنطق إلى كائن مُعرَّف مسبقًا، بما يشمل:

- دوال القراءة (Getters)

- دوال التعديل (Setters)

- منطق الأعمال (Business Logic)

- دوال الوصف والطباعة

يبيّن هذا القسم أيضًا:

- كيفية استخدام هذا للوصول إلى حقول الكائن

- الفصل بين تعريف البيانات و تعريف السلوك

- التعامل مع كائنات مترابطة (Nested / Referenced Objects)

- كتابة منطق يعتمد على حالة الكائن الداخلية

يهدف هذا الجزء إلى تمكينك من بناء نماذج بيانات واضحة وقابلة للتوسعة، مع منطق منظم،
  و البرمجة الكائنية الحديثة.
*---


--- تعريف متغير 'شخص' ككائن يحتوي حقول الاسم، العمر، حالة الزواج
متغير شخص تعيين {
  ثابت الاسم تعيين "نورالدين",
  ثابت العمر تعيين 72,
  متغير متزوج تعيين صحيح,
  متغير متوفي تعيين خطأ,
  متغير سعيد تعيين صحيح
}

سلوك شخص {

  --- getters (دوال قراءة)

  دالة الاسم() {
    هذا:الاسم
  }

  دالة العمر() {
    ارجع هذا:العمر
  }

  دالة هل_متزوج() {
    هذا:متزوج
  }

  دالة هل_متوفي() {
    ارجع هذا:متوفي
  }

  دالة هل_سعيد() {
    هذا:سعيد
  }

  --- setters (دوال تعديل)

  دالة إجعل_متزوج(قيمة: منطقي) {
    إذا هذا:متوفي إذن
    {
      ارجع خطأ
    }
    غير_ذلك
    {
          هذا:متزوج تعيين قيمة
          ارجع صحيح
    }
  }

  دالة إجعل_سعيد(قيمة: منطقي) {
    إذا هذا:متوفي إذن
      {
      هذا:سعيد تعيين خطأ
      }
    غير_ذلك
      {
      هذا:سعيد تعيين قيمة
      }
  }

  دالة توفي() {
    هذا:متوفي تعيين صحيح
    هذا:سعيد تعيين خطأ
    هذا:متزوج تعيين خطأ
  }

  --- منطق إضافي

  دالة هل_حي() {
    ارجع ليس هذا:متوفي
  }

  دالة وصف() {
      "الإسم: " + هذا:الاسم
    + "\n العمر: " + هذا:العمر
    + "\n متزوج: " + هذا:متزوج
    + "\n متوفي: " + هذا:متوفي
    + "\n سعيد: " + هذا:سعيد
  }

  --- طباعة

  دالة إطبع() {
    إطبع(هذا::وصف())
  }
}

--- تعريف متغير 'عنوان' يحتوي الشارع، المدينة، والرمز البريدي
متغير عنوان تعيين {
  متغير الشارع تعيين "شارع البيئة",
  متغير المدينة تعيين "توزر",
  متغير الرمز_البريدي تعيين 2200
}

سلوك عنوان {

  --- getters (دوال قراءة)

  دالة الشارع() {
    هذا:الشارع
  }

  دالة المدينة() {
    هذا:المدينة
  }

  دالة الرمز_البريدي() {
    هذا:الرمز_البريدي
  }

  --- setters (دوال تعديل)

  دالة إجعل_الشارع(قيمة: تسلسل_رموز) {
    هذا:الشارع تعيين قيمة
  }

  دالة إجعل_المدينة(قيمة: تسلسل_رموز) {
    هذا:المدينة تعيين قيمة
  }

  دالة إجعل_الرمز_البريدي(قيمة: أي_عدد) {
    هذا:الرمز_البريدي تعيين قيمة
  }

  --- منطق

  دالة وصف() {
      "الشارع: " + هذا:الشارع
    + "\nالمدينة: " + هذا:المدينة
    + "\nالرمز البريدي: " + هذا:الرمز_البريدي
  }

  دالة إطبع() {
    إطبع(هذا::وصف())
  }
}

--- تعريف متغير 'مدينة' يحتوي الاسم، عدد السكان، ومرجع إلى العنوان
متغير مدينة تعيين {
  متغير الاسم تعيين "توزر",
  متغير السكان تعيين 37000,
  متغير العنوان تعيين عنوان
}

سلوك مدينة {

  --- getters (دوال قراءة)

  دالة الاسم() {
    هذا:الاسم
  }

  دالة السكان() {
    هذا:السكان
  }

  دالة العنوان() {
    هذا:العنوان
  }

  --- setters (دوال تعديل)

  دالة إجعل_الاسم(قيمة: تسلسل_رموز) {
    هذا:الاسم تعيين قيمة
  }

  دالة إجعل_السكان(قيمة: أي_عدد) {
    هذا:السكان تعيين قيمة
  }

  دالة إجعل_العنوان(قيمة: كائن) {
    هذا:العنوان تعيين قيمة
  }

  --- منطق

  دالة زد_السكان(قيمة: أي_عدد) {
    هذا:السكان تعيين هذا:السكان + قيمة
  }

  دالة هل_كبيرة() {
    هذا:السكان > 100000
  }

  دالة وصف() {
      "اسم المدينة: " + هذا:الاسم
    + "\nعدد السكان: " + هذا:السكان
    + "\nالعنوان:\n" + هذا:العنوان
  }

  دالة إطبع() {
    إطبع(هذا::وصف())
  }
}

--- تعريف متغير 'بلدة' يحتوي الاسم، مرجع إلى المدينة، وعدد الأحياء
متغير بلدة تعيين {
  متغير الاسم تعيين "نفطة",
  متغير المدينة تعيين مدينة,
  متغير عدد_الأحياء تعيين 5
}

سلوك بلدة {

  --- getters (دوال قراءة)

  دالة الاسم() {
    هذا:الاسم
  }

  دالة المدينة() {
    هذا:المدينة
  }

  دالة عدد_الأحياء() {
    هذا:عدد_الأحياء
  }

  --- setters (دوال تعديل)

  دالة إجعل_الاسم(قيمة: تسلسل_رموز) {
    هذا:الاسم تعيين قيمة
  }

  دالة إجعل_المدينة(قيمة: كائن) {
    هذا:المدينة تعيين قيمة
  }

  دالة إجعل_عدد_الأحياء(قيمة: أي_عدد) {
    هذا:عدد_الأحياء تعيين قيمة
  }

  --- منطق

  دالة زد_حي() {
    هذا:عدد_الأحياء تعيين هذا:عدد_الأحياء + 1
  }

  دالة هل_كبيرة() {
    هذا:عدد_الأحياء > 10
  }

  دالة وصف() {
      "اسم البلدة: " + هذا:الاسم
    + "\nعدد الأحياء: " + هذا:عدد_الأحياء
    + "\nالمدينة:\n" + هذا:المدينة
  }

  دالة إطبع() {
    إطبع(هذا::وصف())
  }
}