البرمجة الإجرائية
في علوم الحاسوب ، تُعدّ البرمجة الإجرائية نموذجًا برمجيًا يُقدّم تعليماتٍ مُحدّدة لكيفية تنفيذ العمليات الحسابية. قد يستخدم هذا النموذج عباراتٍ تُغيّر حالة العملية . وكما يُعبّر أسلوب الأمر في اللغات الطبيعية عن الأوامر، يتكوّن البرنامج الإجرائي من أوامرٍ يُنفّذها الحاسوب . تُركّز البرمجة الإجرائية على وصف كيفية عمل البرنامج خطوةً بخطوة (حيث يُحدّد ترتيب الخطوات عادةً في شفرة المصدر من خلال وضع العبارات واحدةً تلو الأخرى)، [ 1 ] بدلاً من التركيز على وصفٍ عامٍّ لنتائجه المتوقّعة.
يُستخدم هذا المصطلح غالبًا في مقابل البرمجة التصريحية ، التي تركز على ما يجب أن يحققه البرنامج دون تحديد جميع تفاصيل كيفية تحقيق البرنامج للنتيجة. [ 2 ]
البرمجة الإجرائية
البرمجة الإجرائية نوع من البرمجة الإجرائية، حيث يُبنى البرنامج من إجراء واحد أو أكثر (يُسمى أيضًا روتينات فرعية أو دوال). غالبًا ما تُستخدم المصطلحات كمترادفات، لكن استخدام الإجراءات يُحدث فرقًا كبيرًا في شكل البرامج الإجرائية وكيفية بنائها. تُعد البرمجة الإجرائية المكثفة، التي تُحصر فيها تغييرات الحالة في الإجراءات أو تقتصر على الوسائط الصريحة وقيم الإرجاع منها، شكلًا من أشكال البرمجة الهيكلية . منذ ستينيات القرن الماضي، رُوِّج للبرمجة الهيكلية والبرمجة المعيارية عمومًا كتقنيات لتحسين قابلية صيانة البرامج الإجرائية وجودتها الشاملة. وتسعى مفاهيم البرمجة الكائنية التوجه إلى توسيع هذا النهج.
يمكن اعتبار البرمجة الإجرائية خطوة نحو البرمجة التصريحية. يستطيع المبرمج في كثير من الأحيان، بمجرد النظر إلى أسماء الإجراءات ومعاملاتها وأنواع القيم المُعادة (والتعليقات ذات الصلة)، معرفة وظيفة إجراء معين، دون الحاجة بالضرورة إلى الاطلاع على تفاصيل كيفية تحقيقه للنتيجة. في الوقت نفسه، يظل البرنامج الكامل إجرائيًا لأنه يُحدد إلى حد كبير التعليمات المراد تنفيذها وترتيب تنفيذها.
الأساس المنطقي وأسس البرمجة الإجرائية
يتبع نموذج البرمجة المستخدم لبناء البرامج لمعظم أجهزة الكمبيوتر عادةً نموذجًا إجرائيًا. [ ملاحظة 1 ] تم تصميم أجهزة الكمبيوتر الرقمية لتنفيذ لغة الآلة ، وهي لغة أصلية للكمبيوتر وتُكتب عادةً بأسلوب إجرائي، على الرغم من وجود مترجمات ومفسرات منخفضة المستوى تستخدم نماذج أخرى لبعض البنى مثل أجهزة Lisp .
من هذا المنظور منخفض المستوى، تُحدد حالة البرنامج بمحتويات الذاكرة ، وتُمثل العبارات تعليمات بلغة الآلة الأصلية للحاسوب. تستخدم لغات البرمجة الإجرائية عالية المستوى متغيرات وعبارات أكثر تعقيدًا، لكنها تتبع نفس النموذج. تُعدّ الوصفات وقوائم التحقق من العمليات ، وإن لم تكن برامج حاسوبية ، مفاهيم مألوفة تُشابه في أسلوبها البرمجة الإجرائية؛ فكل خطوة تُمثل تعليمات، ويحتفظ العالم المادي بالحالة. ولأن الأفكار الأساسية للبرمجة الإجرائية مألوفة من الناحية المفاهيمية ومُجسّدة مباشرةً في الأجهزة، فإن معظم لغات الحاسوب تتبع أسلوب البرمجة الإجرائية.
في البرمجة الإجرائية، تُنفّذ عبارات الإسناد عمليةً على معلوماتٍ موجودةٍ في الذاكرة، وتُخزّن النتائج فيها لاستخدامها لاحقًا. كما تسمح لغات البرمجة الإجرائية عالية المستوى بتقييم التعبيرات المعقدة ، التي قد تتألف من مزيجٍ من العمليات الحسابية وتقييم الدوال ، وإسناد القيمة الناتجة إلى الذاكرة. تسمح عبارات التكرار (مثل حلقات while و do while و for ) بتنفيذ سلسلةٍ من العبارات عدة مرات. يمكن للحلقات إما تنفيذ العبارات التي تحتويها عددًا مُحددًا مُسبقًا من المرات، أو تنفيذها بشكلٍ مُتكرر حتى يتحقق شرطٌ ما. تسمح عبارات التفرع الشرطي بتنفيذ سلسلةٍ من العبارات فقط إذا تحقق شرطٌ ما. وإلا، يتم تخطي العبارات، ويستمر تسلسل التنفيذ من العبارة التي تليها. تسمح عبارات التفرع غير الشرطي بنقل تسلسل التنفيذ إلى جزءٍ آخر من البرنامج. وتشمل هذه العبارات: jump (وتُسمى goto في العديد من اللغات)، و switch ، واستدعاء البرامج الفرعية أو الإجراءات (الذي عادةً ما يعود إلى العبارة التالية بعد الاستدعاء).
في المراحل الأولى لتطوير لغات البرمجة عالية المستوى ، أتاح إدخال مفهوم الكتلة البرمجية إمكانية بناء برامج تُعامل فيها مجموعة من التعليمات والتصريحات كما لو كانت تعليمة واحدة. هذا، إلى جانب إدخال الروتينات الفرعية ، مكّن من التعبير عن البنى المعقدة من خلال التفكيك الهرمي إلى بنى إجرائية أبسط.
تاريخ اللغات الإجرائية واللغات الموجهة للكائنات
كانت لغات البرمجة الإجرائية الأولى هي لغات الآلة لأجهزة الكمبيوتر الأصلية. في هذه اللغات، كانت التعليمات بسيطة للغاية، مما سهّل تنفيذ الأجهزة ولكنه أعاق إنشاء برامج معقدة.
كانت لغة فورتران ، التي طورها جون باكوس في شركة آي بي إم (IBM) بدءًا من عام 1954، أول لغة برمجة رئيسية تزيل العقبات التي يفرضها رمز الآلة في إنشاء البرامج المعقدة. كانت فورتران لغة مُجمّعة تسمح باستخدام المتغيرات المُسماة، والتعبيرات المعقدة، والبرامج الفرعية، والعديد من الميزات الأخرى الشائعة الآن في لغات البرمجة الإجرائية.
شهد العقدان التاليان تطور العديد من لغات البرمجة الإجرائية عالية المستوى. وفي أواخر الخمسينيات والستينيات، طُوّرت لغة ALGOL لتسهيل التعبير عن الخوارزميات الرياضية، بل وأصبحت اللغة المستهدفة لأنظمة تشغيل بعض الحواسيب.
بلغ نموذج البرمجة الإجرائية في لغة MUMPS (1966) حداً أقصى من المنطق، إذ لم يتضمن أي عبارات على الإطلاق، معتمداً كلياً على الأوامر، حتى أنه جعل أوامر IF وELSE مستقلة عن بعضها، ولا يربطها سوى متغير داخلي يُسمى $TEST. أما لغتا COBOL (1960) و BASIC (1964) فكانتا محاولتين لجعل بنية البرمجة أقرب إلى اللغة الإنجليزية.
في سبعينيات القرن العشرين، طوّر نيكلاوس ويرث لغة باسكال ، بينما ابتكر دينيس ريتشي لغة سي أثناء عمله في مختبرات بيل . ثم صمّم ويرث لغتي مودولا-2 وأوبرون . ولتلبية احتياجات وزارة الدفاع الأمريكية ، بدأ جان إشبيا وفريقه في شركة هانيويل بتصميم لغة آدا عام 1978، بعد مشروع استمر أربع سنوات لتحديد متطلبات اللغة. نُشرت المواصفات لأول مرة عام 1983، مع تنقيحات في أعوام 1995 و2005 و2012.
شهدت ثمانينيات القرن العشرين نموًا سريعًا في الاهتمام بالبرمجة كائنية التوجه . كانت هذه اللغات ذات أسلوب إجرائي، ولكنها أضافت ميزات لدعم الكائنات . وشهد العقدان الأخيران من القرن العشرين تطوير العديد من هذه اللغات. تم إصدار لغة Smalltalk -80، التي ابتكرها آلان كاي في عام 1969، في عام 1980 من قبل مركز أبحاث زيروكس بالو ألتو ( PARC ). واستنادًا إلى مفاهيم في لغة كائنية التوجه أخرى - Simula (التي تُعتبر أول لغة برمجة كائنية التوجه في العالم ، والتي طُوّرت في ستينيات القرن العشرين) - صمم بيارن ستروستروب لغة C++ ، وهي لغة كائنية التوجه مبنية على لغة C. بدأ تصميم C++ في عام 1979 واكتمل أول تطبيق لها في عام 1983. وفي أواخر ثمانينيات وتسعينيات القرن العشرين، كانت لغات Perl ، التي أصدرها لاري وول في عام 1987، من أبرز اللغات الإجرائية التي استندت إلى مفاهيم البرمجة كائنية التوجه؛ لغة بايثون ، التي أصدرها غيدو فان روسوم عام 1990؛ ولغتا فيجوال بيسك وفيجوال سي++ (اللتان تضمنتا مكتبة فئات مؤسسة مايكروسوفت (MFC) 2.0)، اللتان أصدرتهما مايكروسوفت عامي 1991 و1993 على التوالي؛ ولغة بي إتش بي ، التي أصدرها راسموس ليردورف عام 1994؛ ولغة جافا ، التي أصدرها جيمس جوسلينج ( صن مايكروسيستمز ) عام 1995؛ ولغة جافا سكريبت ، التي أصدرها بريندان إيتش ( نتسكيب )؛ ولغة روبي ، التي أصدرها يوكيهيرو "ماتز" ماتسوموتو، وكلاهما صدر عام 1995. إطار عمل مايكروسوفت .NET (2002) هو إطار عمل إجرائي في جوهره، وكذلك لغاته المستهدفة الرئيسية، فيجوال بيسك.NET وسي شارب التي تعمل عليه؛ ومع ذلك، فإن لغة إف شارب من مايكروسوفت ، وهي لغة وظيفية، تعمل عليه أيضًا.
أمثلة
فورتران
تم الكشف عن لغة فورتران (1958) تحت اسم "نظام ترجمة الصيغ الرياضية من شركة آي بي إم". صُممت لإجراء العمليات الحسابية العلمية، دون توفير إمكانيات التعامل مع النصوص . إلى جانب التصريحات والتعبيرات والعبارات ، دعمت اللغة ما يلي :
لقد نجح ذلك للأسباب التالية:
- كانت تكاليف البرمجة وتصحيح الأخطاء أقل من تكاليف تشغيل الكمبيوتر
- وقد حظي بدعم شركة آي بي إم
- كانت التطبيقات في ذلك الوقت علمية. [ 3 ]
مع ذلك، قام موردون آخرون غير شركة IBM بكتابة مترجمات لغة فورتران، ولكن بصيغة من المرجح أن تفشل مترجمات IBM. [ 3 ] وضع المعهد الوطني الأمريكي للمعايير (ANSI) أول معيار للغة فورتران عام 1966. وفي عام 1978، أصبح معيار فورتران 77 هو المعيار المعتمد حتى عام 1991. يدعم معيار فورتران 90 ما يلي:
كوبول
لغة كوبول (1959) اختصار لـ "لغة الأعمال التجارية الشائعة". كانت لغة فورتران تتعامل مع الرموز، وسرعان ما اتضح أن الرموز لا تقتصر على الأرقام، فتم إدخال السلاسل النصية. [ 4 ] أثرت وزارة الدفاع الأمريكية في تطوير كوبول، وكان لغريس هوبر دورٌ بارزٌ في ذلك. كانت التعليمات البرمجية شبيهة باللغة الإنجليزية ومطولة. كان الهدف تصميم لغة تمكّن المديرين من قراءة البرامج، إلا أن افتقارها إلى التعليمات المنظمة أعاق تحقيق هذا الهدف. [ 5 ]
كان تطوير لغة كوبول خاضعًا لرقابة صارمة، لذا لم تظهر لهجات تتطلب معايير ANSI. ونتيجة لذلك، لم تُجرَ عليها أي تغييرات لمدة 15 عامًا حتى عام 1974. وقد أدخلت نسخة التسعينيات تغييرات جوهرية، مثل البرمجة كائنية التوجه . [ 5 ]
ألغول
لغة ALGOL (1960) اختصار لـ "لغة الخوارزميات". كان لها تأثير عميق على تصميم لغات البرمجة. [ 6 ] انبثقت من لجنة تضم خبراء أوروبيين وأمريكيين في لغات البرمجة، واستخدمت رموزًا رياضية قياسية، وتميزت بتصميم هيكلي سهل القراءة. كانت ALGOL أول من عرّف قواعدها النحوية باستخدام صيغة باكوس-ناور . [ 6 ] أدى ذلك إلى ظهور المترجمات الموجهة نحو بناء الجملة . وأضافت ميزات مثل:
- بنية الكتلة، حيث تكون المتغيرات محلية لكتلتها
- المصفوفات ذات الحدود المتغيرة
- حلقات "for"
- الوظائف
- الاستدعاء الذاتي [ 6 ]
تشمل اللغات المنحدرة مباشرة من لغة ALGOL لغات Pascal و Modula-2 و Ada و Delphi و Oberon على فرع واحد. وعلى فرع آخر توجد لغات C و C++ و Java . [ 6 ]
أساسي
لغة BASIC (1964) اختصار لـ "Beginner's All Purpose Symbolic Instruction Code" (رمز التعليمات الرمزية متعدد الأغراض للمبتدئين). طُوّرت هذه اللغة في كلية دارتموث ليتعلمها جميع طلابها. [ 7 ] حتى لو لم ينتقل الطالب إلى لغة برمجة أكثر تطورًا، فإنه سيظل يتذكر لغة BASIC. [ 7 ] تم تثبيت مترجم لغة BASIC في الحواسيب الصغيرة المصنعة في أواخر سبعينيات القرن العشرين. ومع نمو صناعة الحواسيب الصغيرة، تطورت هذه اللغة أيضًا. [ 7 ]
كانت لغة BASIC رائدة في مجال الجلسات التفاعلية . [ 7 ] وقد وفرت أوامر نظام التشغيل ضمن بيئتها:
- أنشأ الأمر "جديد" صفحة فارغة
- يتم تقييم البيانات فوراً
- يمكن برمجة العبارات عن طريق وضع رقم السطر قبلها
- عرض الأمر "list" البرنامج
- قام الأمر "تشغيل" بتنفيذ البرنامج
مع ذلك، كانت بنية لغة BASIC بسيطة للغاية بالنسبة للبرامج الكبيرة. [ 7 ] أضافت اللهجات الحديثة بنيةً وامتداداتٍ كائنية التوجه. ولا تزال لغة Visual Basic من مايكروسوفت مستخدمةً على نطاق واسع، وتُنتج واجهة مستخدم رسومية . [ 8 ]
ج
حصلت لغة البرمجة C (1973) على اسمها لأن لغة BCPL استُبدلت بلغة B ، وأطلقت مختبرات AT&T Bell Labs على الإصدار التالي اسم "C". وكان الغرض منها كتابة نظام التشغيل UNIX . [ 9 ] تُعد C لغة صغيرة نسبيًا، مما يُسهّل كتابة المترجمات. وقد واكب نموها نمو الأجهزة في ثمانينيات القرن العشرين. [ 9 ] كما يعود نموها أيضًا إلى امتلاكها إمكانيات لغة التجميع ، ولكنها تستخدم بنية نحوية عالية المستوى . وقد أضافت ميزات متقدمة مثل:
- مُجمِّع خطي
- العمليات الحسابية على المؤشرات
- مؤشرات إلى الدوال
- عمليات البت
- الجمع الحر بين المؤثرات المعقدة [ 9 ]

