logo

logo

logo

logo

logo

البرمجة البنيوية

برمجه بنيويه

Structured programming -

البرمجة البنيوية

غيداء ربداوي

ظهور البرمجة البنيوية

البنى الأساسية

التقنيات المستخدمة

تطبيقات وآفاق

 

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

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

ظهور البرمجة البنيوية

أدرك علماء الحواسيب في مرحلة مبكّرة من تاريخ البرمجة - مثل العالم الألماني ديكسترا Dijkstra (1930-2002) - أن توفر التعليمات في لغات البرمجة غير كافٍ وحده للحصول على برامج جيدة ومفهومة وقابلة للتعديل والصيانة، بل لابد من توفر منهجية في التفكير تُستخدم في أثناء وضع خوارزمية الحل وتسمح باستخدام هذه التعليمات استخداماً سليماً وهندسياً ومنهجياً، ويؤدي تطبيقها إلى الحصول على رماز code واضح البنية. ويَعدّ ديكسترا استخدام التعليمة goto يؤدي إلى خللٍ في بنية البرنامج ويجعل البرمجة «غير بنيوية»، وقد أُطلق على الرماز البرمجي الذي يستخدم هذه التعليمة اسم «الرماز المتشابك» spaghetti code، تعبيراً عن التداخل والفوضى الحاصلين في بنية البرنامج.

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

