فــُـصّـِــلـــَــــت

دليل سريع إلى البرمجة بنجم

المستوى: مبتدئ

هذا الموضوع هو مدخل إلى عالم نجم، ومن خلاله سيكتسب القارئ المبتدئ أساسيات البرمجة بلغة نجم، كما قد يعتبره القارئ المتقدم دليلا سريعا يعود إليه لينعش ذاكرته من حين لآخر.

لغة البرمجة نجم


نجم لغة برمجة كائنية، عالية المستوى ومتعددة الأغراض، تستعمل خصوصا للبرمجة الكائنية وتدعم كذلك نمط البرمجة التسلسلية القديم، كما إنها تُستَخدم كلغة عالية المستوى وتدعم كذلك التعليمات والأوامر المنخفضة المستوى.. تمتلك نجم مترجما متعدد المخارج، ويقبل إضافة مخارج جديدة إليه، مما يجعل نجم تستهدف آلات وأنظمة مختلفة، ويمكن تسخيرها للبرمجة المكتبية (برامج الحاسوب)، أو البرمجة الشبكية (مواقع الويب).

البدء مع نجم


إذا لم تكن قد استعملت نجم من قبل، فعليك بالتدوينة التالية: نجم، البدء السريع

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

بعض مصطلحات نجم


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

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


دليل نجم


في ما يلي دليل سريع إلى مختلف تراكيب نجم:

1. التعليقات


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

'أنا تعليق'

2. الفصائل


الفصيلة هي -كما أسلفنا- قالب يحدد هيكل مجموعة كائنات تتشارك نفس الخصائص والوظائف ويتم تعريفها كما يلي:

فصيلة عربة   'تعريف فصيلة جديدة اسمها عربة'
    'هنا محتوى الفصيلة...' 
تم   'يعني نهاية الفصيلة'

3. الإضمام


يمكن في نجم تعريف الفصائل كلّها في ملف واحد، كما يمكن تفريقها على ملفات مختلفة (ويُنصح تعريف كل فصيلة في ملف خاص بها يحمل اسمها وذلك حفاظا على مقروئية المصدر). فباعتبار أننا نريد استخدام الفصيلة محرك في الفصيلة عربة فيجب إضمامها كما يلي:

ضم "محرك.نجم"

فصيلة عربة
تم

4. المؤثرات


تفيد المؤثرات في إظهار أو إخفاء العناصر أو جعلها مشتركة، يمكن الوصول إلى العناصر الظاهرة من خارج الفصيلة، في حين لا يمكن الوصول إلى العناصر الخفية إلّا من داخل الفصيلة، أما العناصر المشتركة فهي مشتركة بين كلّ كائنات الفصيلة وتبقى قيمتها ثابتة بين كائن وآخر. وهي كما يلي:

فصيلة عربة
    ظاهر:
        'هنا العناصر الظاهرة'
    خفي:
        'هنا العناصر الخفية'
     ظاهر مشترك:
        'هنا العناصر المشتركة الظاهرة'
    خفي مشترك:
        'هنا العناصر الخفية المشتركة'
تم 'نهاية الفصيلة'

5. الخصائص


الخصائص هي متغيرات تحمل معلومات تخصّ كائنًا من فصيلة معينة، تمتلك العربة في الواقع خصائص متعددة منها الرقم والحجم والسرعة.. ويمكن تحديدها برمجيا عبر متغيرات كما يلي:

فصيلة عربة
    ظاهر:
        عدد رقم   'الخاصية رقم وهي عدد'
        عدد حجم    'الخاصية حجم وهي عدد'
        عدد سرعة     'الخاصية سرعة وهي عدد'
تم
يكون لكل متغير نوع معين، والنوع هو الفصيلة التي يقبلها هذا المتغير، بمعنى أن هذا المتغير لن يقبل كائنات من فصيلة غير التي تمّ تعريفه بها.

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

6. الوظائف


الوظائف هي دوال تقوم بوظيفة معينة، ويمكنها أن ترد قيمة (أو نتيجة) عند الانتهاء كما يمكنها أن لا تفعل، فإذا كانت ترد قيمة وجب تحديد نوع هذه القيمة (فصيلتها) وإن لم تكن ترد فإن مترجم نجم يعتبرها ترد عدَمًا. يمكن للعربة أن تنطلق، إذًا فالإنطلاق وظيفة تقوم بها العربة ويتم تحديدها برمجيا عبر دالة لا ترد شيئا كالتالي:

فصيلة عربة
    ظاهر:
        عدد رقم
        عدد حجم
        عدد سرعة

    انطلق()
        'هنا تعليمات الإنطلاق'
    تم 'نهاية الدالة'

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