تتيح لغة C للمبرمج التحكم في منطقة الذاكرة التي تُخزَّن فيها البيانات. تتطلب المتغيرات العامة والمتغيرات الثابتة أقل عدد من دورات الساعة للتخزين. يُستخدم المكدس تلقائيًا لتعريف المتغيرات القياسية . تُعاد بيانات الذاكرة الديناميكية إلى متغير مؤشر من malloc()الدالة.
- تقع منطقة البيانات العامة والثابتة فوق منطقة البرنامج مباشرةً . ( تُسمى منطقة البرنامج تقنيًا منطقة النص ، وهي المكان الذي تُخزن فيه تعليمات الآلة).
- تُعتبر منطقة البيانات العامة والثابتة منطقتين من الناحية التقنية. [ 10 ] تُسمى إحدى المنطقتين " مقطع البيانات المُهيأة "، حيث تُخزن المتغيرات المُعلنة بقيم افتراضية. أما المنطقة الأخرى فتُسمى " مقطع الكتلة المُبدأة" ، حيث تُخزن المتغيرات المُعلنة بدون قيم افتراضية.
- يتم تحديد عناوين المتغيرات المخزنة في منطقة البيانات العامة والثابتة في وقت الترجمة. وتحتفظ هذه المتغيرات بقيمها طوال فترة تشغيل العملية.
- تُخزّن المنطقة العامة والثابتة المتغيرات العامة المُعلنة خارج نطاق
main()الدالة. [ 11 ] المتغيرات العامة مرئيةmain()لجميع الدوال الأخرى في الكود المصدري.
- من جهة أخرى، تُعتبر تعريفات المتغيرات داخل
main()الدوال الأخرى، أو ضمن{}حدود الكتل ، متغيرات محلية . تشمل المتغيرات المحلية أيضًا متغيرات المعاملات الرسمية . تُحاط متغيرات المعاملات بأقواس تعريفات الدوال. [ 12 ] وهي تُوفر واجهة للدالة.staticتُخزَّن المتغيرات المحلية المُعلنة باستخدام البادئة أيضًا في منطقة البيانات العامة والثابتة . [ 10 ] على عكس المتغيرات العامة، فإن المتغيرات الثابتة مرئية فقط داخل الدالة أو الكتلة. وتحتفظ المتغيرات الثابتة دائمًا بقيمتها. ومن الأمثلة على استخدامها الدالةint increment_counter () { static int counter = 0 ; counter ++ ; return counter ; }
- منطقة المكدس هي كتلة متصلة من الذاكرة تقع بالقرب من عنوان الذاكرة العلوي. [ 13 ] تُملأ المتغيرات الموجودة في المكدس من الأعلى إلى الأسفل. [ 13 ] مؤشر المكدس هو سجل خاص يُستخدم لتتبع آخر عنوان ذاكرة تم ملؤه. [ 13 ] تُوضع المتغيرات في المكدس باستخدام تعليمة PUSH في لغة التجميع . لذلك، تُحدد عناوين هذه المتغيرات أثناء وقت التشغيل . أما طريقة فقدان نطاق متغيرات المكدس فتتم باستخدام تعليمة POP.
- تُسمى المتغيرات المحلية المُعلنة بدون
staticالبادئة، بما في ذلك متغيرات المعاملات الرسمية، [ 14 ] بالمتغيرات التلقائية [ 11 ] وتُخزن في المكدس. [ 10 ] وتكون مرئية داخل الدالة أو الكتلة وتفقد نطاقها عند الخروج من الدالة أو الكتلة. - تقع منطقة الكومة أسفل المكدس. [ 10 ] ويتم ملؤها من الأسفل إلى الأعلى. يدير نظام التشغيل الكومة باستخدام مؤشر الكومة وقائمة بكتل الذاكرة المخصصة. [ 15 ] ومثل المكدس، يتم تعيين عناوين متغيرات الكومة أثناء وقت التشغيل. ويحدث خطأ نفاد الذاكرة عندما يتطابق مؤشر الكومة مع مؤشر المكدس.
- توفر لغة C
malloc()دالة مكتبة لتخصيص ذاكرة الكومة. [ 16 ] وتُعدّ عملية ملء الكومة بالبيانات دالة نسخ إضافية. تُمرّر المتغيرات المخزنة في الكومة بكفاءة إلى الدوال باستخدام المؤشرات. وبدون المؤشرات، سيتعين تمرير كتلة البيانات بأكملها إلى الدالة عبر المكدس.
- تُسمى المتغيرات المحلية المُعلنة بدون
لغة سي++
في سبعينيات القرن العشرين، احتاج مهندسو البرمجيات إلى دعم لغوي لتقسيم المشاريع الكبيرة إلى وحدات . [ 17 ] تمثلت إحدى الميزات الواضحة في تقسيم المشاريع الكبيرة فعليًا إلى ملفات منفصلة . أما الميزة الأقل وضوحًا فكانت تقسيم المشاريع الكبيرة منطقيًا إلى أنواع بيانات مجردة . [ 17 ] في ذلك الوقت، كانت اللغات تدعم أنواع البيانات الملموسة ( العددية ) مثل الأعداد الصحيحة ، والأعداد العشرية ، وسلاسل الأحرف . تحمل أنواع البيانات الملموسة تمثيلها كجزء من اسمها. [ 18 ] أما أنواع البيانات المجردة فهي هياكل من أنواع البيانات الملموسة، مع اسم جديد مُخصص لها. على سبيل المثال، يمكن تسمية قائمة من الأعداد الصحيحة بـ .integer_list
في مصطلحات البرمجة الكائنية، تُسمى أنواع البيانات المجردة بالفئات . مع ذلك، فإن الفئة مجرد تعريف؛ لا يتم تخصيص أي ذاكرة لها. عندما يتم تخصيص ذاكرة لفئة، تُسمى كائنًا . [ 19 ]
لغات البرمجة الإجرائية كائنية التوجه ، التي طُوّرت بدمج الحاجة إلى الأصناف والحاجة إلى برمجة وظيفية آمنة . [ 20 ] في لغة كائنية التوجه، تُسند الدالة إلى صنف. وتُسمى الدالة المُسندة حينها طريقةً أو دالة عضو أو عملية . البرمجة كائنية التوجه هي تنفيذ عمليات على الكائنات . [ 21 ]
تدعم لغات البرمجة كائنية التوجه بنيةً لنمذجة علاقات المجموعات الجزئية والمجموعات الشاملة . في نظرية المجموعات ، يرث عنصر المجموعة الجزئية جميع سمات المجموعة الشاملة. على سبيل المثال، الطالب هو شخص. لذلك، فإن مجموعة الطلاب هي مجموعة جزئية من مجموعة الأشخاص. ونتيجةً لذلك، يرث الطلاب جميع السمات المشتركة بين جميع الأشخاص. بالإضافة إلى ذلك، يمتلك الطلاب سمات فريدة لا يمتلكها الأشخاص الآخرون. تُنمذج لغات البرمجة كائنية التوجه علاقات المجموعات الجزئية والمجموعات الشاملة باستخدام الوراثة . [ 22 ] أصبحت البرمجة كائنية التوجه النموذج اللغوي السائد بحلول أواخر التسعينيات. [ 17 ]
كانت لغة C++ (1985) تُسمى في الأصل "C مع الفئات". [ 23 ] وقد صُممت لتوسيع قدرات لغة C من خلال إضافة إمكانيات البرمجة الكائنية التوجه للغة Simula . [ 24 ]
تتكون الوحدة البرمجية الموجهة للكائنات من ملفين. يُسمى ملف التعريفات ملف الرأس . إليك مثال على ملف رأس بلغة C++ لفئة GRADE في تطبيق مدرسي بسيط:
// grade.h // -------// يُستخدم للسماح لملفات مصدر متعددة بتضمين ملف الرأس هذا دون حدوث أخطاء تكرار. // انظر: https://en.wikipedia.org/wiki/Include_guard // ---------------------------------------------- #ifndef GRADE_H #define GRADE_Hclass GRADE { public : // هذه عملية البناء. // ---------------------------------- GRADE ( const char letter );// هذا متغير فئة. // ------------------------- حرف حرف ;// هذه عملية عضوية. // --------------------------- int grade_numeric ( const char letter );// هذا متغير فئة. // ------------------------- int numeric ; }; #endifعملية البناء هي دالة تحمل نفس اسم الصنف. [ 25 ] يتم تنفيذها عندما تقوم العملية المستدعِية بتنفيذ newالعبارة.
الملف الآخر للوحدة هو ملف المصدر . إليك ملف مصدر بلغة C++ لفئة GRADE في تطبيق مدرسي بسيط:
// grade.cpp // --------- #include "grade.h"GRADE :: GRADE ( const char letter ) { // الإشارة إلى الكائن باستخدام الكلمة المفتاحية 'this'. // ---------------------------------------------- this -> letter = letter ;// هذا هو التماسك الزمني // ------------------------- this -> numeric = grade_numeric ( letter ); }int GRADE :: grade_numeric ( const char letter ) { if ( ( letter == 'A' || letter == 'a' ) ) return 4 ; else if ( ( letter == 'B' || letter == 'b' ) ) return 3 ; else if ( ( letter == 'C' || letter == 'c' ) ) return 2 ; else if ( ( letter == 'D' || letter == 'd' ) ) return 1 ; else if ( ( letter == 'F' || letter == 'f' ) ) return 0 ; else return -1 ; }فيما يلي ملف رأس C++ لفئة PERSON في تطبيق مدرسي بسيط:
// person.h // -------- #ifndef PERSON_H #define PERSON_Hclass PERSON { public : PERSON ( const char * name ); const char * name ; }; #endifإليكم ملف مصدر C++ لفئة PERSON في تطبيق مدرسي بسيط:
// person.cpp // ---------- #include "person.h"PERSON :: PERSON ( const char * name ) { this -> name = name ; }فيما يلي ملف رأس C++ لفئة STUDENT في تطبيق مدرسي بسيط:
// student.h // --------- #ifndef STUDENT_H #define STUDENT_H#include "person.h" #include "grade.h"// الطالب هو مجموعة فرعية من الشخص. // -------------------------------- class STUDENT : public PERSON { public : STUDENT ( const char * name ); ~ STUDENT (); GRADE * grade ; }; #endifإليكم ملف مصدر C++ لفئة STUDENT في تطبيق مدرسي بسيط:
// student.cpp // ----------- #include "student.h" #include "person.h"STUDENT :: STUDENT ( const char * name ) : // تنفيذ مُنشئ الفئة الأصلية PERSON. // ------------------------------------------------- PERSON ( name ) { // لا يوجد شيء آخر للقيام به. // ------------------- }STUDENT ::~ STUDENT () { // تحرير ذاكرة الدرجة // لتجنب تسرب الذاكرة. // ------------------------------------------------- delete this -> grade ; }إليكم برنامج تشغيل توضيحي:
// student_dvr.cpp // --------------- #include <iostream> #include "student.h"int main ( void ) { STUDENT * student = new STUDENT ( "The Student" ); student -> grade = new GRADE ( 'a' );std :: cout // لاحظ أن الطالب يرث اسم الشخص << student- > name << ": الدرجة الرقمية = " << student- > grade- > numeric << " \n " ;// تحرير ذاكرة الطالب // لتجنب تسرب الذاكرة. // ------------------------------------------------- حذف الطالب ;return 0 ; }إليك ملف makefile لتجميع كل شيء:
ملف الإنشاء -------- الكل : مسجل فيديو الطالبتنظيف : rm student_dvr *.o student_dvr : student_dvr.cpp grade.o student.o person.o c ++ student_dvr.cpp grade.o student.o person.o -o student_dvrgrade.o : grade.cpp grade.h c ++ -c grade.cppstudent.o : student.cpp student.h c ++ -c student.cppperson.o : person.cpp person.h c ++ -c person.cpp مصادر
- جوزيف جوجين وجرانت مالكولم، "الدلالات الجبرية للبرامج الإجرائية"، مطبعة معهد ماساتشوستس للتكنولوجيا، 1966، رقم ISBN 9780262071727
انظر أيضاً
ملحوظات
- ↑ الحوسبة القابلة لإعادة التكوين هي استثناء ملحوظ.
مراجع
- ↑ جاين، أنيشا (10 ديسمبر 2022). "وعود جافا سكريبت - هل هناك نهج أفضل؟" . ميديوم . مؤرشف من الأصل في 20 ديسمبر 2022. تم الاسترجاع في 20 ديسمبر 2022 .
- ↑ "البرمجة الإجرائية: نظرة عامة على أقدم نموذج برمجي" . دليل IONOS الرقمي . 21 مايو 2021. مؤرشف من الأصل في 3 مايو 2022. تم الاطلاع عليه في 3 مايو 2022 .
- 1 2 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 16. ISBN 0-201-71012-9.
- ↑ ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 24. ISBN 0-201-71012-9.
- 1 2 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 25. ISBN 0-201-71012-9.
- 1 2 3 4 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 19. ISBN 0-201-71012-9.
- 1 2 3 4 5 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 30. ISBN 0-201-71012-9.
- ↑ ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 31. ISBN 0-201-71012-9.
- 1 2 3 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 37. ISBN 0-201-71012-9.
- 1 2 3 4 "تخطيط الذاكرة لبرامج لغة C" . 12 سبتمبر 2011. مؤرشف من الأصل في 6 نوفمبر 2021. تم الاطلاع عليه في 25 مايو 2022 .
- 1 2 كيرنيغان، برايان دبليو؛ ريتشي، دينيس إم. (1988). لغة البرمجة سي، الطبعة الثانية . برنتيس هول. ص 31. ISBN 0-13-110362-8.
- ↑ ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 128. ISBN 0-201-71012-9.
- 1 2 3 كيريسك، مايكل (2010). واجهة برمجة لينكس . دار نشر نو ستارش. ص 121. ISBN 978-1-59327-220-3.
- ↑ كيريسك، مايكل (2010). واجهة برمجة لينكس . دار نشر نو ستارش. ص 122. ISBN 978-1-59327-220-3.
- ↑ كيرنيغان، برايان دبليو؛ ريتشي، دينيس إم. (1988). لغة البرمجة سي، الطبعة الثانية . برنتيس هول. ص 185. ISBN 0-13-110362-8.
- ↑ كيرنيغان، برايان دبليو؛ ريتشي، دينيس إم. (1988). لغة البرمجة سي، الطبعة الثانية . برنتيس هول. ص 187. ISBN 0-13-110362-8.
- 1 2 3 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 38. ISBN 0-201-71012-9.
- ↑ ستروستروب، بيارن (2013). لغة البرمجة سي++، الطبعة الرابعة . أديسون-ويسلي. ص 65. ISBN 978-0-321-56384-2.
- ↑ ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 193. ISBN 0-201-71012-9.
- ↑ ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 39. ISBN 0-201-71012-9.
- ↑ ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 35. ISBN 0-201-71012-9.
- ↑ ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 192. ISBN 0-201-71012-9.
- ↑ ستروستروب، بيارن (2013). لغة البرمجة سي++، الطبعة الرابعة . أديسون-ويسلي. ص 22. ISBN 978-0-321-56384-2.
- ↑ ستروستروب، بيارن (2013). لغة البرمجة سي++، الطبعة الرابعة . أديسون-ويسلي. ص 21. ISBN 978-0-321-56384-2.
- ↑ ستروستروب، بيارن (2013). لغة البرمجة سي++، الطبعة الرابعة . أديسون-ويسلي. ص 49. ISBN 978-0-321-56384-2.
- برات، تيرينس دبليو ومارفن في زيلكوفيتز . لغات البرمجة: التصميم والتنفيذ ، الطبعة الثالثة. إنجلوود كليفس، نيوجيرسي: برنتيس هول، 1996.
- سيبستا، روبرت دبليو. مفاهيم لغات البرمجة ، الطبعة الثالثة. ريدينغ، ماساتشوستس: شركة أديسون ويسلي للنشر، 1996.
- استندت في الأصل إلى مقالة "البرمجة الإجرائية" لستان سيبرت، من موقع Nupedia ، المرخصة بموجب رخصة GNU للوثائق الحرة .
- نماذج البرمجة
- مقارنات لغات البرمجة