البنى الأساسية

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

  • التتالي sequencing: ويُقصد به أن تنفيذ التعليمات يكون تعليمة تلو الأخرى.
  • الاختيار selection: ويُستخدم لتنفيذ مسار واحد من بين مسارات محتملة بناءً على شرط محدّد في البرنامج. يمكن التعبير بلغة شبه الرماز عن هذه البنية في حال مسارين كما يلي:

    إذا <شرط> نفّذ

    { <مجموعة تعليمات 1>

    وإلا

    { <مجموعة تعليمات 2>

  • التكرار loop: ويُستخدم لتكرار تنفيذ المجموعة نفسها من التعليمات إلى أن يتحقق شرط محدّد في البرنامج. يمكن التعبير بلغة شبه الرماز عن هذه البنية كما يلي:

    ما دام <شرط> كرّر

    { <مجموعة تعليمات>

    يختلف شكل التعبير عن هذه البنى باختلاف لغة البرمجة. وتُستخدم لغةُ شبه الرماز pseudo code أو ما يسمى لغة الخوارزمية، للتعبير عنها تعبيراً مستقلاً عن لغات البرمجة.

    يبيّن الشكل (1) مخططات بيانية لبنى التحكم الأساسية. فالإجرائية process 0 يمكن أن تتضمن أحد ثلاثة أنواع من الإجرائيات: إما تتالٍ لإجرائيتين فرعيتين p1 ثم p2، وإما اختيار بين مسارين وتنفيذ إحدى الإجرائيتين p1أو p2 بحسب قيمة شرط ما، وإما تكرار الإجرائية p1 نفسها عدة مرات بحسب قيمة شرط ما.

    الشكل (1) بنى التحكم الأساسية في البرمجة البنيوية

    التقنيات المستخدمة

    لتحقيق البرمجة البنيوية لا بدّ من توفر تقنيات محدّدة منها:

    1- استخدام البنى الأساسية المذكورة آنفاً: وهذا ضروري لأنه يضبط التحكم في حالات الاختيار والتكرار في بنية لها نقطة دخول واحدة و نقطة خروج واحدة، ويسهّل هذا عملية إدراجها ضمن تتالي التعليمات، ويبيّن على نحو جليّ وواضح نقاط الدخول والخروج من دون إجراء قفزات أمامية أو خلفية يصعب تتبّعها.

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

    مثال

    المطلوب حل المعادلة (1) من الدرجة الثانية:

    وذلك في حالة قيم معطاة لـ

    خوارزمية الحل

    الخطوة 1:

    1. اقرأ

    2. إذا نفّذ

    2. 1 {حل المعادلة }

    وإلا

    2. 2 } حساب المعيّن}

    2. 3 } حساب الجذور}

    الخطوة 2: يُفصّل البند 2.1 حل المعادلة

     

    اكتب "المعادلة ليست من الدرجة الثانية"

    إذا نفّذ

    اكتب "الحل=" ،

    وإلا

    اكتب "المعادلة تافهة أو غير صحيحة"

    الخطوة 3: يُفصّل البند 2. 2 {حساب المعيّن}

    الخطوة 4: يُفصّل البند 2. 3 {حساب الجذور}

    إذا نفذ

    2. 3. 1 {جذران متماثلان}

    وإلا

    إذا نفذ

    3.2. 2 {جذران حقيقيان}

    وإلا

    3.2. 3. {جذران عقديان}

    الخطوة 5: يُفصّل البند 2. 3. 1 {جذران متماثلان}

    اكتب "للمعادلة جذران متماثلان =",X

    الخطوة 6: يُفصّل البند 3.2. 2 {جذران حقيقيان}

    اكتب "جذران حقيقيان"

    اكتب

    الخطوة 7: يُفصّل البند 3.2. 3. {جذران عقديان}

    اكتب «جذران عقديان»

    اكتب

    اكتب

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

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

    تطبيقات وآفاق

    مع ظهور هذه الطريقة في تصميم البرامج، رغب البروفسور السويسري نيكولاس ويرث N. Wirth (1971) في تطوير لغة برمجة نموذجية تتضمن جميع البنى السابقة وتحقق البرمجة البنيوية، فطوّر لغة البرمجة باسكال Pascal، والتي تجسّد في تعليماتها البنى الأساسية (repeat، while، if..then..else) وتضيف إليها بعض البنى المشتقة switch، case) (for، do..until،، كما أنها تتضمن بنى خاصة لكتابة التوابع والإجرائيات بحيث تكون عملية البرمجة بنيوية ومنهجية. أما فيما يتعلق بلغات البرمجة العمومية التي ظهرت فيما بعد، فقد حرص مطوّروها على توفير ما يلزم لإتاحة البرمجة البنيوية. كما طُوّرت اللغات التي كانت موجودة مثل C لتتضمن بنى تحقق خصائص البرمجة البنيوية فظهرت اللغات C++ وmodula-2 و Java وChttps://mail.arab-ency.com.sy/tech/details/656/4# وغيرها. ومع استمرار التطوّر ظهرت مفاهيم أخرى مثل البرمجة المعتمدة على الأغراض والبرمجة الغرضية التوجه object-oriented. وقد ضُمّنت هذه اللغات الجديدة خصائص وتقنيات لتحقيق هذه المفاهيم وتنجيزها.

    وبفضل البرمجة البنيوية تبيّن أن التقنيات وحدها غير كافية ما لم تُدعم بمنهجيات تضبط التفكير في تصميم الخوارزميات ووضع الحلول. وقد ظهرت منهجيات في التحليل والتصميم البنيويين، مثل طريقة تصميم النظم البنيوية وتحليلها Structured Systems Analysis And Design Method (SSADM).

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

    مراجع للاستزادة:

    - J. Hughes, PL/1 Structured Programming, John Wiley and Sons 2010.

    - S. Kochan, Programming in Objective – C, Pearson Education 2012.

    - D. S. Malik, Java Programming, Cengage Learning 2011.


التصنيف : كهرباء وحاسوب
النوع : كهرباء وحاسوب
المجلد: المجلد الرابع
رقم الصفحة ضمن المجلد : 0
مشاركة :

اترك تعليقك



آخر أخبار الهيئة :

البحوث الأكثر قراءة

هل تعلم ؟؟

عدد الزوار حاليا : 1047
الكل : 58492772
اليوم : 65286

الآثار الكهرحرارية

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