البرمجة الهيكليه في الصناعات الثقيلة
د.م/ سامح أمين عبدالعزيز إبراهيم
رئيس مجلس إدارة/ مكتب IDCS الاستشاري
أصبح العالم شبكة معلوماتية واحدة في اتساع دائم وأصبح علم الاتصالات جزء لا يتجزاء من أساسيات الحياة الحديثة (الاتصالات البشرية والالكترونية بجميع أنواعها (حثيه… سمعية… مرئية) وأصبحت البرمجة الهيكلية أساس لا يمكن تجاهله في الصناعة عمومًا والصناعات الحربية والصناعات الثقيلة خصوصًا وتمكن الإنسان العادي من اجراء الاتصالات الصوتية بالإنترنت VOICE OVER IP وتمكن أيضًا من التجوال عبر الإنترنت في جميع أرجاء العالم بواسطة شبكات الكمبيوتر NETWRK, NET, NAT, LAN, WAN, PAN, MAN والآن يمكن لخبير ايطالي اصلاح ماكينة المانية في جنوب افريقيا باستخدام أحد تطبيقات البرمجة الهيكلية وهو SCADA IT وذلك عن طريق Matrix Laboratory مختبر أو محلل المصفوفات واستخدام خواص خاصة مثل (API) Ap-plication Program Interface هذه الخاصية تسمح لنا بكتابة برامج بلغة الــــــ (C) أو الــــــ (Fortran) وتحتوي على تعليمات تستدعي برامج وتحتوي على تعليمات تستدعي برامج فرعية وتعليمات تمكننا من جعل MATLAB كنواة حسابية في برامجنا المكتوبة باللغات السابقة وتعليمات تمكننا من قراءة وكتابة ملفات مخصصة للربط بين البرنامج واللغات الأخرى.
واستخدام دوال للبرمجة مثل الدوال الرياضية The Mathematical Function وهي عبارة عن مجموعة كبيرة من التوابع والدوال الرياضية والخوارزميات تبدأ من الدوال والتوابع القادرة على إنجاز الحسابات الأساسية (كالضرب والطرح والجمع والقسمة) وتكمل حتى نصل على الدوال والتوابع القادرة على إنجاز حسابات معقدة مثل غيجاد مقلوب أو مضروب مصفوفة من أي درجة كانت وإيجاد تابع بيسل.
البرمجة ببساطة وفاعلية
إن أبسط طرق البرمجة هي سرد الأوامر في سلسلة متتالية يتم تنفيذ الأول ثم الثاني.. إلا إذا حددنا في البرنامج قفزات JUMP أو حلقات تكرارية LOOP أو جمل اختيار البدائل GOTO والجمل الشرطية عندها يغير البرامج مجراه ثم يعود لتنفيذ الأوامر واحد تلو الآخر وهذه الطريقة سهلة في البرامج البسيطة ولكن في البرامج المعقدة يصبح السرد طويلاً جدًا لذا جاءت طريقة البرمجة الهيكلية ففي لغات البرمجه يكون البرنامج أقسام يكون أحدها قسمًا رئيسيًا يتم تنفيذه أولا هذا القسم يستدعي أقسام أخرى والأقسام الأخرى تستدعي أخرى وهكذا نسمي الأقسام وظائف Functions أو برامج فرعي Subroutine ويمكن لهذه الوظائف أن تأخذ معطيات وتعطينا نتائج أو حل المسألة الفرعية تسمى المعطيات معاملات Arg uments أو Parameters ونسمي القيمة التي يعيدها Return Value وبهذا تقسم المسألة المطلوب من البرنامج حلها إلى مسائل أبسط حتى نصل إلى عدد من المسائل التي نعرف كيف نحلها هناك العديد من لغات البرمجة منها ما يمكن للمستخدم العايد الكتابة بها ومنها ما يقتصر على المحترفين لغات المستوى الراقي منها اللغات التفسيرية وهي التي لا يقوم برنامج اللغة بتحويل النص من هذه اللغة إلى لغة الآلة وإنما يبقى النص بصيغته النصية ويسمى Script وعند تشغيل هذا النص يقوم برنامج المفسر بتحويل هذا النص أمرًا، وتنفيذه واحدًا تلو الآخر وفي كل مرة تنفذه هذه الأوامر تعاد هذه العملية وفي أحسن الأحول ينقل إلى صيغة مكثفة compiled script تختزل بعض عمليات التحويل ولكن لا يتحول النص إلى لغة الاله بل إلى ملف ثنائي يسمى byte code وهو عبارة عن سلسلة من تعليمات بلغة الآلة الإفتراضية (MACHINE LANGUAGE) ويكون هناك مفسر يسمى الآلة الإفتراضية يتم استدعاؤه في كل مرة يتم تنفيذ البرنامج فيها حيث يقوم بالتحويل من الآلة الافتراضية إلى الحقيقة ويكون تنفيذ هذا byte code أسرع من النص script ويعتبر تتبع الأخطاء في اللغات التفسيرية أمرا سهلا لأنها تنفذ سطرا فسطر. من الأمثلة على هذه اللغات bash و perl و python و php التي تتداول برامجها على شكل نصي script وهناك نوع من هذه اللغات python مثلًا يمكنه تحويل النص إلى لغى آلة وهمية افتراضية لكسب المزيد من السرعة ولكن أشهر تلك التي تتداول بشكل ثنائي غير نصي هي جافا java و visual basic كما يمكننا كتابة برامج بمستويات منخفضة أو عالية وذلك كله في بيئة سهلة الاستخدام وتحتوي على مميزات ال (Pro- Oriented – Object gramming OOP) على الرغم مما يقال إلا أنها تفسيرية لأن الملف التنفيذي هو عبارة عن ملف يقوم باستدعاء الآلة الإفتراضية msvbvm60.dll مثلًا التي تتابع عملية تفسير البرنامج، وعلى الرغم من كل شيء تظل هذه اللغات بطيئة إلا أنها تمتاز بأنها ستعمل على أي منصة على أي نظام تشغيل إذا وجد المفسر الخاص بها على ذلك النظام وهي فلسفة هكذا لغات “Run Every Where But Write Once أي أن تكتبه مرة واحدة وتنفذه أينما كان وعلى النقيض من ذلك توجد اللغات التي تعطي ملف بلغة الآلة مباشرة مثل لغة ++C/C وتسمى عملية تحويل ملف من الكود المصدر (الملف النصي) إلى لغة الآلة تصنيف Compiling ويكون البرنامج الناتج أسرع ما يكون خصوصًا إذا كنت تستعمل مصنف gcc الذي يمكنه تحسين Op-timization أي زيادة سرعة برامجك أو تقليل حجمها ويمكنه استغلال كافة تعليمات معالج معين ولكن لغة ++C/C ليست للهواة فالهدف الأسمى في اللغات التصنيفية الجيدة والقياسية هو تحقيق العبارة الشهيرة Write once, compile every where أي أن تكتبه مرة واحدة وتصنفه أينما كان.
The MATLAB Language
هو اختصار للجملة التالية (Matrix Laboratory) أي (مختبر أو محلل المصفوفات) وهو لغة برمجية عالية المستوى قوية الأداء، تستخدم لإنجاز الحسابات التقنية (الفنية الهندسية) فهي تنجز الحسابات وتظهر النتائج على شكل مرسومات أو منحنيات كما يمكننا أن نكتب برنامج بلغة مثل الـ (C) أو لغة الـ (Fortran) وفي الإصدارات الجديدة من MATLAB أصبح بإمكاننا كتابة واستخدام مكتبات لغة (C) و(++C) كما يتميز بوجود معدات وأدوات خاصة بحل المشكلات والمسائل الفنية المعقدة والبسيطة هذه المعدات والأدوات موجودة في مجموعة تدعى صندوق الأدوات (Tooibox) يتم تشغيل البرنامج بالضغط مرتين على الأيقونة الموجودة على سطح المكتب في نظام Windows كما يمكننا أن نضبط خصائص تشغيل البرنامج حيث يمكننا أن نجعل البرنامج ينفذ أمرًا ما أو برنامج ما وذلك عن طريق الملف startup.m حيث نكتب فيه التعليمات التي نريد تنفيذها عند بداية التشغيل كما يمكننا الخروج من البرنامج عن طريق اختيار الأمر (Exit) من القائمة File أو عن طريق كتابة الأمر quit في الـــــ Com-mand window كما يمكننا أن ننفذ الملف (finish.m) قبل أن نقوم بإغلاق MATLAB هذا الملف يقوم بعدة وظائف مهمة، حيث يقوم بتنفيذ برنامج لحفظ المتغيرات المستخدمة في برنامجنا وقيمها وخصائصها كما أنه يقوم بإظهار صندوق الحوار الخاص بعملية إغلاق MATLAB ويسأل صندوق الحوار هذا فيما إذا كنا نريد حفظ التغيرات الأخيرة على برنامجنا يظهر MATLAB Desktop عندما نشغل برنامج MATLAB وهو مبني بواسطة الأداة (GUI) ويمكننا MATLAB DESKTOP من كتابة البرامج بلغة MATLAB وبناء تطبيقاتنا الخاصة وذلك من خلال (Comand Window* كما يمكننا من رؤية حالة وخصائص المتغيرات المستخدمة في برنامجنا من خلال (Command History) يمكننا رؤية الملفات المستخدمة في برنامجنا وتطبيقاتنا من خلال (Current Directory) De-fault MATLAB Desktop يمكننا تغيير ترتيبه وشكله كما نريد.
لغة ++C/C
تعتبر C أفضل لغة برمجة على الإطلاق وهي لغة هيكلي
ولكن إذا أردت البرمجة فعليك بلغات ++C/Cو php كل هذه اللغات قادرة على عمل برامج رسومية عن طريق المكتبات لديك أيضا بيئات تطوير متكاملة رسومية IDE مثل Develop-ment وهو يأتي مع أغلب التوزيعات وهو يوفر طريقة جيدة لإدارة المشاريع الكبيرة ويوفر نظام مساعدة يبدأ معك من الصفر فيشرح أساسيات ++C/C ويسترسل في الشرح إلى الأمور المتقدمة وإذا أردت ما هو أخف منه ليناسب المشاريع الصغيرة لديك an-juta وهو صغير يمكنك تنزيله ولدينا برامج تصميم واجهات رسومية مثل glade و glade2 الذي يعطى بلغة C/C++/ perl/python وغيرها بطريقة gnome على مكتبة GTK وهناك برنامج لتصميم الواجهات الرسومية بطريقة KDE أو على مكتبة QT اسمه Qt3 Designer هما يأتيان مع أغلب التوزيعات الطريقة الأكثر شيوعًا هي استعمال محرر نصوص قوي وليس بيئة تطوير أو استعمل Kate أما لغة الـــــ C فتجبرك على إعلان نوع المتغير مثل أن تقول أن M هي عدد صحيح وN نسبي وأن T مصفوفة من أعداد نسبية، و Q هو سلسلة من الحروف وهناك لغات لا تطلب ذلك وتحول الأنواع في ما بينها مما يسهل عليك ويجعل التنفيذ أقل سرعة مثل perl ولكن حتى إذا جعلت برنامج منظمًا ستضطر لكتابة البرنامج من جديد إذا أردنا تطويره ليشمل فكرة أعم وفي البرامج الكبيرة يصبح لدينا الكثير من المتغيرات مثلا W ربما تعني عرض المستطيل أو عرض الشاشة.. فتضطر إلى إعادة تسمية.
مثلًا (rectangle-width و w,h) area) وربما تصبح (rectangle-width, rectangle-height) rec-tangle-area) ولكن عندها سيصبح الملف كبيرًا جدًا لحل هذه المشكلة ظهرة فكرة البرمجة الكينونية حيث هناك تعرف صنف class معين وتعرف ماذا له من خصائص prop-erties أي متغيرات وأفعال meth-ods وهي نفسها الوظائف func-tions ويمكن أن تشترك هذه الخصائص في الاسم مع صنف آخر وتختلف في الطريقة مثلا المستطيل له مساحة والدائرة لها مساحة ولا داع لعمل أسماء طويلة مثل rec-tangle_width,rectangle_height)circle area) ولا داعي لأن تأخذ الطول والعرض لأنها من خصائص الكائن لذا فهي في جميع الأحوال AREA ثم تعرف كائن من هذا الصنف فيكون له هذه الخصائص والأفعال
انظر هذا النص بلغة وهمية
#the is pseudo code
Class rectangle
Integer w,h;
Integer area() {return
w*h};
rectangle rect1;
rect1.w=10;
rect1.h=15;
print rect1. Area();
لاحظ أننا استعملنا النقطة بعد الكائن للوصول إلى خصائص وبعض اللفات تستخدم وبعضها مثل C تستخدم هذه في أحيان أخرى.
لغةPHP
تستخدم بشكل أساسي لعمل صفحات الإنترنت وأن تكون واجهة للتعامل مع قاعدة بيانات SQL my ولكن يمكن عمل برامج أخرى بها.
لغة Java
لغة سهلة يمكنها عمل برامج تطبيقية وبرامج للإنترنت وهي لغة تفسيرية موجهة للكائنات وهي لغة قياسية تعمل على أكثر من جهاز وأكثر من شركة تنتج المصنف الخاص بها وهي لغة تفسيرية ولكنها تنتج bytecode أو ما يسمى machine virtal code مما يفترض أن يجعلها تعمل أسرع من اللغات التفسيرية الأخرى ومن مصنفاتها gnu-java و kaffe وهناك j2sdk الذي يفضله غالبية مبرمجي جافا.
لغات الذكاء الصناعي
لغة قديمة وصعبة تستخدم عادة لأغراض التحليل العددي وحاليًا استبدلت بشكل كامل بلغة C ومن الأفضل البرمجة دون استخدام FORTRAN أو COBOL
لغة Pascal
لغة قوية ولكن ليست شائعة في عالم لينكس ولكنها موجودة وهناك مصنفان لها Free Pascal و GNU pas-cal ولعمل برامج رسومية GUI لديك الخيارات.
Kylix مكتبة وبيئة تطوير متكاملة Borland Lazarus بيئة تطوير متكاملة تشبه Delphi
لغة VBASIC
لا تستغرب إذا قلت لك أن الفيروس أسهل إلى المبرمج من لغة BASIC وعلى الرغم من ذلك يوجد بعض لغات بيسك مثل quasic و GW basic والأفضل هو Vbasic وعادة لا تأتي هذه البرامج مع المصفوفات.
انظر هذا المثال بلغة وهمية
لإيجاد مساحة المستطيل #
البرنامج الرئيسي #
رحب بالمستخدم وأسأله عن الأبعاد -1#
print_hello
w,h خذ منه قيم عن الأبعاد في المتغيرين -2#
get_input (w,h)
احسب المساحة -3#
a=calcArea (w.h)
اطبع الجواب -4#
print a
انتهاء البرنامج #
Exit
# =========
البرنامج الفرعي لكتابة السؤال #
function print_hello
print “Hello,welcome to..”
print “enter the width and height”
end
احسب المساحة #
function get_input(w,h)
input w,h
end
لاحظ أننا إذا قسمنا المسألة إلى مسائل أبسط في المرحلة الأخيرة لذلك علينا أن نستدعي شيئا لم نكتبه نحن وهذا ما يسمى بالمكتبة فأنت لن تكتب تفاصيل كل شيء وإنما تبني على أوامر موجودة في اللغة تسمى كلمات مفتاحية keywords أو تستدعي مكتبات كتبها غيرك أو تستدعي نظام التشغيل
An=An-1+An-2
An=0
A1=1
A5 مثلا احساب
A5=A4+A3
A3 و A4 الآن يجب أن نحسب بأربعة ثم بثلاث n لذا نستدعي نفس العلاقة لكن بوضع A4=A3+A2
A3=A2+A1
A2=A1+A0=1+1=2
A3 وهي الي تلزمنا لحساب A1و A2 نعرف الآن
A4=A3+A2+3+2=5
إذا
A5=A4+A3A5+3=8
يمكن أي يكون البرامج بالشكل التالي (بلغة وهمية) (n) function fa
if (n=1 or n=0) return1 else return fa (n-1)+fa (n-2)
end