• Like
Prog guide 1
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Published

prog guide

prog guide

Published in Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
705
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
14
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. ‫مختصر‬ ‫دليل لغات البرمجة‬ ‫كتبه‬ ‫علي آل ياسين‬ ‫راهب في صومعة‬ ‫عضــــو‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 2. :: ‫:: بسم ال الرحمن الرحيم‬ :: ‫:: تم اعداد الكتاب باستخدام برنامج‬ ‫ رخصة الكتاب‬Creative Commons http://creativecommons.org/licenses/by-nc-sa/3.0/us/ ‫مرفق في النهاية مستند الترخيص‬ http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 3. ‫:: اهداء ::‬ ‫الى ناحيتـــها ،،‬ ‫الى قبلتهـــا ،،‬ ‫الى سموهـــا ،،‬ ‫الى حبهــــا ،،‬ ‫الى روحها ،،‬ ‫الى جسمها ،،‬ ‫الى وقوفها ،،‬ ‫الى جلوسها ،،‬ ‫الى قنوتها ،،‬ ‫الى دعائها ،،‬ ‫الى ركوعها ،،‬ ‫الى سجودها ،،‬ ‫الى انبساطها ،،‬ ‫الى انقباضها ،،‬ ‫الى ابتسامتها ،،‬ ‫الى سرورها ،،‬ ‫الى صاحبــــة الشــــــأن ،،‬ ‫اليك ،، جعلني ال فداك ،،‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 4. ‫:: مدخـــل ::‬ ‫• بسم ال الرحمن الرحيم و الصلة و السلم علــى ســيد المرســلين محمــد و‬ ‫اله الطاهرين ، اللهم صل على محمد و ال محمد كما صليت على ابراهيم و‬ ‫ال ابراهيــم اللهــم و صــل و ســلم و ترحــم و بــارك علــى محمــد و ال محمــد‬ ‫كأفضل ما صليت و باركت و ترحمت على احد من خلقك انك سميع مجيد.‬ ‫• جائتني فكرة هذا الكتاب اللكتروني بعد ان قــرات كتــاب "حــرب البرامــج"‬ ‫للكاتب الرائع كيث كرتس، و على الرغم من ان عملي هــذا لــم و لــن يصــل‬ ‫الى مستوى عمل شخص في مستوى هذا المبرمج ، ل مــن حيــث الكــم "‬ ‫003 صــفحة" و ل مــن حيــث المســتوى "خــبرة ســنين فــي البرمجــة مــع‬ ‫ميكروسوفت و غير ذلك.‬ ‫• ال ان هذا لم يمنعني من ان اشرع في كتيب يكون بمثابة دليل مختصــر الــى‬ ‫لغات البرمجة متجنبا الطالة المملة و التفاصيل التقنية الدقيقــة او التوغــل‬ ‫في شرح الكواد البرمجية التي من شأنها ان تبعد كل من ليــس لــه اهتمــام‬ ‫بالبرمجة.‬ ‫• عملي اذا في هــذا المختصــر هــو التعريــف بــالخطوط العريضــة بــاهم لغــات‬ ‫البرمجة في عالمهـا الواسـع. مـع اضـافة تعريـف بـأهم المصـطلحات الـتي‬ ‫يجب ان تعرف كي نستطيع من خللها قراءة تلك الخطوط العريضة.‬ ‫• و هذه النسخة النهائية الولى اطرحها في منتداي المفضــل مجتمــع لينكــس‬ ‫العربي ليماني بان الذي جعل المصادر الحرة عظيمة هو مبدا المشــاركة ،‬ ‫لهذا انا اطمح في ان ارى القتراحات و النقد لهذه الصدارة كي نستمر في‬ ‫مسلسل تطور هذا الكتاب من مسودة ابتدائيــة كمــا كــان قبــل ســنة و بضــع‬ ‫شهور الى كتاب غني و مفيد خلل الشهور القادمة.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 5. ‫• عليــه اشــكر كــل مــن ســاعدني و اخــذ بيــدي ســواء: بعبــارات شــكر و‬ ‫استحســان ، نقــد بنــاء او اقــتراح مفيــد و اطمــح للمزيــد مــن المشــاركة و‬ ‫المعونة.‬ ‫• يوجد الكثير من المصطلحات البرمجيــة البحتــة طبعــا لــم اســتطع تفاديهــا و‬ ‫ايضا لم يكن باستطاعتي اضافة تعريفهــا كلهــا خــوف الطالــة و لكــن قمــت‬ ‫باضافة مقالة اضافية تعنــى بشــرح اهــم تلــك المصــطلحات مــع اســتعراض‬ ‫سريع لهم نمــاذج البرمجــة و ذلــك نــزول عنــد رغبــة الكــثير مــن اخــواني‬ ‫العضاء. و ايضا ارفقت في نهاية الكتاب مقالة تعنى بكيفية انشاء برنامج‬ ‫بالقليل من الجهد و دراسة بعض جوانب التطوير و المــور الــتي يجــب ان‬ ‫تأخذ في الحسبان في هذه العملية.‬ ‫• تخصصــي فــي علــوم الحاســب اللــي طبعــا ل يعطينــي الخــبرة الكافيــة فــي‬ ‫استعراض كل لغات البرمجة ، بل في حقيقة المر اللغات التي تعاملت معها‬ ‫هي فقط بيرل كلغة اساسية و سي++ و جافا و سمول تولك و بي اتش بي‬ ‫و قليل جدا من بايثون فكان هناك حاجة كبيرة للترجمة الصرفة في اللغــات‬ ‫الباقية فارجو الشارة الى مواطن الخلل فــي اي مكــان مــن هــذه المقــالت‬ ‫كي اقوم بتصحيحه ان وجد في الصدارات القادمة.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 6. ‫:: مقدمة ::‬ ‫• ل اريد ان امثل دور المبرمج المحنك هنا ، فأنا واقعا لست اهل لذلك، و لكـن‬ ‫بحكم تخصصي في هذا المجال و اهتمــامي بالجــانب النظــري منــه خاصـة ،‬ ‫احببــت ان اكتــب بعــض الســطر لمــن لــديهم اهتمــام بالبرمجــة و لكنهــم لــم‬ ‫يقدموا بعد :‬ ‫• هناك نقــاط كــثيرة يجــب ان تاخــذ فــي الحســبان قبــل الشــروع فــي تعلــم لغــة‬ ‫برمجة، و لكن لحظــت ان المشــكلة الساســية عنــدنا هــي ليســت فــي عــدم‬ ‫القدرة على اختيار لغة معينة بل في عدم العزم على التعلم ابتداء. من منا ل‬ ‫يحب ان يقال عنــه مبرمــج ؟ خاصــة ان البرمجــة مثــل الرياضــيات يوصــف‬ ‫اصحابها بالذكاء و العبقرية . الكثير منا يقــول و يتمنــى و يخطــط ان يكــون‬ ‫مبرمجا عندما يقرا عن المبرمجين و المخترقين و قصص نجاح البرامج و‬ ‫المواقع و لكن عندما يبدا اول خطــوة فــي الدراســة يعــرف ان هنــاك الكــثير‬ ‫ليتعلمه و ان المادة ليست ممتعة كما كان يتصور و يبدا بالشعور بالممــل و‬ ‫من ثم يترك ما شرع فــي قراتــه مــن كتــاب او دورة تعليميــة . هنــاك حكمــة‬ ‫يابانية تقول " الطموح بدون عمل مجرد حلم يقظة ". شخصيا كنت اعاني‬ ‫من هذه المشكلة و هي تكديس الكتــب و الــدورات و المحاضــرات و غيرهــا‬ ‫على امل اني ساقراها و اشرع في تعلمها في وقت ما ! و الن لهــا ســنوات‬ ‫و لم اقرا منها شي ! اذا هذه المشكلة الولى التي يجب ان نجتازها ! و هي‬ ‫ان ندرك ان مجرد تحميل الكتب و الدورات التعليمية سواء في البرمجــة او‬ ‫غيرها من الفنون لن يجعل منا شيئا ! بل هو البدء و الصرار في تعلم هذه‬ ‫الشياء المملــة و المــواد الثقيلــة و اكمــال الكتــب و الــدورات الــى نهاياتهــا‬ ‫بالضــافة الــى الممارســة و التفكيــر هــو مــا يضــيف الــى حصــيلتنا الشــيء‬ ‫المفيد.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 7. ‫• حسنا الن ، انت عازم على المواصلة و الجد في تعلم لغــة برمجــة معينــة و‬ ‫لكنك ل تســتطيع ان تختــار اي لغــة تناســبك؟ هــذه المشــكلة الثانيــة و نــرى‬ ‫الكثير من المواضيع من هذه الشاكلة ماذا اتعلم ؟ مــا هــي افضــل لغــة ؟ مــا‬ ‫هي اقوى لغة ؟ ايهما القوى بيرل او بــايثون ؟ جافــا او ســي شــارب ! فــي‬ ‫حقيقة المر ل يوجد شيء اسمه اللغة القوى و كل مــن يقــول هنــاك شــيء‬ ‫من هذا القبيل فهو في حقيقة المر واهم ، فكل لغة قوية في جانب معيــن و‬ ‫عادة ما يكون هو الجانب الذي انشئت من اجلــه اساســا، طبعــا يوجــد لغــات‬ ‫تصلح لكل شيء تقريبا و لكن يبقى انها ل تقدم كفائة و انتاجيــة عاليــة فــي‬ ‫كــل شـيء فمثل لغـة مخصصـة للـويب مثــل بـي اتـش بــي و ان كــان هنــاك‬ ‫امكانيــة عمــل برامــج ســطح مكتــب بهــا فهــي لــن تكــون بقــوة و ســهولة و‬ ‫انتاجية لغات البرمجة المخصصة لهذا الجانب و العكس صحيح . علــى هــذا‬ ‫فسيكون الجواب على سؤالك هو: ما هو احتياجك؟ ماذا تريــد ان تبرمــج؟‬ ‫هل تريد ان تتعلم لنفسك ام لسوق العمل ؟ و منه تختار لغة البرمجــة الــتي‬ ‫تريدها، لهذا هذا الكتيب ربما يكـون جيـدا فـي اختيـار لغـة برمجتـك الولـى‬ ‫فهــو يعرفــك بالهــداف الساســية الــتي انشــئت لهــا لغــات البرمجــة و اهــم‬ ‫التطبيقات التي تستخدم فيها هذه اللغات. و النقطة الجديرة بالذكر ايضا هي‬ ‫اطلعك على امثلة مــن طريقـة كتابـة الكـواد فـي لغــات مختلفـة باعتقــادي‬ ‫الشخصي سيؤثر على اهتمامك و اســتمتاعك بلغــة البرمجــة الــتي تختارهــا‬ ‫فهناك الكثير من المبرمجين يستخدمون لغات معينة لنهم يحبــون اســلوبها‬ ‫فــي الكتابــة و ايضــا طريقــة معالجتهــا للمشـاكل البرمجيـة . مثل : اذا كنـت‬ ‫تحب ان يكون كل شيء واضح في اسماء المتغيــرات و الكلمــات المفتاحيــة‬ ‫و غيرهــا و تكــره اســتخدام الكــثير مــن الختصــارات و الرمــوز كــالقواس‬ ‫الكثيرة في ليسب و القواس المعقوفة و ما الــى ذلــك فــذلك بــالطبع ســيؤثر‬ ‫علــى اختيــارك. مثــاله : قــولهم عــن اقــواس لغــة البرمجــة ليســب ) جهنــم‬ ‫القواس ( ، و لكن يقول الخر ) عندما وصلت الى مرحلة التنــوير ارتفعــت‬ ‫القواس !( .‬ ‫•‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 8. ‫ربما يستصغر البعض هذه النقطة و لكن في حقيقة المر هذه امور فطريــة‬ ‫ل يمكــن تجاهلهــا! أل يمكــن ان تكــره قــراءة كتــاب لن خطــه لــم ترتــح لــه‬ ‫عينك ؟ و ان كان هذا الكتاب الكثر مبيعا و غني بالمحتوى!‬ ‫الشيء الهم هو:‬ ‫• ان تعلم ان تعلمك لي لغة برمجـة سـيفيدك كـثيرا حــتى لــو انتقلـت الـى لغـة‬ ‫اخرى .‬ ‫• ان تعلم ان لغــات البرمجــة مبــاديء ان فهمتهــا ســهل عليــك النتقــال حســب‬ ‫الحاجة الى لغة اخرى.‬ ‫• لهذا نرى ان اغلب المبرمجين يعرفون اكثر من لغة و يســهل عليهــم التــأقلم‬ ‫مع اي لغة جديدة يفرضها عليهم سوق العمل ، و كمثــال فــي بيــرل لــم اكــن‬ ‫اعرف كيف اقوم بعمل برنامج ذو واجهة رسومية لننــي كنــت معتــاد علــى‬ ‫عمل برامجي على الويب او سطر الوامر و لكن بعد تعلمــي مكتبــة ‪ Tk‬و‬ ‫فهمي لكيفية عمــل الواجهــات الرســومية اســتطعت بكــل بســاطة و يســر ان‬ ‫انقل برنامجي الى مكتبة ‪ wxperl‬و ايضا واجهة ‪.. GTK‬‬ ‫• لــذلك شخصــيا ارى الهميــة المطلقــة الــتي يغفــل عنهــا الكــثيرون للجــانب‬ ‫النظري و المنطقي للبرمجة بدل التركيز على حفــظ الــدوال و الكــواد فهــذه‬ ‫اشياء بسيطة جدا حتى يمكن الرجوع اليها بسرعة من خلل كتيب الــدليل ،‬ ‫بل يجب ان نعرف كيف يعمل البرنامج ل كيف يكتب البرنامج .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 9. ‫• شيء اخر يجب الشارة اليه هو عدم الهتمام كثيرا بمـا يشـاع عـن افضـلية‬ ‫طريقة معينة في البرمجة ، مثل هناك اشارة دائمــة مــن خلل دراســتي فــي‬ ‫الجامعة الى افضــلية البرمجــة الكائنيــة و لكــن يجــب ان نــدرك ان البرمجــة‬ ‫الكائنية ليست دائما هــي الحــل الفضــل للمشــكلة ، توجــد مشــاكل و برامــج‬ ‫استخدام البرمجة الكائنية فيها مجرد تطويل و تعقيد للحل ، و لكن طبعا في‬ ‫برامج و نـواحي اخـرى سـيكون مـن الصـعب البرمجـة باسـتخدام البرمجـة‬ ‫الجرائية بدل من البرمجة الكائنيــة فيهــا ، لــذلك دائمــا احــب ان اشــير الــى‬ ‫اهمية الجانب النظري في البرمجة و هـو فهـم طــرق البرمجـة و مبادئهــا و‬ ‫من ثم اختيار الطريقة الفضل .‬ ‫• ايضا احـب ان اشـير الـى ان البرمجـة ممتعـة اذا كـانت تحـل مشـكلة نحتـاج‬ ‫لحلها و ال ستكون البرمجة مملة و رتيبة و عــادة مــا نــترك المشــروع فــي‬ ‫منتصفه ، مثل لينوس لم يشرع في كتابة نظامه ال من مشــكلة عاناهــا مــع‬ ‫نظم التشغيل الموجودة في وقته و غيره من المثلة كثيرة ، و هنا نصل الى‬ ‫نقطــة اخــرى و هــي ان البرامــج العملقــة ســيكون مــن الصــعب جــدا علــى‬ ‫شخص واحد فقط تطويرها و كتابتها و هنا تظهر اهمية العمــل الجمــاعي و‬ ‫الحتكاك بالمبرمجين الخرين و المشاركة في المحافل البرمجيــة و دراســة‬ ‫اكواد الغير للعمل من حيث انتهى الخرون و ليس تضيع الــوقت فــي اعــادة‬ ‫اختراع العجلة و تشتيت الجهود .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 10. ‫• النقطة الخيرة التي احب ان اختم بها هــي مســألة الدراســة البرمجيــة ، فــي‬ ‫الجامعــة نمــل و نتضــجر مــن الشــياء النظريــة الــتي نتعلمهــا و نريــد تعلــم‬ ‫الشــياء الكــووول علــى مــا يقــال !.. و لكــن لحقــا نــدرك ان هــذه الشــياء‬ ‫النظرية المملة هي اهم ما تعلمناه و نرى لحقا مكانها في عــالم البرمجــة ،‬ ‫كمثال كان هناك شخص دائما يتضجر من البرمجــة لســطر الوامــر و يقــول‬ ‫ان هذا شيء قديم اكل الدهر عليه و شــرب و انــه علينــا ان نتعلــم البرمجــة‬ ‫الحديثة فما نفع برامج سطر الوامر .. و لكن فــي حقيقــة المــر الجامعــة و‬ ‫الكتب بشكل عام تعلمك البرمجة لسطر الوامر لنها تركز على المنطق فــي‬ ‫حــل المشــاكل البرمجيــة و ســطر الوامــر مجــرد اداة لســتلم المتغيــرات و‬ ‫التفاعــل مــع المســتخدم ، لحقــا ادركنــا ان الواجهــات الرســومية و برامــج‬ ‫الويب مجرد قشور ل تنفع اذا لم يكـن خلفهــا اكـواد برمجيـة سـحرية تعمـل‬ ‫بصمت خلف الستار ! و ان الذي تعلم تلك الكواد و المباديء و تمكن منهـا‬ ‫لم يجد صعوبة في ان يغلفها بواجهات حديثة مثل ‪ QT‬او ‪..! GTk‬‬ ‫:: &&& ::‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 11. ‫:: نماذج البرمجة و اهم المصطلحات ::‬ ‫في البدء كان الصفر و الواحد …‬ ‫ثم جاءت اللغات التجميعية ، الــى هنــا و نحــن نتكلــم عــن اللغــات منخفضــة‬ ‫المستوى اي انها ذات ارتباط شديد بالعتاد ، و ان كنا مع اللغات التجميعيــة‬ ‫بدانا الماكروز و بعض الخصائص التي سنراها لحقا في اللغــات الجرائيــة‬ ‫بشكل اكثر تقدما .‬ ‫ثــم بــزغ الفجــر الجديــد مــع اللغــات عاليــة المســتوى و ظهــرت البرمجــة‬ ‫الجرائية لتعلن عن ظهور عصر الهتمام بالمشكلة البرمجية !..‬ ‫فقبل ان نتكلم عن لغات البرمجــة يجــب ان نســلط الضــوء علــى اهــم نمــاذج‬ ‫البرمجة و اهم المصطلحات المرتبطــة بهــا ليســهل علينــا لحقــا فهــم لغــات‬ ‫البرمجــة مــن خلل قــراءة اســطرها العريضــة . و فــي نهايــة هــذه الفقــرة‬ ‫سنتعرض لمصطلحات متنوعة.‬ ‫‪Programing Paradigms‬‬ ‫يجب ان ننتبه الى انه ل يوجد اي تعريف رســمي لي نمــوذج مــن النمــاذج‬ ‫التية ، و نقاط الشتراك كثيرة فالحدود هنا ليست فواصل ل يمكن تجاوزها‬ ‫فالبرمجة الشيئية في النهاية هي برمجة اجرائية بطبيعتها. و لكن ما يعنينا‬ ‫في حقيقة المر هنا هو النقاط التي يركز عليها كل نموذج من هذه النمــاذج‬ ‫حيث عليه تتغير طريقة تفكير المبرمج في نظرته و تحليله و حله للمشــاكل‬ ‫البرمجيـة . و هـذه النمـاذج القليلـة المـذكورة هنـا هـي المهمـة و ال هنـاك‬ ‫العديد و العديد من النماذج كما هنالك العداد المهولة من لغات البرمجة.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 12. ‫‪ :: Imperative‬البرمجة المرية ) اللزامية(‬ ‫تصف الحوسبة من ناحية الجمل التي تغير حالة ‪ State‬البرنامج. و تندرج‬ ‫تحتها العديد من النماذج كما سيأتي..‬ ‫‪ :: Non-Structured Programing‬البرمجة الغير منظمة‬ ‫قبل البدء في الكلم عن النماذج المرتبة )الجرائيــة ، الكائنيــة ..( يجــب ان‬ ‫نذكر بأنه في البداية كام هنــاك نمــوذج البرمجــة الغيـر مرتبـة. يوجــد لغــات‬ ‫عالية و منخفضة المستوى تستخدم هذا النموذج منها:‬ ‫‪MSX Basic‬‬ ‫‪GWBasic‬‬ ‫‪Focal Joss‬‬ ‫‪Mumps‬‬ ‫‪Telcomp‬‬ ‫‪Cobol‬‬ ‫‪Machin Level code‬‬ ‫بعض نظم السمبلي‬ ‫‪Assembly Debuggers‬‬ ‫و بعض لغات السكربتنج مثل ‪.MS-Dos Batch file Lang‬‬ ‫البرمجة الغير منظمة تنتقد بعنــف لنهــا تنتــج اكــواد صــعبة القــراءة او مــا‬ ‫يعرف بـ ) اكواد السبجتي!( لهذا ل تعتبر في بعض الوقات خيــار مناســب‬ ‫للمشاريع المهمة و لكن في الجهــة المقابلــة يمــدحها البعــض للحريــة الــتي‬ ‫توفرهـــا للمبرمـــج و يشـــبهونها بطريقـــة كتابـــة موتســـارت للمقطوعـــات‬ ‫الموسيقية.‬ ‫البرامج التي تكتب بهذه الطريقـة عـادة مـا تتكـون مـن مجموعـة اوامـر او‬ ‫جمل متتالية )عادة كل جملة في سطر مستقل (.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 13. ‫اما الســطر فتكــون مرقمــة او معنونــة )‪ (Labels‬و مــن خلل هــذه الليــة‬ ‫يمكن للبرنامج ان يقفز الى اي سطر برمجي.‬ ‫البرمجة غير المنظمة توفر اساسيات اليات التحكم بسير البرنامــج و تــوفر‬ ‫ايضا الـ ‪ Subroutines‬و سنتكلم عن هذه الشياء بقليل من التفصيل فــي‬ ‫البرمجة الجرائية.‬ ‫يبقى ان نعرف ان البرمجة غير المرتبة تتيح لنا انواع البيانات الولية مثل‬ ‫العداد و النصوص و القوائم .‬ ‫‪ :: Structured Programing‬البرمجة المنظمة‬ ‫البرمجــة المنظمــة كالبرمجــة الغيــر منظمــة تعتــبر احــدى شــعب البرمجــة‬ ‫المرية ) احدى اهم و اكبر نماذج البرمجة(. و اشتهرت البرمجــة المنظمــة‬ ‫بازالتها للجملة الشهيرة ‪ GOTO‬او الحد من استخدامها.‬ ‫و هناك ثلث منهجيات اكثر شهرة لكتابة البرامج المنظمة :‬ ‫1 - طريقــة ادســجار دايجســترا حيــث هيكــل البرنامــج مكــون مــن مجموعــة‬ ‫هياكل جزئية . بهذه الطريقة يمكن فهــم البرنامــج مــن خلل فهــم كــل جــزء‬ ‫لوحده و به نتحصل على فصل و عزل للمهمات المختلفة.‬ ‫2 - طريقة اخرى مشتقة من طريقة دايجسترا حيث يتم تقسيم البرنامج الــى‬ ‫برامج جزئية مع وجود مدخل واحد فقط للبرنامــج و لكــن تعــارض و بقــوة‬ ‫مبدء المخرج الموحد.‬ ‫3 - طريقة جاكسون للبرمجة المنظمة و الــتي تعتمــد علــى محــاذاة البيانــات‬ ‫المنظمة مع اجزاء البرنامج المنظمة.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 14. ‫يوجــد علــى القــل ثلث طــرق اساســية لتصــميم برامــج البيانــات المنظمــة‬ ‫مقترحة باسماء اصحابها :‬ ‫1. ‪J. Dominique Warner‬‬ ‫2. ‪Ken Orr‬‬ ‫3. ‪Michael Jackson‬‬ ‫من المنظور الدوني يمكن ان نرى البرامج المنظمــة علــى انهــا مكونــة مــن‬ ‫اليات تحكم مسار البرنامج تنقسم الى ثلث انواع :‬ ‫‪ : Sequence‬و نقصد بها تنفيذ اوامر بترتيب تسلسلي منظم.‬ ‫‪ : Selection‬و نقصــد بهــا تنفيــذ مجموعــة اوامــر اعتمــادا علــى حالــة‬ ‫البرنامج و ذلك عادة مــن خلل الكلمــات المفتاحيــة : ..‪if.. then .. else‬‬ ‫‪..switch..case‬‬ ‫‪ : Repetition‬و نقصد بها تنفيذ اوامر معينة و تكرار عمليــة التنفيــذ الــى‬ ‫ان يصل البرنامج الى حالة معينة أو تنفيذ مجموعة اوامر علــى كــل عنصــر‬ ‫من عناصر مجموعة ما . و ذلك يتم عادة من خلل الكلمات المفتاحية :‬ ‫‪while.. repeat .. for .. do while.. until‬‬ ‫ربما يمر علينا مصطلح ‪ Block-Structured‬و هو صفة للغات البرمجــة‬ ‫التي توفر فــي طريقــة كتابتهــا الكلمــات المفتاحيــة مــع القــواس الــتي تضــم‬ ‫الوامــر المجــزءة . امــا النــوع الثــاني هــو ‪ Comb-Structured‬و هــي‬ ‫اللغات التي توفر الية الكلمــات المفتاحيــة المتسلســلة الــتي تحتــوي بـداخلها‬ ‫الوامر المجزءة . مثال الخير فــي لغــة ‪ Ada‬الــ ‪ Block‬مكــون مــن اربــع‬ ‫اجزاء :‬ ‫‪DECLARE BEGIN EXCEPTION END‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 15. ‫‪ :: Procedural‬البرمجة الجرائية‬ ‫تعتمد على عملية توفير الخطوات اللزمة لكي يصــل البرنامــج الــى الحالــة‬ ‫المطلوبة. و هي من اقدم النماذج و اكثرها انتشــارا و قريبــة جــدا للطريقــة‬ ‫الفطرية في التفكير. و سنستعرض بعض اهــم المفــاهيم الــتي تتعامــل معهــا‬ ‫باختصار ...‬ ‫المتغيرات ‪:Variables‬‬ ‫في البرمجة كما هو الحال في الرياضيات هناك حاجة ماسـة للتعامـل مـع المتغيـرات و ل‬ ‫يخلو برنامج ما من متغير ال في حالت نادرة جـدا . ابسـط انـواع المتغيـرات هـو الـذي‬ ‫يحمل قيمة واحدة فقط . مثل ص = 21. في هذه الحالة ص متغيـر يحمـل قيمـة معينـة‬ ‫‪ Value‬و لكن هذه القيمة متغيرة فهي ليست ثابتة طالما البرنامج فـي طـور التنفيـذ فـي‬ ‫اي لحظة ممكن تتغير هذه القيمة . بعض لغات البرمجة مثل جافـا تسـتوجب تحديـد نـوع‬ ‫المتغير فاذا كان المتغير من نوع حرف مثل فل يمكن اسناد قيم رقمية للمتغير و لكـن فـي‬ ‫لغات البرمجة الديناميكيةمثل بيرل و بي اتش بي ل يوجـد مثـل هـذا التقيـد فـالمتغير ص‬ ‫مثل يمكن ان يحمل اي قيمة رقمية او نصية ..ألخ .‬ ‫مثال:‬ ‫;1 = ‪my $number‬‬ ‫في هذا المثال اعلنا عن المتغير و في نفس الوقت اسندنا له قيمــة و هــي 1‬ ‫كان بالمكان ان نعلن عن المتغير فقط دون اسناد اي قيمة :‬ ‫;‪my $number‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 16. ‫مثال اخر :‬ ‫;”‪my $name = “ali‬‬ ‫;”‪$name = “Tomy‬‬ ‫في هذا المثال المتغير كان يحمل قيمة علي و لكن تم تغيير القيمة الى تومي‬ ‫و سيظل المتغير يحمل اسم تومي الى نهاية البرنامج اذا لم يتم اعادة تغييــر‬ ‫هذه القيمة.‬ ‫القوائم ‪:Arrays‬‬ ‫طيب ماذا لــو كنــا نريــد ان ننشــيء متغيــر و لكــن يحمــل عــدة اســماء . مثل‬ ‫اسماء اصدقاء البيئة. يمكننا ان نستخدم القــوائم او اللســتة و هــي متغيــر و‬ ‫لكن يحمل عدة قيم بداخله و ذلك بحســب ترتيـب رقمـي فاللسـتة تبـدا مـن 0‬ ‫للعنصر الول و 1 للعنصر الثاني ..الخ‬ ‫مرة اخرى هنــاك لغــات برمجــة تطلــب تحديــد نــوع العناصــر الموجــودة فــي‬ ‫القائمة و لغات ل تطلب، مثالنا هنا قائمة باسماء طلب ..‬ ‫;‪my @array = qwali yasser salman‬‬ ‫الن المتغيــر ‪ array‬يحمــل ثلث قيــم علــي و ياســر و ســلمان و يمكــن‬ ‫الوصول الى كل قيمة بتحديد رقم القيمة :‬ ‫;]0[‪print $array‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 17. ‫هذا المر مثل سيطبع لنــا القيمــة ذات الــترتيب 0 و هــي بعبــارة اخــرى اول‬ ‫قيمة موجودة و في مثالنــا هــي علــي. طبعــا هكــذا يمكننــا اضــافة عناصــر و‬ ‫ازالة عناصر بكل بساطة.‬ ‫‪:Null value‬‬ ‫و هي القيمة الغير معرفة و ل تعني الصفر كما يتوهم البعض . مثل العلن‬ ‫عن متغير بدون اسناد قيمة سيحتوي على قيمة غير معرفة ، و من الشياء‬ ‫الساسية في اختبار البرامج البحث عن القيم الغير معرفــة و يمكــن التحقــق‬ ‫بأن المتغير يحمل قيمة باليات مختلفة منهــا الدالــة ‪ defined‬فــي بيــرل ، و‬ ‫مثالها :‬ ‫;‪my $number‬‬ ‫{))‪if (defined($number‬‬ ‫};‪print $number‬‬ ‫}"‪else {print "undefined value‬‬ ‫الهاش ‪:Hash‬‬ ‫يوجد نوع اخر من المتغيرات يشبه القوائم الى حد كبير اسمه الهاش و لكن الختلف هنا‬ ‫ان القيم تمثل على شكل مفتاح ‪ key‬و قيمة ‪ . value‬بعبارة اخرى كنا في القوائم نشير‬ ‫الى القيم باستخدام مفاتيح رقمية 0...* و لكن في الهاش يمكننا نحن ان نحدد المفاتيح و‬ ‫التي يجـب ان تكـون مميـزة و غيـر مكـررة و بـذلك نسـتطيع تمثيـل قاعـدة بيانـات مثـل‬ ‫القواميس و دليل الهاتف ..الخ‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 18. ‫مثال:‬ ‫/‪my %hash= qw‬‬ ‫‪0555555 ali‬‬ ‫‪0666666 yasser‬‬ ‫;/‪0899999 basem‬‬ ‫فــي هــذا المثــال قمنــا بانشــاء هــاش يحمــل ارقــام المــوظفين و لن ارقــام‬ ‫التليفونات عادة مميزة و غير مكررة قمنا بجعلها مفاتيح للوصول الــى اســم‬ ‫الموظف المطلوب .‬ ‫مرة اخرى يمكننا التعديل على كل عنصر في الهاش لوحده او نقــوم بعمليــة‬ ‫على جميع العناصر، و ادناه مثال يطبع كــل القيــم الموجــودة فــي الهــاش و‬ ‫سنتكلم عن دوائر التكرار بعد قليل :‬ ‫)‪foreach $phoneNumber(keys %hash‬‬ ‫}"‪{print "$phoneNumber = $hash{$phoneNumber} n‬‬ ‫مسار البرنامج ‪: Workflow‬‬ ‫عندما نكتب برنامجا سيكون علينا في اغلب الحيان التحكـم فـي سـير البرنامـج اعتمـادا‬ ‫على المتغيرات و طلبات المستخدم ، فقط في البرامج البسيطة ل نحتاج الى تغييــر مســار‬ ‫البرنامج .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 19. ‫في هذه الحالة سيقوم المفسر بتنفيذ الوامـر مـن البدايـة الـى النهايـة و ينتهـي البرنامـج‬ ‫بشكل تسلسلي ‪ ، Sequenced‬مثال:‬ ‫;1= ‪{my $number‬‬ ‫;2= 2‪my $number‬‬ ‫;2‪print $number+$number‬‬ ‫}‬ ‫في هذا المثال سيقوم البرنامج بانشاء متغير و يسند له قيمة و متغيــر ثــاني‬ ‫و يسند له قيمة و في النهاية يجمع القيمتين و يطبعهما الى الشاشة .‬ ‫نلحظ عدم وجود اي تشـعب فـي البرنامـج . و لكـن هـذا كمـا قلنـا للبرامـج‬ ‫البسيطة و لكن في اغلب الحيــان ســنحتاج الــى ادوات للتحكــم بســير العمــل‬ ‫‪ Control Structeres‬و مرة اخرى كل لغة برمجة توفر اليات مختلفة و لكن سنأخذ‬ ‫بعض المثلة الدارجة :‬ ‫الجملة الشرطية ‪:If‬‬ ‫باستخدام ‪ if‬و الـتي تعنـي "اذا" نسـتطيع ان نحصـر تنفيـذ جـزء معيـن مـن البرنامـج‬ ‫بحسب الشرط. مثال:‬ ‫)"‪if ($user eq "Ali‬‬ ‫}"!‪{print "Access granted‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 20. ‫هذا مثال بسيط لدينا عبارة تأكيد دخــول و لكــن ل نريــد ان نطبعهــا لكــل مــن‬ ‫يدخل الى برنامجنا، فقط في حالة تحقق الشرط نطبع العبارة . الشرط هو ما‬ ‫بين القوسين الذين يليان كلمة ‪ ، if‬و في هــذه الحالــة الشــرط هــو ان يكــون‬ ‫المتغير يحمل قيمة ‪. Ali‬‬ ‫جميل، الن نستطيع ان ننفذ امر اخر اذا كــان الشــرط غيــر متحققــا . و ذلــك‬ ‫يتم عن طريق استخدام كلمة ‪. else‬‬ ‫}"‪else{ print "I don't know you‬‬ ‫الن البرنامــج عنــدما يصــل الــى الجملــة الشــرطية و يــرى ان الشــرط غيــر‬ ‫متحقــق ســينفذ مــا هــو موجــود فــي ‪ else‬و فــي مثالنــا يطبــع جملــة انــا ل‬ ‫اعرفك !.‬ ‫يمكننا ايضـا اضــافة مزيـد مـن الشـروط لنفـس الجملـة الشـرطية باســتخدام‬ ‫‪ ) elsif‬حرف ‪ e‬محذوف عمدا في لغة البرمجة بيرل( .‬ ‫)"‪elsif($user eq "fatima‬‬ ‫}"!‪{print "Hi fatima‬‬ ‫الن ســيقوم البرنامــج بــالتحقق مــن الشــرط الول و اذا كــان غيــر متحققــا‬ ‫سيذهب الى الشرط الثــاني و يتأكـد هــل قيمــة المســتخدم فاطمـة ؟ فــاذا كــان‬ ‫الشــرط متحققــا ســيطبع الجملــة المناســبة و ال ســيذهب الــى ‪ else‬و يطبــع‬ ‫الجملة انا ل اعرفك !.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 21. ‫‪:Unless‬‬ ‫الجملة الشرطية ‪ Unless‬تعمــل بعكــس الجملــة الشــرطية ‪ if‬تمامــا . فكأننــا‬ ‫نقول اذا كان الشرط غير متحقق افعل كذا و كذا . بعكس ما كنا نفعــل فــي ‪if‬‬ ‫حيث كنا نقول اذا كان الشرط متحقق فافعل كذا و كذا ..‬ ‫مثال :‬ ‫)01 == ‪unless($a‬‬ ‫{‬ ‫;"01 ‪print "The number isn't‬‬ ‫}‬ ‫في هذا المثال سيقوم البرنامج بطباعة جملة " هذا الرقم ليــس 01” مــا دام‬ ‫ان الشــرط فــي العلــى غيــر متحقــق و بــالطبع كنــا نســتطيع ان نكتــب هــذا‬ ‫بطريقة ‪ if‬و لكن سيكون الشرط بالنفي و ليس باليجاب … هكذا :‬ ‫)01 =! ‪if ($a‬‬ ‫{‬ ‫;"01 ‪print "The number isn't‬‬ ‫}‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 22. ‫دوائر التكرار:‬ ‫في بعض الحيان نحتاج ان نكرر تنفيذ اوامر معينة ، و هنا تأتي دوائر التكرار .. عادة ما‬ ‫يرافق كل دائرة تكرار عداد لديه قيمة صغرى و قيمة كـبرى لكـي تنتهـي عمليـة التكـرار‬ ‫عنـد الوصـول للقيمـة الكـبرى و بـذلك نضـمن عـدم اسـتمرار التكـرار الـى مـا ل نهايـة‬ ‫‪.infinite loop‬‬ ‫لنبدا بالــ ‪ for loop‬مثالها على طريقة السي :‬ ‫)++‪for ($a=0;$a<10;$a‬‬ ‫}"‪{print "loop $a‬‬ ‫نلحظ ان بعد كلمة ‪ for‬يوجد قيمة صــغرى لبدايــة العــداد و مــن ثــم الشــرط‬ ‫الذي ستتحقق منه الدائرة عند تنفيذ كــل دورة و هــو هنــا ان يكــون المتغيــر‬ ‫اقل من 01 . و في النهاية سنزيد قيمة العداد +1 مــع انتهــاء كــل دورة .. و‬ ‫بذلك ستنفذ الوامر التي بين القواس المعقوفة 01 مرات لنحصل على هــذا‬ ‫الناتج :‬ ‫‪loop 0loop 1loop 2loop 3loop 4loop 5loop 6loop 7loop‬‬ ‫9 ‪8loop‬‬ ‫ايضا يمكننا ان نمرر قائمـة بيـن قوســي الــ ‪ for‬مثل مــن 1 الـى 01 حيــث‬ ‫ستكون القيمة الصغرى واحد و القيمة الكبرى 01.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 23. ‫)01..1( ‪for‬‬ ‫{‬ ‫"‪print "looping 10 times!n‬‬ ‫}‬ ‫هنا سنطبع الجملة التي بين القواس المعقوفة 01 مرات.‬ ‫‪:Foreach‬‬ ‫طريقة عملها مشابهة للـ ‪ for‬و تختلف قليل بين كل لغة و اخرى و لكن في‬ ‫بيرل عادة ما نستخدمها مع القوائم...مثل :‬ ‫;/‪my @list = qw/Ali Sara Yosra Mamdoh‬‬ ‫{)‪foreach (@list‬‬ ‫;"‪print $_, " You are a member of the family!n‬‬ ‫}‬ ‫في هذا المثال نلحظ ان لكل عنصر من عناصر القائمة ســيتم طباعــة اســمه‬ ‫و مــن ثــم طباعــة الجملــة ‪!You are a member of the family‬‬ ‫امامه . فتكون النتيجة :‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 24. ‫!‪Ali You are a member of the family‬‬ ‫!‪Sara You are a member of the family‬‬ ‫!‪Yosra You are a member of the family‬‬ ‫!‪Mamdoh You are a member of the family‬‬ ‫‪: While‬‬ ‫دائرة التكرار ‪ while‬تقوم بعملية مشــابهة ايضــا فهــي تقــوم بتكــرار تنفيــذ‬ ‫اوامر معينة عدد مرات محددة مازال الشرط متحققا .‬ ‫مثال:‬ ‫;01 =‪$a‬‬ ‫)0 =! ‪while ($a‬‬ ‫};--‪{print $a‬‬ ‫في هذا المثال سنتأكد مــن الشــرط هــل المتغيــر ل يســاوي صــفر؟ اذا كــانت‬ ‫الجابة نعم سيتم طباعة قيمــة المتغيــر مــع انقاصــها -1 . فــاذا كــان الشــرط‬ ‫متحققا تنتهي الدائرة مع وصول المتغير للقيمة 0 . في مثالنا اذا ســيتم العــد‬ ‫التنازلي من 01 الى 1 ...‬ ‫12345678901 :‪Ouputs‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 25. ‫‪do while‬‬ ‫في بعض الحيان نريد ان نقوم بعملية التكرار مرة واحدة علـى القـل بغـض النظـر عـن‬ ‫كون الشرط متحققا او ل هنا نستخدم ‪.. do while‬‬ ‫;01=‪my $a‬‬ ‫{ ‪do‬‬ ‫;"‪print "this is a do while loop‬‬ ‫;++‪$a‬‬ ‫}‬ ‫;)01< ‪while ($a‬‬ ‫نلحظ هنا ان الوامر الموجودة داخل القواس المعقوفة سـتنفذ علـى القـل مـرة واحـدة‬ ‫حتى لو كان الشرط الموجود في ‪ while‬غير صـحيح . فـي مثالنـا قيمـة المتغيـر 01 و‬ ‫الشرط هو ان نقوم بتنفيذ الوامر اذا كان العدد اصغر من عشرة لهذا الشرط غير متحقق‬ ‫و لكن لننا استخدمنا ‪ do while‬فسيتم تنفيذ الوامر مرة واحدة و من ثم تقييم الشــرط‬ ‫و بما انه غير متحقق سنخرج من التكرار .‬ ‫‪:Until‬‬ ‫‪ until‬تقوم بعملية عكسية لما تقوم به ‪ while‬فهي تبدا بشرط غير متحقـق بـدل مـن‬ ‫الشرط المتحقـق فـي ‪ while‬و سـتنتهي الـدائرة عنـدما يصـبح الشـرط متحققـا بخلف‬ ‫‪ while‬التي تنتهي عندما يصبح الشرط غير متحققا .. مثال:‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 26. ‫;01 = ‪my $controller‬‬ ‫)02 == ‪until ($controller‬‬ ‫{‬ ‫;"‪print"going up until 19n‬‬ ‫;++‪$controller‬‬ ‫}‬ ‫في هذا المثال سنقوم بالصعود بداية من 01 و انتهاء الى 91 حيث ســيكون‬ ‫الشرط متحققا عند وصول المتغير الى قيمة 02 و بذلك ينتهي التكرار ..‬ ‫‪:Given-When‬‬ ‫في بعض الحيان بدل من الكثار مـن الجمـل الشـرطية ‪ if else‬يمكننـا ان نحـدد مسـار‬ ‫البرنامج بالية اسهل و اجمل للكتابة حيث سنقوم بتحليل قيمة المتغير و بنـاء علـى قيمتـه‬ ‫سنتخذ الجراء المناسب:‬ ‫{) ‪given( $name‬‬ ‫}"‪when("Ali"){ say "welcome $name your are the 1st‬‬ ‫}"‪when("Saleh"){say "welcome $name your are the 2nd‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 27. ‫‪when("Hashem"){say "welcome $name your are the‬‬ ‫}"‪3d‬‬ ‫}}"‪default{say "I don't know you‬‬ ‫نلحظ هنا كيف ان البرنامج سيختبر قيمة المتغيــر ‪ name‬و عليــه ســيتخذ‬ ‫الجراء المناسب فنحن هنا باسـتخدام كلمـة ‪ when‬سـنحدد القيـم المتوقعـة‬ ‫مثل ان يكــون الســم علــي او صــالح او هاشــم و ل ننســى ان نمــرر قيمــة‬ ‫افتراضــية فــي حــال كــانت قيمــة المتغيــر ل تتطــابق مــع اي مــن القيــم الــتي‬ ‫توقعناها فـ ‪ default‬هنا تعمل عمل ‪ else‬و هي الحالة العامة .‬ ‫‪Switch case‬‬ ‫المثــال اعله علــى طريقــة بيــرل و لكــن فــي بعــض اللغــات الخــرى طريقــة‬ ‫الكتابة تختلف و ان كان المفهوم واحدا فبــدل مــن ‪ given when‬نســتخدم‬ ‫‪ switch case‬حيث ‪ switch‬تاخذ المتغير المراد اختبــاره و ‪ case‬تاخــذ‬ ‫القيم المتوقعة … مثال:‬ ‫;‪use Switch‬‬ ‫{) ‪switch ( $name‬‬ ‫}"‪case "Ali" { say "welcome $name your are the 1st‬‬ ‫}"‪case "Saleh" {say "welcome $name your are the 2nd‬‬ ‫‪case "Hashem" {say "welcome $name your are the‬‬ ‫}"‪3d‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 28. ‫}"‪else {say "I don't know you‬‬ ‫}‬ ‫‪Expression Modifiers‬‬ ‫في اللغة هناك تراكيب مختلفة للجملة مثل "اسمي علي" او "علي هو اسمي" تركيبين‬ ‫مختلفين لنفس المعنى . في اللغات البشرية تتاح هذه المكانيـة لتفيـد معنـى التأكيـد علـى‬ ‫جزء معين من الجملة .‬ ‫مثل علي و خالد ذهبا لحفل التخرج . ماذا لو كنا نريد التأكيد على الحفل و ليس على مــن‬ ‫ذهب للحفل نسـتطيع ان نقـول لحفـل التخـرج ذهـب علـي و خالـد ! هنـا سـنركز اهتمـام‬ ‫السامع الى كلمة حفـل التخـرج . معـدلت التعـابير ‪ Expression modifiers‬تعمـل‬ ‫بمثل هذه اللية فهي تعكس ترتيب الجمل الشرطية و دوائر التكـرار و هـذه امثلـة نلحـظ‬ ‫كيف ان الشرط يقع في نهاية الجملة بعد المر الذي سينفذ في حال كان الشرط متحققا:‬ ‫;1 = ‪$bool‬‬ ‫;5 = ‪$a‬‬ ‫;‪say "I am in love" if $bool‬‬ ‫;‪say "false" unless $bool‬‬ ‫;9 < ‪say "my name is", ($a++) while $a‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 29. ‫‪Regular Expressions‬‬ ‫او باختصار ‪ Regex‬هي التعابير المعتادة و توفرها لغات البرمجــة للتعامــل‬ ‫مع النصوص و المدخلت بالضافة الى استخدامها في ادوات و اوامر ادارة‬ ‫النظم بكثرة. طبعا هذه عالم في حــد ذاتهــا و لكــن نختصــر فنقــول انــه هنــاك‬ ‫رموز توفرها اللغة ) ايضا تختلف من لغــة الــى اخــرى( لكــي تســهل عمليــة‬ ‫التعامل مع النصوص كعملية اجتزاء جزء معيــن او البحــث عــن نــص بهيئة‬ ‫معينة. و سنأخذ بعض المثلة فقط لتقريب الفكرة ...‬ ‫‪1- if($string =~ m/(A|E|I|O|U|Y|a|e|i|o|u|y)/) {print‬‬ ‫}"‪"String contains a vowel!n‬‬ ‫;/‪2-$string =~ s/Ali Yami/Ali Qahtani‬‬ ‫/]‪3-Change everything to upper case: $string =~ tr/[a-z‬‬ ‫;/]‪[A-Z‬‬ ‫/]‪4-Change everything to lower case $string =~ tr/[A-Z‬‬ ‫;/]‪[a-z‬‬ ‫في المثال الول قمنا باختبار النص هــل يوجــد فيــه احــد حــروف العلــة ؟ اذا‬ ‫كان الجواب نعم سنطبع جملة تؤكد هذا المر.‬ ‫في المثال الثاني قمنا باستبدال علي اليامي بعلي القحطاني كمــا نعمــل ‪find‬‬ ‫‪ and replace‬في برامج الوفيس.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 30. ‫في المثــال الثــالث قمنــا بتحويــل النــص الــى الحــروف الكــبيرة و فــي المثــال‬ ‫الخير الى الحروف الصغيرة . ما يهمنا هو // حيث بين هذين نضع التعابير‬ ‫المعتادة و المر المهم الخر هو ما قبل // حيث نضع المعامل مثــل ‪ s‬معامــل‬ ‫الستبدال .‬ ‫‪ :: Event – Driven‬البرمجة المعتمدة على الحداث‬ ‫هنـا مسـار البرنامـج يحـدد مـن خلل الحـوادث ، مثل : الحساسـات او مـن‬ ‫خلل المستخدم كالنقر على الفأرة او رسائل من برامج اخرى او مــن خلل‬ ‫‪ .threads‬عادة نتعامل مع هذه النوعية من البرمجــة جنبــا الــى جنــب مــع‬ ‫برمجة الواجهات الرسومية فهي توفر الية الربط بين الواجهات الرســومية‬ ‫و الكواد البرمجية و قد تكلمت عن اهم مباديء هذه الطريقة فــي البرمجــة‬ ‫في المقالة المرفقة " انت تعرف الكثير ! اكتب برامجك الشخصية"، حيــث‬ ‫سنستعرض كيفية انشاء برنامج يبني بثقل على هذه الطريقة.‬ ‫‪ :: Object Oriented‬البرمجة الشيئية ) الكائنية(‬ ‫الطريقة المتداولة للبرمجة و الكثر شهرة في اوســاط الشــركات الكــبيرة و‬ ‫حتى الجامعات هذه اليام . البرمجة الشيئية ليســت مفهومــا جديــدا بــل لهــا‬ ‫من القدم و التاريخ ما يشهد على نموها و تبلورها علــى مــدى عــدة لغــات‬ ‫برمجية تبنت هذه النظرة ، و لكن تتبع الجـانب التـاريخي ليـس مكـانه هـذه‬ ‫العجالة.‬ ‫قبل ان نتكلم قليل عــن البرمجــة الشــيئية يجــب ان نعــرف لمــاذا لقــت هــذه‬ ‫الطريقة في البرمجة نجاحا واسعا بحيث ان اللغة التي ل تدعم هــذه الرؤيــة‬ ‫البرمجية و ل تتيح الدوات اللزمة لكتابة برامج شــيئية تعتــبر ناقصــة فــي‬ ‫نظر الخبراء و الشركات ؟‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 31. ‫و لهذا نرى ان حتى اللغات التي لم تكتب اصــل علــى النمــوذج الشــيئي فــي‬ ‫وقت لحق يتم اضافة الــدعم لهــذا النمــوذج ، و كمثــال لغــة البرمجــة بيــرل‬ ‫التي هي لغة اجرائية في الصل و لحقا تم اضافة النموذج الشــيئي للغــة و‬ ‫لغة البي اتش بي و غيرها الكثير من اللغات .‬ ‫و ليس ما يهمنا هنا هو كيف تطبق كــل لغــة مفهــوم الكــائن ؟ و مــاذا يعنــي‬ ‫الكائن خلف الستار .. و لكن نعم السؤال المهم هنا ؟ لماذا كل هذا الهتمام‬ ‫بالبرمجة الشيئية مع ان اغلبنا دخلنا عالم البرمجة مــن منطلقــات مختلفــة؟‬ ‫قد يكون المنطلــق الجــرائي اكثرهــا قرابــة للبداهــة! لمــاذا هنــاك مباهــاة و‬ ‫مقارنات بين مستوى دعم كل لغة للبرمجــة الشــيئية ؟ و هنــاك ســؤال مهــم‬ ‫اخر هل الفضلية للغات البرمجة الشيئية الصرفة مثل سمولتولك و ايفل او‬ ‫للغات الهجينة الخرى التي تتيح نوعا من المرونة و ل تجبر المبرمــج فــي‬ ‫ان ينظر لكل شيء على انه كائن ؟‬ ‫شخصيا افضل الطريق الخيــر لنــه حــتى لغــات البرمجــة الكائنيــة الصــرفة‬ ‫تختلف في تطبيق مبــادئ و مفــاهيم البرمجــة الشــيئية فلكــل وجهــة نظــر و‬ ‫رؤى لمعالجة الموضوع محل الخلف ، لذلك المرونة دائما سلح جيد لكــل‬ ‫لغــة برمجــة ، و ل اقصــد المرونــة بمعناهــا الضــيق مثل فــي العلن عــن‬ ‫المتغيرات بل اريد المعنى الوسع و هو حرية المبرمج في معالجة المشكلة‬ ‫بالطريقة و الرؤية التي يختارها فتكون اللغة اداة و ليست عقبة .‬ ‫لذلك احب لغات البرمجة كلغـة بيـرل الـتي تجعـل مـن الحريـة شـعارا لهـا و‬ ‫توفر للمبرمج عدة طرق لحل المشكلة يختار منها ما يشاء و يبدع ما يشاء‬ ‫بدون ان تجبره اللغة على طريق معين .‬ ‫على انه هنا ايضا اختلف و الكثير يرون ان هــذا المــر ســلح ذو حــدين و‬ ‫في اغلب الحيان يرجحون كفــة الجــانب الســلبي فنســمع عبــارات مثــل ) ل‬ ‫يمكــن قــراءة اكوادهــا ( او ) تعطيــك الحبــل و الكرســي لتشــنق نفســك ( و‬ ‫غيرها من العبارات التهكمية .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 32. ‫و يفضلون الشعار المغاير ) هناك طريقــة واحــدة فقــط لعمــل هــذا ( و ذلــك‬ ‫باعتبارهم يفيد التنظيم و يساعد على بناء المشــاريع العملقــة ، لــن احــول‬ ‫الموضوع هنا الى مناقشة طويلة و ل انتصارا لطــرف علــى حســاب طــرف‬ ‫اخــر لكــن ساستشــهد بمقولــة للمبرمــج الكــبير بــول غراهــام حيــث يقــول‬ ‫مضمونا ) اننا كنا ل نعير الشركات الــتي تطلــب مــبرمجين جافــا اهتمامــا و‬ ‫لكننا كنا نخشى الشركات التي تطلب مبرمجين ليســب او بيــرل لننــا حينهــا‬ ‫نعلم انهم يريدون مبرمجين حقيقييــن !(. و فـي مكـان اخـر يقـول ) ان سـر‬ ‫نجاحنا هو استخدامنا لليسب و لكن يبدو ان ل احد مهتم بسرقة سر نجاحنا‬ ‫! (.‬ ‫بعد كل هذا الستطراد لنذكر شيئا من مزايا البرمجة الشيئية :‬ ‫1 - البساطة : حيث ان الكائنــات الوهميــة تحــاكي الكائنــات الحقيقيــة ، ذلــك‬ ‫يؤدي الى تقليل التعقيد و هيكل برامج واضح للغاية و سهل الفهم.‬ ‫2- سهولة الصيانة : حيــث ان عمليــة الصــيانة ســتكون ســهلة و ســنعرف‬ ‫مكان الخطاء بالتحديد لن كل كائن له استقللية تامة.‬ ‫3 - اعادة الستخدام : حيث ان الكائنــات يمكــن اعــادة اســتخدامها فــي عــدة‬ ‫برامج.‬ ‫4- التطوير : حيث ان عملية التوسع ستكون سهلة من خلل اضـافة اعـداد‬ ‫قليلة من الكائنات الجديدة او التعديل المباشر علــى الكائنــات الموجــودة ، و‬ ‫ذلك استجابة لي تغييرات او تحديات جديدة تفرضها بيئة التشغيل.‬ ‫5 - التكاملية و تقليل العتمادية : حيـث ان كـل كـائن يمثـل كيانـا منفصـل ،‬ ‫حيث ان العمل الداخلي للكائن منفصل عن اجزاء النظام الخرى.‬ ‫6- سهولة التعديل : فهناك سهولة في اجراء اي تغييرات طفيفة في تمثيــل‬ ‫البيانات او الجراءات في البرامج الشيئية. لن التغييرات داخــل اي كلس‬ ‫ل تؤثر على الجزاء الخرى للبرنامج، حيث ان الطريقة الوحيدة للعالـــــم‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 33. ‫الخــارجي فــي التصــال بهــذا الكلس هــو عــن طريــق واجهتــه باســتخدام‬ ‫ميثودز الكلس نفسه.‬ ‫الن ما هي البرمجة الشيئية ؟‬ ‫هي بكل بساطة عملية محاكاة الواقع في البرمجــة هــي النظــر الــى الوجــود‬ ‫على انــه مجـرد اشـياء او كائنــات ‪ Objects‬و مــن ثــم محاكــاته فــي عــالم‬ ‫البرمجة . كل شيء في هذا الوجود يمكن ان ينظر اليه على انه كائن و كــل‬ ‫كــائن لــه خصــائص)ســمات( ‪ Attributes‬و افعــال ‪ . Methods‬انــواع‬ ‫الخصائص ‪ Field type‬ثابتة كان تكون قيمة رقمية او نصية و لكــن قيـم‬ ‫الخصائص ‪ Field Value‬يمكن ان تختلف من حالة الى اخـرى . الكلس‬ ‫‪ Class‬هو عبارة عــن قــالب ننشــيء منــه الكائنــات حيــث داخــل كــل كلس‬ ‫سيتم تعريف خصائص و افعــال كــل كــائن مــن هــذا الكلس علــى انــه يجــب‬ ‫النتبــاه الــى انــه عــادة ل يعتــبر الكلس كائنــا فــي حــد ذاتــه ال فــي اللغــات‬ ‫الكائنية الصرفة . اذا عرفنا الن ان الكلس هــو مجــرد قــالب جــاهز لصــنع‬ ‫كائنات من نوع ما .‬ ‫نــأتي الن لنشــير الــى وجــود نــوع اخــر مــن الكلســات و هــو مــا يســمى‬ ‫بالكلسات المجردة ‪ Abstract Class‬هذه الكلسات مهمتهــا تنظيميــة‬ ‫فقط و ل يمكن انشاء اي كائن منها مباشرة بل يجب ان يكــون هنــاك كلس‬ ‫يرث الكلس المجرد و ان ل يكون هو بدوره كلسا مجردا حينها فقط يمكن‬ ‫ان ننشــيء كائنــات تحتــوي علــى خصــائص الكلس المجــرد . هنــا ذكرنــا‬ ‫مصــطلح الوراثــة ‪ Inheritance‬و هــو بكــل بســاطة عمليــة انتقــال كــل‬ ‫خصائص و افعال الكلس الب الى الكلس البن . لنأخذ بعض المثلــة قبــل‬ ‫ان نواصل …‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 34. ‫لنتخيل هناك مصنع للسيارات و نريد ان نحاكيه بالرؤيــة الشــيئية يمكــن ان‬ ‫نبسط الى شيء مشابه الى:‬ ‫‪abstract class Vehicle‬‬ ‫‪abstract class Sedan‬‬ ‫‪class Camry‬‬ ‫نلحظ اننا انشأنا سلسلة من الكلسات لتنظيم المور حيث انه بــدانا بكلس‬ ‫مجــرد باســم ‪) Vehicle‬مركبــة( و فيــه ســنعرف الخصــائص و الفعــال‬ ‫الساسية التي يجب ان تحتويهــا كــل مركبــة ثــم انشــانا كلس مجــرد باســم‬ ‫سيدان يرث كل ما في كلس فيهكل و يضيف عليها خصــائص و افعــال كــل‬ ‫عربة من نوع صالون اخيرا انشأنا كلس باسم كامري يرث كــل خصــائص‬ ‫سيدان و يضيف عليها مميزات و هوية الكامري التي نعرفها .‬ ‫هنا يطرح السؤال لماذا نجعل من سيدان و فيهكل كلسات مجردة ؟ لماذا ل‬ ‫نتركها كلسات طبيعية اليس الغرض فقط هو الوراثة ؟ فيكون الجواب بكل‬ ‫بساطة لننا نعلم مسبقا اننا لن ننشيء اي كائن مــن هــذه الكلســات و هــذه‬ ‫عادة برمجية جيدة يجب النتباه لها و على المستوى المهنــي يتخــذ القــرار‬ ‫فيها وقت التخطيط ‪. Design‬‬ ‫نلحظ ان المخطط الن قابــل جــدا للتطويــع و التعــديل فــي وقــت لحــق مثل‬ ‫باضافة مزيد من انواع السـيارات بـل و فئات السـيارات . فـي المثـال اعله‬ ‫كان المخطــط ينحــو منحــى عــامودي بطــبيعته اي سلســلة مــن العلــى الــى‬ ‫السفل و لكن مع محاكاة امثلــة اكــثر تعقيــدا ســيبدو شــكل المخطــط و كــانه‬ ‫شــجرة ذات غصــون متفرعــة تصــلح لن تحــاكي الظــواهر الطبيعيــة قبــل‬ ‫الحقائق البرمجية كمشجرة الكائنات الحقيقية من ثدييات ...الخ.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 35. ‫قبل ان انتقل للنقطة القادمــة و بمــا ان الكلم عــن المخططــات ل بــأس بــأن‬ ‫نذكر لغة النمذجة الموحدة ‪ UML‬و التي عادة مــا تــدرس جنبــا الــى جنــب‬ ‫مع كورس لغات البرمجة الشيئية و هي لغة تمثيلية مفيدة جــدا فــي مرحلــة‬ ‫التخطيط و تحتوي على 41 نوعا من المخططات تقع تحت مظلــة تصــنيفين‬ ‫رئسين :‬ ‫1- مخططات هيكلية تركز على عناصر النظام و ماذا يجب ان يحتوي.‬ ‫2- مخططات تفاعلية )تصف سلوك الوبجكتس( تركـز علـى مـاذا يجـب ان‬ ‫يحدث في النظام المحاكى و كيف سيتم التواصل و التفاعل بين العناصر.‬ ‫من خلل هذا الستعراض البسيط بدانا نعرف سر قوة البرمجة الشيئية فــي‬ ‫السيطرة على المشاريع العملقــة جــدا ، هــذه القــوة الــتي تنبــع فــي حقيقــة‬ ‫المر من التجريد .‬ ‫في البرمجة الجرائية عــادة هنــاك مشــكلة فــي كــون البيانــات مشــاعة لكــل‬ ‫اجــــزاء البرنامــــج و لكــــن فــــي البرمجــــة الشــــيئية هنــــاك نــــوع مــــن‬ ‫الكبسلة)التغليف( ‪ Encapsulation‬اي ان البيانات الخاصة بــاي كـائن ل‬ ‫يمكن تعديلها ال من خلل ارسـال الرسـائل ‪ Messages‬الـى الكـائن و هـو‬ ‫بدوره يقوم بعمــل اللزم ســواء بالتعــديل المباشــر او اعــادة ارســال رســالة‬ ‫اخرى الى كائن اخر طلبا للمساعدة في اتمام الطلب.‬ ‫من هنا نعرف انه في البرمجة الشــيئية تتــم المهــام عــن طريــق الرســائل و‬ ‫مجموع الرسائل التي يفهمها الكائن تســمى بروتوكــول الكــائن ‪Protocol‬‬ ‫بعبارة اخرى البروتوكول او الرسائل التي يمكــن للكــائن ان يتجــاوب معهــا‬ ‫هي ذاتها الميثودز المعرفة سلفا في كلس الكائن .‬ ‫نعود هنا للشارة الى اهمية التجريد هنا ايضــا فانــا كمســتخدم لــو اردت ان‬ ‫ارسل ازهارا الى صديقي ما علي سوى ان اذهب الى محل الزهار و اخبره‬ ‫باني اريد هذا النوع من الزهار لكي يتم ارساله الى صديقي .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 36. ‫هنا نلحظ انني اعطيت البائع رسالة تمثل طلبا و ل حاجة لي بمعرفة كيفية‬ ‫تعامل البائع لتمام عملية الرســال . هــذه العمليــة تعــرف بــالبلك بوكســنج‬ ‫‪ Black Boxing‬اي ان كل كائن مسؤول عن التعامــل مــع كــل رســالة او‬ ‫طلــب بطريقتــه الخاصــة الــتي ل يجــب ان يعــرف عنهــا بقيــة الكائنــات اي‬ ‫تفاصيل اضافية .‬ ‫فبائع الزهور ربما يرسل طلب نقل الزهور الى محطة البريد او الــى شــركة‬ ‫خاصة او ربما يعطيها لصــديق ســيذهب الــى منطقــة صــديقي !. و بمــا اننــا‬ ‫نتكلـــــم عـــــن الرســـــائل لنتكلـــــم عـــــن البوليمـــــورفيزم ) التعدديـــــة(‬ ‫‪ Polymorphism‬و هــي مــن اهــم مميــزات البرمجــة الشــيئية و تلخــص‬ ‫بانها قدرة استجابة انواع مختلفة من الكائنات الى رسالة واحدة و لكن كــل‬ ‫كائن يفسرها بطريقته الخاصـة . المثـال المشـهور الـذي سيوضـح لنـا هـذا‬ ‫المفهوم هو لو ان احد مدراء الشركات عقد اجتماعا و بعد انتهاء الجتماع‬ ‫قــال لمــوظفيه تــابعوا اعمــالكم فالرســالة هنــا واحــدة و لكــن كــل موظــف‬ ‫سيستجيب بطريقته الخاصــة فموظــف التســويق ســيعود الــى محــل الــبيع و‬ ‫موظف الدعم الفني سيعود الى مكتب الدعم الفني و هلم جرا .‬ ‫الن بما اننا نفهم جيدا ميزة البوليمورفيزم ، لنعد الى الفعــال ) الميثــودز (‬ ‫حيث يمكن ان تعايش حالت اقوى من البوليمورفيزم بدل من فقط التشارك‬ ‫في اسماء الرسائل كما في المثال الســابق . الحالــة الكــثر انتشــارا هــي مــا‬ ‫يعــرف بــالوفر لــود ‪ Method Overload‬و هــي قــدرة الكــائن علــى‬ ‫الســتجابة لرســالة معينــة بعــدة اشــكال مختلفــة علــى حســب نــوع و عــدد‬ ‫الرجيومنتس ‪ Parameters or arguments‬المرفقة مــع الرســالة ،‬ ‫مثل :‬ ‫;)(‪jump‬‬ ‫;)‪jump(Int myNumber‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 37. ‫فهنا لــو اعطانــا المرســل عــدد مــرات القفــز فــي الرســالة لســتجاب الكــائن‬ ‫بتكرار عملية القفز عدد المرات المطلوبـة و لكــن لــو تـرك المرســل رســالة‬ ‫فارغة من اي رقم ستكون الستجابة للميثود الفتراضي لنقــل قفــزة واحــدة‬ ‫فقط .‬ ‫هذا مثال بسيط و لكنه يوضح فكرة جيدة اخرى و هي توفير انواع مختلفــة‬ ‫من الميثود لمعالجة حالت مختلفة من الرسائل و الطلبات .‬ ‫الحالة الخرى هي ما يعرف بالميثود اوفر رايد ‪ Method Override‬و‬ ‫هي شكل من اشكال البوليمورفيزم يحدث في حال لو كــان هنــاك ميثــود فــي‬ ‫الكلس الب و يرثه الكلس البن و لكننـا نريـد للكلس البــن ان يسـتجيب‬ ‫بطريقة مغايرة لما يفعله الكلس الب . هنا نستخدم الوفر رايد حيث نقــوم‬ ‫باضــافة ميثــود فــي الكلس البــن يحمــل نفــس اســم و توقيــع الميثــود‬ ‫‪ Signature‬فـــي الكلس الب ، و لكـــن فـــي جســـم الميثـــود ‪Method‬‬ ‫‪ Body‬نقوم باضافة اكواد مغايرة لمــا هــو موجــود فــي كلس الب . مثــال‬ ‫بسيط :‬ ‫{ ‪public class DaddyClass‬‬ ‫{)(‪public void aMethod‬‬ ‫‪// Do something here‬‬ ‫}}‬ ‫{ ‪public class myClass extends DaddyClass‬‬ ‫{)(‪public void aMethod‬‬ ‫‪// respond differently from my daddy‬‬ ‫}}‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 38. ‫تعدد التوارث ‪Multiple Inheritance‬‬ ‫في لغات البرمجة مثل سي ++ و بيرل هنــاك امكانيـة لي كلس بــان يــرث‬ ‫من اكثر من كلس ، هذا الشيء ل يخلو من الفائدة الكثيرة على الرغم مــن‬ ‫بعض العيوب و لكن في لغة جافا مثل ل يمكن للكلس ان يرث ال مـــــــــن‬ ‫كلس واحد و هنا يظهر انه سنلقي صعوبة و محدودية و لكن جافــا تــوفر‬ ‫ما يسمى بالواجهات ‪ Interface‬حيث يمكن لي كلس ان يطبق اكثر مــن‬ ‫واجهة بالضافة الى وراثته من كلس معين . عندما نعلن عــن كلس بــانه‬ ‫يطبق واجهة ما فاننا ننشيء في الحقيقة عقد يجب من خلله علــى الكلس‬ ‫المطبق ان يوفر التطبيق البرمجي لكل ميثود موجود في الواجهة .‬ ‫فــي البرمجــة الشــيئية كــثيرا مــا نتكلــم عــن محــددات الــترخيص ‪Access‬‬ ‫‪Modifier‬و التي من خللها نضيف بعد اخر من اخفاء المعلومات ‪Data‬‬ ‫‪ Hiding‬طبعا لكل لغة برمجية انـواع تحكـم مختلفـة و لكـن فـي جافـا مثل‬ ‫لدينا :‬ ‫‪1.private‬‬ ‫‪2.protected‬‬ ‫‪3.default‬‬ ‫‪4. public‬‬ ‫طبعا استخدام هذه الكلمات المفتاحية بالشكل الصحيح يحتاج خــبرة و قــرار‬ ‫المبرمج نفسه و لكن القاعدة العامة هي كلما كان هناك تشديد في الوصــول‬ ‫الى القيــم و الميثــودز كــان افضــل فنحــن قلنــا ان كــل كــائن يجــب ان يكــون‬ ‫مسؤول عن نفسه فل يفضل التعــديل علــى المعلومــات مــن امــاكن كـثيرة و‬ ‫مختلفة تؤدي بدورها الى المشاكل .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 39. ‫‪ :: Functional‬البرمجة الوظيفية‬ ‫البرمجــة الوظيفيــة تعامــل الحوســبة كتقييــم للــدوال الرياضــية و تتجنــب‬ ‫البيانــات المشــتركة ‪ Mutable‬و الحالــة ‪ .State‬تجــب الشــارة هنــا ان‬ ‫البرمجة الوظيفية هي مجموعة افكار ان صح التعبير و ليست قوانين يجب‬ ‫متابعتها لذلك هنــاك اختلف فــي تطــبيق البرمجــة الوظيفيــة فهنــاك اللغــات‬ ‫الوظيفيــة الصــرفة ‪ pure functional‬كلغــة البرمجــة هاســكل و غيرهــا‬ ‫حيث انها ل تتيح امكانية التغييـر او تحـديث قيمـة المتغيـر. بنـاء علـى هـذا‬ ‫الشرط تكون المتغيرات كالمتغيرات في الرياضيات حيـث ص + 2 = 3 و‬ ‫لكن يمكننا ان نقــول ض = ص+ 3 و لكننــا سننشــيء متغيــر اخــر لن ص‬ ‫قيمة ثابتة غير قابلة للتغيير.‬ ‫و لكن بشكل عام اللغات التي التي تدعم :‬ ‫‪– Code references‬‬ ‫‪– Closures‬‬ ‫يمكن ان تسمى و ان تتيح البرمجة الوظيفية.‬ ‫تعمدت ان ل اتكلم عن الــ ‪ Subroutines‬او الـ ‪ Functions‬في معرض‬ ‫الكلم عن البرمجة الجرائية مع ان هذه الدوال تستخدم بكثرة في البرمجــة‬ ‫الجرائية كأداة لستدعاء بعض الكواد التي يتكرر استخدامها في البرنامج‬ ‫مثال بسيط هو بدل من ان نضع اكــواد تــذييل صــفحة ويــب فـي كــل صــفحة‬ ‫يمكننــا بكــل بســاطة حفــظ و كتابــة الكــواد داخــل دالــة مــرة واحــدة فقــط و‬ ‫الكتفاء باستدعاء الدالة اينما احتجنا لها ..‬ ‫حسنا السؤال الن اذا كانت اللغات الجرائية تــوفر الــدوال فلمــاذا ل تســمى‬ ‫كلها لغات وظيفية ؟ الجواب لكي نســتطيع ان نقــول عــن لغــة انهــا وظيفيــة‬ ‫يجــب ان تتــوافر فيهــا بعــض المميــزات الــتي ذكرنــا بعضــها فــي البدايــة و‬ ‫سنتطرق لبعضها بقليل من التفصيل كما سيأتي..‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 40. ‫‪: References‬‬ ‫اشرنا الى هذه النقطة كنقطة اساسية للبرمجة الوظيفيــة و ان كــانت ليســت‬ ‫في حد ذاتها خاصية في البرمجــة الوظيفيــة ال انهـا اليـة تتيـح لنـا امكانيـة‬ ‫البرمجة الوظيفية في بعض اللغات الجرائية.‬ ‫طيب ما هو الـ ‪ reference‬؟ من اسمه هو اشــارة الــى مكــان المعلومــات.‬ ‫بعبارة اخرى يمكننا ان نقول ان المشير او المرجع هو متغير لكنه ل يحمــل‬ ‫القيمة الحقيقة انما يشير الى مكانها فقط . كمثال عندما اقــول تكلمنـا سـابقا‬ ‫عن البرمجة الجرائية في صفحة 05 فأنا هنا اشير الى مكان المعلومة فــي‬ ‫الكتاب و لكن ليس لدي المعلومة نفسها . في بيـرل اضــافة المعامــل قبــل‬ ‫اسم المتغير ينشيء لنا مؤشرا .. مثال:‬ ‫;) ’‪my %hash = ( one => ‘Hello’, two => ‘World‬‬ ‫;‪my $hashref = %hash‬‬ ‫نلحظ هنا ان المتغير الذي يحمل القيم الحقيقيــة هــو ‪ hash‬و امــا المتغيــر‬ ‫‪ hashref‬هو مجرد متغير يشير الى مكان المعلومات و الكلم هنا يطول و‬ ‫يختلف مــن لغـة الـى اخــرى لـذلك سـنتجنب الطالــة بمــا اننـا اخــذنا الفكـرة‬ ‫العامة.‬ ‫الن لكي نتعرف اكثر على بعض المفاهيم المتداولة في البرمجــة الوظيفيــة‬ ‫نحن بحاجة اول لن نعــرف كيفيــة كتابــة الــدوال بشــكل عــام ، المــر الــذي‬ ‫سيتيح لنا فهم المفاهيم الكثر صعوبة .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 41. ‫اذا نبدا بمثال بسيط و هي دالة هيلو ! المشهورة..‬ ‫{)(‪&hello(); sub hello‬‬ ‫};"‪print "welcome to ali website‬‬ ‫في هذا المقال البسيط قمنا بتعرف دالة اسمها هيلوو بين القواس المعقوفة‬ ‫وضعنا الوامر التي سيتم تنفيذها في حــال اســتدعينا الدالــة و ذلــك يتــم )اي‬ ‫الستدعاء( فقط بكتابة اسم الدالة و القوسين.‬ ‫‪: Parameters‬‬ ‫حسنا الن لماذا وضــعنا القوســين بعــد اســم الدالــة؟ هــذه القــواس تســتخدم‬ ‫لتمرير قيم الى داخل الدالــة و بــذلك نضــفي ديناميكيــة الــى دالتنــا فهــي الن‬ ‫تستطيع ان تنتج قيم مختلفة بحسب القيمة المررة . اذا لنعدل المثال قليل :‬ ‫{)(‪&hello("Visitor1"); sub hello‬‬ ‫;‪$name = shift‬‬ ‫;"‪print "welcome to ali websiten‬‬ ‫};"‪print "welcome $name‬‬ ‫جميل الن نلحظ اننا وضعنا قيمة بين القوســين لكــي نســتخدمها لحقــا فــي‬ ‫داخل الدالة و هناك عــدة طــرق لكيفيـة اســتقبال القيــم تختلــف مــن لغــة الــى‬ ‫اخرى و لكن في مثالنا ‪ shift‬ستسند القيمة المــررة الــى المتغيــر ‪ name‬و‬ ‫بذلك ستكون نتيجة الدالة طباعة جمل مختلفة بحسب اسم الزائر المدخل.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 42. ‫جميل و اذا احببنا اضافة المزيد من القيم المــررة مــا علينــا ال ان نســتقبلها‬ ‫كقائمة و نسندها لمتغيرات حسب الحاجة ، مرة اخرى هذا المر يختلف من‬ ‫لغة الى اخرى و لكن هذا نموذج :‬ ‫;)"2‪&hello("Visitor1","Visitor‬‬ ‫;_@ = )2‪sub hello(){my ($name1, $name‬‬ ‫;"‪print "welcome to ali websiten‬‬ ‫;"1‪print "welcome $name‬‬ ‫};"2‪print "welcome $name‬‬ ‫نلحظ الن اننا نستطيع ان نتعامل مع العديد من القيم المــررة بهــذه الليــة .‬ ‫في بعض الحيان ل نريد فقط ان ننفذ اوامر بل نريد من الدالة ان ترجــع لنــا‬ ‫قيمة لكي نسندها الى متغير مثل .‬ ‫كل ما علينا فعلــه الن هــو ان نســتخدم كلمــة ‪ return‬ففــي المثــال البســيط‬ ‫ادناه هذه الدالة:‬ ‫{)(‪sub hello‬‬ ‫};3 ‪return‬‬ ‫;)(‪my $number = hello‬‬ ‫;‪print $number‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 43. ‫هذه الدالة كما هو واضــح فقــط ترجــع قيمــة 3 ، نلحــظ اننــا اســندنا القيمــة‬ ‫المرجعة الى المتغير ‪ number‬و في المر الخير طبعنا قيمة المتغير التي‬ ‫في طبيعة الحال ستكون مجرد الرقم 3.‬ ‫‪:Scoping‬‬ ‫من المور المهمة جدا في البرمجة ما يعـرف بالمـدى او مـدة حيـاة المتغيـر . فـي اغلـب‬ ‫لغات البرمجة مدى المتغير محصور بين القـواس المعقوفـة مثل دائرة تكـرار او جملـة‬ ‫شرطية او حتى في كائن او في بكج ..ألخ مما يعني ان المتغير خاص بالمنطقـة المعـرف‬ ‫بها و ل يمكن استخدامه خارجها، و لكن هناك متغيرات تكون عامة يمكن الوصول اليهــا‬ ‫من اماكن متعددة مما يجعلها عرضة للتغيير بشكل مسـتمر ، مـاذا لـو كـان اسـم المتغيـر‬ ‫العام هو ذاته اسم المتغير الخاص ستتولد لدينا مشاكل فـي المـدى و نحصـل علـى نتـائج‬ ‫ربما تكون غير متوقعة .. لندرس هذا المثال :‬ ‫;01 = ‪$total‬‬ ‫;21 = ‪$number‬‬ ‫;)‪&adding($number‬‬ ‫)(‪sub adding‬‬ ‫;‪{$number = shift‬‬ ‫;‪$total = $total + --$number‬‬ ‫;‪}print $number‬‬ ‫;‪print $total‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 44. ‫الن ماذا تتوقعون ستكون نتيجة المرين الخرين ؟‬ ‫النتيجــة ســتكون ‪ number‬ســيكون 11 و ‪ total‬ســيكون 12 . نلحــظ‬ ‫كيف ان قيمة المتغير العام تغيرت لن ‪ number‬صادف انه موجــود ايضــا‬ ‫في الدالة الن لنتخيل كيف ستكون هذه مشكلة كبيرة جدا ان تقــوم كــل دالــة‬ ‫بتغير المتغيرات العامة ، بالطبع مــا سنحصــل عليــه هــو فوضــى حيــن تتبــع‬ ‫الخطاء .. اذا يجــب ان نجعــل مــن متغيــرات كــل دالــة متغيــرات خاصــة بهــا‬ ‫بحيث ل يكون لها تأثير جانبي علــى متغيــرات البرنامــج ‪ side effects‬و‬ ‫في المقابل ايضا يجب ان نحرص علــى ان ل نجعــل مــن متغيــرات البرنامــج‬ ‫متغيرات عامة فهذا مصدر لكثير من المشاكل ، في اكثر اللغــات هــذه ليســت‬ ‫مشكلة فالمتغيرات ليست عامة ابتداء و لكــن فـي لغــات مثــل بيـرل يجــب ان‬ ‫نستخدم ‪ use strict‬للحصول على هذه الميزة و من ثم نقوم بالعلن عن‬ ‫كل متغير باســتخدام ‪ my‬و بــذلك نتفــادى تعــارض تــأثير اســماء المتغيــرات‬ ‫خارج مداها .. لنعدل الكود اذا :‬ ‫;01 = ‪my $total‬‬ ‫;21 = ‪my $number‬‬ ‫;)‪&adding($number‬‬ ‫)(‪sub adding‬‬ ‫;‪{ my $number = shift; my $total = $total + --$number‬‬ ‫;‪}print $number‬‬ ‫;‪print $total‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 45. ‫الن سنحصــل علــى النتيجــة المتوقعــة 21 و 01 للمتغيريــن اللــذين خــارج‬ ‫الدالة حيث اختفى تأثير الدالة على المتغيــرات الخارجيـة . فالنتيجـة الن ان‬ ‫اصبح لدينا متغيرين لهما نفس السم فــي خــارج و داخــل الدالــة و لكــن فــي‬ ‫الحقيقة كل منهم متغير مختلف عن الخر فقط صادف انهما بنفس السم .‬ ‫العودية ‪: Recursion‬‬ ‫العودية هي عندما نستخدم و نطبق الدالة في داخل تعريفها . بعبــارة اخــرى‬ ‫الدالة تستدعي نفسهـا. و في البرمجة الشيئية عندما يستدعي الميثود نفسه‬ ‫يســمى ‪ .recursive method‬أقــرب مثــال لتوضــيح الفكــرة هــو طريقــة‬ ‫حساب الـ ‪ factorial‬لرقم معين و الذي يتــم عــن طريــق ضــرب العــدد مــع‬ ‫العداد الصغر منه مثل للعدد 5 ) 1*2*3*4*5( = 521.‬ ‫لبرمجة هذه العملية بالعودية نلحظ النمــط هــو العــدد الصــلي ضــرب العــدد‬ ‫الصلي-1 و هكذا الى ان نصل الى الواحد و بناء عليه نوقف عملية الطــرح‬ ‫و نبدا العملية عكسية و عودية حيث ان الواحد قيمة معلومــة ضــرب الدالــة‬ ‫التي كانت في النتظار و هكذا .. اذا ما سيحدث داخل الدالة هو :‬ ‫)1-5(‪5*f‬‬ ‫)1-4(‪4*f‬‬ ‫)1-3(‪3*f‬‬ ‫)1-2(‪2*f‬‬ ‫‪f(1)=1 stop‬‬ ‫عندما نصل الى هذه النقطة سترجع الدالــة قيمــة معلومــة و ليــس اســتدعاء‬ ‫للدالة مرة اخرى عليه بما ان القيمة معلومة نضربها مع الثنين ...ألخ.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 46. ‫و هذه الكواد البرمجية لهذه العملية …:‬ ‫;)5( ‪$fv = fact‬‬ ‫;"‪print "factorial 5 is $fvn‬‬ ‫{ ‪sub fact‬‬ ‫;‪my $val = shift‬‬ ‫{ )1 > ‪if ($val‬‬ ‫;)1-‪$fv = $val * fact($val‬‬ ‫{ ‪} else‬‬ ‫;1 = ‪$fv‬‬ ‫}‬ ‫}‬ ‫هذه الظــاهرة لهــا اســتخدامات كــثيرة و مفيــدة و كمثــال اخيــر دالــة لتحويــل‬ ‫الرقام الى ما يمثلها من الـ ‪ Binary‬باستخدام العودية...‬ ‫{ ‪sub binary‬‬ ‫;_@ = )‪my ($n‬‬ ‫;1 == ‪return $n if $n == 0 || $n‬‬ ‫;)2/‪my $k = int($n‬‬ ‫;2 % ‪my $b = $n‬‬ ‫;)‪my $E = binary($k‬‬ ‫;‪return $E . $b‬‬ ‫}‬ ‫و كما شاهدنا في المثالين و في اي حالة اخــرى يجــب تــوفير نقطــة ليقــاف‬ ‫عملية الستدعاء المتكرر و ال لن تتوقف عملية الستدعاء كمــا هــي الحــال‬ ‫في دوائر التكرار اللنهائية.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 47. ‫‪Higher-order functions‬‬ ‫الن ســنبدأ اســتعراض بعــض الخصــائص الحقيقيــة للبرمجــة الوظيفيــة. و‬ ‫ســنبدا بالــدوال العاليــة حســب اصــطلحهم و ربمــا يعرفهــا البعــض بالـــ‬ ‫‪ callbacks‬او ‪ .factories‬و تسمى الدالة بهذا السم عنــدما تحقــق احــد‬ ‫المرين :‬ ‫1- ان تستقبل دالة كمدخل )قيمة ممررة(‬ ‫2- ان ترجع دالة بدل من قيمة معينة‬ ‫و قبل ان نأخذ بعض المثلة يجب ان نتعرف على :‬ ‫‪Anonymous subroutines‬‬ ‫و هي الدوال المجهولة او بعبارة اخرى ليس لها اسم !. مثل :‬ ‫;}2+)(‪my $number_plus_two = sub {return shift‬‬ ‫5# ;)3(>-‪print $number_plus_two‬‬ ‫في هذا المثال نلحظ اننا انشأنا متغير و لكن لم نسند له قيمة بل اســندنا لــه‬ ‫دالة و المهم هنا نلحظ انها ل تحتوي على اسم الن نلحظ عند تمرير قيمة‬ ‫3 سيتم جمعها مع 2 لتكون النتيجة 5.‬ ‫اذا نستطيع ان نقول للدوال المجهولة فوائد منها :‬ ‫1- اننا نستطيع ان نسندها الى متغير او قائمة او هاش‬ ‫2- نستطيع ان نمررهم الى دوال اخرى ‪Arguments‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 48. ‫3- سنحتفظ بالمتغيرات في المدى المحيط‬ ‫4- نستطيع انشائهم في وقت التنفيذ‬ ‫‪: Closures‬‬ ‫لندرس هذا المثال :‬ ‫{ ‪sub demo‬‬ ‫;‪my $name = shift‬‬ ‫}"!‪return sub{ print "hello $name‬‬ ‫}‬ ‫;)"‪my $ref = demo("Ali‬‬ ‫‪&$ref(); # hello Ali‬‬ ‫المر الذي يلفت النظر هنا هو اننا نلحظ ان الدالة المجهولــة اســتطاعت ان‬ ‫تصل الى متغير غير معرف في مداها بــل موجــود فــي الدالــة المحيطــة بهــا.‬ ‫هذه الظاهرة تسمى بالكلوجرز .‬ ‫مثال اكثر تقدما :‬ ‫{ ‪sub demo‬‬ ‫;_@ = )‪my ($title‬‬ ‫;_@=)‪return sub{ my ($name‬‬ ‫}" !‪print "$title $name‬‬ ‫}‬ ‫;)".‪my $ref = demo("Mr‬‬ ‫;)".‪my $ref_2 = demo("Ms‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 49. : ‫الن نلحظ النتيجة‬ $ref->("Ali"); # Mr. Ali! $ref_2->("Yosra"); # Ms. Yosra! ‫نلحــظ كيـف ان الدالـة احتفظـت بالمـدخلت فــي المرحلــة الولــى و مــن ثـم‬ .‫طبعت المتغيرين بالشكل الصحيح‬ @@To be completed in the upcoming release. @TODO currying, lazy eval, streams, more on closures, more on Higher functions, continuation ..etc (‫ :: البرمجة التعريفية ) اعلنية‬Declarative ‫وصف لمنطق الحوسبة بدون وصف طريقة التحكم بمجراها، و بذلك تكون‬ .Imperative ‫عكس الـ‬ @@To be completed in the upcoming release. http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 50. ‫المزيد من المصطلحــات :‬ ‫‪IDE‬‬ ‫هــــذه الكلمــــة تمــــر علينــــا كــــثيرا و هــــي اختصــــار ‪Integrated‬‬ ‫‪ ، Development Enviroment‬اي بيئة التطــوير المتكاملــة ، حســنا‬ ‫مــاذا يعنــي هــذا ؟ اعتقــد ان القليــل هــذه اليــام يبرمــج مــن خلل محــررات‬ ‫النصوص مثل المفكرة فــي وينــدوز و ‪ vi‬فــي لينكــس ، حيــث يمكــن لنــا ان‬ ‫نبرمــج برامــج كاملــة فقــط باســتخدام المفكــرة البســيطة ثــم نقــوم بعمليــة‬ ‫الترجمــة للكــواد ، هــذه الطريقــة و ان كــانت جيــدة مــن ناحيــة انهــا تجــبر‬ ‫المبرمج على العتماد على نفسه في البرمجة بدون اي تــدخل مــن برنامــج‬ ‫الكتابة كمساعد ، ال انها تقلل من النتاجية . ل يزال هناك من يتعصب الــى‬ ‫ان برامج كتابــة الكــواد يجــب ان تكــون بســيطة فــي حــد ذاتهــا و ل تغــرق‬ ‫المبرمج فـي بحـار الخصــائص الــتي فـي العــادة ل يسـتخدمها بـذلك الشــكل‬ ‫المستمر . الى عهد قريب كنت اتبنى هذا الرأي لني كنت ارى ان المبرمــج‬ ‫فعل يجب ان يكون خــبيرا فــي لغتــه و حافظــا لكــل تفاصــيلها و خفاياهــا فل‬ ‫يحتاج الى مساعدة من اي احد حتى لو كان برنامج التطــوير، و كنــت اتخــذ‬ ‫من هذه الطريقة وسيلة لكي اصقل مهارتي، حيث كنت فــي وينــدوز اتعامــل‬ ‫مباشرة مع المفكرة ، ثــم تطــور المــر الــى اســتخدامي لبرنامــج ‪ Padre‬و‬ ‫الذي كان بسيطا جدا فــي امكانيــاته وقتهــا و لكــن احببتــه لنــه يقــدم خدمــة‬ ‫التلوين للكواد. كنت اتجنب برنامج اكلبس او نــت بينــز بــل حــتى ‪Emacs‬‬ ‫لنني كنت اؤمن بان الفترة التي سأقضيها في تعلم هذه البرامج و اكتشــاف‬ ‫خفاياها و حفظ اختصــاراتها ، يجــب ان اســتغلها فــي تعلــم لغــتي المفضــلة.‬ ‫على كل حال في يوم ما بدات العمل على مشروع لجافا و كان يتوجب علــي‬ ‫عمله باستخدام اكلبس و من خلل عملي في هذا المشروع رايت ان الفــترة‬ ‫التي احتجتها لتعلم البرنامج لم تكن بتلك الطول هذا فضل عن الفوائد الــتي‬ ‫تحصلت عليها من اســتخدام اكلبــس ، عنــدها بــدات اؤمــن ببئيــات التطــوير‬ ‫المتكاملة مع بعض التحفظات علــى بعــض النقــاط الــتي الــى الن افضــل ان‬ ‫اعملها بنفسي مثل انشاء الواجهات الرسومية فهذه البرامج فقط تصلـــــح‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 51. ‫لتصــميم الشــكل الســريع للبرنامــج و لكــن عنــدما اريــد ان اكتــب الواجهــة‬ ‫النهائية ساكتبها بنفسي لنني ل اريد كل تلك الكواد المحشوة من قبــل اداة‬ ‫انشاء الواجهات ، و كذا الحال ايضــا فــي كتابــة اكــواد ‪ html‬فالتعامــل مــع‬ ‫الدوات المرئيــة فــي هــذا المجــال تطويــل ل ارى لــه ضــرورة فــي اغلــب‬ ‫الحيــان. علــى كــل حــال هــذه وجهــة نظــر … نعــود الــى بيئات التطــوير‬ ‫المتكاملة ماذا تعني متكاملة هنا ؟ نستطيع ان نقول ان التكامل هنا يعني ان‬ ‫نتحصل على برنامج واحد يقدم محرر نصوص و خدمات تحرير النصــوص‬ ‫البرمجية مثل التلوين للكواد و ربما الكمال التلقائي و ايضــا ربمــا القــدرة‬ ‫على تصحيح الخطاء في الوقت الحقيقي كما يوجد في اكلبس. ثم يجــب ان‬ ‫يقدم البرنامج مفسر او مترجم للغة المعنية و قــد يســتخدم مفســر خــارجي.‬ ‫ايضا قد تحتوي البيئة على ادوات البناء التلقائي. ايضا قد يحتوي البرنامج‬ ‫ادوات لعملية التصحيح و التجريب. و مــا الــى ذلــك مــن خــدمات اخــرى قــد‬ ‫تختلــف مــن برنامــج الــى اخــر حســب امكانيــاته مثــل تــوفير ادوات رســم‬ ‫الواجهات الرسومية و ادوات العمل الجماعي ...الخ.‬ ‫‪Compiled and interpreted‬‬ ‫يمكن عادة تقســيم لغــات البرمجــة الــى مفســرة او مترجمــة او حــتى بعــض‬ ‫اللغات توفر الثنين معا كما سيأتي. المترجم يحــول الكــود المصــدري ) مــا‬ ‫نكتبه مثل بلغة سي( الى كود لغة اخرى غالبا الــى لغــة يفهمهــا الكمــبيوتر.‬ ‫عادة الهدف الساسي مــن الترجمــة هــو التحصــل علــى ملــف تنفيــذي. فــي‬ ‫اللغات المفسرة يتم ارسال الكواد الى مفسر اللغة و الذي يقوم هــو بــدوره‬ ‫بتنفيذ الكواد مباشرة. بين هذا و ذاك توجد لغات لــديها مفســر و مــترجم و‬ ‫توجد لغــات مثــل جافــا يتــم فــي البدايــة ترجمــة الملــف المصــدري الــى لغــة‬ ‫وسطية ‪ byteCode‬و من ثم يتم تفسير هذا الكود من خلل المفسر الــذي‬ ‫هو بالنسبة للجافا هو ذاته اللة التخيلية ‪. Virtual Machine‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 52. ‫طبعا توجد الت تخيلية عديدة غير الخاصة بجافا لديها القدرة على التعامل‬ ‫مع لغات متعـددة مثل ‪ Parrot‬و هـي اللـة التخيليـة الجديـدة الـتي تهـدف‬ ‫لدعم لغات السكربتنج مثل بيرل و بايثون و روبي ...الــخ. اللغــات المفســرة‬ ‫ل يتم التدقيق على الخطاء وقت الترجمة كما حال اللغات المترجمــة فعليــه‬ ‫يجــب ان يتــم التــدقيق علــى الخطــاء وقــت التنفيــذ هــذا يعنــي ان الســرعة‬ ‫ستكون اقل و هناك تفاوت كبير بين اداء المفسرات من حيث السرعة. لكــن‬ ‫العتماد على المفسر يعطي ميزة انتقالية اكثر من المترجم للتنقل بين نظــم‬ ‫التشغيل و النظمة المختلفة.‬ ‫‪Syntax and Semantics‬‬ ‫في البرمجة دائمـا مـا يمـر علينـا هـذين المصـطلحين ، فالخطـاء عـادة مـا‬ ‫تصنف الى انها اخطاء سنتاكس اي اخطاء املئية ل تتبــع القواعــد العامــة‬ ‫لكتابة ال كــواد فــي لغــة البرمجــة المعنيــة ، هــذه الخطــاء قــد تكــون بســبب‬ ‫اخطاء فــي كتابــة الكلمــات المفتاحيــة للغــة ، او اخطــاء فــي ترتيــب الكتابــة‬ ‫كالخطاء في مكان كتابة الشرط او اخطاء نســيان اضــافة ســيمي كلــون بعــد‬ ‫انتهاء الجملة و ما الى ذلــك . اذا فالســنتكس بالنســبة لي لغــة هــو بعبــارة‬ ‫اخرى قواعد كتابة الكواد في اللغة ، و هنا يظهــر تبــاين كــبير بيــن اللغــات‬ ‫فمن اللغات ما يهتــم بــان يكــون ســهل القــراءة و يســتخدم طريقــة واضــحة‬ ‫خالية من الرمـوز و القـواس الكـثيرة ، و هنـاك لغـات يتكـاثر فيهـا ظهـور‬ ‫القواس المعقوفة و القــواس و الرمــوز و غيرهــا ، علــى انــه فــي الوهلــة‬ ‫الولى يتصور ان الطريقة الولى هي الطريقة الفضل فمن منــا ل يحــب ان‬ ‫تكون اللغة سهلة القراءة ال ان الموضوع ربما يكون اعقــد ممــا نتصــور ،‬ ‫فمثل السراف في توضيح اسماء الميثودز و المتغيرات في جافا اثــار نقــدا‬ ‫بسبب طول هذه السماء و صعوبة حفظهــا ، فــي الجــانب المقابــل فــي لغــة‬ ‫مثل بيرل الكثير ممن يقراون بعض اكوادها يصابون بحالة خوف من كــثرة‬ ‫الرموز المتواجدة و لكن في حقيقة المر هذه الرموز لم تضف عبثا فــ _$‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 53. ‫و |$ ، و غيرها من الرموز لم توضع ال للختصــار و مســاعدة المبرمــج‬ ‫في ان يكتب اكواده باسـرع شـكل ممكـن . فـي ليسـب هنـاك كلم كـثير عـن‬ ‫كثرة القواس فيها بين مؤيد و معارض لذلك ارى ان هذا الجانب و ان كان‬ ‫ربما ثانويا ال انه مؤشر جيد لختيار لغة البرمجة التي ستبدا بها ، لنــه ل‬ ‫يخفى ان كثير من المبرمجين انما يحبون و يتعصبون لبعض اللغــات لنهــم‬ ‫يستمتعون في كتابة اكوادها . نعود الى موضوع السنتكس و نقول ان هــذه‬ ‫النوعية من الخطاء ان ظهرت في البرنامج فهي ليست ذات اهمية قصوى‬ ‫لنها عادة مــا ستصــطاد فــي مرحلــة بنــاء البرنامــج و سيشــير المــترجم او‬ ‫المفسر الى مكان الخطاء . فضــل عــن انــه هــذه اليــام توجــد ‪ IDE's‬مثــل‬ ‫اكلبس و غيره لــديها القــدرة علــى اصــطياد الخطــاء الطباعيــة فــي الــوقت‬ ‫الحقيقي مباشرة .‬ ‫اما السمنتكس فهي الخطاء المنطقية في البرنامج ، مثل لمــاذا برنامــج مــا‬ ‫يرجع قيمة مغايرة للقيمة المتوقعة ، هذه الخطاء لن يشير لها المــترجم او‬ ‫المفسر و سيتم تشغيل البرنامج بشكل طــبيعي لــذلك عــادة مــا يتــم اكتشــاف‬ ‫مثل هذه الخطاء في وقــت التشــغيل و التجريــب ، ايضــا هــذه النوعيــة مــن‬ ‫الخطاء تعرف بالبجز ‪ ، Bugs‬و قد يطول امر اكتشافها الى شهور بل الى‬ ‫سنوات اذا كانت معقدة و مخفية.‬ ‫قبل ان نختم هذه الفقرة يجب ان ننوه بمصــطلح ‪ ، Syntactic Sugar‬و‬ ‫هو بكل بساطة اضافة المزيد من الســنتكس الــى لغــة برمجــة معينــة بحيــث‬ ‫تزيد سهولة كتابة الكواد و تيسر علــى المــبرمجين قـراءة الكــواد، و لكــن‬ ‫مع كل ذلك فازالتها مـرة اخـرى مـن اللغـة يجـب ان ل يحـدث اي اثـر علـى‬ ‫قدرة اللغة. بعبارة اخــرى هــي كلمــات تضــاف الــى اللغــة كــي تســاعد علــى‬ ‫التعبير عن بعض الخصائص بشكل اكثر تركيزا او اكــثر وضــوحا او بشــكل‬ ‫مختلف و لكنها في حد ذاتها ل تضيف ميزة جديدة للغة البرمجة.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 54. ‫و لهذا نقرا في ويكيبيديا قولهم ) لغات البرمجة العالية المستوى لغــات الــة‬ ‫مــع الكــثير و الكــثير مــن الــ ـ ‪ (. Syntactic Sugar‬فعل هــذه المقولــة‬ ‫شديدة التعميم و لكن في منتهى الصحة . مثاله لغة البرمجة سي ليست لغة‬ ‫برمجة كائنية التوجه ال انه يمكن كتابة برامج شــيئية باســتخدام مؤشــرات‬ ‫الدوال ، ‪ type casting‬و الـ ‪ .Structures‬و لكن لغة البرمجة ســي +‬ ‫+ تسهل عملية البرمجــة الشــيئية و تجعلهــا اكــثر اناقــة باضــافة الســنتكس‬ ‫المناسب للبرمجة الشيئية.‬ ‫ايضا مثال اخر هو اضافة ‪ Moose‬فبيرل تحتوي على نظــام كــائني جيــد و‬ ‫لكن طريقة كتابته تختلف كــثيرا عــن مــا نــراه فــي جافــا و غيرهــا لــذلك تــم‬ ‫انشــاء ‪ Moose‬وهــي افضــل طريــق لتســهيل البرمجــة الكائنيــة فــي بيــرل‬ ‫للقادمين مــن لغــات اخــرى و مزاياهــا تفــوق الحصــر و لكــن سأضــيف هــذا‬ ‫المثــال لكــي نــرى كيــف تكتــب البرمجــة الشــيئية فــي بيــرل بعــد اضــافة‬ ‫‪: Moose‬‬ ‫‪package Point; //class name‬‬ ‫;‪use Moose‬‬ ‫‪has 'x' => (is => 'rw', isa => 'Int'); //field‬‬ ‫‪has 'y' => (is => 'rw', isa => 'Int'); //field‬‬ ‫‪sub clear { //method‬‬ ‫;‪my $self = shift‬‬ ‫;)0(‪$self->x‬‬ ‫;)0(‪$self->y‬‬ ‫}‬ ‫‪package Point3D; //child class‬‬ ‫;‪use Moose‬‬ ‫‪extends 'Point'; //Inherits‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 55. ‫‪has 'z' => (is => 'rw', isa => 'Int'); //Additional field‬‬ ‫‪after 'clear' => sub { //overriding‬‬ ‫;‪my $self = shift‬‬ ‫;};)0(‪$self->z‬‬ ‫‪Garbage collection‬‬ ‫جمع القمامة في علوم الحاســب اللــي تعنــي نــوع مــن الدارة التوماتيكيــة‬ ‫) التلقائية( للذاكرة. اي انهــا نــوع خــاص مــن ادارة المــوارد ، الــذاكرة فــي‬ ‫مثالنا. و هي من اختراع جون مكارثي في العام 9591 ليحل مشاكل ليسب.‬ ‫حيث يقوم جامع القمامة باستعادة الذاكرة المحجوزة من قبل كائنات لم تعــد‬ ‫مستخدمة من قبل البرنامج. اذا فجامع القمامة مهمته ان يجعل مــن عمليــة‬ ‫ادارة الذاكرة اليدوية امرا تلقائيا بحيث ل يحتاج المبرمج نفسه بــان يحــرر‬ ‫الذاكرة المشغولة.‬ ‫فلسفة عملها تتخلص في :‬ ‫1- ابحث عن اي كائن ل يمكن الوصول اليه في المستقبل.‬ ‫2- استعد الذاكرة المحجوزة من هذا الكائن.‬ ‫بعــض اللغــات تــوفر جــامع قمامــة و البعــض الخــر ل تــوفر ذلــك و تــتركه‬ ‫للمبرمج و سنأتي على امثلة لكل النوعين لحقا.‬ ‫‪Persistence‬‬ ‫هي الثبات و الستمرارية ، و هي مجموعة المعلومات التي تستمر حياتهــا‬ ‫حــتى بعــد انتهــاء دورة تشــغيل البرنامــج . بــدون هــذه الخاصــية ســتعيش‬ ‫المعلومات فقط في الذاكرة العشوائية المؤقتة مما يعني ضياعها مع ايقــاف‬ ‫تشغيل الكمبيوتر . و يمكن ان نصــل الــى الســتمرارية و الثبــات مــن خلل‬ ‫حفظ هذه المعلومات على موارد الــذاكرة الدائمــة مثــل القــراص الصــلبة و‬ ‫الفلش دسك..الخ ، لغات البرمجــة تــوفر طــرق كــثيرة لحفــظ البيانــات مثــل‬ ‫الكتابة الى الملفات النصية و ملفات ‪... XML‬الخ.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 56. ‫دليل لغات البرمجة )1( :: لغة البرمجة بيرل‬ ‫لغــة البرمجــة : ‪PERL : Practical Extraction and Report‬‬ ‫‪Language‬‬ ‫ظهــرت علــى يــد المبرمــج و اللغــوي المشــهور جــدا فــي عــالم المصــادر‬ ‫المفتوحة لري وال فـي العــام 6891 حيــث بـدات مرحلــة التطـوير الــى ان‬ ‫وصلت اللغة الى مرحلة نضج عالي فــي الصــدارة الخامســة . و منــذ العــام‬ ‫0002 بدا العمل على بيرل 6 و التي تعتبر اعادة كتابة كاملة للغة بالضافة‬ ‫لمشروع الببغاء و هي المنصة التي سـتعمل عليهـا بيـرل مــع القـدرة ايضـا‬ ‫لضافة عدة لغات اخرى.‬ ‫تتمتع لغة البرمجة بيرل بارشيف ضخم من الضافات الجاهزة او ما يســمى‬ ‫بالسيبان ‪ CPAN‬و هــي عبــارة عــن مــوجلز جــاهزة للســتخدام و اضــافة‬ ‫المزيد من القدرات الى لغة البرمجة بيرل حيث يمكن اضافة مـوجلز خاصـة‬ ‫بمكتبات برمجة اللعاب و تصميم المواقع و غيرها من التطبيقات المفيدة .‬ ‫اكتســبت بيــرل شــهرة واســعة بســبب قوتهــا فــي التعامــل مــع الريجكــس‬ ‫) التعابير المعتادة( ، و كفائتها في ادارة المواقــع العملقــة مثــل امــازون و‬ ‫سلشدوت و قاعدة بيانات الفلم )‪ (IMDb‬و غيرها . و اخيــرا اللغــة لهــا‬ ‫شــعار مشــهور " يوجــد اكــثر مــن طريقــة لعمــل هــذا " و هــذا يرجــع الــى‬ ‫انسيابية اللغة و القدرة على التطويع مما ادى الى التفنن في كتابــة الكــواد‬ ‫و ظهور شعار ‪ ،، Just another perl hacker‬بالنتيجة ظهر بعــض‬ ‫المتهكمين من مبرمجي اللغات الخرى و اتهموا الكتابة بهذه اللغة بالقبح .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 57. : ‫لغات اثرت على بيرل‬ Lisp• Awk• Sed• C• ++C• Smalltalk• Pascal• : ‫لغات تأثرت ببيرل‬ Python• Php• Ruby• Dao• Javascript• Falcon• Windows PowerShell• http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 58. ‫خصائص اللغة :‬ ‫1. مفسرة‬ ‫2. ديناميكية‬ ‫3. عالية المستوى‬ ‫4. اجرائية‬ ‫5. وظيفية‬ ‫6. تدعم البرمجة الكائنية‬ ‫7. ل تعتمد على نظام تشغيل معين ) كروس بلتفورم(‬ ‫اهم التطبيقات :‬ ‫1. برامج الويب‬ ‫2. ادارة النظمة و السيرفرات‬ ‫3. ادارة قواعد البيانات و الشبكات‬ ‫4. معالجة الملفات النصية‬ ‫5. برمجة الجرافكس‬ ‫مثال برمجي هيلو ورد! :‬ ‫‪#!/usr/its/bin/perl‬‬ ‫;”‪print “Hello,World!n‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 59. ‫دليل لغات البرمجة )2( :: لغة البرمجة جافا‬ ‫لغة البرمجة : ‪Java‬‬ ‫لغة الجافا في حقيقة المر عبارة عن امتــداد للغــة الــ ‪ ، oak‬حيــث ظهــرت‬ ‫هذه اللغة في بداية التسعينات من قبل صن ميكروسستمز لتكون لغة ســهلة‬ ‫الســتعمال و التنقــل و كــانت تســتهدف التواصــل بيــن اجهــزة التســلية مثــل‬ ‫اجهزة اللعاب و الـ ‪ . VCR‬اما الهــدف الساســي هــو اســتثمار اللغــة فــي‬ ‫اجهزة التلفاز التي تقدم خدمة الفيديو حسب الطلب . و في هذه الفترة بدات‬ ‫النترنت بالرواج و قد لحظ مطوروا ‪ oak‬هذه الموجة و مستقبلها خاصــة‬ ‫بعد ظهور اول متصفح جرافيكي، فتحول اهتمامهم الى الويب فأنشــؤا ويــب‬ ‫رنر و هو عبارة عن متصفح يدعم )اوك(. حينها تم تغير اسم اوك الى جافا‬ ‫لتعارض الحقوق و سمي الويب رنر ) هوت جافا ويــب بـراوزر( . و تطــور‬ ‫المر لحقا بمشاركة العديد من الشركات و المطورين لتكتسب جافا شــعبية‬ ‫و قوة كبيرة .‬ ‫خصائص اللغة :‬ ‫1. ل تعتمــد علـى نظــام معيــن : حيــث يقـوم الكومبــايلر الخـاص بالجافــا‬ ‫بانتاج بايت كود تحوله ‪ JVM‬الى لغة اللة ، فبرامج الجافا تعمل علــى اي‬ ‫نظام توجد فيه ‪.JVM‬‬ ‫2. لغة برمجة كائنية‬ ‫3. تحتوي على جامع قمامة ‪Garbage Collection‬‬ ‫4. استايل الكتابة مشابه للسي ++‬ ‫5. مكتبة قياسية غنية : تحوي عدد ضــخم مــن الكلســات و الميثــودز و‬ ‫يمكن تصنيفها الى ست اقسام:‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 60. ‫•كلسات دعم اللغة‬ ‫•كلسات اليوتلتي )الدوات(‬ ‫•كلسات الدخال و الخراج‬ ‫•كلسات الشبكة‬ ‫•‪ AWT‬لبرامج الواجهة الرسومية‬ ‫•‪ Applet‬لبرامج المتصفحات‬ ‫اهم التطبيقات :‬ ‫1. تطبيقات الويب‬ ‫2. برامج سطح المكتب‬ ‫3. برامج الشبكات‬ ‫4. برامج الجوالت‬ ‫5. تطوير اللعاب‬ ‫مثال برمجي هيلو ورد :‬ ‫{ ‪class HelloWorld‬‬ ‫)][‪public static void main(String args‬‬ ‫{‬ ‫}};)"!‪System.out.println("Hello world‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 61. ‫دليل لغات البرمجة )3( :: ســـي‬ ‫لغة البرمجة : ‪C‬‬ ‫قام دينيس ريتشــي مــن معامــل بــل فــي العــام 2791 بتطــوير لغــة البرمجــة‬ ‫المشـهورة جـدا ســي. سـي تبنـي و تقتبـس كـثيرا مـن سـابقتها لغـة بـي و‬ ‫سابقات بي :‬ ‫‪ CPl‬و ‪..BCPL‬‬ ‫‪ CPL‬تم تطويرها لهدف اساسي هو ان تكون لغة برمجة عالية المســتوى‬ ‫و ان تكون غير مرتبطــة بمعالــج او نظــام معيــن اضــافة الــى ذلــك ان تتيــح‬ ‫الفرصة للمبرمج للتحكم بالمور التحتية ‪ . low level‬و لكن نقطة ضــعف‬ ‫هذه اللغة كانت انها كبيرة جــدا فــي الســتخدام لعــدة تطبيقــات. و فــي العــام‬ ‫6791 تم تطوير ‪ BCPL‬و هي عبارة عــن نســخة مصـغرة للــ ‪ CPL‬مــع‬ ‫المحافظة على خصــائص و اهــداف اللغــة الم . و فــي عــام 0791 قــام كــن‬ ‫ثومبسون من معامل بيل بانشاء لغــة ‪ B‬و الــتي هــي الخــرى تصــغير للغــة‬ ‫‪ BCPL‬مع هدف اساسي و هــو برمجــة النظــم. و فــي نهايــة المطــاف قــام‬ ‫دينيس ريتشي باعادة بعض المزايا العامة من ‪ BCPL‬الــى ‪ B‬لتظهــر الــى‬ ‫الوجود اللغة الفائقة الشهرة ‪.C‬‬ ‫و عندما ظهرت قوة سي و قابليتها العاليــة للتطويــع تــم اعــادة كتابــة نظــام‬ ‫التشغيل يــونكس بشــكل شـبه كامــل باســتخدام سـي و قــد كــان مبرمجــا فــي‬ ‫الساس بلغة اسمبلي ، و على مــدى الســبعينات تــم انتشــار هــذه اللغــة فــي‬ ‫الجامعات و الكليات لرتباطها بيونكس و توفر الكومبايلرز الخاصة بها . و‬ ‫مع انتشار سي و تبني كل مؤسسة تطوير نسخة خاصة ظهرت مشكلة عدم‬ ‫التوافقيــة ممــا حــدى المعهــد المريكــي الــوطني للمواصــفات ‪ ANSI‬الــى‬ ‫تشكيل لجنة خاصة لتبني تعريف و مواصفات موحدة للغة سي.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 62. ‫اهم اللغات التي تأثرت بها سي:‬ ‫•86‪ALGOL‬‬ ‫•‪FORTRAN‬‬ ‫•‪B, BCPL , CPL‬‬ ‫•‪Assembly‬‬ ‫•‪PL/I‬‬ ‫اهم اللغات التي تأثرت و اخذت من سي:‬ ‫•‪++C‬‬ ‫•‪#C‬‬ ‫•‪JAVA‬‬ ‫•‪Perl‬‬ ‫•‪AWK‬‬ ‫•‪Limbo‬‬ ‫خصائص اللغة :‬ ‫•لغة مترجمة ) تستخدم كومبايلر ( تتميز بالسرعة الكبيرة.‬ ‫•لغـة تتيـح الوصـول الـى الوامـر و المهـام التحتيـة ‪ low level‬مـع‬ ‫اسلوب كتابة عالي المستوى فهي لذلك تصلح لبرمجــة نظــم التشــغيل‬ ‫جنبا الى جنب مع برمجة التطبيقات المعتادة.‬ ‫• اغلــب الميــزات مفصــولة مــن قلــب اللغــة و تضــاف كمــوجلز جــاهزة‬ ‫للستخدام.‬ ‫•لغة منظمة ، اجرائية .‬ ‫•اسلوب الكتابة ثابت و ضعيف‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 63. : ‫اهم مجالت التطبيق‬ ‫•انظمة التشغيل و برامج يونكس‬ ‫•برمجة اللعاب‬ : ‫مثال برمجي هيلو ورد‬ #include<stdio.h> main() {printf (“hello world!”);} http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 64. ‫دليل لغات البرمجة )4( :: سمول تولك‬ ‫لغة البرمجة :‪Smalltalk‬‬ ‫قامت مجموعة البحـث التعليمـي فـي زيروكـس ‪ PARC‬بقيـادة )الن كـي(‬ ‫بتصميم لغة برمجة كائنية عرفت باسم سمول تولك 27 . و بعد المزيــد مــن‬ ‫التجارب و التطوير توالت نسخ اخرى الى ان انتهت اللغة الى سمول تولــك‬ ‫08.‬ ‫اهم اللغات التي تأثرت بها سمول تولك:‬ ‫•‪Lisp‬‬ ‫•‪Simula‬‬ ‫•‪Logo‬‬ ‫•‪Sketchpad‬‬ ‫اهم اللغات التي تأثرت و اخذت من سمول تولك:‬ ‫•‪Perl‬‬ ‫•‪Ruby‬‬ ‫•‪Python‬‬ ‫•‪Java‬‬ ‫•‪Objective C‬‬ ‫•‪Self‬‬ ‫•‪Falcon‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 65. ‫خصائص اللغة :‬ ‫•لغة برمجة كائنية بحتة‬ ‫•اسلوب الكتابة ديناميكي‬ ‫•لغة متعددة التطبيقات‬ ‫•تتوافر لها بيئة تطوير مرئية‬ ‫اهم مجالت التطبيق :‬ ‫•برامج الباتش لبرامج المينفريم الكبيرة.‬ ‫•لديها القدرة على ادارة نظام التلفون الخاص بدولة كاملة‬ ‫•نظم المعلومات الدارية‬ ‫•مناسبة جدا للمشاريع العملقة‬ ‫•تستخدم كلغة اكاديمية للتدريس في الجامعات‬ ‫مثال كود خاص بنسخة غنو سمول تولك:‬ ‫‪‘Hello World!’ displayNl‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 66. ‫دليل لغات البرمجة )5( :: ليسب‬ ‫لغة البرمجة :‪Lisp‬‬ ‫مع منتصف الخمسينات من القرن الماضي ظهرت موجــة الهتمــام بالــذكاء‬ ‫الصطناعي . نشأ هذا الهتمام الكبير بسبب رغبة اللغــويين بــالتعرف علــى‬ ‫معالجة اللغات الطبيعية ، و علماء النفس بسبب محاولة محاكاة المعلومات‬ ‫النسانية ، و اخيرا علماء الرياضيات بسبب الرغبة في جعل عمليــة اثبــات‬ ‫النظريات عملية اتوماتيكية . و الشيء المشترك بين كل هذه التطبيقات هــو‬ ‫الحاجة الى طريقة تسمح للكمبيوترات بمعالجة البيانات الرمزية على شــكل‬ ‫قوائم.‬ ‫كــانت شــركة ‪ IBM‬مــن اول الشــركات المهتمــة بهــذا المجــال فــي اواســط‬ ‫الخمسينات. في نفس الوقت كان العمل جاريـا علـى مشـروع الفـورترن . و‬ ‫لغلء تكلفــة اصــدار اول كومبــايلر للفــورتران تــم اضــافة معالجــة القــوائم‬ ‫كاضافة مستقلة الى الفورتران عرفت باسم ‪.FLPL‬‬ ‫فــي العـام 8591 عمـل جـون ماكـارثي فـي شـركة ‪ IBM‬فـي ادارة بحــوث‬ ‫المعلومات. تم استقدام مكارثي ليعمـل علـى انشـاء مجموعـة مـن متطلبـات‬ ‫عمل الحوسبة الرمزية.‬ ‫المحاولة الولى كانت التفرقة بين التعــابير الجبريــة. هــذه التجربــة الوليــة‬ ‫انتجت قائمة من متطلبات اللغــة مـن اهمهــا التعـابير الشـرطية، و العوديـة.‬ ‫هذه المتطلبات لم تكن موجــودة فــي اي لغـة برمجــة فـي ذلـك الزمــان حــتى‬ ‫اعلى اللغات مستوى حينذاك و هي فورتران.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 67. ‫تعود بدايات العمــل علــى ليســب الــى العــام 6591 حيــث قــام جــون مكــارثي‬ ‫بتطوير اسس الليسب في مشــروع صـيف دارتمــوث للبحــاث. كــان طمــوح‬ ‫مكــارثي ان ينشــيء لغــة معالجــة قــوائم للــذكاء الصــطناعي . و فــي العــام‬ ‫5691 ظهرت اول اصدارة من ليسب . و مع العام 0791 ظهرت حاسوبات‬ ‫خاصة فقط بتشغيل برامج ليسب عرفت بــ ) اجهــزة ليســب( . و فــي مطلــع‬ ‫الثمانينــات تــم ادخــال مبــاديء البرمجــة الكائنيــة الــى ليســب . و مــع العــام‬ ‫6891 بــدا العمــل علــى توحيــد معــايير ليســب و فــي العــام 2991 تــم نشــر‬ ‫معايير ‪.ANSI Common Lisp‬‬ ‫فــي الــوقت الراهــن توجــد اصــدارات عديــدة مــن ليســب مــن اهمهــا شــيم و‬ ‫كومون ليسب و آرك بالضــافة الــى لغــات مخصصــة لتطبيقــات معينــة مثــل‬ ‫ايماكس ليسب و اوتو ليسب. تعتبر ليسب في نظر الكثيرين اقــوى و اجمــل‬ ‫لغة برمجة على الطلق و يوجد الكثير من المتعصبين لها فمــن امثلــة تلــك‬ ‫المقولت : ال يبرمج باستخدام ليسب! و تعتبر البرمجة بهـا متعـة للحريـة‬ ‫التي توفرها للمبرمج كما تفعل بيرل .‬ ‫اهم اللغات التي تأثرت بـ ‪ Lisp‬كأمثلة فقط:‬ ‫•‪Perl‬‬ ‫•‪Ruby‬‬ ‫•‪Python‬‬ ‫•‪Javascript‬‬ ‫•‪Forth‬‬ ‫•‪Mathematica‬‬ ‫•‪Falcon‬‬ ‫•‪Lua‬‬ ‫•‪Forth‬‬ ‫•‪Qi‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 68. ‫خصائص اللغة :‬ ‫•لغة برمجة وظيفية‬ ‫•لغة برمجة متعددة الساليب في البرمجة : ميتا، اجرائية ..‬ ‫•جامع قمامة مبني داخل اللغة‬ ‫• العتمـاد علـى العوديـة : و هـو مبـدا تسـتمد منـه ليسـب قـوة كـبيرة‬ ‫خاصة في جانب الذكاء الصطناعي.‬ ‫•طريقة الكتابة ديناميكية ، قوية‬ ‫•كل شيء في ليسب قائمة‬ ‫• متوفرة كلغة تفسيرية و كلغة مترجمة‬ ‫اهم مجالت التطبيق :‬ ‫سيطرت ليسب سيطرة تامة على مجال الذكاء الصطناعي لمدة تفوق الربع‬ ‫قرن و الى الن تعتبر اكثر لغة انتشارا في مجال برمجة الذكاء الصطناعي‬ ‫بالضافة الى ذلك فليسب تعتبر رائدة اللغات في مجال البرمجة الوظيفية .‬ ‫• الذكاء الصطناعي:‬ ‫• الروبوتات‬ ‫• محركات اللعاب‬ ‫• التعرف على النماط‬ ‫• نظم ادارة الدفاع الجوي.‬ ‫• ادارة و معالجة القوائم.‬ ‫• تستخدم كلغة اكاديمية للتدريس في الجامعات ) البرمجة الوظيفية(‬ ‫مثال كود ‪:Hello world‬‬ ‫)( ‪(DEFUN HELLO-WORLD‬‬ ‫)))‪(PRINT (LIST 'HELLO 'WORLD‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 69. ‫دليل لغات البرمجة )6( :: لغة البرمجة بايثون‬ ‫لغة البرمجة : ‪Python‬‬ ‫تعتبر لغة البرمجة بايثون لغة برمجة حديثة نسبيا فبداياتها ترجع الى العام‬ ‫1991 عندما قام جودو فان روسام بتطويرها. اكثر خصائص بايثون مبنيــة‬ ‫و مستوحاة من لغة مفسرة تدعى ‪ ، ABC‬حيث كــانت لــدى روســام رغبــة‬ ‫في تصحيح بعض اخطاء هذه اللغة من ناحيــة ، مــع المحافظــة علــى بعــض‬ ‫خصائص اللغة من ناحية اخرى . في البداية كان فان روسام يبحث عن لغة‬ ‫مفسرة قابلة للتطويع و التوسيع تشبه ‪ ABC‬في طريقة كتابتها مع القــدرة‬ ‫علــى اســتدعاء اوامــر نظــام امويبــا الــذي كــان يعمــل عليــه حينهــا. و بعــد‬ ‫مشاورة مصممي موجول 3 قرر فان روسام البدء في مشروع لغــة برمجــة‬ ‫جديــدة اســماه بــايثون الســم المســتوحى مــن مسلســل كوميــدي مــن زمــن‬ ‫السبعينات.‬ ‫اهم اللغات التي اثرت على بايثون :‬ ‫1. ‪Lisp‬‬ ‫2. ‪Haskell‬‬ ‫3. ‪Perl‬‬ ‫4. ‪Java‬‬ ‫5. ‪Icon‬‬ ‫6. ‪ABC‬‬ ‫7. ‪C‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 70. ‫8.‬ ‫9.‬ ‫3-‪Modula‬‬ ‫86 ‪AlGOL‬‬ ‫اهم اللغات التي تأثرت ببايثون :-‬ ‫1. ‪Ruby‬‬ ‫2. ‪Boo‬‬ ‫3. ‪Groovy‬‬ ‫4. ‪Cobra‬‬ ‫5. ‪D‬‬ ‫6. ‪Dao‬‬ ‫7. ‪Falcon‬‬ ‫خصائص اللغة :‬ ‫1. لغة مفسرة ، تفاعلية ، كائنية ، وظيفية .‬ ‫2. برامجها تعمل على جميع انظمة التشغيل في حال توافر المفسر فقط.‬ ‫3. الكتابة ديناميكية قويــة ، تجــدر الشــارة هنــا الــى وضــوح و ســهولة‬ ‫استايل الكتابة في بايثون‬ ‫4. غنية بالضافات و المكتبات‬ ‫5. مفتوحة المصدر‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 71. ‫اهم التطبيقات :‬ ‫في الوقت الحاضر تعتبر بايثون لغة برمجــة متعــددة الغــراض و لكــن مــن‬ ‫اكثر استعمالت بايثون :‬ ‫1. برمجة برامج لينكس‬ ‫2. سكربتات ادارة النظام‬ ‫3. التعامل مع قواعد البيانات‬ ‫4. برامج الويب‬ ‫مثال برمجي :‬ ‫:)(‪>>> def hello‬‬ ‫"!‪...print "Hello, World‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 72. ‫دليل لغات البرمجة )7( :: لغة البرمجة فورتران‬ ‫لغة البرمجة : ‪Fortran‬‬ ‫تعتبر فورتران واحدة من اقدم لغات البرمجة . قام بتطويرها مجموعــة مــن‬ ‫المبرمجين في ‪ IBM‬بقيادة جون باكوس ، حيث كــان اول ظهــور لهــا فــي‬ ‫العــام 7591. جــاء اســم فــورتران مــن دمــج اختصــار كلمــتي “ترجمــة‬ ‫الفورمــول” ، لن الهــدف الساســي كــان تســهيل عمليــة كتابــة المعــادلت‬ ‫الرياضية في الكواد البرمجية.‬ ‫فوتران تحتل مكانة خاصة بين لغات البرمجة لنهــا تعتــبر اول لغــة برمجــة‬ ‫عالية المستوى بالضافة الى استخدامها اول مترجم على الطلق.‬ ‫قبل ظهور فورتران كان على المبرمجين ان يبرمجوا باســتخدام اســمبلي و‬ ‫التي كــانت تحتــاج الــى مجهــود مظنــي فــي الكتابــة اضــف الــى ذلــك عمليــة‬ ‫تصحيح الخطاء التي كانت تحتاج مجهودا مضاعفا .‬ ‫عليه ، كان الهــدف انشــاء لغــة برمجــة ســهلة التعلــم ، مناســبة للعديــد مــن‬ ‫التطبيقات ، غير معتمدة على الة معينة مع التمتع بقدرات عالية فــي مجــال‬ ‫الرياضيات .‬ ‫مــع كــل هــذه المزايــا اســتطاع المــبرمجون ان يــبرمجوا باســتخدام فــوتران‬ ‫005% اسرع من البرمجـة باسـتخدام اسـمبلي الشـيء الـذي اتـاح فرصـة‬ ‫اكبر للتفكير في حل المشاكل بدل من كتابة الكواد و صيانتها .‬ ‫اذا فورتران لها الفضل في انشاء نظرية الترجمة في علوم الكمبيوتر.‬ ‫لكن مع التطور ظهرت مشكلة تعدد اصــدارات فــوتران ممــا حــدى المنظمــة‬ ‫المريكيــة للمعــايير الــى اصــدار معــايير موحــدة فــي العــام 6691 عرفــت‬ ‫بفــورتران 66 لحقهــا اصــدار فــورتران 77 فــي العــام 8791 و اصــدار‬ ‫فورتران 09 في العام 0991 مع مزيد من الضــافات و المزايــا لهــذه اللغــة‬ ‫العريقة.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 73. ‫اهم اللغات التي تأثرت بفورتران :-‬ ‫1.‬ ‫2.‬ ‫3.‬ ‫4.‬ ‫‪C‬‬ ‫85 ‪AlGOL‬‬ ‫‪Basic‬‬ ‫‪PL/I‬‬ ‫خصائص اللغة :‬ ‫1. لغة مترجمة .‬ ‫2. اجرائية.‬ ‫3. غير محصورة لجهاز معين.‬ ‫4. قوية جدا في التعبير عن المعادلت و التعابير و الدوال الرياضية.‬ ‫5. توفر تحكم قوي للتخاطب مع الهاردوير.‬ ‫6. التحكم بموارد التخزين و الذاكرة.‬ ‫7. كفاءة و سرعة عالية جدا لتطبيقاتها ، اقل فقط بـ ـ 02% مــن كفــاءة‬ ‫برامج السمبلي!.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 74. ‫اهم التطبيقات :‬ ‫فورتران قوية جدا في عدة مجالت ، اهمها :-‬ ‫1. برامج معالجة المعادلت الرياضية .‬ ‫2. البرامج الرياضية ، العلمية ، الحصائية ، و الهندسية .‬ ‫مثال برمجي هيلو ورد :‬ ‫'‪WRITE(6,*)'Hello world‬‬ ‫‪STOP‬‬ ‫‪END‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 75. ‫دليل لغات البرمجة )8(:: لغة البرمجة ‪Algol‬‬ ‫لغة البرمجة : ‪Algol‬‬ ‫تعتـبر لغـة ‪ ) Algol‬اختصـار لكلمـتي “‪ALGOrithmic Language‬‬ ‫“( واحــدة مــن اللغــات عاليــة المســتوى المخصصــة للبرمجــة العلميــة و‬ ‫الحسابية . بدات في العام 0591 ، حيث طرحــت علــى شــكل تقريــر بعنــوان‬ ‫الجول 85 و تطورت من خلل التقارير الى الجول 06 ثم 86 .‬ ‫تم تصميم اللغة من قبل لجنة عالمية لكي تصبح لغة عالية المستوى . و قـد‬ ‫تم طرح مشكلة النتقالية في تطــوير البرامــج مــن خلل اول اجتمــاع للجنــة‬ ‫في مدينة زوريخ. و قد جعلت خاصية النتقاليــة و عــدم العتمــاد علــى الــة‬ ‫معينة ، المصممين اكثر ابداعا و لكن في نفس الوقت جعلت عملية التطبيق‬ ‫اكثر صعوبة .‬ ‫و علــى الرغــم مــن عــدم وصــول ‪ Algol‬الــى مســتوى عــالي مــن الشــعبية‬ ‫التجارية كما حصل لفورتران و كوبول ، ال انها تعتبر اهم لغة في عصــرها‬ ‫من ناحية تأثيرها القــوي علــى اللغــات القادمــة . نظــام المفــردات و الهيكــل‬ ‫النحوي الخاص بـ ‪ Algol‬اصبح شديد الشهرة لدرجة انــه فعليــا جــل لغــات‬ ‫البرمجة يقال عنها " مشابه لـ ‪. "Algol‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 76. ‫اهم اللغات التي تأثرت بـ ‪-: Algol‬‬ ‫1. ‪C‬‬ ‫2. ‪++C‬‬ ‫3. ‪Ada‬‬ ‫4. ‪Python‬‬ ‫5. ‪SteelMan‬‬ ‫6. ‪Bash‬‬ ‫7. ‪Simula‬‬ ‫8. ‪Pascal‬‬ ‫خصائص اللغة :‬ ‫1. لغة متعددة النماذج ، امري ، متزامن ..‬ ‫2. لغة مترجمة .‬ ‫3. استايل الكتابة ثابت .‬ ‫اهم التطبيقات :‬ ‫اهم مجال لـ ‪ Algol‬كان استخدامها للبحاث العلمية و الحســابات بواســطة‬ ‫العلماء في اوربا و امريكــا. و لكــن علــى المســتوى التجــاري لــم يكتــب لهــا‬ ‫النجاح لسباب عديدة من اهمها عدم اهتمام الشركات الكبيرة باللغة.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 77. : ‫مثال برمجي هيلو ورد‬ BEGIN FILE F (KIND=REMOTE); EBCDIC ARRAY E [0:11]; REPLACE E BY "HELLO WORLD!"; WHILE TRUE DO BEGIN WRITE (F, *, E); END; END. http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 78. ‫دليل لغات البرمجة )9( :: كوبول‬ ‫لغة البرمجة : ‪Cobol‬‬ ‫تعتبر كوبول واحدة من اوائل لغات البرمجة عالية المستوى . تــم تطويرهــا‬ ‫في العام 9591 من قبل مجموعة من محترفي الكمبيوتر و منذ ذلك خضعت‬ ‫اللغة للعديد من التعديلت و التحسينات. و لحل مشـكلة عــدم التوافقيـة بيـن‬ ‫اصــدارات كوبــول المتعــددة قــامت المنظمــة الوطنيــة المريكيــة للقياســات‬ ‫باصدار نسخة موحدة للغة في العام 8691، حيث عرف هذا الصــدار باســم‬ ‫‪ . ANS COBOL‬و مع العام 4791 قامت المنظمة مــرة اخــرى باعــادة‬ ‫طرح نسخة معدلة من كوبول تحتوي على المزيــد مــن المزايــا و الضــافات‬ ‫الجديدة. و تكــررت هــذه العمليــة ايضــا فــي العــام 5891 . و فــي الصــدارة‬ ‫الرابعة التي عرفت باسم كوبول 79 تم اضافة خصائص البرمجة الكائنيــة .‬ ‫و يوجــد الن العديــد مــن المترجمــات لكوبــول علــى الرغــم مــن محــاولت‬ ‫التوحيد في هذا المجال.‬ ‫اهم اللغات التي تأثرت بها كوبول:‬ ‫•‪FACT‬‬ ‫•‪COMTRAN‬‬ ‫•‪FLOW-MATIC‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 79. ‫لغات تأثرت بكوبول :‬ ‫•‪PL/I‬‬ ‫•‪COBOL Script‬‬ ‫•‪ABAP‬‬ ‫خصائص اللغة :‬ ‫1. لغة مترجمة‬ ‫2. مخصصة لدارة العمال للشركات‬ ‫3. امكانية التمازج مع تطبيقات الويب‬ ‫4. بيئة تطوير مرئية‬ ‫5. التفاصيل في تعريف المتغيــرات مثــل عــدد كســور المتغيــر و موضــع‬ ‫نقطة الكسر.‬ ‫6. تعنى بتفاصيل الملفات و معلوماتها مما يجعلها خيارا ممتازا لطباعــة‬ ‫التقارير.‬ ‫7. توافر مكتبات تحوي العديد من الكلسات‬ ‫8. نمط الكتابة قوي‬ ‫اهم مجالت التطبيق :‬ ‫من اســمها كوبــول ‪COmmon Business-Oriented Language‬‬ ‫فهي خيار ممتاز لحل مشاكل العمال و الشركات ، حيث تستخدم كـثيرا فــي‬ ‫الشركات كنظام شامل خاصة في تتبع المصادر و المخارج و غير ذلك .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 80. :Hello world ‫مثال كود‬ IDENTIFICATION DIVISION. PROGRAM-ID. HELLO-WORLD. PROCEDURE DIVISION. MAIN. DISPLAY 'Hello, world'. STOP RUN. http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 81. ‫دليل لغات البرمجة )01( :: بي اتش بي‬ ‫لغة البرمجة : ‪PHP‬‬ ‫في البداية ظهرت البي اتــش بــي لول مــرة باســم ‪ PHP/FI‬و قــد اسســها‬ ‫راسموس ليردورف فــي العــام 5991 علــى شــكل مجموعــة مــن ســكربتات‬ ‫مكتوبة بلغة الــبيرل لكــي يســيطر علــى احصــائيات مــوقعه و يكســب بعــض‬ ‫المعلومات عن رواد موقعه ، و ما لبث ان اطلــق عليهــا اســم )‪Personal‬‬ ‫‪ ( Hompage Tools‬أي ” ادوات تصـــميم الصـــفحات الشخصـــية ” .‬ ‫طبعا للتوسع في تغطية بعض العمليات الضافية بدأ راســموس بصــنع آليــة‬ ‫بلغــة الســي بوســعها التصــال بقواعــد البيانــات ، و تمكــن المســتخدمين أن‬ ‫يصنعوا لهم صفحات ديناميكية بسيطة . و اخيرا قرر راسموس ان يعــرض‬ ‫هذا الكود المصدري المكتوب بلغة الســي علــى الجمهــور لك ـي يســتطيع أي‬ ‫شخص استخدامه او حتى تصــليح بعــض الخطــاء الــتي قــد توجــد حــتى ان‬ ‫بعضهم عمل على توسيع الكود باضــافة بعــض الخصــائص الجديــدة . طبعــا‬ ‫في هذه المرحلة لم تكن البي اتش بي تحتوي ال على القليــل مــن الفنكشــنز‬ ‫الــتي نعرفهــا الن و كــان بهــا بعــض الشــبه مــن لغــة الــبيرل و لكــن طبعــا‬ ‫بامكانيات اكثر تواضعا من ان تقارن بالبيرل .‬ ‫العام 7991 ، تنزل النسخة الثانية من الـ ‪ PHP/FI‬و الــتي كــانت تحتــوي‬ ‫على النسخة الجديدة الثانية من الكود المصــدري المكتــوب بلغــة الســي ، و‬ ‫كان هنــاك اللف مــن المســتخدمين يســتخدمونها و حــوالي 00005 موقــع‬ ‫اعلن تنصيبه للبي اتش بي على سيرفراته. و فــي العــام 8991 كــانت الــبي‬ ‫اتش بي قد اكتسبت قاعدة جماهيرية كبيرة و مئات من اللف مــن المواقــع‬ ‫كانت ترسل معلنة انها قامت بتنصيب البي اتــش بــي علــى ســيرفراتها . أي‬ ‫بلغت نسبة المواقع التي تستخدم البي اتش بي 3 حوالي 01% من اجمالي‬ ‫مواقع الويب . و قد تم اصدار 3‪ php‬رسميا في 8991 في شهر جون بعــد‬ ‫ان امضت حوالي تسعة اشهر تحت الستخدام التجريبي .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 82. ‫في شتاء 8991 و بعد فــترة وجيــزة مــن اصــدار الــ 3‪ php‬الرســمي . بــدأ‬ ‫زيف سوراسكي و اندي جوتمانز بإعــادة كتابــة و برمجــة نــواة الــبي اتــش‬ ‫بي .‬ ‫لهــذا الغــرض بــدأ تصــميم محــرك جديــد ســمي “‪ ) ”ZEND Engine‬و‬ ‫يتركب اسم المحرك الجديد من اول حرفين من اسم زيف و اخر حرفين مــن‬ ‫اسم اندي ( . و في منتصفات 9991 تــم التعريــف بهــذا المحــرك لول مــرة‬ ‫بعد ان حقق الهداف المنشودة منه بنجاح قــوي و فــي شــهر مــي مــن عــام‬ ‫0002 تم اصدار البي اتش بــي 4 رســميا. فــي العــام 4002 تــم اصــدار بــي‬ ‫اتش بي 5 مع المحرك الثاني و نظــام كــائني جديـد ممــا قـدم قــدرات كائنيــة‬ ‫جديدة و قوية..‬ ‫اهم اللغات التي تأثرت بها ‪: php‬‬ ‫•‪Perl‬‬ ‫•‪C‬‬ ‫•‪Java‬‬ ‫•‪++C‬‬ ‫لغات تأثرت بـ ‪: PHP‬‬ ‫•‪PHP4Delphi‬‬ ‫•‪Falcon‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 83. ‫خصائص اللغة :‬ ‫1. تعمل على اغلب نظم التشغيل‬ ‫2. مخصصة لتطوير الويب‬ ‫3. كود بي اتش بي مضمن داخل وسوم الـ ‪. HTML‬‬ ‫4. سهلة التعلم.‬ ‫5. غنية بالدوال الكثيرة المبنية داخل اللغة.‬ ‫6. اسلوب كتابة ديناميكي ، ضعيف.‬ ‫7. لغة مفسرة‬ ‫اهم مجالت التطبيق :‬ ‫•بل شك اهم مجال لبي اتش بي هو قوتها فـي مجـال تطـوير مواقـع و‬ ‫تطبيقات الويب.‬ ‫•كما يمكن انشاء برامج ذات واجهة رسومية خاصة بسطح المكتب.‬ ‫مثال كود ‪:Hello world‬‬ ‫‪<?php‬‬ ‫;’‪echo ‘Hello world‬‬ ‫>?‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 84. ‫دليل لغات البرمجة )11( :: ايفل‬ ‫لغة البرمجة :‪Eiffel‬‬ ‫لغة البرمجة ايفل من انشـاء برتنـارد ميـر و مـن تطـوير شـركته ” هندسـة‬ ‫البرامج التفاعلية” سابقا ، بدا العمــل عليهــا فــي 5891 و كــان اول ظهــور‬ ‫لها في العام 6891. و سميت بايفل تيمنــا بجوســتاف ايفــل المهنــدس الــذي‬ ‫صمم برج ايفل المشهور . و يضيف مطوروا هذه اللغة ان باستخدامك هــذه‬ ‫اللغة في مشاريعك ستتمكن من انجاز المشاريع في وقتهــا و ضــمن الطــار‬ ‫المالي المرصود كما حدث تماما في بناء برج ايفل !..‬ ‫ايفل لغة تعنى بالجودة و الكفاءة و قابلية الستفادة من الكــود فــي مشــاريع‬ ‫لحقة ، اضافة الى انها قدمت مباديء برمجية جديدة وجدت طريقهــا لحقــا‬ ‫الى لغات البرمجة المشهورة اليوم مثل الجافا .‬ ‫اهم اللغات التي تأثرت بها ايفل :‬ ‫•‪Ada‬‬ ‫•‪Simula‬‬ ‫•‪Z‬‬ ‫لغات تأثرت بـ ايفل :‬ ‫•‪Java‬‬ ‫•‪#C‬‬ ‫•‪Ruby‬‬ ‫•‪D‬‬ ‫•‪Lisaac‬‬ ‫•‪Sather‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 85. ‫خصائص اللغة :‬ ‫1. تعمل على اغلب انظمة التشغيل‬ ‫2. لغة برمجة كائنية بحتة‬ ‫3. تدعم التكرار و التعدد في التوارث‬ ‫4. اسلوب الكتابة ثابت ، قوي‬ ‫5. لغة مترجمة‬ ‫6. التوثيق اللي‬ ‫7. البرمجة بالعقد ‪design by contract‬‬ ‫اهم مجالت التطبيق :‬ ‫•انظمة التصالت‬ ‫•التدريس الكاديمي‬ ‫•النمذجة الولية السريعة‬ ‫•البرامج التجارية‬ ‫•برمجة اللعاب‬ ‫•البرامج الطبية‬ ‫•الطيران‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 86. :Hello world ‫مثال كود‬ class HELLO_WORLD create make feature make do print ("Hello, world!%N") end end http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 87. ‫دليل لغات البرمجة )21( ::موجول-2‬ ‫لغة البرمجة :2-‪Modula‬‬ ‫في منتصف السبعينات ، كــان ‪ ) Niklaus Wirth‬مصـمم لغـة باســكال (‬ ‫يقوم بتجــارب و دراســات فــي الــتزامن ادت الــى انشــاء لغــة جديــدة اســمها‬ ‫موجول. و لكن موجول لم تصدر بشكل رسمي ابدا حيث تم ايقاف تطويرها‬ ‫بعـد نشـر تقريرهــا . و لكـن نيكلـوس قـام ببنـاء لغـة برمجـة جديـدة هـدفها‬ ‫الساسي هو ان تكون لغة خاصة بجهاز سيعرف باسم ‪ .Lilith‬طبعــا فشــل‬ ‫الجهاز و لم يحقق النجاح المطلوب و لكن لغته الخاصة هذه تم نشــرها فــي‬ ‫العام 0891 لنعرفها الن باسم موجول-2. هذه اللغة على بساطتها ال انهــا‬ ‫قوية و جبارة بحيث انها كانت اللغة المنتشرة فــي اوربــا حــتى مــع موجــود‬ ‫جافــا و ســي ++ لحقــا. و قــد اعتبرهــا مبرمجهــا خليفــة لغــة البرمجــة‬ ‫باسكال ..‬ ‫اهم اللغات التي أثرت على هذه اللغة :‬ ‫•باسكال‬ ‫•‪ALGOL‬‬ ‫•‪Mesa‬‬ ‫•76-‪Simula‬‬ ‫لغات تأثرت بـهذه اللغة :‬ ‫•‪Ada‬‬ ‫•‪Oberon‬‬ ‫•‪Lua‬‬ ‫•09 ‪Fortran‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 88. ‫•3-‪Modula‬‬ ‫•‪Modula-GM‬‬ ‫خصائص اللغة :‬ ‫1. تعمل على اغلب انظمة التشغيل‬ ‫2. لغة برمجة امرية )الزامية( ، تنظيمية ، تعتمد الوحدات ) موجلر(‬ ‫3. ميزة الوحدات اعطتها قوة كبيرة في تطوير المشاريع العملقة‬ ‫4. اسلوب الكتابة ثابت ، قوي‬ ‫5. لغة مترجمة‬ ‫6. القدرة على البرمجة العالية و المنخفضة المستوى .‬ ‫7. تعتبر سهلة التعلم بسبب صغر قاموسها النحوي.‬ ‫اهم مجالت التطبيق :‬ ‫•برمجة النظمة‬ ‫•البرمجة المتزامنة‬ ‫•برمجة النظمة المضمنة ) المدمجة(‬ ‫•هندسة البرامج‬ ‫•التعليم‬ ‫•البرمجة الصوتية‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 89. :Hello world ‫مثال كود‬ MODULE hello; FROM InOut IMPORT writestring, writeln; begin WriteString("Hello, world!"); Writeln; end hello. http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 90. ‫دليل لغات البرمجة )31( :: روبي‬ ‫لغة البرمجة : ‪Ruby‬‬ ‫بــدات فكــرة لغــة البرمجــة روبــي فــي العــام 3991 عنــدما اراد يــوكيهيرو‬ ‫ماتسوموتو ان يطور لغة برمجة تتفوق على بيرل في القــوة و تكــون اكــثر‬ ‫كائنية من بايثون ، لغــة تجمــع بيــن الوظيفيــة و المريــة . تــم اختيــار اســم‬ ‫روبي للغة قبل البدء في كتابة اللغة حيث كان هناك ايضا اسم كورال و لكن‬ ‫تم استبعاد الخير لوجود لغة برمجة اخرى بهذا السم .‬ ‫في يوم 12 ديســمبر مــن العــام 5991 تــم اصــدار روبــي 59,0 للعامــة تله‬ ‫ثلث اصدارات متلحقة خلل يومين فقط. رافق هــذا الصــدار العلن عــن‬ ‫انطلق القائمة البريدية روبي باللغة اليابانية .‬ ‫في ديسمبر 52 من العام 6991 تم اصــدار روبــي 1 . اعقبــه الصــدار 3.1‬ ‫في العام 9991 حيث رافقته انطلقة القائمة البريدية النجليزية . هذا المر‬ ‫تسبب في ازدياد شعبية اللغة و تم اصدار اول كتاب انجليزي لهذه اللغة في‬ ‫العام 0002 باسم " برمجة روبي" تجدر الشارة هنا الى انه تم طرح هــذا‬ ‫الكتاب مجانا لحقا .‬ ‫تم اصدار روبي 1.9.1 في يناير 03 من العام 9002.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 91. ‫اهم اللغات التي اثرت على روبي :-‬ ‫1- ‪Perl‬‬ ‫2- ‪SmallTalk‬‬ ‫3-‪Lisp‬‬ ‫4- ‪Python‬‬ ‫5- ‪Eiffel‬‬ ‫6- ‪CLU‬‬ ‫7- ‪Dylan‬‬ ‫8- ‪T-Ray‬‬ ‫اهم اللغات التي تأثرت بروبي :-‬ ‫1.‪Groovy‬‬ ‫2.‪Falcon‬‬ ‫3.‪Nu‬‬ ‫4.‪Loke‬‬ ‫خصائص اللغة :‬ ‫1-لغة متعددة النماذج ، امري ، وظيفي ، كائني..‬ ‫2-لغة مفسرة .‬ ‫3-استايل الكتابة ديناميكي‬ ‫4-مفتوحة المصدر .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 92. ‫5-لديها جامع قمامة “‪“ Garbage Collection‬‬ ‫6-تعمل على منصة جافا باستخدام ‪JRuby‬‬ ‫7-تعمل على اغلب انظمة التشغيل‬ ‫8-سهولة كتابة الضافات بلغة سي‬ ‫اهم التطبيقات :‬ ‫روبــي لغــة برمجــة عامــة متعــددة الغــراض و لكــن يبــدو ان مــن اهــم‬ ‫استخداماتها الن برمجة تطبيقات الـويب باسـتخدام ‪. Ruby on Rails‬‬ ‫يتم ايضا استخدام روبي في اغراض اخرى مثل التجسيم الثلثي و المحاكاة‬ ‫و ادارة النظم …‬ ‫مثال برمجي :‬ ‫"?‪puts "What's your favorite number‬‬ ‫‪number = gets.chomp‬‬ ‫1 + ‪output_number = number.to_i‬‬ ‫‪puts output_number.to_s + ' is a bigger and better‬‬ ‫'.‪favorite number‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 93. ‫دليل لغات البرمجة )41( :: باسكال‬ ‫لغة البرمجة : ‪Pascal‬‬ ‫تم تطوير لغة البرمجة باسكال اساسا من قبل ” نيكلس ورث ” و هو عضو‬ ‫الفدرالية العالميـة لمعالجـة النصـوص ‪ .IFIP‬قـام البرفسـور نيكلـس ورث‬ ‫بتطوير باسكال لتحوي المميزات التي تخلــو منهــا لغــات البرمجــة فــي ذلــك‬ ‫الوقت. و كان هدفه الرئيسي في ان يجعل من لغة باسكال :‬ ‫1- لغة ذات كفائة في مرحلتي التطبيق و التنفيذ .‬ ‫2- لغة تسمح بتطوير برامج ذات هيكلية جيدة و تنظيم رشيق.‬ ‫3-لغة لغرض تعليم مباديء البرمجة الساسية و المهمة.‬ ‫و تعتبر لغة باسكال و التي سميت بهذا السم تيمنا بعالم الرياضيات ” بليــز‬ ‫باسكال ” وريثة مباشرة للغة البرمجة 06‪ ALGOL‬و الــتي بــدورها هــي‬ ‫الخرى حظيت بكـون البرفسـور ورث احـد مطوريهـا . ايضـا فلغـة باسـكال‬ ‫تبني علــى العناصــر البرمجيــة مــن كل ‪ Algol w‬و 86‪ .ALGOL‬و قــد‬ ‫ظهر اول تعريـف للغـة باسـكال فـي العـام 1691 ، تله اعـادة تصـحيح فـي‬ ‫العام 3791 . و قد تم تصميمها لكــي تكــون اللغــة المســتخدمة فــي الكليــات‬ ‫لتعليم البرمجة و مفاهيم البرمجة و قد كانت بالفعل هي اللغـة المفضـلة فـي‬ ‫هذا المجال من نهايات الستينات الى بداية التسعينات .‬ ‫اهم اللغات التي اثرت على باسكال :-‬ ‫1-‪ALGOL‬‬ ‫2-‪Cobol‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 94. ‫اهم اللغات التي تأثرت بباسكال :-‬ ‫1.‪Java‬‬ ‫2.‪Oberon‬‬ ‫3.2-‪Oberon‬‬ ‫4.‪Ada‬‬ ‫5.‪Oxygene‬‬ ‫6.2-‪Modula‬‬ ‫7.‪Component Pascal‬‬ ‫8.‪Object Pascal‬‬ ‫خصائص اللغة :‬ ‫1-النموذج امري ، هيكلي ، اجرائي..‬ ‫2-لغة مترجمة ، اغلب المترجمات كتبـت بلغـة باسـكال نفســها و لكــن جنــو‬ ‫باسكال مكتوب بلغة سي .‬ ‫3-استايل الكتابة قوي و ثابت .‬ ‫4-تدعم البوينترز‬ ‫5-يوجد لها مفسر ايضا ..‬ ‫بعض مميزات اللغة لمجال تعليم البرمجة الهيكلية :‬ ‫1-احتوائها على )‪ (Data types‬و هي انواع البيانات الموجودة سلفا في‬ ‫اللغة مثل العداد الصحيحة و المنطقية و الحروف …الخ‬ ‫2-اضافة الى ذلك يمكن انشاء انواع بيانات جديدة يحددها المستخدم.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 95. ‫3-احتوائها على مجموعة جيدة من قوالب البيانات المهيكلة مثــل : القــوائم‬ ‫و الريكوردز و الـ ‪. Sets‬‬ ‫4 -دعــم البرمجــة الهيكليــة : و هــذا يتحصــل مــن خلل اســتخدام البرامــج‬ ‫الضمنية او ما يعرف بالبروسيجرز و الفانكشن.‬ ‫اهم التطبيقات :‬ ‫كما اشرنا سابقا فالمجال الهم لباسكال هو بيئة التعليم . هــذه اللغــة اساســا‬ ‫لم تصمم ال لهذا الغرض و هي الى الن خيار جيد لتعليم البرمجـة الهيكليـة‬ ‫و لكن ما جعلها تفقد مكانها فـي بدايـة التسـعينات هــو ازديـاد شـعبية لغـات‬ ‫البرمجة الشيئية مثل ‪ ++C‬و جافا و سمولتولك و بدء الجامعات و الكليات‬ ‫تدريس مفاهيم هذه النوعية مـن البرمجـة . و لكـن تجـدر الشـارة الـى انـه‬ ‫للمهتمين بالبرمجة الشيئية يوجد بديل باســم اوبجكــت باســكال و قــد برمــج‬ ‫برنامج سكايب المشهور به ، و ليس الكلم عن هذا الموضوع .‬ ‫مثال برمجي :‬ ‫;‪program HelloWorld‬‬ ‫‪begin‬‬ ‫;)'‪writeln('Hello World‬‬ ‫.‪end‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 96. ‫دليل لغات البرمجة )51( :: 1/‪Pl‬‬ ‫لغة البرمجة : 1/‪Pl‬‬ ‫تــم تطــوير لغــة البرمجــة 1/‪ Pl‬بواســطة ‪ IBM‬فــي اواســط الســتينات مــن‬ ‫القــرن العشــرين. و قــد كــان الســم الصــلي للغــة ‪ ) NPL‬لغــة البرمجــة‬ ‫الجديدة( و لكن تم تغيير السم الى 1/‪ Pl‬لتفادي المغالطة بين اللغــة و بيــن‬ ‫‪ ) NPL‬مختبر الفيزياء الوطني ( في انجلترا . لذلك لو تم تطــوير المــترجم‬ ‫خارج انجلترا لربما بقي السم بدون تغيير .‬ ‫قبل تطوير هذه اللغة البرمجية كانت لغات البرمجة تركز علــى جــانب معيــن‬ ‫من التطبيق مثل الـذكاء الصـطناعي او الحسـابات الرياضـية او المشـاريع‬ ‫التجارية . و لكن 1/‪ Pl‬لم تصمم لكي تستخدم بهذه الطريقة ، بل كــانت اول‬ ‫لغة برمجة ضخمة هدفها ان تغطي اغلب مجالت التطبيق . لذلك كــان علــى‬ ‫1/‪ Pl‬ان تواجه تحديات قوية لتنافس فورتران في المجال العلمي و كوبــول‬ ‫في مجال العمال ، فكان من هذه الهداف و التحديات :‬ ‫1-ان تكون لغة مترجمة مع سرعة تنفيذ مشابهة لفورتران.‬ ‫2-ان تكون قابلة للتوسيع لدعم المزيد من الهاردوير و التطبيقات الجديدة.‬ ‫3-زيادة النتاجية و تحسين الوقت المحتاج لعملية البرمجــة مــن خلل نقــل‬ ‫المجهود من المبرمج الى المترجم.‬ ‫4-ان تكون متعددة المنصات و ان تعمل بشكل جيد علــى مســتوى كــل قطــع‬ ‫الهاردوير و نظم التشغيل.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 97. ‫اهم اللغات التي اثرت على 1/‪: Pl‬‬ ‫1-‪Cobol‬‬ ‫2-‪Fortran‬‬ ‫3-‪ALGOL‬‬ ‫اهم اللغات التي تأثرت ب 1/‪-: Pl‬‬ ‫1.‪SP/k‬‬ ‫2.‪REXX‬‬ ‫خصائص اللغة :‬ ‫1-النموذج امري ، هيكلي ، اجرائي..‬ ‫2-لغة مترجمة .‬ ‫3-تحاول ان تحاكي اللغة النجليزية في طريقة الكتابة‬ ‫4-تدعم العودية ، و مفاهيم البرمجة الهيكلية.‬ ‫5-ل توجد بها كلمات مفتاحية محجوزة ) يمكن ان يكون اسم المتغير كلمــة‬ ‫مفتاحية (‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 98. ‫اهم التطبيقات :‬ ‫1/‪ Pl‬كــانت تتمتــع بشــعبية كــبيرة فــي جــانب ادارة العمــال و التطبيقــات‬ ‫العلمية. و كانت اللغة الرئيسية للتدريس في جامعة ميشيغان ديربورن لمدة‬ ‫من الزمن . اما في الوقت الحاضر فشــعبيتها قلــت كــثيرا طبعــا ) و لكنهــا ل‬ ‫تزال تستخدم( بسبب اللغات الجديدة و المفــاهيم الحديثــة . و مــن الشــركات‬ ‫الــتي اســتخدمت 1/‪ Pl‬شــركة فــورد موتــورز المعروفــة و شــركة مــارثون‬ ‫النفطية .‬ ‫مثال برمجي :‬ ‫;)‪Hello2: proc options(main‬‬ ‫;)'!‪put list ('Hello, world‬‬ ‫;2‪end Hello‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 99. ‫دليل لغات البرمجة )51( :: هاسكل‬ ‫لغة البرمجة : هاسكل‬ ‫بعد اصدار لغة البرمجة ‪ Miranda‬في العام 5891 ، زاد الهتمــام بلغــات‬ ‫البرمجة الوظيفية الكسولة . فمع العام 7891 ارتفع عــدد اللغــات الوظيفيــة‬ ‫الصرفة الى اكثر من 21 لغة . طبعــا مــن هــذه اللغــات كــانت ميرنــدا الكــثر‬ ‫اســـتخداما و لكنهـــا لـــم تكـــن مجانيـــة بـــل مملوكـــة لشـــركة ‪Research‬‬ ‫‪ . Software‬لـــذلك فـــي مـــؤتمر اللغـــات البرمجيـــة الوظيفيـــة و هندســة‬ ‫الكمبيوتر )78 ‪ (FPCA‬و الذي تم عقده في بورتلند اوريجون ، تم عقــد‬ ‫اجتماع ابدى فيه المشاركون ضرورة انشاء لجنة لتعمل على انشاء معايير‬ ‫مفتوحة لهذه اللغات .‬ ‫و مع العام 0991 تـم النتهــاء مــن تعريــف هاســكل 1 . و فـي العــام 7991‬ ‫تـوجت الجهـود بظهـور هاسـكل 89 الـتي وفـرت اصـدار ثـابت ، خفيـف و‬ ‫متنقل من اللغة ، بالضافة الى مكتبة لغــرض التعليــم . و قــد رحبــت اللجنــة‬ ‫بانشــاء الضــافات و البــدائل لهاســكل 89 عــن طريــق اضــافة الخصــائص‬ ‫التجريبية .‬ ‫لغة هاسكل تتطور بشكل سريع جدا و يعتبر المــترجم ” جلســكو ” ‪GHC‬‬ ‫هو الكثر شيوعا في الســتخدام . يــذكر ان ســبب التسـمية هــو تيمنــا بعــالم‬ ‫الرياضيات و المنطقي المريكي هاسكل كوري.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 100. : Haskell ‫بعض اللغات التي اثرت على‬ Lisp-1 Miranda-2 APL-3 Ponder-4 Standard ML-5 Lazy ML-6 -: Haskell ‫اهم اللغات التي تأثرت ب‬ Omega-1 Perl6-2 Python-3 Visual Basic 9-4 Clojure-5 Cat-6 Cayenne-7 Qi-8 Java Generics-9 #F -10 #C -11 Scala -12 http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 101. ‫خصائص اللغة :‬ ‫1-لغة برمجة وظيفية صرفة .‬ ‫2-تستخدم التقييم الكسول .‬ ‫3-استايل الكتابة ثابت و قوي .‬ ‫4-ذات معايير و مواصفات مفتوحة.‬ ‫5-تتمتع بمجتمع فاعل و لديها مخزن غني بالمكتبات يدعى ‪.Hackage‬‬ ‫6-مــترجم ‪ GHC‬يعتــبر مــترجم و مفســر ايضــا و يعمــل علــى اغلــب نظــم‬ ‫النظمة و يتميز بالكفاءة العالية.‬ ‫اهم التطبيقات :‬ ‫هاســكل بــدات تــزداد شــعبيتها فــي الســتخدامات التجاريــة . المبرمجــة‬ ‫المشــهورة اودري تانــج قــامت بعمــل تطــبيق لــبيرل 6 بلغـة هاســكل فكــانت‬ ‫النتيجة نسخة تعمل بشكل جيد في زمن قياسي معروفة باسم ‪ .Pugs‬ايضــا‬ ‫توزيعـــة ‪ Linspire‬اختـــارت هاســـكل كلغـــة تطـــوير لدوات النظـــام .‬ ‫‪ Xmonad‬و هو مدير نوافذ يعمل على ‪ X‬المشهور كتب كــامل باســتخدام‬ ‫هاسكل . و هناك الكثير مــن الســتخدامات و البرامــج لهاســكل علــى صــعيد‬ ‫التطوير و قواعد البيانات و حتى المترجمات و اللعاب.‬ ‫مثال برمجي :‬ ‫‪module Main where‬‬ ‫)( ‪main :: IO‬‬ ‫"!‪main = putStr "Hello World‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 102. ‫دليل لغات البرمجة )71( :: فيجوال بيسك‬ ‫لغة البرمجة : ‪Visual Basic‬‬ ‫تــم عــرض فيجــوال بيســك الصــدار 0.1 فــي العــام 1991 ، و الــتي قــدمت‬ ‫طريقة السحب و الفلت لتصميم واجهات المستخدم ، و التي تــم تطويرهــا‬ ‫مــن خلل برنامــج انشــاء الفــورمز الــذي انشــأه ) الن كــوبر ( و شــركته‬ ‫المعـــــــــــــــــــــــــــــــــــــــروف باســـــــــــــــــــــــــــــــــــــــم ‪.Tripod‬‬ ‫حيث تم التعاقد بين ميكروســوفت و كــوبر ) و شــركاؤه( لتطــوير ‪Tripod‬‬ ‫ليكـون فـورم سيسـتم قابـل للبرمجـة لوينـدوز 0.3 ، و ذلـك تحـت المسـمى‬ ‫الــبرمجي ‪ ) Ruby‬ل توجــد هنــا اي علقــة مــع لغــة البرمجــة روبــي (.‬ ‫‪ Tripod‬لم يكن يحتوي على لغة برمجة اطلقا ، لذلك قررت ميكروسوفت‬ ‫بأن تدمج روبي مع لغة البرمجة ‪ Basic‬لتنشيء ما يعرف بـفيجوال بيســك‬ ‫) بيســك المرئيــة : لتركيزهــا علــى الجــانب المــرئي فــي انشــاء البرامــج‬ ‫بســــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــرعة (.‬ ‫في نوفمبر العام 2991 تم اصدار 0.2‪ VB‬حيــث تــم تحســين بيئة البرمجــة‬ ‫لتكون اكثر ســهولة و اكــثر ســرعة . و فــي صــيف العــام 3991 تــم اصــدار‬ ‫3‪ VB‬بنســختيه القياســية و الحترافيــة . و فــي هــذا الصــدار تــم اضــافة‬ ‫الصدار 1.1 من ‪ .Microsoft Jet Database Engine‬و فــي العــام‬ ‫5991 تــم اصــدار 4‪ VB‬هــذا الصــدار كــان الول فــي دعــم انشــاء برامــج‬ ‫‪ 16bit‬و ‪ .32bit‬ايضــا مــع هــذا الصــدار اصــبحت هنــاك امكانيــة انشــاء‬ ‫كلسات غير ذات واجهة رسومية. و قد عانى هذا الصدار بعــض المشــاكل‬ ‫فــــــــــــــــــــــــــــــــــــــــــــــــي التوافقيــــــــــــــــــــــــــــــــــــــــــــــــة .‬ ‫مع الصدار الخامس في فبراير 7991 قررت ميكروســوفت ان تصــدر ‪VB‬‬ ‫حصريا لمنصة ‪.32bit‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 103. ‫في هذا الصدار اصبح هناك امكانيــة انشــاء ازرار مــن تصــميم المســتخدم‬ ‫بالضافة الى القدرة لبنــاء البرامــج مباشــرة الــى الكــود الــبرمجي التنفيــذي‬ ‫لوينـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــدوز .‬ ‫مع العام 8991 ، تم اصدار النسخة السادسة من فيجوال بيســك مــع العديــد‬ ‫من التحســينات اهمهــا القــدرة علــى انشــاء برامــج الــويب . و قــد تــم الغــاء‬ ‫6‪ VB‬من قبل ميكروسوفت مــع العــام 8002 . ‪ VB.NET‬يعتــبر وريــث‬ ‫6‪ ، VB‬و الــذي هــو جــزء مــن منصــة .‪ NET‬و ل يــوفر اي توافقيــة مــع‬ ‫الصدارات السابقة من ‪ VB‬على الرغم مــن وجــود برامــج تقــوم بالتحويــل‬ ‫بين اكواد الصدارين ال ان التحويل التوماتيكي الكامل غيــر ممكــن لغلــب‬ ‫المشــاريع . تجــدر الشــارة الــى انــه الــى الن هنــاك مجتمــع كــبير مــن‬ ‫المستخدمين ل يزالون يدعمون و يبرمجون بالصدار السادس من ‪.VB‬‬ ‫لغات اثرت على فيجوال بيسك :‬ ‫1- ‪QuickBASIC‬‬ ‫لغات تأثرت بفيجوال بيسك :‬ ‫1- ‪VisualBasic.NET‬‬ ‫2-‪REALBasic‬‬ ‫3- ‪Gambas‬‬ ‫4- ‪Basic4ppc‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 104. ‫اهم خصائص اللغة :‬ ‫1- كائنية التوجه‬ ‫2- استايل الكتابة ثابت و قوي‬ ‫3- ‪Event Driven‬‬ ‫4- لديها جامع قمامة‬ ‫5- بشكل عام ليست حساسة بالنسبة للحروف‬ ‫6- اندماج قوي مع نظام التشغيل ويندوز‬ ‫7- يوجد لها مترجم من الصدار الخامس جنبا الى جنب مع المفسر‬ ‫بعــض عيــوب فيجــوال بيســك الــى الصــدار الســادس ) قبــل اصــدار دوت‬ ‫نيت ( :‬ ‫1 - دعـــــــــــــــــم ضـــــــــــــــــعيف للبرمجـــــــــــــــــة الكائنيـــــــــــــــــة‬ ‫2 - العتماديــــة علــــى تعقيــــدات مــــدخلت الريجســــتري للـــــ ‪.COM‬‬ ‫3 - قبــل الصــدار الخــامس كــانت هنــاك مشــاكل مــن ناحيــة الداء للبرامــج‬ ‫المكتوبـــــة بهـــــذه اللغـــــة ، تـــــم ازالتهـــــا مـــــع الصـــــدار الخـــــامس.‬ ‫4- مشاكل في التوافقية بسبب تعدد اصدارات ‪.DLL‬‬ ‫اهم الستخدامات :‬ ‫فيجــوال بيســك كمــا لغــة البرمجــة ‪ BASIC‬هــدفها الساســي هــو تســهيل‬ ‫عمليــة البرمجـة ، حيــث انهــا وفــرت خاصــية البرمجــة الســريعة باســتخدام‬ ‫الســحب و الفلت للعناصــر لكــي يتــم انشــاء الواجهــة الرســومية بيســر و‬ ‫سهولة ، هذا اضافة الى توفير قيم افتراضية لغلب العناصر ما يساعد فــي‬ ‫تقليل كتابة الكواد من قبل المبرمج فأصبح انشاء البرامــج لوينــدوز شــيء‬ ‫سهل و كأنه مجرد تصميم لصحفة ويب هذا بالطبع ل يعني انه ل توجد‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 105. ‫هناك امكانية لنشــاء برامــج عملقــة و معقــدة باســتخدام فيجــوال بيســك .‬ ‫عليه فان اغلب استخدامات فيجــوال بيســك تقــع فــي برامــج وينــدوز ســواء‬ ‫الصغيرة او الكبيرة .‬ ‫مثال برمجي :‬ ‫)(‪Private Sub Form_Load‬‬ ‫,‪‘ execute a simple message box that will say “Hello‬‬ ‫”!‪World‬‬ ‫”!‪MsgBox “Hello, World‬‬ ‫‪End Sub‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 106. ‫دليل لغات البرمجة )81( :: ‪JavaScript‬‬ ‫لغة البرمجة : جافا سكربت‬ ‫تم تطوير جافا سكربت بواسطة براندن ايك من شركة نتسكيب تحت مسمى‬ ‫‪ ، Mocha‬و الذي تم تغييره لحقا الى ‪ livescript‬و في النهاية الى جافا‬ ‫ســكربت . تــم اضــافة و تطــبيق جافــا ســكربت للمــرة الولــى فــي الصــدار‬ ‫3‪ 2.0B‬من المتصفح العريق نتسكيب ) ديسمبر 5991(. و قد تســبب اســم‬ ‫) جافا سكربت( الــى نــوع مــن المغالطــة فــي الربــط بينهــا و بيــن لغــة جافــا‬ ‫المشهورة و اعزى البعض ذلك انه حركة تســويقية متعمــدة مــن نتســكيب .‬ ‫في حقيقة المر جافا سكربت ليس لها علقة بلغة )جافا( من شركة صــن و‬ ‫لكن الصفات المشــتركة بيـن اللغـتين كــثيرة . يظهـر هـذا التشـابه جليـا فـي‬ ‫طريقة الكتابة و التي هي مشابهة للغة البرمجــة ســي ، اضــف الــى ذلــك ان‬ ‫جافــا ســكربت تتبــع قواعــد التســمية علــى طريقــة جافــا. و قــد قيــل ان ســر‬ ‫التسمية يكمن في صفقة بين نتسكيب و صــن حيــث تقــوم نتســكيب باضــافة‬ ‫بيئة تشغيل جافا في متصــفحها الـذائع الصــيت وقتهــا. جافــا سـكربت تعتــبر‬ ‫علمــة مســجلة لشــركة صــن و قــد تــم اســتخدامها تحــت ترخيــص لتقنيــات‬ ‫مطورة من نتسكيب و موزيل .‬ ‫المبــاديء الساســية فــي تصــميم اللغــة تــم اقتباســها مــن لغــتي ‪ Self‬و‬ ‫‪.Scheme‬‬ ‫و بسبب انتشار و نجاح جافا سكربت كلغة سكربت لطرف العميل في مواقع‬ ‫الــويب قــامت ميكروســوفت بانشــاء اصــدارة متوافقــة خاصــة بهــا اســمتها‬ ‫‪ Jscript‬لتتفادى مسائل الترخيص. و قد تم اضافة ‪ Jscript‬في الصدار‬ ‫الثالث من انترنت اكسبلورر .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 107. ‫قامت نتسكيب بتقــديم جافــا الــى ‪ Ecma International‬بهــدف توحيــد‬ ‫المعايير مما ادى الى ظهور المعيار الموحد ‪.ECMAScript‬‬ ‫و قد اصبحت جافا سكربت واحدة من اللغات الشعبية جدا في برمجة مواقع‬ ‫الويب ، على الرغم من ذلك فكثير من المــبرمجين المحــترفين تجنبــوا هــذه‬ ‫اللغــة بســبب ان الشــريحة المســتهدفة هــي فئة مصــممي مواقــع الــويب و‬ ‫الهواة و غير ذلك من السباب . و لكن مع تطور تقنيــة ‪ Ajax‬عــادت جافــا‬ ‫ســكربت للضــواء مجــددا مــع اضــافة برمجــة احترافيــة جديــدة . و كــانت‬ ‫النتيجة التحصل على عدد كــبير مــن المكتبــات و الــ ‪ ،frameworks‬ممــا‬ ‫اثر ايجابيا على تحســن مشــاريع البرمجــة و زيــادة اســتخدام جافــا ســكربت‬ ‫خارج اطار المتصفح.‬ ‫لغات اثرت على جافا سكربت :‬ ‫•‪Scheme‬‬ ‫•‪Self‬‬ ‫•‪Perl‬‬ ‫•‪Python‬‬ ‫•‪Java‬‬ ‫•‪C‬‬ ‫لغات تأثرت بجافا سكربت :‬ ‫•‪Objective-J‬‬ ‫•‪Jscript‬‬ ‫•‪Jscript.NET‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 108. ‫اهم خصائص اللغة :‬ ‫1- متعددة النماذج : وظيفية ، كائنية …‬ ‫2- لغة نصية )سكربت(‬ ‫3- غير معتمدة على نظام تشغيل محدد‬ ‫4- استايل الكتابة ديناميكي‬ ‫5- تستخدم الـ ‪ prototypes‬بدل من الكلسات للوراثة‬ ‫6 - لديها قدرة تعامل قوية مع التعــابير المعتــادة علــى طريقــة لغــة البرمجــة‬ ‫بيرل‬ ‫7-امكانية تضمينها داخل صفحات ‪html‬‬ ‫8 - تحتاج الــى محــرك يقــوم بتفســير الكــواد المصــدرية ، و يعتــبر ســبايدر‬ ‫مونكي اول محرك لجافا سكربت.‬ ‫اهم الستخدامات :‬ ‫طبعا الستخدام المبدئي لجافا سـكربت هــو فـي مواقــع الــويب و لكــن هنـاك‬ ‫بعض من البرامج قامت باضافة او تضمين مفسر جافــا ســكربت . مــن هــذه‬ ‫البرامج التي نفذت بجافا سكربت:‬ ‫‪Apple Dashboard Widgets‬‬ ‫‪Microsoft Gadgets‬‬ ‫‪Yahoo! Widgets‬‬ ‫‪Google Desktop Gadgets‬‬ ‫و الكثير من البرامج الخــرى الــتي تضــيف دعــم للســكربت مــن خلل جافــا‬ ‫سكربت مثل ادوبي اكروبات و فوتوشوب و دريم ويفر و اوبن اوفيــس …‬ ‫الخ‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 109. : ‫نموذج برمجي‬ <script type=”text/javascript”> <!– to hide script contents from old browsers document.write(“Hello World!”) // end hiding contents from old browsers –> </script> http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 110. ‫دليل لغات البرمجة )91(:: لغة البرمجة ‪++C‬‬ ‫لغة البرمجة :: سي++‬ ‫بدا ‪ Bjarne Stroustrup‬العمل على “‪ ”C with classes‬في العــام‬ ‫9791 ، و ذلك بعد ان جاءته فكــرت عمــل لغــة برمجــة جديــدة بعــد الخــبرة‬ ‫التي اكتسبها في البرمجة لرسالة الدكتوراة. و قد كــان ستروســترب معجبــا‬ ‫بلغة البرمجة سمول لنها كانت تحتوي على كــثير مــن المزايــا المناســبة و‬ ‫المساعدة لبناء مشــاريع برمجيــة عملقــة و لكــن مــا يعيــب هــذه اللغــة هــو‬ ‫بطئها مما يجعلها غير عملية في ارض الواقع.‬ ‫فــي الجهــة الخــرى كــانت لغــة ‪ BCPL‬ســريعة جــدا و لكــن يعيبهــا انهــا‬ ‫منخفضة المستوى بشكل يجعلها غير مناسبة لتطوير المشــاريع العملقــة .‬ ‫بناء على ذلك قرر ستروسترب ان يطور لغة سي بإضافة مزايـا سـيمول. و‬ ‫قــد اختــار لغــة الســي لنهــا ســريعة ، متعــددة الغــراض ، متنقلــة ، و ذات‬ ‫شعبية واسعة. و لم تكن سيمول وحدها من اثرت علــى ســي ++ بــل هنــاك‬ ‫المزيد مــن اللغــات مثــل الجــول 86 و ‪ .CLU‬فمــن ضـمن اولــى الضــافات‬ ‫نذكر : الكلسات ، المرسلت الفتراضية…‬ ‫في العام 3891 تم اعادة تسمية اللغة الى سي++، و تلها اضــافات جديــدة‬ ‫للغة نذكر منها : الثوابت ، تعليقات السطر الواحد ، المراجع …‬ ‫و فــي العــام 5891 تــم اصــدار كتــاب ‪The C++ Programming‬‬ ‫‪ Language‬في نسخته الولى ، ليكون من اهم المصادر للغة لعــدم تــوافر‬ ‫معيار موحد وقتها . في العام 9891 تــم اصــدار 0.2 ++‪ C‬مــع مزيــد مــن‬ ‫الضافات مثل : تعدد التوارث ، الكلسات المجردة …‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 111. ‫فــي العــام 0991 تــم اصــدار ‪The annotated C++ Reference‬‬ ‫‪ ، Manual‬و الذي اصبح القاعـدة لنشـاء المعيـار فـي المسـتقبل . و مـن‬ ‫الضافات المتأخرة نذكر : القوالب ، الستثناءات ، المساحات ..‬ ‫و مع تطور لغـة الســي++ تطــورت معهــا مكتبــة قياســية و قــد كــانت اولــى‬ ‫المكتبات اضافة هي مكتبة ‪ ، I/O Stream‬و من اهم المكتبــات الن هــي‬ ‫مكتبة القالب القياسي .‬ ‫و ل تــزال ســي++ تحظــى بشــعبية منقطعــة النظيــر فــي اوســاط المحافــل‬ ‫البرمجية على الرغم من قدمها..‬ ‫فلسفة تصميم سي++:‬ ‫1 - ان تكون لغــة متعــددة الغــراض ، ثابتــة فــي الكتابــة ، ذات كفــاءة مثــل‬ ‫السي و متنقلة مثل السي.‬ ‫2 - ان تكون ذات نماذج متعددة : اجرائية ، كائنية ، تجريد البيانات …‬ ‫3-ان تكون ذات توافق مع لغة السي‬ ‫4-تجنب الخصائص التي تعتمد على منصة معينة‬ ‫5-مصممة للعمل بدون الحاجة لبيئة برمجة معقدة‬ ‫6 -اتاحــة الخيــارات للمبرمــج ، حــتى لــو كــانت هنــاك احتماليــة ان يخطيــء‬ ‫المبرمج في الختيار.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 112. : ++C ‫بعض اللغات التي اثرت على‬ C -1 ALGOL68 -2 Simula -3 CLU -4 ML -5 Ada 83 -6 -: ++C ‫اهم اللغات التي تأثرت ب‬ Perl -1 Java -2 Falcon -3 php -4 #C -5 Ada95-6 Lua-7 D -8 Aikido -9 http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 113. ‫خصائص اللغة :‬ ‫1- لغة برمجة متعددة النماذج.‬ ‫2- استايل الكتابة ثابت.‬ ‫3- لغة مترجمة.‬ ‫4- لغة وسطية المستوى.‬ ‫5- متوافقة مع لغة السي ) ليس 001%(‬ ‫6-ل يوجد بها جامع قمامة‬ ‫اهم التطبيقات :‬ ‫ســي++ لغــة متعــددة الغــراض ، ذات شــعبية واســعة ، و مــن الخيــارات‬ ‫المفضلة في المشاريع العملقة . يوجد لها الكثير من المترجمات . و برمــج‬ ‫بواسطتها الكثير جدا من البرامج مثل : برامج شركة ادوبي من فوتوشــوب‬ ‫و اكروبــات و الســترويتر و انــديزاين، برنامــج التصــميم الثلثــي البعــاد‬ ‫العملق )مايــــا( ، برنامــــج الوتوكــــاد، متصــــفح كروميــــوم ، متصــــفح‬ ‫الفــايرفوكس ، عميــل البريــد ) ثانــدر بــرد( ، نظــام الهواتــف ســيمبيان ،‬ ‫الواجهة الرسومية النيقة ‪.… KDE‬الخ . و قد تم تطوير العديــد و العديــد‬ ‫من اللعاب باستخدام هذه اللغة مثل :‬ ‫‪Civilization and the Jews‬‬ ‫‪World of Warcraft‬‬ ‫‪.… Shanghai Mah Jongg Essentials‬الخ‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 114. ‫دليل لغات البرمجة )02( :: ‪Scala‬‬ ‫لغة البرمجة :: سكال‬ ‫لغة البرمجة سكال لغة حديثة تجمع بين خصائص و قــوة البرمجـة الكائنيـة‬ ‫و البرمجـة الوظيفيـة و السـم اختصـار لــ “‪ ”Scalable Language‬و‬ ‫الذي يلمح الى قدرة اللغة على التوسع بحسب احتياجات المســتخدم و ليــس‬ ‫هذا امر بعيد كونها تبني بقوة على اللغة العملقة جافا رائدة هذا المجال.‬ ‫بدا تصميم هذه اللغة في العام 1002 على يد مارتن اودرسكي في معامــل )‬ ‫‪ .(EPFL‬و قد كان مارتن عمل علــى ‪ Funnel‬و هــي لغــة برمجــة تجمــع‬ ‫بين البرمجة الوظيفية و لغة التمثيل الرياضية ‪ ،Petri Nets‬هذا بالضافة‬ ‫الى انــه عمــل علــى ‪) javac‬مــترجم جافــا( و ‪ .Generic Java‬و قــد تـم‬ ‫اصدار اللغة في نهاية 3002 و بداية 4002 علــى منصــة الجافــا و مــن ثــم‬ ‫على منصة .‪ Net‬في شهر جون 4002. و قد تم اصدار النسخة الثانية فــي‬ ‫مارس من العام 6002.‬ ‫سكال تعمل على منصة جافا و متوافقة مع برامج جافا و لديها القدرة ايضا‬ ‫على العمل فوق منصة ‪ ) J2ME‬منصة جافا للجوالت( . و تجدر الشــارة‬ ‫الى ان النسخة الــتي تعمــل علــى منصــة دوت نيــت ليســت حديثــة و لــم يتــم‬ ‫تحديثها بالشكل الكامل الى وقت كتابة هذه المقالة.‬ ‫طريقة عمل سكال تشابه طريقة عمل جافا حيث يقوم مــترجم ســكال بتوليــد‬ ‫‪ ) byteCode‬لغة وسطية( يشبه الى حد كبير ما يولده مترجم جافا . بــل ،‬ ‫يمكــن ارجــاع اكــواد ســكال )‪ (Decompile‬الــى اكــواد جافــا مــع بعــض‬ ‫الستثناءات . اما بالنسبة للـ ‪ JVM‬فهي ل تفرق بين اكواد جافا و سكال ،‬ ‫الفرق الوحيد هو في مكتبة اضافية واحدة ‪.Scala-library.jar‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 115. ‫بعض اللغات التي اثرت على ‪: Scala‬‬ ‫1- ‪Java‬‬ ‫2- ‪Pizza‬‬ ‫3- ‪Scheme‬‬ ‫4- ‪Smalltalk‬‬ ‫5- ‪Objective Caml‬‬ ‫6- ‪Standard ML‬‬ ‫7- ‪Erlang‬‬ ‫8- ‪Haskell‬‬ ‫نوع الرخصة : ‪BSD‬‬ ‫خصائص اللغة :‬ ‫1- لغة برمجة متعددة النماذج امرية ) كائنية و وظيفية (.‬ ‫2- استايل الكتابة ثابت.‬ ‫3- لغة كائنية صرفة .‬ ‫4- لغة عالية المستوى.‬ ‫5- تتمتـــع بــــ ‪ ScalaTest‬بالضـــافة الـــى دعـــم ‪ JUnit‬و غيـــر ذلـــك‬ ‫للختبارات.‬ ‫6- تتمتــع بــأهم خصــائص اللغــات الوظيفيــة كـ ـ -‪Closures , higher‬‬ ‫‪order functions , anonymouse functions, currying‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 116. ‫اهم التطبيقات :‬ ‫‪ Lift‬و هو اطار برمجة ويب مجاني يشابه في هدفه ‪.Ruby on Rails‬‬ ‫و بما ان ‪ lift‬مكتوب بسكال هذا يعني القــدرة علــى الســتفادة مــن مكتبــات‬ ‫جافا و حاويات الويب الخاصة بها في برامج ‪ .lift‬في ابريل 9002 اعلنــت‬ ‫تويتر انها قامت بنقل اجزاء كبيرة من روبي الى ســكال و انهــا تعمــل علــى‬ ‫نقل مــا تبقــى ، هــذا اثــر بعــض النتقــادات لروبــي اون ريلــز و انهــا تعــاني‬ ‫مشاكل في ادارة المشاريع العملقة .‬ ‫ايضا برنامج الويب ‪ WattzOn‬تم كتابته كامل باســتخدام ســكال. و ايضــا‬ ‫موقع ‪ Fourthsquare‬يستخدم سكال .‬ ‫مثال برمجي :‬ ‫{ ‪object HelloWorld‬‬ ‫{ )]‪def main(args: Array[String‬‬ ‫)"!‪println("Hello, world‬‬ ‫}‬ ‫}‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 117. ‫دليل لغات البرمجة )12( :: ‪Self‬‬ ‫لغة البرمجة :: سلف‬ ‫تم تطوير لغة البرمجة ‪ self‬بواسطة ديفد انجــار و رانــدال ســمث فــي العــام‬ ‫6891 في معامل ‪ .Xerox Parc‬كان هدفهم الساسي هو دفــع و تطــوير‬ ‫فـــن البرمجـــة الكائنيـــة و ذلـــك بعـــد ان نشـــرت معامـــل زيروكـــس لغـــة‬ ‫08-‪ Smalltalk‬و بــدات الشــركات بالهتمــام الجــدي بهــا. بعــدها انتقــل‬ ‫الثنان الى جامعة ستانفورد و واصل العمل على اللغــة حيــث اســتطاعا فــي‬ ‫العام 7891 ان ينشئا اول مترجم للغة.‬ ‫في العام 0991 تم اصــدار اول نســخة للســتخدام العــام و فــي العــام التــالي‬ ‫انتقل فريق التطوير الى شركة صــن ميركوسســتمز . و تتــابعت الصـدارات‬ ‫الى ان وقفت في الصدارة الرابعة في العام 5991. الصدار 3.4 تــم نشــره‬ ‫في العام 6002 حيث اصبح يعمل على نظام ماك و سولرس .‬ ‫و في الصدار الجديد تم اضافة دعـم لينكـس بالضـافة الـى المــاك مــن قبــل‬ ‫مجموعة مــن المطــورين الصــليين بالضــافة الــى مجموعــة متطوعــة مــن‬ ‫المبرمجين .‬ ‫سيلف لغة برمجة كائنيـة تعتمـد علــى مبــدا النمــاذج )‪ (Prototypes‬و قـد‬ ‫استخدمت فـي الغلـب كنظـام تجريـبي لبنــاء و تصـميم لغـات البرمجـة فــي‬ ‫الثمانينات و التســعينات . فــي العــام 6002 اســتمر تطــوير لغــة ســيلف مــن‬ ‫خلل مشروع ‪ klein‬و هي منصة مكتوبة كليا بلغة سيلف .‬ ‫العديــد مــن تقنيــات الترجمــة فــي الــوقت المطلــوب )‪Just in time‬‬ ‫‪ ( compilation‬تم تطويرها و تحسينها من خلل البحاث التي تمــت فــي‬ ‫هذه اللغة لتصل الى سرعة تقارب نصــف ســرعة اكــواد ســي المخصصــة .‬ ‫هذه التقنيات بالطبع لقت رواجا واسعا و تم استخدامها في جافــا مــن خلل‬ ‫‪.Hotspot VM‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 118. : ‫لغات اثرت على سلف‬ SmallTalk• : ‫بعض اللغات التي تأثرت بسلف‬ NewtonScript• Io• Cel• Agora• Lisaac• Lua• Factor• Javascript• Rebol• Squeak• : ‫خصائص اللغة‬ ‫1- لغة كائنية التوجه‬ (Prototypes) ‫2- لغة تعتمد النماذج‬ Traits ‫3- توفر دعم للـ‬ .‫4- لغة عالية المستوى‬ ‫5- لغة ديناميكية‬ http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 119. ‫6- تحتوي على جامع قمامة‬ UI ‫7- تحتوي على‬ : ‫الموقع الرسمي‬ http://www.selflanguage.org : ‫مثال برمجي‬ (| parent* = obj1. width = 5. width: = <-. height = 9. height: = <- |) (| parent* = obj1. width <- 5. height <- 9 |) http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 120. ‫انت تعرف الكثير ! اكتب برامجك الشخصية !.‬ ‫الكثير منا يعرف مباديء البرمجة و الكثير منا قد يكون تخرج من الجامعة‬ ‫بدرجة بكالريوس في تقنية المعلومات او حتى دبلوم و لكيين فييي النهاييية ل‬ ‫يستطيع ان يبرمييج برنامجييا متكييامل او لنقييل اي مشييروع برمجييي فنحيين‬ ‫على ما نملكه من معرفة ينقصنا معرفة كيفييية دمييج مييا تعلمنيياه فييي وحييدة‬ ‫واحدة لنخرج بشيء جميل ..‬ ‫لنأخذ مثال : شييخص يعييرف اواميير قواعييد البيانييات و لكنييه ل يسييتطيع ان‬ ‫ينشيء برنامج مدير مقالت .. لماذا ؟..‬ ‫اول ماذا نعني ببرنامج متكامل؟‬ ‫هنا نحن ل نقصد متكامل بمعنى كامل ل نقص و ل عيب فيه فل يوجد مثييل‬ ‫هذا البرنامج الييى الن ، و لكيين مييا نقصييده انييه متكامييل بحيييث انييه يييؤدي‬ ‫مجموعة من الوظائف المختلفة ، المبرمجيية بمهييارات مختلفيية ، المييؤطرة‬ ‫في اطار واحد سهل الستخدام .‬ ‫لهذا يمكن ان نرجع سبب عجز الكثير منا عن برمجة برنامييج متكامييل الييى‬ ‫عدم اللمام بكل جوانب تطوير البرامج التي ل تشييمل البرمجيية فحسييب بييل‬ ‫التخطيط و الختبييار و التصييحيح و التعامييل مييع المسييتخدم ..الييخ . فكتابيية‬ ‫الكواد ما هي ال جزء من عملية البرمجة و هي الجزء الممتع و لكيين مييع‬ ‫تطوير برنامج متكامل نحتاج الى اكييثر ميين المتعيية نحتيياج الييى الروتييين و‬ ‫التعامل مع اشياء ل يلحظها المستخدم النهائي و لكنها تعمل بصمت خلف‬ ‫الستار ..‬ ‫هذه الشياء المملة تشمل مثل رسم الواجهة الرسييومية و التعامييل ميع كييل‬ ‫الحييداث بشييكل مناسييب و التعامييل مييع الخطيياء و ليييس تجاهلهييا .. فميين‬ ‫السهل ان نأخذ قيمة من المستخدم و لكن المشكلة و الملل تبدا حينما نريييد‬ ‫ان نتأكد من ان المستخدم ادخل القيمة المناسبة من حيث النوع مثل ..‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 121. ‫اذا نلحظ ان برنامج ذو واجهة رسومية بسيط يأخذ عدد ميين المسييتخدم و‬ ‫يقسمه على اخر بدل ان يكون مهمية سييريعة و سييهلة اصييبح امييرا ممل و‬ ‫رتيبا حيث سنكتب الكثير من السطر البرمجية لرسم الواجهة و التأكد ميين‬ ‫ظهورها بشكل صحيح ثم نتأكد من ان المستخدم ادخل رقمييا و ليييس حرفييا‬ ‫و نتأكد ان الرقم المقسوم عليه ليس صفرا ..الخ.‬ ‫عودا على بدء ، الكثير منا يجهل ان ما يملكه من معلومات بسيييطة بنظييره‬ ‫هي كافية جدا لبناء برنامج متكامل ، المسألة تكميين فييي معرفيية الواميير و‬ ‫المهارات المطلوبة و متى استخدمها ..‬ ‫لقييد واجهييت الكييثير ميين الطلب يلقييون بيياللوم علييى المناهييج الدراسييية و‬ ‫يتهمونها بالنظرية المحضة و لكنهم يغفلون ان ما تعلمييوه كيياف جييدا لبييدء‬ ‫مشاريعهم الخاصة ، هذا ل يعني ان المر بسيط جدا و ل يحتيياج لي جهييد‬ ‫و لكن بشكل عام المشروع بشكله الكلي يمكن كتابته بهذه الساسيات و قد‬ ‫نحتيياج الييى البحييث و السييؤال و السييتعانة بمصييادر خارجييية فييي بعييض‬ ‫الحيان و هذا هو المطلوب حيث سنكتسب مهارات جديدة قد ل نسييتخدمها‬ ‫في هذا المشيروع باليذات و لكين تعيود بيالنفع فيي مشياريع اخيرى فعنيدما‬ ‫ابحث عن دالة تقوم بعمل معين من خلل بحثي قد اقرا عن دالت مشييابهة‬ ‫او حتى مختلفة استرجعها في وقت لحق ان احتجتها ..‬ ‫و سنحاول في هذا الموضوع السير خطوة خطييوة لكتابيية برنامييج بسيييط و‬ ‫لكيين سيينحاول ان نجعلييه متكييامل بحيييث نييرى الخطييوات الساسييية الييتي‬ ‫نحتاجها لبناء برنامجنا الشخصي .‬ ‫1- حدد فكرة البرنامج !.‬ ‫هذه المسألة بديهييية الصييعوبة الييتي نجييدها فييي كتابيية مواضيييع التعييبير و‬ ‫النشاء تكمن في عدم قدرتنا على تحديد موضوع محدد و شيق و هذه‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 122. ‫العقبيية اي عقبيية الخطييوة الولييى كييبيرة جييدا فالشيياعر اعطييه فقييط مطلييع‬ ‫القصيدة و سيكملها تلقائيا ..‬ ‫بالمثييل ل يمكيين ان نبرمييج بييدون ان نعييرف ميياذا نريييد بالضييبط و مييا هييو‬ ‫الهدف الذي نرجوه ..‬ ‫من الشياء التي تجدر الشارة اليها هنييا هييي ان الفكييرة ل يجييب ان تكييون‬ ‫فريدة من نوعها و لم يسبق لحد ان قام بها ، المسألة ببساطة ابحييث عيين‬ ‫فكرة او مشروع تحيس بحاجية شخصيية ليه مثل هنياك الكيثير مين براميج‬ ‫مدراء الخبار المتوافرة و لكن منذ فترة و لييدي فكييرة عمييل برنامييج مييدير‬ ‫اخبار يكون تركيزه فقييط علييى نشيير مقييالتي علييى شييكل مواضيييع صييالحة‬ ‫للطباعة مباشرة . الكثير من البرامج تبدا من حاجة المبرمج الشخصية لها‬ ‫و من ثم قد تكبر لشيء هو لم يتييوقعه او ل تكييبر المهييم ان البرنامييج يسييد‬ ‫حاجية شخصيية ليي .. مين المثلية اليتي دائميا احيب ان استشيهد بهيا هيو‬ ‫برنامج )كومبايز ايكون( هو برنامج صغير و بسيط جدا و لكيين يجعييل ميين‬ ‫حياة مستخدم لينكس اكثر سييعادة ! الكييثير منييا ل يعييرف كيييف يغييير مييدير‬ ‫النوافذ في جنوم و مع انها ليست بتلك الصعوبة و لكن هذا البرنامج يجعل‬ ‫من العملية مجرد نقرة فأرة! ففكرة البرنامييج هييي تسييهيل عملييية روتينييية‬ ‫للمستخدم العادي و البرنامج ناجح نجاحا جميل ..‬ ‫التطبيق ) فكيرة البرناميج( : فييي هيذا الموضييوع مبيدئيا قيررت ان نبرميج‬ ‫برنامج عميل لتويتر على سطح المكتب ، و لكنييي عييدلت برايييي و اخييترت‬ ‫ان يكون قاموسا او لنقل برنامج ترجمة .‬ ‫2- خطط للبرنامج مسبقا : فبدل من انشاء جداول قاعدة البيانييات مباشييرة‬ ‫هكذا و من ثم اعادة كتابتها كلما اردت اضافة ميزة بسيييطة و اعييادة كتابيية‬ ‫الكواد البرمجية التابعة لهذه الجداول ، خطط مسبقا للميزات و الختيارات‬ ‫المطلوبة و ستقل الحاجة الى التعديل بعد ذلك .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 123. ‫ل بأس باستخدام برامج تخطيط جداول قواعد البيانات و طريقة اتصييالها و‬ ‫ايضا استخدام ‪ UML‬لتخطيط سير البرنامج او تخطيط الكلسات و طريقة‬ ‫تفاعلها . و لكن ل يجب ان نعقد المسألة اكثر من اللزم فاذا كان البرنامييج‬ ‫بسيط فعل فل داعي لضاعة الكثير من الوقت في هذه المرحلة .‬ ‫ايضا يمكن استخدام التخطيييط الييدوي بقلمييك و دفيتر ملحظاتييك !. و هييذه‬ ‫طريقتي المفضلة خاصة اذا كان البرنامج صييغير او متوسييط الحجييم لننييي‬ ‫اجييد متعيية فييي ذلييك فييالمهم ان نجعييل ميين العملييية متعيية خاصيية اذا كييان‬ ‫المشروع شخصي و ل ينتظر منه ربح مادي مقابل لتعابك !.‬ ‫التطبيق )التخطيط( :‬ ‫طبعا هناك الكثير من الخيارات تعتمد على نقاط تلييي هييذه النقطيية ليذلك ليين‬ ‫ندخل في تفاصيل المخطط الن و لكن بما لدينا من معلومات الن يمكننا ان‬ ‫نرسم مخطط بسيط لسير البرنامج باسييتخدام ‪ UML‬او هكييذا علييى طريقيية‬ ‫الخوارزميات :‬ ‫حدد اللغات المطلوبية للترجمية -< اطليب النيص مين المسيتخدم -<اتصيل‬ ‫بقاعدة البيانات -< ارجع قيمة النص -< اعد العملية‬ ‫بسيط اليس كذلك ؟ يبدو ذلك في بداية المر !.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 124. ‫3- حدد ادواتك و اعرف قدراتك :‬ ‫تحديد الدوات المناسبة للمهام المناسبة هيو مرحليية حساسيية فيي بنياء اي‬ ‫مشروع ..‬ ‫ما هي اللغة البرمجية المناسبة؟‬ ‫ما هو الي ‪ IDE‬المناسب ؟‬ ‫ما هي المكتبات المساعدة التي ساحتاجها ؟‬ ‫ما هي المصادر المتوافرة للدعم ؟‬ ‫ما هي الية التعامل مع المستخدم ؟‬ ‫ما هي قاعدة البيانات المستخدمة ؟‬ ‫..الخ‬ ‫هذه السئلة حساسة جدا و تضمن الى حد كبير ان ل تقع في متاعب كثيرة‬ ‫في مرحلة التطبيق .. و تختلف الجابات بالطبع حسب متطلبييات المشييروع‬ ‫البرمجي ..‬ ‫السييؤال الول مثل فييي حييال كييان المشييروع تطييبيق ويييب هييل سييي خيييار‬ ‫مناسييب ؟ فييي اغلييب الحيييان ل .. فييي حييال برمجيية برنامييج ويييدجت هييل‬ ‫) هاسكل ( مناسبة ؟ ل اعتقد ذلك.. ‪ php‬و بيرل و روبي خيييارات افضييل‬ ‫في الحالة الولى و ‪ javascript‬في الحالة الثانية ..‬ ‫السؤال الثالث ما هي المكتبات التي سأحتاجها ؟ كلما كان البرنامج اكييبر و‬ ‫يحتاج الى اشياء معقدة كلمييا كييانت الحاجيية الييى المكتبييات اكييثر .. قبييل ان‬ ‫ابدء في مشروع كتابة برنامج سطح مكتب يجب ان ادرس الخيييارات الييتي‬ ‫تقدمها لي لغة البرمجة هل توفر لي ‪.. Wxwidgets ، GTK‬الخ ؟ اي‬ ‫مكتبة سأختار هل سيكون برنامجي لويندوز او لينكس او ماك ؟ ..‬ ‫ما هي المصادر المتوافرة ؟ هل اذا واجهتني مشكلة سأجد من يسيياعدني ؟‬ ‫هل تتوافر مصادر غنية ؟ هل يوجد توثيق كامل؟ …‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 125. ‫ل تنسى ان تعرف قدراتك بعض المكتبات ليست مجرد مكتبات بل عالم فييي‬ ‫حد ذاتها فتوافر مكتبيية ‪ sdl‬ل يعنييي اننييي اسييتطيع كتابيية لعبيية فقييط ميين‬ ‫خلل قراءة التوثيق بييل تتعييدى الييى مهييارات و تقنيييات و مفيياهيم اضييافية‬ ‫تحتاج الى وقت كبير لتعلمها يييوازي ربمييا الييوقت الييذي قضيييته لتعلييم لغيية‬ ‫البرمجة نفسها !.‬ ‫التطبيق )حدد ادواتك ( :‬ ‫سأكتفي بالجابة عن السييئلة المطروحيية سييلفا فقييط ، و ذلييك علييى حسييب‬ ‫حاجة برنامجنا .‬ ‫ما هي اللغة البرمجية المناسبة؟‬ ‫بما انني اجيد بيرل و المشروع شخصييي و اللغيية مناسييبة لهكييذا نييوع ميين‬ ‫المهام فل بأس من استخدامها .‬ ‫ما هو الي ‪ IDE‬المناسب ؟‬ ‫‪ Padre + wxGlade‬و ذليييك لن ‪ glade‬سيرسيييم لنيييا الواجهييية‬ ‫الرسومية و بادري سيساعدنا في تطييوير اكييواد بيييرل خاصيية انييه برنامييج‬ ‫مكتوب بها و بمكتبة ‪! wx‬‬ ‫ما هي المكتبات المساعدة التي ساحتاجها ؟‬ ‫سيينحتاج بعييض المكتبييات و لكيين المهييم الن هييو مكتبيية ‪ wxPerl‬الييتي‬ ‫سييتوفر لنييا امكانييية انشيياء الواجهيية الرسييومية ، طيييب لميياذا ل نسييتخدم‬ ‫‪ GTK‬او ‪ QT‬او حتى سوينج ؟!..‬ ‫هنا نحتاج ان نعمل دراسة سريعة قبييل اتخيياذ القييرار فمكتبيية كيييوت مكتبيية‬ ‫ممتازة جدا و لكن في بيرل هي خيار سيء لقليية المصييادر و قييدم الصييدار‬ ‫المتوافر .. ‪ GTK‬ايضا ممتازة لو كنا سنكتفي بلينكس و لكيين ربمييا احييب‬ ‫ان انقيل البرناميج الييى وينيدوز و تشيغيل هيذه المكتبيية هنياك لييس بييالمر‬ ‫السييهل .. سييوينج ؟ سيينحتاج الييى مكتبييات اضييافية كييثيرة لكييي نسييتطيع‬ ‫تشغيلها من بيرل فل داعي لكل هذا .. ‪ Tk‬افضل المكتبات المتوفرة لييبيرل‬ ‫من ناحية التوثيق و لكنها ل تدعم العربية !. اذا الخيار الفضل هو‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 126. ‫‪ wxPerl‬فالتوثيق موجود و المكتبة قوية جييدا و متعييددة المنصييات فيي‬ ‫حال رغبنا في تشغيلها في اي نظام تشيغيل لكيي تظهير و كأنهيا مين نفيس‬ ‫برامج نظام التشغيل ..‬ ‫ما هي المصادر المتوافرة للدعم ؟‬ ‫بيرل ل يوجد لها دعم ميادي خاصية فييي عالمنيا العربييي ليذلك قيد ل تكيون‬ ‫خيار مناسب للشركات هنا و لكن المصادر المتوافرة ممتازة جدا للمشاريع‬ ‫الشخصية ميين كتييب و توثيييق و منتييديات و غييرف مسيياعدة و مجموعييات‬ ‫بريدية ..‬ ‫ما هي الية التعامل مع المستخدم ؟‬ ‫سطر الوامر ؟ صفحات ويب؟ واجهة رسومية ؟ يبدو انكييم خمنتييم الخيييار‬ ‫الثالث لننا تكلمنا عن المكتبة التي سنستخدمها !.‬ ‫ما هي قاعدة البيانات المستخدمة ؟‬ ‫فلت فايل ؟ مايسكوال ؟ اوراكل ؟! ‪ SQLight‬؟‬ ‫يمكن اختيار الفلت فايل في المشاريع الصغيرة و المتوسطة و لكنها خيييار‬ ‫سيء للمشاريع الكيبيرة و لين اختارهييا لكيي ل احتياج للكيثير مين السييطر‬ ‫البرمجية لفتح و قفل و اغلق الملفات النصية ..‬ ‫مايسييكوال ليين اسييتخدمها لن برنييامجي ل يحتيياج الييى سيييرفر فهييو ليييس‬ ‫تطبيق ويب ..‬ ‫اوراكل ليس لدي المال الكافي !.‬ ‫‪ SQLite‬كنت ساستخدمها لو كنت ساصنع قاعدة الكلمات بنفسي و لكني‬ ‫لني كسول سأستخدم قاعدة كلمات جاهزة !.‬ ‫اذا الن لييدي خيييارين ان اسييتخدم قاعييدة بيانييات جيياهزة للكلمييات مثييل مييا‬ ‫تييوفره ‪ Arabeyes‬و هييي ميين نوعييية الملفييات النصييية او ان اسييتخدم‬ ‫قاعدة بيانات موجودة على الويب مثل ما توفره ‪BabelFish‬؟ و لكنه ل‬ ‫ييييوفر اللغييية العربيييية اذا سييياختار ميييترجم جوجيييل الموجيييود عليييى :‬ ‫‪http://translate.google.com‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 127. ‫4- رسم الواجهة الرسومية ‪: GUI‬‬ ‫طبعييا يمكيين البييدء بعملييية كتابيية الكييواد و الييدوال الحقيقييية اول ثييم رسييم‬ ‫الواجهة الرسومية خاصة لمن يحبون طريقة الختبار قبل البرمجيية و هييذا‬ ‫ما فعلته انا عندما كنت اكتب الكواد التي سنستخدمها في هذا الموضوع و‬ ‫لكن في المقالة هنييا فضييلت ان نرسييم الواجهيية الرسييومية بشييكل سييريع و‬ ‫ننتهي منها اول ..‬ ‫التطبيق :‬ ‫اول و قبل كل شيء ارسم الواجهيية بيييدك كمييا تحييب ان تظهيير لحقييا لكييي‬ ‫ترتاح في عملية وضع الشياء في اماكنها الصحيحة لحقا!...‬ ‫هنا رسمي المتواضع ..:‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 128. ‫بعدها يمكنني البدء في استخدام ‪ wxGlade‬للرسم الحقيقييي و ليين اتكلييم‬ ‫عن هذه النقطة برجاء ان يشاهد المهتمييين الشيروحات اليتي عملتهيا لهيذا‬ ‫البرنامج ..‬ ‫5- ربط الواجهة الرسومية مع الكواد الحقيقية :‬ ‫بعد رسم الواجهة الرسومية باستخدام برنامج ‪ wxGlade‬او اي برنامييج‬ ‫تصميم واجهات مثييل ‪ Glade‬و ‪.. Tk builder‬الييخ نييأتي الييى مرحليية‬ ‫الربط بين الواجهة و الكييود الييبرمجي … قبييل ان استرسييل يجييب ان انييوه‬ ‫انني كنت من المعارضين لستخدام برامج رسم الواجهات الرسومية لنهييا‬ ‫تضيف اكواد اضافية كثيرة يمكيين اختصييارها و لكيين الميييزة الييتي تجعلنييي‬ ‫افضل استخدامها هو اول سرعة التصميم بالطبع فننتهي من هذه المرحليية‬ ‫المملة بسرعة و ايضا توفيرها اليات جيدة لفصل الكود البرمجي عن الكود‬ ‫المرئي و ذلك سواء باستخدام ملف وصفي منفصييل ) مثل ‪ (xml‬او حييتى‬ ‫تضييمين الكييود الييبرمجي فييي الكييود المييرئي و لكيين بتييوفير اليييات مريحيية‬ ‫لتحديث الكود المرئي بشكل منفصل عن الكود البرمجي .‬ ‫نعود مرة اخرى ، انتهينا من تصميم الواجهة الرسومية و هكذا تبدو :‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 129. ‫ماذا نفعل الن ؟‬ ‫الخطوة الساسية الن هي ان نربط الواجهة بالكود و ذلك يتييم عيين طريييق‬ ‫وضع متنصت ‪ (Action listener (handler‬لكل حدث ‪.. Event‬‬ ‫طيب عندما اشاهد كل جزء من برنامجي اعرف انه يمكن ان تحدث احداث‬ ‫كثيرة في برنامجي و لكن يمكنني فقييط الهتمييام بالحييداث الييتي لهييا تييأثير‬ ‫مباشر على سير البرنامج .. مثل يمكننيي وضيع متنصيت لتحيرك المياوس‬ ‫على منطقة الكتابة و عليه اخذ اكشن معين و لكن ل يوجد كثير جدوى من‬ ‫فعل ذلك في برنامجنا الن ..‬ ‫اذا سألخص اهم النقاط التي يجب ان اهتم بها كالتالي:‬ ‫1 - سأضع متنصت للنقر على زر الخروج لنهاء كل عمليات البرنامج.‬ ‫2- سأضع متنصت للنقر على زر ‪ Credit‬كي اظهر معلومات البرنامج.‬ ‫3- سأضع متنصت لزر ‪ Swap‬و لكي يقوم باستبدال اماكن اللغتين .‬ ‫4- سأضع متنصت لزر ‪ Tran‬و لكي يقوم بمهمة الترجمة و عرضها فييي‬ ‫مكانها الصحيح .‬ ‫ملحظات :‬ ‫1 - الجزء الذي سيييظهر فيييه النييص المييترجم سيييتم اقفيياله بحيييث ل يمكيين‬ ‫للمستخدم الكتابة فيه و لكن يمكنه النسخ منه و ايضا سيتم اظهييار رسييائل‬ ‫الخطاء في هذا المكان.‬ ‫2 - لدينا خيارات كثيرة في كيفية توفير الية اختيار اللغييات و لكيين سيينختار‬ ‫‪ ComboBox‬لسهولته و لتوفيره المكان فهييو ل يأخييذ مكييان كييبير فييي‬ ‫البرنامج و انما يتوسع فقط في حالت النقير علييه ليظهيير اللغيات المتييوفرة‬ ‫) سنقوم باضافة 03+ لغة و لكن لن نضيف كل اللغات التي يوفرها جوجل‬ ‫فبعضها الى الن في حالة تجريبية ( ..‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 130. ‫3 - لن نضع متنصت خاص بكل صندوق اختيار بل سنطلبها يدويا في داليية‬ ‫الترجمة، لن هذا الحدث ليس مهما ال في حالة النقر على زر الترجمة .‬ ‫التطبيق :‬ ‫سيكون لدينا ملف بيرل جاهز بعييد توليييده ميين برنامييج ‪ wxGlade‬حيييث‬ ‫سيينكون جيياهزين لبييدء الربييط بييين البرنامييج و الواجهيية ميين خلل تطييبيق‬ ‫‪ Implement‬الدوال التي قمنا بالعلن عنها مبدئيا :‬ ‫;]‪use Wx 0.15 qw[:allclasses‬‬ ‫;‪use strict‬‬ ‫;1‪package MyFrame‬‬ ‫;]‪use Wx qw[:everything‬‬ ‫;)‪use base qw(Wx::Frame‬‬ ‫;‪use strict‬‬ ‫{ ‪sub new‬‬ ‫) ‪my( $self, $parent, $id, $title, $pos, $size, $style, $name‬‬ ‫;_@ =‬ ‫;‪unless defined $parent‬‬ ‫‪$parent = undef‬‬ ‫;‪unless defined $id‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬ ‫1- =‬ ‫‪$id‬‬
  • 131. $title = "" $pos unless defined $title; = wxDefaultPosition unless defined $pos; $size = wxDefaultSize $name = "" unless defined $size; unless defined $name; # begin wxGlade: MyFrame1::new $style = wxCAPTION|wxCLOSE_BOX| wxFRAME_NO_TASKBAR|wxCLIP_CHILDREN unless defined $style; $self = $self->SUPER::new( $parent, $id, $title, $pos, $size, $style, $name ); $self->{label_1} = Wx::StaticText->new($self, -1, "From : ", wxDefaultPosition, wxDefaultSize, ); $self->{origin} = Wx::ComboBox->new($self, -1, "", wxDefaultPosition, wxDefaultSize, ["AutoDetect", "Arabic", "English", "French", "Dutch", "German", "Persian", "Turkish", "Japanese", "Italian", "Slovak", "Serbian", "Thai", "Hindi", "Hebrew", "Spanish", "Greek", "Russian", "Swedish", "Croation", "Polish", "Portuguese", "Filipino", "Irish", "Malay", "Belarusian", "Czech", "Norwegian", "Swahili", "Catalan", "Bulgarian", "Korean", "Indonesian", "Chinese", "Vietnamese", "Yiddish", "Afrikaans"], wxCB_DROPDOWN|wxCB_SIMPLE| wxCB_DROPDOWN|wxCB_READONLY|wxCB_SORT); http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 132. $self->{Swap} = Wx::Button->new($self, -1, "Swap <->"); $self->{label_2} = Wx::StaticText->new($self, -1, "To :", wxDefaultPosition, wxDefaultSize, ); $self->{destination} = Wx::ComboBox->new($self, -1, "", wxDefaultPosition, wxDefaultSize, ["Arabic", "English", "French", "Dutch", "German", "Persian", "Turkish", "Japanese", "Italian", "Slovak", "Serbian", "Thai", "Hindi", "Hebrew", "Spanish", "Greek", "Russian", "Swedish", "Croation", "Polish", "Portuguese", "Filipino", "Irish", "Malay", "Belarusian", "Czech", "Norwegian", "Swahili", "Catalan", "Bulgarian", "Korean", "Indonesian", "Chinese", "Vietnamese", "Yiddish", "Afrikaans", "Ukrainian"], wxCB_DROPDOWN| wxCB_SIMPLE|wxCB_DROPDOWN|wxCB_READONLY| wxCB_SORT); $self->{Trans} = Wx::Button->new($self, -1, "Trans!"); $self->{origin_text} = Wx::TextCtrl->new($self, -1, "", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE| wxHSCROLL); $self->{translated_text} = Wx::TextCtrl->new($self, -1, "", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE| wxTE_READONLY); $self->{Credits} = Wx::Button->new($self, -1, "Credits"); $self->{Exit} = Wx::Button->new($self, -1, "Exit"); $self->__set_properties(); $self->__do_layout(); http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 133. Wx::Event::EVT_COMBOBOX($self, $self->{origin}>GetId, &OnSelection); Wx::Event::EVT_BUTTON($self, $self->{Swap}->GetId, &OnSwap); Wx::Event::EVT_COMBOBOX($self, $self->{destination}>GetId, &OnSelection); Wx::Event::EVT_BUTTON($self, $self->{Trans}->GetId, &OnTrans); Wx::Event::EVT_BUTTON($self, $self->{Credits}>GetId, &OnCredit); Wx::Event::EVT_BUTTON($self, $self->{Exit}->GetId, &OnExit); # end wxGlade return $self; } sub __set_properties { my $self = shift; # begin wxGlade: MyFrame1::__set_properties http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 134. $self->SetTitle("GTranslate"); $self->{origin}->SetSelection(0); $self->{destination}->SetSelection(0); $self->{origin_text}->SetMinSize(Wx::Size->new(428, 77)); # end wxGlade } sub __do_layout { my $self = shift; # begin wxGlade: MyFrame1::__do_layout $self->{sizer_2} = Wx::BoxSizer->new(wxVERTICAL); $self->{sizer_3} = Wx::BoxSizer->new(wxVERTICAL); $self->{sizer_4} = Wx::BoxSizer->new(wxHORIZONTAL); $self->{sizer_5} = Wx::BoxSizer->new(wxHORIZONTAL); http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 135. $self->{sizer_5}->Add($self->{label_1}, 0, wxALIGN_CENTER_HORIZONTAL| wxALIGN_CENTER_VERTICAL, 0); $self->{sizer_5}->Add($self->{origin}, 0, wxALIGN_CENTER_HORIZONTAL| wxALIGN_CENTER_VERTICAL, 0); $self->{sizer_5}->Add($self->{Swap}, 0, wxALIGN_CENTER_HORIZONTAL| wxALIGN_CENTER_VERTICAL, 0); $self->{sizer_5}->Add($self->{label_2}, 0, wxALIGN_CENTER_HORIZONTAL| wxALIGN_CENTER_VERTICAL, 0); $self->{sizer_5}->Add($self->{destination}, 0, wxALIGN_CENTER_HORIZONTAL| wxALIGN_CENTER_VERTICAL, 0); $self->{sizer_5}->Add($self->{Trans}, 0, wxALIGN_CENTER_HORIZONTAL| wxALIGN_CENTER_VERTICAL, 0); $self->{sizer_3}->Add($self->{sizer_5}, 1, wxEXPAND, 0); $self->{sizer_3}->Add($self->{origin_text}, 0, wxEXPAND| wxALIGN_CENTER_HORIZONTAL| wxALIGN_CENTER_VERTICAL, 0); $self->{sizer_3}->Add($self->{translated_text}, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL| wxALIGN_CENTER_VERTICAL, 0); http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 136. $self->{sizer_4}->Add($self->{Credits}, 0, wxALIGN_RIGHT, 0); $self->{sizer_4}->Add($self->{Exit}, 0, wxALIGN_RIGHT, 0); $self->{sizer_3}->Add($self->{sizer_4}, 1, wxEXPAND, 0); $self->{sizer_2}->Add($self->{sizer_3}, 1, wxEXPAND, 0); $self->SetSizer($self->{sizer_2}); $self->{sizer_2}->Fit($self); $self->{sizer_2}->SetSizeHints($self); $self->Layout(); # end wxGlade } sub OnSelection { my ($self, $event) = @_; # wxGlade: MyFrame1::OnSelection <event_handler> warn "Event handler (OnSelection) not implemented"; $event->Skip; http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 137. # end wxGlade } sub OnSwap { my ($self, $event) = @_; # wxGlade: MyFrame1::OnSwap <event_handler> warn "Event handler (OnSwap) not implemented"; $event->Skip; # end wxGlade } sub OnTrans { my ($self, $event) = @_; # wxGlade: MyFrame1::OnTrans <event_handler> warn "Event handler (OnTrans) not implemented"; $event->Skip; # end wxGlade } http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 138. sub OnCredit { my ($self, $event) = @_; # wxGlade: MyFrame1::OnCredit <event_handler> warn "Event handler (OnCredit) not implemented"; $event->Skip; # end wxGlade } sub OnExit { my ($self, $event) = @_; # wxGlade: MyFrame1::OnExit <event_handler> warn "Event handler (OnExit) not implemented"; $event->Skip; # end wxGlade } http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 139. # end of class MyFrame1 1; 1; package main; unless(caller){ local *Wx::App::OnInit = sub{1}; my $app = Wx::App->new(); Wx::InitAllImageHandlers(); my $frame_2 = MyFrame1->new(); $app->SetTopWindow($frame_2); $frame_2->Show(1); $app->MainLoop(); } http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 140. ‫قد يسألني البعض الن كنت تدعي ان العملية ستكون سهلة و اننييا بمعرفيية‬ ‫الساسيات يمكن ان ننشيء برنامج فما هذه الكواد الطويلة و المعقدة ؟..‬ ‫و لكن في حقيقة المر ان استخدامنا لبرامج تصميم الواجهات وفر لنا هذه‬ ‫المزايا :‬ ‫1 - ازالية الحاجية اليى كتابية الكيواد الطويلية للوصيول اليى شيكل مبيدئي‬ ‫للبرنامج ! خاصة مثل لو كانت المكتبة سوينج مثل .‬ ‫2- تسهيل عملية اعادة ترتيب مواضع الشياء و رسمها.‬ ‫3 - ازالة الحاجة الى حفظ خصائص العناصر المرئية و الحييداث المرتبطيية‬ ‫بها . فأنا لست مضطر لن احفظ ما هي خصائص العنصر ) زر( و ما هييي‬ ‫نوعية الحداث التي يستجيب لها.‬ ‫4 - و اخيييرا الشيييء المهييم يزيييل عنييا الييى حييد كييبير عنيياء تعلييم المكتبيية‬ ‫الرسومية خاصة فيما يتعلييق برسييم العناصيير و طريقيية العييرض، مثل هييذا‬ ‫الكود الن ليس كل مبرمج بيرل يعرف كتابته بنفسييه و لكيين الن بسييهولة‬ ‫يستطيع ان يعمل تطبيق لكل دالة فقط و ينتهي من البرنامج..‬ ‫اذا الى الن نحن في الحقيقة لم نبرمج بل نصمم كأي برنامج تصييميم مثييل‬ ‫‪ Gimp‬او فوتوشوب او فرونت بيج ...الخ. و اغلب المكتبييات الرسييومية‬ ‫الن يتوافر لها عدة برامج تصميم تزيل هذا العبء عن المبرمج.‬ ‫6- كتابة الكود الحقيقي ) تطبيق الدوال(:‬ ‫مع هذه المرحلة يمكننا ان ان نقول بأن البرمجيية الحقيقييية بييدأت فمثل لييو‬ ‫ان برنامجنا يقوم بعملييات حسيابية معقيدة فكيل ميا فعلنياه اليى الن مجيرد‬ ‫تمهيد و البداية الفعلية هي في كتابة هذه المعادلت الرياضييية فييي الييدوال‬ ‫الموجودة في البرنامج .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 141. ‫الن ، بما ان البرنامج ذو واجهة رسومية فهو يحتوي علييى دوال ل بييأس‬ ‫بها افتراضيا و ذلك للتعامييل مييع كييل حييدث مهييم فييي البرنامييج . و بمييا ان‬ ‫البرمجة الحدثية ل تبدا من اتجاه معين و ل تتبييع سييير عمييل ثييابت ) مثل‬ ‫يمكن ان نبدا برنامج رسومي ما باختيار فتح ملف جديييد او يمكيين ان نبييدا‬ ‫باستحضار ملف تم انشاؤه سابقا و من ثم تتييوالى الحييداث بشييكل مختلييف‬ ‫في كل مرة تشغيل تقريبا.( ، فأنا شخصيا افضييل البييدء فييي تطييبيق الييدوال‬ ‫التي :‬ ‫1- ل تحتاج الى وقت و جهد طويل لنشائها‬ ‫2 - ل تؤثر او تتفاعل مباشرة مع الحداث الخييرى فييي البرنامييج )او علييى‬ ‫القل تتفاعل و تتأثر بشكل اقل من غيرها(.‬ ‫و بالنظر الى برنامجنا يمكن ترتيب الدوال ) من القل الى الكثر( هكذا :‬ ‫1- ‪onExit‬‬ ‫2- ‪onCredit‬‬ ‫3- ‪onSwap‬‬ ‫4- ‪onTrans‬‬ ‫النقطيية الييتي احييب ان اشييير اليهييا هنييا هييو ان الكييواد الييتي سييأكتبها فييي‬ ‫التطبيق ليست بهدف تعليم لغيية البرمجيية بيييرل او مكتبيية ‪ wx‬و انمييا هييي‬ ‫وسيلة لتجسيييد المبيياديء المجييردة و الفكييار فقييط فعليييه ل تهتييم عزيييزي‬ ‫القاريء بكيفية كتابة المر المعين و لكن ركز على خطييوات الوصييول الييى‬ ‫نتيجة معينة .‬ ‫التطبيق )كتابة الكواد( :‬ ‫1 - نبدا بدالية الخييروج و هيي دالية بسييطة مهمتهييا انهيياء جميييع عمليييات‬ ‫البرنامج و الخروج بشكل سليم حسب طلب المستخدم :‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 142. sub OnExit { my ($self, $event) = @_; # wxGlade: MyFrame1::OnExit <event_handler> $self->Close(); # end wxGlade} ‫ و مهمتها هي توفير معلومات عن البرنامج مثل : تاريخ‬onCredit -2 ‫الصيدارة و رقمهيا و حقيوق النشير مثل ..اليخ( و يمكين ان تكتيب بطيرق‬ (Dialog box) ‫مختلفة كثيرة و في مثالنا سييأقوم بانشيياء مربييع حييوار‬ ‫يقوم بمهمة اظهار هذه المعلومات بحيييث عنييدما ينقيير المسييتخدم علييى زر‬ ‫كردت يقفز له مربع حوار صييغير فيييه معلومييات بدائييية عيين البرنامييج ، و‬ ‫عندما ينتهي المستخدم من القراءة ينقيير زر موافييق ليرجييع الييى البرنامييج‬ : ‫الساسي، هذا كل ما في المر‬ sub OnCredit { my ($self, $event) = @_; # wxGlade: MyFrame1::OnCredit <event_handler> my $credit = Wx::MessageDialog->new( $self, "All Credit goes to : n Google : http://translate.google.com n CPAN : Lingua::Translate Lingua::Translate::Google n wxPerl & wxGlade : perl_sourcer@yahoo.com n Still under testing ;) ", "Credits"); $credit->ShowModal; # end wxGlade } http://arabicplg.sourceforge.net/ Version 1.0 final release -
  • 143. ‫3- ‪ : OnSwap‬و هذه الدالة مهمتها فقط ان تقييوم بتغيييير اميياكن لغييتي‬ ‫الترجميية مثل لييو كييانت اللغيية المييترجم منهييا العربييية و اللغيية المسييتهدفة‬ ‫النجليزية سيقوم اتوماتيكيا بتغيير اماكن اللغتين .‬ ‫اذا بكل بساطة ما نحتاجه هو:‬ ‫1- نحصل على قيمة اللغة الولى و نسندها الى متغير .‬ ‫2- نحصل على قيمة اللغة الثانية و نسندها الى متغير 2.‬ ‫3- نقوم باسبتدال القيم في المتغيرات .‬ ‫4- نحدث اللغتين في الواجهة الرسومية بالقيم الجديدة.‬ ‫{ ‪sub OnSwap‬‬ ‫;_@ = )‪my ($self, $event‬‬ ‫>‪# wxGlade: MyFrame1::OnSwap <event_handler‬‬ ‫;)(‪my $first = $self->{origin}->GetValue‬‬ ‫;)(‪my $second = $self->{destination}->GetValue‬‬ ‫;)‪($first, $second) = ($second, $first‬‬ ‫;)‪$self->{origin}->SetValue($first‬‬ ‫;)‪$self->{destination}->SetValue($second‬‬ ‫‪# end wxGlade‬‬ ‫}‬ ‫4- ‪ onTrans‬و هييي الداليية الييتي تقييوم بعمييل الشيييء المهييم ال و هييو‬ ‫الترجمة .‬ ‫خطوات العمل :‬ ‫1- في بداية الملف سنستورد المكتبة اللزمة للترجمة :‬ ‫;‪use Lingua::Translate‬‬ ‫و ايضا في بداية الملف و ليس داخل هذه الدالة سننشيييء كييائن جديييد ميين‬ ‫هذه المكتبة بهذا الشكل :‬ ‫‪Lingua::Translate::config‬‬ ‫,'‪( back_end => 'Google‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 144. ‫,'‪referer => 'http://myhome‬‬ ‫,'‪format => 'text‬‬ ‫,'1.1.861.291' >= ‪userip‬‬ ‫;)‬ ‫2 - نعود الى داخل الدالة .. بما ان جوجل ل تتعامل مع اللغات باسمائها بل‬ ‫باختصيياراتها فعلينييا اول اسييتبدال كييل لغيية باختصييارها … مثل ‪arabic‬‬ ‫ستصبح ‪.ar‬‬ ‫اذا اول سطرين :‬ ‫;))(‪my $tag_1 = getTag($self->{origin}->GetValue‬‬ ‫}‪my $tag_2 = getTag($self->{destination‬‬‫;))(‪>GetValue‬‬ ‫نلحظ اننييا اسييتدعينا داليية اسييمها ‪ getTag‬و هييي داليية مسيياعدة كتبتهييا‬ ‫لتقييوم بعملييية الحصييول علييى الختصييار سأضييع الكييود الخيياص بهييا بعييد‬ ‫النتهاء من هذه الدالة .‬ ‫3- الن ننشيء الكائن بما ان لدينا كل المعلومات :‬ ‫,1_‪$object = Lingua::Translate->new( src => $tag‬‬ ‫;) 2_‪dest => $tag‬‬ ‫4 - الن انتهينا سنأخذ قيمة النص الموجود و من ثم ننفييذ ميثييود الترجميية‬ ‫و سنحدث خانة النص المترجم بالقيمة الجديدة :‬ ‫;)‪my ($message, $trans‬‬ ‫;)(‪$message = $self->{origin_text}->GetValue‬‬ ‫;)‪$trans = $object->translate($message‬‬ ‫;)‪$self->{translated_text}->SetValue($trans‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 145. ‫** الدالة المساعدة ‪ : getTag‬كما قلنا هذه الدالة تقوم بمقارنية كييل اسييم‬ ‫مع اختصاره و ترجع قيمة الختصار . اذا سنمرر لها قيمة اللغة الموجودة‬ ‫و عليهييا ان ترجييع لنييا الختصييار المناسييب و يوجييد العديييد ميين السيياليب‬ ‫للوصول الى هذه النتيجة ، و هكذا كتبتها انا :‬ ‫{ ‪sub getTag‬‬ ‫;‪my $value = shift‬‬ ‫‪my %tags = qw/ AutoDetect auto Arabic ar English en‬‬ ‫‪French fr Dutch nl German de Persian fa Turkish tr‬‬ ‫‪Japanese ja Italian it Slovak sk Serbian sr Thai th Hindi hi‬‬ ‫‪Hebrew iw Spanish es Greek el Russian ru Swedish sv‬‬ ‫‪Croation hr Polish pl Portuguese pt Filipino tl Irish ga‬‬ ‫‪Malay ms Belarusian be Czech cs Norwegian no Swahili sw‬‬ ‫‪Catalan ca Bulgarian bg Korean ko Indonesian id Chinese‬‬ ‫;/‪zh-CN Vietnamese vi Yiddish yi Afrikaans af Ukrainian uk‬‬ ‫;}‪return my $tag = $tags{$value‬‬ ‫}‬ ‫الن بحمييد ال ي تييم النتهيياء ميين البرنامييج فهييو يقييوم بوظييائفه الساسييية‬ ‫المطلوبيية و لكيين هييل فعل البرنامييج جيياهز للسييتخدام ؟ بييالطبع ل فنحيين‬ ‫بعيدون كل البعد ان يكون البرنامج الن شبه متكامل! لماذا؟ اليييس مهمتييه‬ ‫فقييط ان يقييوم بالترجميية و انتهينييا ؟ اليييس كييل الزرار تعمييل بالشييكل‬ ‫المطلوب؟ …‬ ‫مع السف هذا البرنامج الى الن و هو برنامج ناقص بقوة لنه لم يخضييع‬ ‫الى المرحليية الكييثر اهمييية و الييتي ربمييا كييانت الهييدف الساسييي ميين هييذا‬ ‫الموضوع :‬ ‫مرحلة الختبار و التجريب و التعامل مع الخطاء و الستثناءات .‬ ‫اعطيكم مثال بسيط :‬ ‫هذا البرنامج مثل يفترض ان النترنت متوافرة للتصال بجوجييل و ارجيياع‬ ‫القيمة دائما و هذا خطا جسيم جدا !.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 146. ‫ل مكان للفتراضات و مع السف كثير منا يترك هذه المرحلة اما لنه غير‬ ‫مبالي او لنه ل يعرف او لنه ل يدرك اهميتها . ففي مثييال النييترنت هييذا،‬ ‫ما سيحدث هو ان البرنامج عندما نطليب منيه الترجمية سيتصيل بيالنترنت‬ ‫لثواني معدودة فاذا كان هناك اتصال جرت المور علييى احسيين مييا يييرام و‬ ‫لكن لو كيان المسيتخدم غيير متصيل بالشيبكة فسيينهار البرناميج و يختفيي‬ ‫هكذا بدون سابق انييذار بمجييرد النقيير علييى زر الترجميية . ربمييا البعييض ل‬ ‫يهمه فهو يفترض ان المستخدم مدرك لوجييوب وجييود اتصييال قبييل تشييغيل‬ ‫البرنامييج و لكيين مييع السييف هييذه نقطيية تحسييب علييى المبرمييج و تجعييل‬ ‫برنامجه ناقصا و غييير احييترافي .. اذا دع عنييك الفتراضييات و تعامييل مييع‬ ‫الخطاء …‬ ‫7- التعامل مع الخطاء و الستثناءات :‬ ‫قلنييا ان ميين الهمييية بمكييان ان يقييوم البرنامييج بالتعامييل مييع الخطيياء و‬ ‫الستثناءات التي قد تحصل وقت تشييغيل البرنامييج ، و هييذا الميير هييو ميين‬ ‫المور التي تمايز بين المبرمجين فكلمييا كييان المبرمييج مهتييم بالتفاصيييل و‬ ‫معالجها كيان ذليك افضيل لبرنيامجه و لسيمعته كمبرميج . و فيي كيثير مين‬ ‫الحيان تجاهل التعامل مع هييذه الخطيياء و السيتثناءات يجعييل الميبرمجين‬ ‫ينظرون اليك كمبرمج مبتديء .‬ ‫الن اين نبحث عن الخطاء و الستثناءات التي يمكن ان تحصل؟‬ ‫في الغالب هناك حالتين يكثر جدا ظهور الخطاء و الستثناءات فيها :‬ ‫1- التعامل مع النظام‬ ‫2- التعامل مع المستخدم.‬ ‫الحالة الولى مثالها عندما نحاول ان نفتح ملف : قييد تنجييح العملييية او ل‬ ‫قد ل تنجح بسبب وجود قفل او صلحية معينة على الملف لذلك يجييب اخييذ‬ ‫هذا المر بالحسبان و التعامل معه .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 147. ‫الحالة الثانية مثالها طلب قيمة من المستخدم : قد نكون نريييد قيميية رقمييية‬ ‫لعمل حسابات مثل فيدخل المستخدم قيمة نصية ، عليه يجب ان نتأكييد ميين‬ ‫القيمة المدخلة قبل الشروع في العمل عليها .‬ ‫فييي النهاييية هنيياك انييواع ميين الخطيياء ل يمكيين التعامييل معهييا مثييل نفيياذ‬ ‫المساحة من نظام التشغيل فلن يكون هناك مفسر لغة اصل كي يتعامل مييع‬ ‫هذا الخطأ...‬ ‫ايضا في بعض الحيان ل يتوقع ان نحصي جميع الخطاء التي قييد تحصييل‬ ‫خاصة في المشاريع الكبيرة و لكن مهمتنا ان نقللها الى حد معقييول جييدا و‬ ‫ل نترك عملية اكتشاف الخطاء للمستخدم خاصة في برامج الويب التي قد‬ ‫تكون النتيجة غالية جدا حينها ان تم استخدام احد هذه الخطاء كثغييرة فييي‬ ‫البرنامج .‬ ‫و بما ان لكل لغة برمجية طريقية فيي التعاميل ميع السيتثناءات و الخطياء‬ ‫ليس الهدف من التطبيق هنا هو كيفية كتابة الكواد و انما البحييث عنهييا و‬ ‫طريقة محاصرتها و مدى اهميتها ..‬ ‫التطبيق )البحث عن الستثناءات(:‬ ‫الن سآتي الى برنييامجي و اخييذ كيل دالية علييى حيدى و ابحيث عيين وجيود‬ ‫الخطاء و الستثناءات التي يجب التعامل معها ..‬ ‫1 - داليية الخييروج ل تحتيياج الييى اضييافة اكييواد و داليية اظهييار المعلومييات‬ ‫ايضا ، لييذلك سييأكتفي بييالتجريب المباشيير و ملحظيية سييلوك الييدالتين عنييد‬ ‫النقر على الزر المعين . و يبدو ان الثنييتين تعملن بشييكل جيييد . و المهييم‬ ‫ايضا انهما ل يطلبان اي قيم من المستخدم.‬ ‫2- جميل نأتي اليى دالية ‪ : onSwap‬هكييذا مبيدئيا ميين مجيرد الملحظية‬ ‫نعرف انها قد تسبب مشكلة اساسية جدا تسبب انهيييار البرنامييج، المشييكلة‬ ‫هي في حالة ان قيم مربع الختيارات الول ل يساوي قيم مربع‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 148. ‫الختيارات الثاني فهناك قيمة موجودة زائدة في اختيارات لغيية المصييدر و‬ ‫هي ‪ AutoDetect‬هييذه القيميية تخييبر جوجييل ان عليييه هييو البحييث عيين‬ ‫اللغة في المصدر و هذه ميزة جيدة فربميا نحين ل نعيرف اللغية اليتي نرييد‬ ‫الترجمة منها . و لكن دالة سواب ستقوم بنقل اي قيمة الى الخانة الخرى‬ ‫لن القيمة الموجودة في داخل المربع ل تعنيها فهي غير مهتميية بالترجمية‬ ‫و انما ما يهمها هو فقط تبديل اميياكن القيمييتين . و لن ‪ autodetect‬ل‬ ‫تنفع ان تكون قيمة للغة المترجمة ) فكيف يخمن جوجل ما هي اللغية اليتي‬ ‫نريد ان نترجم اليها؟( سيظهر خطأ في البرنامج .‬ ‫و لكيييي نتعاميييل ميييع هيييذا الخطيييا فقيييط نتأكيييد مييين القيمييية انهيييا ليسيييت‬ ‫‪ AutoDetect‬قبيييل القييييام بعمليييية التحوييييل و اذا كيييانت القيمييية فعل‬ ‫‪ autodetect‬فسنقوم باظهار رسيالة تنيبيه للمسييتخدم فييي خانية النيص‬ ‫المترجم ننبه الى هذا الخطا و نرجو منه محاولة الترجمة مييرة اخييرى بعييد‬ ‫تغييير قيميية اوتييو و ذلييك بييدل ميين ان ينهييار البرنامييج بخطييأ ل يعلييم عنييه‬ ‫المستخدم … اذا :‬ ‫;)(‪my $first = $self->{origin}->GetValue‬‬ ‫;)(‪my $second = $self->{destination}->GetValue‬‬ ‫{)"‪if($first eq "AutoDetect‬‬ ‫‪$self->{translated_text}->SetValue("Can't use AutoDetect‬‬ ‫};)".. ‪on destination ! Please choose a language & try again‬‬ ‫{ ‪else‬‬ ‫;)‪($first, $second) = ($second, $first‬‬ ‫;)‪$self->{origin}->SetValue($first‬‬ ‫} ;)‪$self->{destination}->SetValue($second‬‬ ‫3- دالة ‪ getTag‬ايضا قد تسبب مشاكل فهي تستقبل قيمة و ترجع قيميية‬ ‫مقابلة لها و لكن ليو كيانت القيمية المسيتقبلة ل يوجيد لهيا مقابيل ؟.. مياذا‬ ‫سنفعل الن !.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 149. ‫يجب علينا اذا ان نحرص على ايجاد الية لضمان عدم ارسال اي قيمة غير‬ ‫القيم التي يوجد لها مقابل .. و ذلك قد فعلناه سابقا فعل !. نعييم فعلنيياه فييي‬ ‫مرحلة تصميم البرنامج حيث عندما قمنا بتصييميم مربعييي الختيييارات قمنييا‬ ‫بتوفير قيم افتراضية للغات معينة هي فقط ما يوفره البرنامييج للمسييتخدم و‬ ‫لكي ل يقوم المستخدم باضافة اي لغة غير موجودة او اي نص ل معنى له‬ ‫قمنا بقفل مربع الختيارات حيييث ل يمكيين البتيية ان يكتييب المسييتخدم قيميية‬ ‫مربع الختيار بنفسه و انمييا عليييه ان يختييار ميين الموجييود فقييط و فقييط ..‬ ‫القيمة التي وفرت لنا هذه الميزة في الكود كانت :‬ ‫‪wxCB_READONLY‬‬ ‫4- دالة ‪: OnTrans‬‬ ‫هذه الدالة هييي اهييم دوال البرنامييج و هييي اكييثر الييدوال عرضيية للخطيياء،‬ ‫النقطة الولى التي يجب النتباه اليهييا اننييا بييالنقر علييى زر الترجميية نقييوم‬ ‫باستدعاء الدالة و تنفيذ كل خطييوات الترجميية حييتى لييو كييان المسييتخدم لييم‬ ‫يييدخل نييص للترجميية اصييل ) تييرك الخانيية فارغيية( هييذه العملييية ل تسييبب‬ ‫مشاكل و ل ترجع اخطاء لن محرك جوجييل سييرجع قيمية فارغيية ايضييا و‬ ‫بذلك لن يلحظ المستخدم اي شيء! و لكن ل معنى لهذا فلماذا نقوم بتنفيييذ‬ ‫اوامر ل تعطينا نتيجة في نهاية المطاف؟‬ ‫لذلك سنعدل على الدالة بحيث انها ل تقوم بالتنفيذ ال اذا كانت هنيياك قيميية‬ ‫للترجميية و ذلييك ببسيياطة يتييم بالتأكييد ميين ان قيميية خانيية النييص المصييدر‬ ‫صحيحة ‪.True‬اذا:‬ ‫))(‪if ($self->{origin_text}->GetValue‬‬ ‫{‬ ‫‪Rest of code here‬‬ ‫}‬ ‫};‪else {$event->Skip‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 150. ‫الن بكل بساطة سيتجاهل امر الترجمة اذا لم يتوافر نص للترجمة.‬ ‫النقطة الثانية الكثر خطييورة الييتي تكلمنييا عنهييا سييابقا هييي فيي حييال عييدم‬ ‫توافر اتصال بالنترنت سينهار البرنامج وقت النقر على زر الترجمة ..‬ ‫قد يسأل البعض لماذا ينهار البرنامج كامل؟‬ ‫ينهييار البرنامييج لن داليية الترجميية تحيياول انشيياء كييائن ميين نييوع جوجييل‬ ‫ترانسليتر و هذا يحتاج اليى اتصيال بيالنترنت فعنيدما يفشيل البرناميج فيي‬ ‫انشاء هذا الكائن سيرجع خطأ من النوع الذي يجب التعامل معه ‪ Fatal‬و‬ ‫ليس اختياري . طيب لماذا هذا الخطا يجب التعامل معه ؟ لنه بكييل بسيياطة‬ ‫كل السطر البرمجية التي تعتمد على هذا الكائن ستفشل لنه ل يوجد كييائن‬ ‫اساسا ..‬ ‫مثل هذا المر :‬ ‫;)‪$trans = $object->translate($message‬‬ ‫نحن نريد تنفيذ ميثود ‪ translate‬الخاص بالكائن و لكن كييائن ‪object‬‬ ‫اساسا غير معرف عندنا لننا لم ننشئه بنجاح في العملية السابقة ..‬ ‫طيب كيف نتاكد من وجود اتصال بييالنترنت ..؟ اقييترح احييد العضيياء فييي‬ ‫منتدى بيرل ان نقوم بعملية اختبار للتصال قبل محاولة انشاء الكائن ..‬ ‫و لكن هذه العملية مكلفة لن المستخدم عنييدما ينقيير علييى زر الترجميية مييا‬ ‫سيحدث ان الدالة في بداية المر سييتختبر وجييود التصييال و هييذا يسييتغرق‬ ‫بضع ثوان و من ثم تقوم بانشاء الكائن باتصال جديد و اخيرا تقييوم بتنفيييذ‬ ‫الميثود و ستزيد ثوان النتظار هكذا ..‬ ‫فكرتي كانت مغايرة :‬ ‫البرنامج كله ل يحتاج اتصال لكن هذا المر يحتاج اتصال :‬ ‫,1_‪$object = Lingua::Translate->new( src => $tag‬‬ ‫) 2_‪dest => $tag‬‬ ‫اذا يمكنني ان اعرف هل يوجد اتصال او ل من خلل هذا الميير نفسييه و ل‬ ‫داعي لضافة المزيد من الوامر للتأكد من وجود اتصال .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 151. ‫اذا كان الكائن انشيء بنجاح فييالطبع هنيياك اتصييال و ان كييان الكييائن فشييل‬ ‫فهذا يعني انه ل يوجد اتصال او نوع اخر من الخطيياء .. و لكيين كمييا قلنييا‬ ‫سابقا ان الخطا هذا ل يصلح ان نضعه في جملة شرطية ‪( if (object‬‬ ‫لنه في هذه الحاليية لييو كييان خطييا ‪ false‬سييينهار البرنامييج و ليين يتييابع‬ ‫الجملة الشرطية ..‬ ‫اذا الحييل ان نعمييل تقيييم لهييذا الميير و بنيياء علييى النتيجيية ناخييذ الكشيين‬ ‫المناسب و لكي ل تبدو السطر البرمجية القادميية غريبيية فكييروا بهييا علييى‬ ‫طريقة ‪ try‬في لغة جافا و لكننا هنا في بيرل نستخدم ‪ … eval‬اذا :‬ ‫{ ‪eval‬‬ ‫‪$object = Lingua::Translate->new( src => $tag_1, dest‬‬ ‫;"‪=> $tag_2 ) or die "Cannot Create an instance‬‬ ‫;)(‪$message = $self->{origin_text}->GetValue‬‬ ‫;)‪$trans = $object->translate($message‬‬ ‫;}‬ ‫‪if ($@){$self->{translated_text}->SetValue("An Error‬‬ ‫;)".‪occured : $@ n Perhaps your not online‬‬ ‫}‬ ‫{‪else‬‬ ‫;)‪$self->{translated_text}->SetValue($trans‬‬ ‫}‬ ‫شرح الكود :‬ ‫في داخل ‪ eval‬نضع الوامر التي قد ترجع اخطاء مميتة للبرنامييج و هييي‬ ‫امر انشاء الكائن و المر الييذي يوجيد فييه ‪ method translate‬لنيه‬ ‫معتمد على امر الكائن.‬ ‫بعد الدالة نتاكد هل حصل خطا ؟‬ ‫اذا كان هناك خطيياء نرجييع رسييالة الخطييا الييى المسييتخدم . و لكيين سيييبقى‬ ‫البرنامج يعمل بشييكل طييبيعي ) هييذه الحاليية تشييبه حاليية المتصييفحات مثييل‬ ‫فايرفوكس فاذا لم يكن هناك اتصال بالنترنت سيييذهب البرنامييج الييى حاليية‬ ‫‪ Offline‬و ينتظر من المستخدم محاولة اعادة التصال (.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 152. ‫اما اذا لم يوجد خطا فنتابع البرنامج كما المعتاد و نرجع النص المترجم .‬ ‫8- مرحلة التحزيم :‬ ‫هذه المرحلة النهائية في تطوير البرنامج حيث بعد النتهاء من التخطيط و‬ ‫البرمجيية و التصييحيح و بعييد التأكييد ميين ان البرنامييج وصييل مرحليية نضييج‬ ‫مناسبة يمكننا ان نقوم بتحزيمه و القيام بنشره .‬ ‫طبعا اساليب التحزيم تختلف كثيرا جدا بحسب اللغة و نظام التشغيل و نوع‬ ‫البرنامييج . و لكيين الهييدف ميين هييذه المرحليية هييي تييوفير الييية سييهلة‬ ‫للمستخدمين النهائين كي يجربوا البرنامج فل يعقل مثل ان اوزع برنامجي‬ ‫على اصدقائي بشكل كود ‪ C‬و اقول لهم عليكم ببناءه ) ‪ ( Compile‬من‬ ‫المصييدر! فالمسييتخدم النهييائي غالبييا ل يعييرف كيييف يقييوم بانشيياء ملييف‬ ‫تنفيييذي ميين ملييف المصييدر، و الحقيقيية ان هييذه ليسييت مشييكلة المسييتخدم‬ ‫النهييائي بييل حييتى المسييتخدمين المتقييدمين فييي الغلييب سيييحتاجون بعييض‬ ‫الوقت و البحث كي يستطيعوا تشغيل برامج مكتوبة بلغة لم يتعيياملوا معهييا‬ ‫ميين قبييل فاللغييات كييثيرة جييدا. اسييهل البرامييج هييي البرامييج المترجميية‬ ‫‪ Compiled‬و يمكن استخدام برامج لتسهيل عملية التنصييب للمسيتخدم‬ ‫كما نراه في الويندوز و لكن يعيبها ان الملف التنفيذي المبني لنظييام معييين‬ ‫سيحتاج الى اعادة بناء في حال الرغبة بتغشيله في نظام اخر .‬ ‫هناك ايضا برامج الويب و لها طريقيية تشييغيل مختلفيية و فييي هييذه الحاليية‬ ‫يجب ان يكون هناك توثيق جيد لطريقة التنصيييب عليى السييرفر و يفضييل‬ ‫انشيياء سييكربت يقييوم بمهميية التنصيييب بييدل ميين ان نييترك هييذه المهميية‬ ‫للمستخدم فهذا السكربت يجييب ان يهتييم بانشيياء جييداول قواعييد البيانييات و‬ ‫اسناد القيم المناسبة للختيارات المناسبة حسب طلييب المسيتخدم و اعطيياء‬ ‫التصاريح المناسبة ...ألخ.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 153. ‫الخلصة ايا يكن نوع البرنامج يجب ان نحاول قدر المستطاع ان نوفر الية‬ ‫سهلة لتشغيل البرنامج بدل من ترك المستخدم في متاهة التشغيل و البحث‬ ‫عيين المييترجم او المفسيير المناسييب و بعييدها البحييث عيين المكتبييات الييتي‬ ‫يحتاجها البرنامج ..الخ فيترك البرنامج لنه ل يستاهل العناء .‬ ‫التطبيق :‬ ‫في حالتنا استخدمنا لغة مفسرة و هي بيييرل ) امثليية اخييرى هييي بييايثون و‬ ‫روبي ..ألخ( و التي تعطينا ميزة جيدة و هي النتقالية بين انظمة التشييغيل‬ ‫المختلفة و لكن يعيبها هو وجوب وجود المفسر على جهاز المستخدم . اذا‬ ‫سيكون هناك خيارين بالنسبة لبرنامج بيرل ) باسييتنثاء طبعييا خيييار تييوفير‬ ‫المصدر فقط( :‬ ‫1 - الول ان نرفييق المفسيير )حجمييه صييغير نسييبيا( مييع برنامجنييا فيقييوم‬ ‫المستخدم بتنصيب المفسر ثم تشغيل البرنامج .‬ ‫2- الثاني ان نستخدم ‪ PAR‬او ‪ PerlApp‬او ‪ Perl2exe‬و هذه كلهييا‬ ‫ادوات لنشيياء ملييف تنفيييذي جيياهز لبرامييج بيييرل . و بهييذا ليين يحتيياج‬ ‫المسييتخدم الييى تنصيييب اي شيييء فقييط دبييل كليييك علييى البرنامييج و سيييتم‬ ‫التشغيل . ) ملحظة هامة : هذه الدوات في حقيقيية الميير ل تقييوم بعملييية‬ ‫‪ compile‬كييل مييا فييي الميير انهييا تحلييل البرنامييج و تسييتورد الجييزاء‬ ‫المطلوبة فقط من مفسر بيرل و المكتبات اللزمة و تحزمها مع بعض(‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 154. ‫ملحظات بخصوص البرنامج :‬ ‫1 - في السنوات الخيييرة وجييدنا تييوجه كييبير الييى نقييل البرامييج ميين سييطح‬ ‫المكتب الى الويب و لكن ايضا هناك توجه الى نقل برامج الويب الى سطح‬ ‫المكتب فأغلب المدونين في تويتر مثل ل يدخلون الى موقييع تويييتر و انمييا‬ ‫يقومون باستخدام برامج سطح مكتب للقيييام بهييذه المهميية و هنيياك الكييثير‬ ‫من هكذا برامج او ما يسمى بالعميل .‬ ‫في اغلب الحيان الهدف منها هو اضافة ميزات جديدة الييى الخدميية الم او‬ ‫الستفادة من قدرات الجهاز بشكل افضل و لكيين هنيياك ايضييا سييبب اخيير و‬ ‫هو ان البعض يفضل استخدام برامج سطح المكتب بدل من تكييرار عمليييات‬ ‫الييدخول و الخييروج الييى المتصييفح لييذلك هنيياك رواج كييبير لبرامييج الرفييع‬ ‫المباشر الى فلكر مثل و غيرها من الخدمات.‬ ‫2 - في هذا الموضوع قمت بتمثيل بناء البرنامج على شييكل برنامييج سييطح‬ ‫مكتييب و لكيين كييان بالمكييان ان نسييتهدف منصييات اخييرى مثل ان نجعييل‬ ‫البرنامج خاص للموبايلت كاندريود و ايفون ..ألخ بهذه الفكرة .‬ ‫ايضييا كييان بالمكييان ان نسييتهدف جعييل البرنامييج يعمييل كاضييافة لمتصييفح‬ ‫كفايرفوكس او كييودجت ‪ Widget‬لسطح المكتب . بل حتى كان يمكن ان‬ ‫نضمن البرنامج في برنامج اكبر مثل لو كييان لييدينا برنامييج ويييب صييممناه‬ ‫ليعمييل كمجليية او مييدير مقييالت كييان بالمكييان ان نضييمن هييذه الميييزة فييي‬ ‫البرنامج .‬ ‫فعلينا البحث عن المنصات التي سيلقي فيها البرنامج شعبية اكثر.‬ ‫3 - طبعييا كييان بالمكييان اضييافة المزيييد ميين الخيييارات لهييذا البرنامييج مثييل‬ ‫ترجمة موقع او ترجمة ملف ورد موجود في الجهاز ..ألخ و لكن هذا ليس‬ ‫هدف الموضوع.‬ ‫4- تعمدت الغاء مرحلة كتابيية الختبييارات ‪ Tests‬لنهييا طويليية و خاصيية‬ ‫جييدا بلغيية بيييرل و سييتختلف كليييا مييع اي لغيية اخييرى فليين تقييع فييي فييائدة‬ ‫العضاء كثيرا خصوصا انني اريد من المقالة ان تكون عامة.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 155. ‫‪Our App In Action‬‬ ‫ملحظات عامة :‬ ‫تكلمنا عن بعض المراحل المهمة في تطوير البرامج ، و لكن هنيياك الكييثير‬ ‫من النقاط المهمة التي يجب النتباه لها :‬ ‫1 - ل تعد اختراع العجلة !. من الشياء المهمة التي يجييب ان ننتبييه لهييا و‬ ‫الييتي قمنييا بتطبيقهييا فييي هييذا الموضييوع هييو عييدم تكييرار الجهييود ، فهييذا‬ ‫البرنامج مثل كان بالمكان ان اطور لييه قاعييدة كلمييات بنفسييي و لكيين هييذا‬ ‫شيء مكلف جدا بالنسبة لشخص واحد و في النهاية سييأترك الضييافة الييى‬ ‫قاعدة الكلمات عندما ادرك ان هذا المر فوق طاقتي .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 156. ‫فهذه المهمة تحتاج الى متطوعين و مساهمين المر الذي قد ل يتوفر لي .‬ ‫و في الجهة المقابلة بدل ميين اسييتخدام المكتبيية الجيياهزة الييتي اسييتخدمتها‬ ‫للتصال بجوجل كان ايضا بامكاني ان اقوم بعملية التصيال بنفسييي و ذليك‬ ‫باستخدم ‪ LWP‬و لكن هذا سيحتاج الييى مزيييد جهييد و عنيياء و فييي اغلييب‬ ‫الحيان لن تكون نتيجة اكوادي افضل من المبرمجين الييذين قيياموا بانشيياء‬ ‫المكتبة التي استخدمناها لنهييا طييورت ميين قبييل مجموعيية ميين الشييخاص‬ ‫المحترفين و تم اختبارها بشكل مكثف من اشخاص اخرين.‬ ‫و لو على فرض كانت اكوادي افضل من اكواد هييذه المكتبيية فالعنيياء الييذي‬ ‫سأتحصل عليه اكبر من الفائدة العائدة .‬ ‫2- تقسيم البرنامج الى وحدات :‬ ‫في هذا الموضوع مجموع السطر البرمجية كييانت 422 سييطر برمجييي و‬ ‫لكيين لحظنييا سييهولة البحييث عيين الخطيياء و التعييديل علييى اي شيييء فييي‬ ‫البرنامج بسهولة تامة ) و سيظل المر هكييذا حييتى لييو ضيياعفنا عييدد هييذه‬ ‫السطر مرات و مييرات( و هييذا راجييع لكييون البرنامييج مقسييم الييى وحييدات‬ ‫منطقية تسهل عملية البحث و التصحيح و تتبع الخطاء بدل ميين ان يكييون‬ ‫البرنامج كله وحدة واحدة فتصييعب عملييية تتبييع مصيدر الخطيياء و معرفية‬ ‫ماذا يؤثر على ماذا !؟‬ ‫و سنذكر بعض اهم المور الساسية التي تساعد على جعل البرنامييج قابييل‬ ‫للتطوير ‪ Scalable‬و التعديل ‪: Maintainable‬‬ ‫1- تقسيم البرنامج الى وحدات منطقية‬ ‫2- تقليل اعتمادية كل وحدة على وحدات اخرى ‪.Dependecy‬‬ ‫3- عدم جعل المتغيرات مشاعة ‪ Global‬بل جعلها محصييورة فييي اضيييق‬ ‫مجال ممكن بحيث ل يمكن تغيرهيا مين خيارج ميداها و لحظنيا هيذا طيوال‬ ‫البرمجة التي قمنا بها في هذا الموضوع و لم نستخدم متغير عييام ال مييرة‬ ‫واحدة و ذلك بهدف العلن المبكر.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 157. ‫4 - استخدام تسميات واضحة للمتغيرات و الدوال و الكلسات .‬ ‫5- كتابة الملحظات على الجزاء التي فيها صعوبة او فكرة .‬ ‫و سييأكتفي بهييذا القييدر فالمقاليية طييالت كييثيرا و اعتييذر ميين هييذا .. و لكيين‬ ‫سأختم بملحظات بسيطة و هي في طلب المساعدة فييي المنتييديات العربييية‬ ‫او الجنبية :‬ ‫1 - تجنب الطلبات العامة مثل : كيف ابرمج موقع ويب ؟ او كيييف اسييتخدم‬ ‫المكتبة الفلنية ؟ بل الفضل تحديد السؤال في امر او دالة معينة …‬ ‫2- البحث قبل السؤال .‬ ‫3 - المحاولة قبل السؤال فالتفاعل مع السائل يزيد كييثيرا عنييدما يييرون انييه‬ ‫بحث و سعى بنفسه ثم عرض مشكلته .‬ ‫4 - عرض الكود البرمجي و هذه كييثيرا مييا تتكييرر فييالكثير ل يقبييل بعييرض‬ ‫كامل الكود المصدري ، ربما هو خوف الحراج او خوف ان يسييرق الكييود‬ ‫او شيء من هذا القبيل . و لكن عرض الكود البرمجي كامل و ليس جييزء‬ ‫منه يساعد كثيرا على حل المشكلة .‬ ‫5- اجعل سؤالك طلبا و ليس امرا !.‬ ‫6- و في النهاية السؤال في طلب العلم ل يوجد به احراج ..‬ ‫###‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 158. ‫:: الخاتمة ::‬ ‫تم بحمد ال النتهاء من النسخة النهائية الولى من هــذا‬ ‫الكتاب اللكتروني في الخامس من شهر نوفمبر 0102 .‬ ‫ادعو ال ـ انــي وفقــت لطــرح بعــض المواضــيع و النقــاط‬ ‫المفيدة التي وقعت في فائدة القاريء الكريم . و انــا اذ ل‬ ‫ادعي الكمــال بــل اســعى نحــوه امتثــل بقــوله تعــالى و مــا‬ ‫ابريء نفسي ان النفس لمارة بالسوء ال ما رحم ربي.‬ ‫للمراسلة بخصوص اي اقتراح او تعديل او نقد :‬ ‫‪perl_sourcer@yahoo.com‬‬ ‫على امل ان تكونوا من قراء النسخة القادمـــة.‬ ‫و الصلة و السلم على سيد الخلق محمد و الــه الطيــبين‬ ‫الطاهرين.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 159. :: ‫:: ترخيص الكتاب‬ http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 160. http://arabicplg.sourceforge.net/ Version 1.0 final release