الهيكل (برمجة الحاسوب)

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

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

تُستخدم البرامج الهيكلية في نمط تصميم الأساليب القالبية المستخدم في البرمجة كائنية التوجه . في البرمجة كائنية التوجه ، يُقابل الكود الوهمي أسلوبًا مجردًا ، أو نموذجًا أوليًا للأسلوب ، أو كائنًا وهميًا . في مصطلحات استدعاء الأساليب عن بُعد في جافا (Java RMI)، يتواصل النموذج الأولي من جانب العميل مع البرنامج الهيكلي من جانب الخادم . [ 1 ]

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

خلفية

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

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

العلاقة بالرمز الزائف

مثال عام على الشفرة الزائفة

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

يعتمد مبرمجو الحاسوب اعتمادًا كبيرًا على الشفرة الزائفة، لدرجة أنها تؤثر بشكل ملحوظ على حالتهم النفسية . [ 3 ] فالمبرمج النموذجي مُهيأٌ لكتابة شفرة مبسطة بطريقة أو بأخرى، سواءً بكتابة الشفرة الزائفة أو الشفرة الهيكلية، أو حتى بمجرد رسم مخطط، مما يؤثر بشكل ملحوظ على جودة تنفيذه النهائي. وقد لوحظ هذا في العديد من التطبيقات، مع مبرمجين مختلفين يعملون بلغات برمجة مختلفة ونماذج برمجة متنوعة .

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

تطبيق

يمكن تطبيق البرمجة الهيكلية في مجموعة متنوعة من تطبيقات البرمجة المختلفة.

توثيق لغة البرمجة

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

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

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

تتبع لغة بايثون نهجًا مشابهًا في توثيق دوالها المدمجة، إلا أنها تحاكي عدم تركيز اللغة على نطاق المتغيرات وأنواع البيانات. [ 5 ] يتضمن هذا التوثيق صيغة كل دالة، بالإضافة إلى وصف موجز ومثال على الاستخدام النموذجي لها. يوفر الكود الأساسي المُقدم في المثال للمبرمجين فهمًا جيدًا للدالة بنظرة سريعة.

تعريف الفئة

تُعرض الفئات التي يكتبها مطورو البرامج الخارجيون، وخاصةً كجزء من المكتبات، برمجتهم أيضًا في شكل هيكل برمجي. يساعد هذا في تعريف المستخدمين الجدد للمكتبة بكيفية عمل الدوال والأساليب. يستخدم P5.js هذا التنسيق في صفحة التوثيق الخاصة به لشرح الاستخدام المقصود لبعض الدوال المضمنة. [ 6 ] يختلف هذا عن توثيق لغة البرمجة ، حيث يُستخدم الهيكل البرمجي لعرض المعاملات بدلاً من جميع الاستخدامات الممكنة للأسلوب.

تُستخدم واجهات اللغة الطبيعية (NLIs) عادةً في الحالات التي يحاول فيها المبرمجون أخذ مدخلات ، والتي تُسمى عادةً بشكل عام (دون استخدام مصطلحات خاصة بلغة البرمجة )، واستخدامها لإنشاء برنامج أو دالة. ويستخدم تطبيق هذه الواجهات مجموعة صغيرة من التعليمات البرمجية الأساسية للإشارة إلى تشغيل الدالة في الخلفية. [ 7 ]

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

تعريفات قائمة على تعدد الأشكال

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

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

public skeletonExample ();

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

public abstract skeletonExample ();

تستخدم هذه الأمثلة صيغة جافا .

البرمجة المتوازية

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

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