7. المعطيات


قد تتطلب بعض الدوال (الوظائف) معطيات معينة تعتمد عليها كمعلومات لإتمام وظيفتها، ففي مثالنا السابق، يمكن للدالة انطلق() أن تتطلب سرعة الانطلاق المرجوة، ويتم تحديد هذا الطلب عند تعريف الدالة:

فصيلة عربة
    ظاهر:
        عدد رقم
        عدد حجم
        عدد سرعة

    ظاهر:   'لا بأس في إعادة كتابة المؤثر ظاهر'
        انطلق(عدد سرعة_انطلاق)   'المعطى سرعة_انطلاق وهو عدد'
            'هنا تعليمات الإنطلاق'
        تم
تم

8. المتغيرات المحلية (أو المَحلّيات)


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

فصيلة عربة
    ظاهر:
        عدد رقم
        عدد حجم
        عدد سرعة

    ظاهر:  'لا بأس في إعادة كتابة المؤثر ظاهر'
        انطلق(عدد سرعة_انطلاق)   'المعطى سرعة_انطلاق وهو عدد'
            عدد سرعة_قصوى = هذا.سرعة
        تم
تم
قمنا بتعريف كائن من نوع عدد سمّيناه سرعة_قصوى، وقد أعطيناه قيمة الخاصية "سرعة" التي تم تحديدها في الفصيلة عربة، لاحظ استخدام المفرد 'هذا'، وهو مفرد يعني الكائن الحالي، أي الوصول إلى المتغير "سرعة" والذي هو خاصية للكائن الحالي، ويمكن أيضا عدم استعمال المفرد 'هذا' وكتابة "سرعة_قصوى = سرعة"، إلا أنه يضمن مقروئية أكبر للأكواد.

9. دوال التكوين


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

فصيلة عربة
    ظاهر:
        عدد خ_رقم    'إعتدتُ إسباق أسماء الخصائص الخفية بالحرف "خ_"، وهي تعني خاصية خفية'
        عدد خ_حجم
        عدد خ_سرعة

    ظاهر:
        'دالة تكوين تنشئ عربة جديدة'
        جديد()
        تم

        'دالة تكوين تنشئ عربة جديدة وتُمهّد رقمها وحجمها'
        جديد(عدد رقم، عدد حجم)
            هذا.خ_رقم = رقم
            خ_حجم = حجم    'يمكن عدم استعمال المفرد هذا'
        تم
تم

10. دوال الأخذ والرد


عند إخفاء خاصية ما، يجب توفير طريقة للوصول إليها من الخارج، يتم هذا عبر دالَّتين الأولى تأخذ قيمتها والثانية ترُدّها، وتسمى دوال الأخذ والرد:

فصيلة عربة
    خفي:
        عدد خ_رقم
  
    ظاهر:
        خذ_رقم(عدد رقم)
            خ_رقم = رقم
        تم


        رد_رقم() يرد عدد
            رد خ_رقم
        تم
تم

10. شرطية لو


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

'هذه شرطية لو بسيطة'
لو ب=4
    ع = ع + 1
تم

'هذه شرطية لو تدعم عدم تحقق الشرط'
لو ب=4
    ع = ع + 1
وإلا
    ع = ع - 1
تم

'هذه شرطية لو متعددة'
لو ب = 4
    ع = ع + 1
أما لو ب = 5
    ع = ع + 2
أما لو ب = 6
    ع = ع + 3
وإلا
    ع = ع - 1
تم

11. تكرارية طالما


تكرارية طالما هي تكرارية شرطية تستمر في الدوران طالما يتحقق شرط معين، وتنتهي بعدم تحققه، وهي تنفع في إنجاز عمليات بشكل متكرر طالما بقي الشرط إيجابا.

'تنتهي هذه التكرارية عندما يصير ع=10 أو أكبر'
طالما ع < 10
    ع = ع + 1
تم

12. تكرارية لأجل


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

'تدور هذه التكرارية عشر دورات، في كل دورة يحمل عين عددا من 0 إلى 9'
لأجل عدد ع=0، ع<10، ع++
    ب = ب + 1
تم

13. صيغ التزييد والتنقيص


هناك بعض الاختصارات الكتابية في نجم كالتالي:

ع = ع + 1    'كتابة غير مختصرة'
ع++    'كتابة مختصرة وتسمى صيغة التزييد'

ع = ع - 1    'كتابة غير مختصرة'
ع--    'كتابة مختصرة وتسمى صيغة التنقيص'