البيانات المتوازية

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

  • تُعدّ "الخرائط" من أكثر خوارزميات المعالجة المتوازية للبيانات شيوعًا، وتتضمن عادةً عملية واحدة تُنفّذ على مجموعة بيانات كبيرة. ولزيادة الكفاءة، تُطبّق هذه العملية على عدد من مجموعات البيانات في آنٍ واحد، قبل إعادة هيكلة البيانات معًا في النهاية.
  • تُشبه "التفرعات" "الخرائط" لكنها تستخدم عملية مختلفة لأنواع بيانات معينة. يُعرف هذا باسم التوازي المتعدد للبيانات . [ 10 ]
  • تُستخدم عمليات "الاختزال" أو "المسح" لإضافة بادئات إلى مجموعة من البيانات، قبل تطبيق عملية عليها. وتختلف هذه العمليات عن عمليات "الخرائط" لأنها تُنتج مجموعة من النتائج الجزئية أثناء تشغيل الدالة نفسها.

المهام المتوازية

تُعنى هذه العمليات، كما يوحي اسمها، بمعالجة المهام. ويختلف كل نوع من أنواع الخوارزميات ضمن هذا الإطار عن الآخر نتيجةً لاختلاف السلوك بين المهام. وتشمل خوارزميات المعالجة المتوازية للمهام: الخوارزميات التسلسلية، وخوارزميات المزارع، وخوارزميات الأنابيب، وخوارزميات الشرط، وخوارزميات التكرار، وخوارزميات التكرار.

  • تُستخدم كلمة "Sequential" لإغلاق وإنهاء مجموعة متداخلة من الخوارزميات الهيكلية. وتُدرج الطرق والبرامج التي تُشكّل جزءًا من الهياكل كجوانب إنهاء للبرنامج، قبل الإغلاق.
  • تُعرف "المزارع" بأنها مجموعة من المهام، أو عامل، أو وحدة رئيسية أو تابعة لوظيفة أخرى. تُنجز هذه المزارع المهام الموكلة إليها من خلال تكرارها عبر عدة خيوط وتشغيلها بالتزامن. يُقسّم هذا الأمر الحمل على خيط معين، مما يُنشئ فعليًا علاقة رئيسية/تابعة بين الخيوط.
  • تُعدّ "الأنابيب" من الأشكال التقليدية للخوارزميات، حيث تُنفّذ كل دالة أو طريقة بالتسلسل، وفقًا لترتيب كتابة المبرمج للبرنامج. ويتم تحقيق التوازي من خلال حساب مهام متنوعة على مجموعة بيانات، عادةً ما تكون مُدخلات، في وقت واحد لتحسين الأداء والسرعة. تُعرف كل عملية حسابية متزامنة بالمرحلة. يمكن أن تكون خوارزمية الأنابيب متداخلة، حيث تكون إحداها داخل الأخرى، وتُقسّم كل منها المسؤوليات لزيادة السرعة وعدد المراحل.
  • تُتيح كلمة "If" للبرنامج تقسيم المهام بشكل مشروط، حيث يتم تقسيم مجموعة من التعليمات البرمجية الأساسية إلى قسمين رئيسيين. تُعطى عبارة شرطية للبرنامج، مما يمنحه خوارزمية محددة ليتبعها.
  • تُنفّذ حلقة "for" المهمة عددًا من المرات، يُحدده المبرمج، مما يُتيح كتابة كود أكثر كفاءة. عدد مرات تنفيذ الكود قيمة مُحددة مسبقًا، مما يعني أنه لا يُمكن تغييرها أثناء التشغيل . يجب أن تُكمل المهمة العدد المُحدد من المرات.
  • تُعدّ خوارزمية "while" مشابهةً جدًا لخوارزمية "for"، حيث تُنفّذ المهمة عددًا من المرات. إلا أنه في خوارزمية "while"، يُنفّذ البرنامج المهمة عددًا من المرات قبل تحقق شرطٍ ما. وهذا يعني أن خوارزمية "while" قد تُنفّذ مهمتها عددًا مختلفًا من المرات في كل مرة تُشغّل فيها.

هياكل القرار

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

  • تعتمد خوارزمية "فرق تسد" على هيكل الخريطة كأساس لها، وتجمعه مع هيكل حلقة "while" لحل المشكلة. في خوارزميات الخرائط، تُطبَّق الدوال على البيانات بشكل متزامن. أما في خوارزمية "فرق تسد"، فتُطبَّق دالة على مجموعة البيانات المُقدَّمة باستخدام هيكل الخريطة، ولكن يمكن تطبيق هذه الدالة بشكل تكراري باستخدام خوارزمية "while". ولا تُكسر حلقة "while" إلا عند حل المشكلة بالكامل.
  • خوارزمية " التفرع والتقييد " هي خوارزمية تستخدم أيضًا خوارزميات الخرائط، ولكن بدلًا من تطبيق خوارزمية "while" لتشغيل المهام في وقت واحد، تقسم هذه الخوارزمية المهام إلى فروع. لكل فرع غرض محدد، أو "حدود"، حيث يؤدي الشرط إلى إيقافه.

مراجع

  1. فريمان، إريك؛ فريمان، إليزابيث؛ كاثي، سييرا؛ بيرت، بيتس (2004). هندريكسون، مايك؛ لوكيدس، مايك (محرران). أنماط التصميم من البداية (غلاف ورقي) . المجلد  1. أورايلي. ص  440. ISBN 978-0-596-00712-6تم الاطلاع عليه بتاريخ 28 أغسطس 2012 .
  2. لوري، جيف (2 نوفمبر 2019). "لماذا يُعدّ تطوير البرمجيات صعبًا؟" . ميديوم . تم الاطلاع عليه في 15 نوفمبر 2020 .
  3. 1 2 بيلامي، راشيل ك. إي. (1 يونيو 1994). "ما وظيفة الشفرة الزائفة؟ تحليل نفسي لاستخدام الشفرة الزائفة من قبل المبرمجين ذوي الخبرة" . تفاعل الإنسان مع الحاسوب . 9 (2): 225-246 . doi : 10.1207/s15327051hci0902_3 . ISSN 0737-0024 . 
  4. "Object (Java Platform SE 8 )" . docs.oracle.com . تم الاطلاع عليه في 2 أكتوبر 2020 .
  5. "الوظائف المدمجة - وثائق بايثون الإصدار 3.0.1" . docs.python.org . 14 فبراير 2009. تم الاطلاع عليه في 3 أكتوبر 2020 .
  6. "مرجع | p5.js" . p5js.org . تم الاطلاع عليه بتاريخ 15 نوفمبر 2020 .
  7. غرانجر، كريس (18 نوفمبر 2020). "نظرة أولى على شيء جديد نعمل عليه" . تويتر . تم الاطلاع عليه في 19 نوفمبر 2020 .
  8. أوزكان، إي. (2004). "توليد هيكل فئة جافا باستخدام واجهة لغة طبيعية". وقائع ورشة العمل الدولية الأولى حول فهم اللغة الطبيعية والعلوم المعرفية . المجلد 1. منشورات سايت برس للعلوم والتكنولوجيا. الصفحات 126-134 . doi : 10.5220/0002683301260134 . ISBN   972-8865-05-8.
  9. بينايا، تمار؛ زور، إيلا (2008)، "فهم مفاهيم البرمجة الكائنية في دورة برمجة متقدمة"، تعليم المعلوماتية - دعم التفكير الحسابي ، سلسلة محاضرات في علوم الحاسوب، المجلد 5090، برلين، هايدلبرغ: سبرينغر برلين هايدلبرغ، الصفحات 161-170 ، doi : 10.1007/978-3-540-69924-8_15 ، ISBN   978-3-540-69923-1تم الاطلاع عليه بتاريخ 18 نوفمبر 2020
  10. 1 2 3 4 غونزاليس-فيليز، هوراسيو؛ ليتون، ماريو (1 نوفمبر 2010). "دراسة استقصائية لأطر الهياكل الخوارزمية: أدوات تمكين البرمجة المتوازية المهيكلة عالية المستوى" . البرمجيات: الممارسة والخبرة . 40 (12): 1135-1160 . doi : 10.1002/spe.1026 . ISSN 0038-0644 . S2CID 16211075 .