14. العمليات المنطقية


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

منطق م1 = صحيح
منطق م2 = خطأ
إضافة إلى القيمتين صحيح وخطأ، يعتبر نجم كل عدد يخالف الصفر على أنه صحيح، وكل عدد يساوي الصفر على أنه خطأ.

ويمكن إجراء عمليات منطقية على العبارات كما يلي:

لو م1 = صحيح و م2 = خطأ
    ب++
تم

لو م1 = صحيح أو م2 = صحيح
    ب++
تم

15. رموز العمليات


هناك أنواع مختلفة من العمليات التي يدعمها نجم، منها العمليات الحسابية والرياضية والمنطقية، نعطي هنا الرموز المستخدمة في نجم:

عمليات منطقية : و، أو
عمليات مقارنة: =، لا=، >، <، >=، <=
عمليات حسابية: +، -، ×، ÷

16. مجموعة الأعداد


يدعم نجم مجموعة الأعداد الصحيحة الموجبة والسالبة.

عدد ع = 5
عدد ع = -5
لاحظ أنه يتم قراءة الأعداد في نجم من اليمين إلى اليسار كما في اللغة العربية، فالعدد 154 يُقرأ أربعة وخمسون ومائة. كما أن العدد -2154 يُقرأ ناقص أربعة وخمسون ومائة وألفان.

بما أن محرّرات النصوص الغربية تدعم كتابة الأرقام من اليسار إلى اليمين فقط، فقد يكون هناك بعض الارتباك في كتابة الأرقام إذ يجب الحرص على كتابتها معكوسة. هذا في انتظار أن نُطوّر محرر نصوص يدعم كتابة الأرقام بالطريقة العربية.

17. التحويل بين الفصائل


يمكن التحويل بين الفصائل المتوافقة، لنفترض أننا نريد إسناد حرف إلى عدد:

حرف ح = "ن"
عدد ع = {عدد}ح
تم تحويل الحرف إلى عدد حتى نستطيع إسناده إلى المتغير ع الذي لا يقبل غير الأعداد، فلو قمنا بالإسناد دون تحويل فإن مترجم نجم يرفض التعليمة ويبلغ عن خطأ "لا يمكن إسناد حرف إلى عدد"، ينطبق هذا على كل الفصائل في نجم، وعلى المبرمج تحمل مسؤولية التحويلات التي يقوم بها، فإذا قام بتحويل بين فصيلتين غير متوافقتين فقد لا يعمل برنامجه كما يتوقع.

18. الجداول


المصفوفات هي فصائل تحمل سلسلة من المتغيرات، وهي أنواع متعددة منها الجداول، والجداول في نجم -بخلاف باقي لغات البرمجة- ليست جزءا من اللغة وإنما هي فصيلة كباقي الفصائل، وهي جاهزة في مكتبة نجم الأساسية، ويتم استخدامها كما يلي:

جدول<نص> ج = جدول جديد()    'جدول نصوص جديد فارغ'
ج.زد("سلام عليكم")     'إضافة نص إلى الجدول'
ج.زد(ن)    'إضافة المتغير ن الذي يحمل نصًا إلى الجدول'

جدول<نص> ج = ["سلام عليكم"، ن]    'إختصار الكتابة أعلاه'

نص نص1 = ج.صف(1)    'رد النص الموجود في الصف 1 من الجدول'
يتم تحديد الفصيلة التي يدعمها الجدول عند تعريفه، ففي المثال أعلاه، لا يمكن إضافة سوى النصوص (الكائنات من الفصيلة نص) إلى الجدول، أما إذا احتاج المبرمج جدولا يحمل أنواع مختلطة من الكائنات فهو يقوم بتعريف جدول من الكائنات:

جدول<كائن> ج = [{كائن}"سلام عليكم"، {كائن}45، {كائن}ن]

16. الوراثة


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

فصيلة سيارة يرث عربة    'السيارة ترث خصائص العربة'
    ظاهر:
        'هذه الدالة تضبط خاصية سرعة السيارة وتسمى دالة الأخذ'
        خذ_سرعة(عدد سرعة)
            خ_سرعة = سرعة   'لاحظ الوصول إلى خاصية خفية في عربة'
        تم

        'هذه الدالة ترد سرعة السيارة وتسمى دالة الرد'
        رد_سرعة() يرد عدد
            رد خ_سرعة
        تم
تم

ختام


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

وفي الختام أزكى الصلاة والسلام على خير الأنام، ولا تنسونا بالدعاء عن ظهر الغيب.

ليست هناك تعليقات:

إرسال تعليق