SlideShare a Scribd company logo
‫مختصر‬

‫دليل لغات البرمجة‬
‫كتبه‬
‫علي آل ياسين‬
‫راهب في صومعة‬

‫عضــــو‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
:: ‫:: بسم ال الرحمن الرحيم‬
:: ‫:: تم اعداد الكتاب باستخدام برنامج‬

‫ رخصة الكتاب‬Creative Commons
http://creativecommons.org/licenses/by-nc-sa/3.0/us/

‫مرفق في النهاية مستند الترخيص‬

http://arabicplg.sourceforge.net/
Version 1.0 final release
‫:: اهداء ::‬
‫الى ناحيتـــها ،،‬
‫الى قبلتهـــا ،،‬
‫الى سموهـــا ،،‬
‫الى حبهــــا ،،‬
‫الى روحها ،،‬
‫الى جسمها ،،‬
‫الى وقوفها ،،‬
‫الى جلوسها ،،‬
‫الى قنوتها ،،‬
‫الى دعائها ،،‬
‫الى ركوعها ،،‬
‫الى سجودها ،،‬
‫الى انبساطها ،،‬
‫الى انقباضها ،،‬
‫الى ابتسامتها ،،‬
‫الى سرورها ،،‬
‫الى صاحبــــة الشــــــأن ،،‬
‫اليك ،، جعلني ال فداك ،،‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫:: مدخـــل ::‬
‫• بسم ال الرحمن الرحيم و الصلة و السلم علــى ســيد المرســلين محمــد و‬
‫اله الطاهرين ، اللهم صل على محمد و ال محمد كما صليت على ابراهيم و‬
‫ال ابراهيــم اللهــم و صــل و ســلم و ترحــم و بــارك علــى محمــد و ال محمــد‬
‫كأفضل ما صليت و باركت و ترحمت على احد من خلقك انك سميع مجيد.‬
‫• جائتني فكرة هذا الكتاب اللكتروني بعد ان قــرات كتــاب "حــرب البرامــج"‬
‫للكاتب الرائع كيث كرتس، و على الرغم من ان عملي هــذا لــم و لــن يصــل‬
‫الى مستوى عمل شخص في مستوى هذا المبرمج ، ل مــن حيــث الكــم "‬
‫003 صــفحة" و ل مــن حيــث المســتوى "خــبرة ســنين فــي البرمجــة مــع‬
‫ميكروسوفت و غير ذلك.‬
‫• ال ان هذا لم يمنعني من ان اشرع في كتيب يكون بمثابة دليل مختصــر الــى‬
‫لغات البرمجة متجنبا الطالة المملة و التفاصيل التقنية الدقيقــة او التوغــل‬
‫في شرح الكواد البرمجية التي من شأنها ان تبعد كل من ليــس لــه اهتمــام‬
‫بالبرمجة.‬
‫• عملي اذا في هــذا المختصــر هــو التعريــف بــالخطوط العريضــة بــاهم لغــات‬
‫البرمجة في عالمهـا الواسـع. مـع اضـافة تعريـف بـأهم المصـطلحات الـتي‬
‫يجب ان تعرف كي نستطيع من خللها قراءة تلك الخطوط العريضة.‬
‫• و هذه النسخة النهائية الولى اطرحها في منتداي المفضــل مجتمــع لينكــس‬
‫العربي ليماني بان الذي جعل المصادر الحرة عظيمة هو مبدا المشــاركة ،‬
‫لهذا انا اطمح في ان ارى القتراحات و النقد لهذه الصدارة كي نستمر في‬
‫مسلسل تطور هذا الكتاب من مسودة ابتدائيــة كمــا كــان قبــل ســنة و بضــع‬
‫شهور الى كتاب غني و مفيد خلل الشهور القادمة.‬
‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫• عليــه اشــكر كــل مــن ســاعدني و اخــذ بيــدي ســواء: بعبــارات شــكر و‬
‫استحســان ، نقــد بنــاء او اقــتراح مفيــد و اطمــح للمزيــد مــن المشــاركة و‬
‫المعونة.‬
‫• يوجد الكثير من المصطلحات البرمجيــة البحتــة طبعــا لــم اســتطع تفاديهــا و‬
‫ايضا لم يكن باستطاعتي اضافة تعريفهــا كلهــا خــوف الطالــة و لكــن قمــت‬
‫باضافة مقالة اضافية تعنــى بشــرح اهــم تلــك المصــطلحات مــع اســتعراض‬
‫سريع لهم نمــاذج البرمجــة و ذلــك نــزول عنــد رغبــة الكــثير مــن اخــواني‬
‫العضاء. و ايضا ارفقت في نهاية الكتاب مقالة تعنى بكيفية انشاء برنامج‬
‫بالقليل من الجهد و دراسة بعض جوانب التطوير و المــور الــتي يجــب ان‬
‫تأخذ في الحسبان في هذه العملية.‬
‫• تخصصــي فــي علــوم الحاســب اللــي طبعــا ل يعطينــي الخــبرة الكافيــة فــي‬
‫استعراض كل لغات البرمجة ، بل في حقيقة المر اللغات التي تعاملت معها‬
‫هي فقط بيرل كلغة اساسية و سي++ و جافا و سمول تولك و بي اتش بي‬
‫و قليل جدا من بايثون فكان هناك حاجة كبيرة للترجمة الصرفة في اللغــات‬
‫الباقية فارجو الشارة الى مواطن الخلل فــي اي مكــان مــن هــذه المقــالت‬
‫كي اقوم بتصحيحه ان وجد في الصدارات القادمة.‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫:: مقدمة ::‬
‫• ل اريد ان امثل دور المبرمج المحنك هنا ، فأنا واقعا لست اهل لذلك، و لكـن‬
‫بحكم تخصصي في هذا المجال و اهتمــامي بالجــانب النظــري منــه خاصـة ،‬
‫احببــت ان اكتــب بعــض الســطر لمــن لــديهم اهتمــام بالبرمجــة و لكنهــم لــم‬
‫يقدموا بعد :‬
‫• هناك نقــاط كــثيرة يجــب ان تاخــذ فــي الحســبان قبــل الشــروع فــي تعلــم لغــة‬
‫برمجة، و لكن لحظــت ان المشــكلة الساســية عنــدنا هــي ليســت فــي عــدم‬
‫القدرة على اختيار لغة معينة بل في عدم العزم على التعلم ابتداء. من منا ل‬
‫يحب ان يقال عنــه مبرمــج ؟ خاصــة ان البرمجــة مثــل الرياضــيات يوصــف‬
‫اصحابها بالذكاء و العبقرية . الكثير منا يقــول و يتمنــى و يخطــط ان يكــون‬
‫مبرمجا عندما يقرا عن المبرمجين و المخترقين و قصص نجاح البرامج و‬
‫المواقع و لكن عندما يبدا اول خطــوة فــي الدراســة يعــرف ان هنــاك الكــثير‬
‫ليتعلمه و ان المادة ليست ممتعة كما كان يتصور و يبدا بالشعور بالممــل و‬
‫من ثم يترك ما شرع فــي قراتــه مــن كتــاب او دورة تعليميــة . هنــاك حكمــة‬
‫يابانية تقول " الطموح بدون عمل مجرد حلم يقظة ". شخصيا كنت اعاني‬
‫من هذه المشكلة و هي تكديس الكتــب و الــدورات و المحاضــرات و غيرهــا‬
‫على امل اني ساقراها و اشرع في تعلمها في وقت ما ! و الن لهــا ســنوات‬
‫و لم اقرا منها شي ! اذا هذه المشكلة الولى التي يجب ان نجتازها ! و هي‬
‫ان ندرك ان مجرد تحميل الكتب و الدورات التعليمية سواء في البرمجــة او‬
‫غيرها من الفنون لن يجعل منا شيئا ! بل هو البدء و الصرار في تعلم هذه‬
‫الشياء المملــة و المــواد الثقيلــة و اكمــال الكتــب و الــدورات الــى نهاياتهــا‬
‫بالضــافة الــى الممارســة و التفكيــر هــو مــا يضــيف الــى حصــيلتنا الشــيء‬
‫المفيد.‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫• حسنا الن ، انت عازم على المواصلة و الجد في تعلم لغــة برمجــة معينــة و‬
‫لكنك ل تســتطيع ان تختــار اي لغــة تناســبك؟ هــذه المشــكلة الثانيــة و نــرى‬
‫الكثير من المواضيع من هذه الشاكلة ماذا اتعلم ؟ مــا هــي افضــل لغــة ؟ مــا‬
‫هي اقوى لغة ؟ ايهما القوى بيرل او بــايثون ؟ جافــا او ســي شــارب ! فــي‬
‫حقيقة المر ل يوجد شيء اسمه اللغة القوى و كل مــن يقــول هنــاك شــيء‬
‫من هذا القبيل فهو في حقيقة المر واهم ، فكل لغة قوية في جانب معيــن و‬
‫عادة ما يكون هو الجانب الذي انشئت من اجلــه اساســا، طبعــا يوجــد لغــات‬
‫تصلح لكل شيء تقريبا و لكن يبقى انها ل تقدم كفائة و انتاجيــة عاليــة فــي‬
‫كــل شـيء فمثل لغـة مخصصـة للـويب مثــل بـي اتـش بــي و ان كــان هنــاك‬
‫امكانيــة عمــل برامــج ســطح مكتــب بهــا فهــي لــن تكــون بقــوة و ســهولة و‬
‫انتاجية لغات البرمجة المخصصة لهذا الجانب و العكس صحيح . علــى هــذا‬
‫فسيكون الجواب على سؤالك هو: ما هو احتياجك؟ ماذا تريــد ان تبرمــج؟‬
‫هل تريد ان تتعلم لنفسك ام لسوق العمل ؟ و منه تختار لغة البرمجــة الــتي‬
‫تريدها، لهذا هذا الكتيب ربما يكـون جيـدا فـي اختيـار لغـة برمجتـك الولـى‬
‫فهــو يعرفــك بالهــداف الساســية الــتي انشــئت لهــا لغــات البرمجــة و اهــم‬
‫التطبيقات التي تستخدم فيها هذه اللغات. و النقطة الجديرة بالذكر ايضا هي‬
‫اطلعك على امثلة مــن طريقـة كتابـة الكـواد فـي لغــات مختلفـة باعتقــادي‬
‫الشخصي سيؤثر على اهتمامك و اســتمتاعك بلغــة البرمجــة الــتي تختارهــا‬
‫فهناك الكثير من المبرمجين يستخدمون لغات معينة لنهم يحبــون اســلوبها‬
‫فــي الكتابــة و ايضــا طريقــة معالجتهــا للمشـاكل البرمجيـة . مثل : اذا كنـت‬
‫تحب ان يكون كل شيء واضح في اسماء المتغيــرات و الكلمــات المفتاحيــة‬
‫و غيرهــا و تكــره اســتخدام الكــثير مــن الختصــارات و الرمــوز كــالقواس‬
‫الكثيرة في ليسب و القواس المعقوفة و ما الــى ذلــك فــذلك بــالطبع ســيؤثر‬
‫علــى اختيــارك. مثــاله : قــولهم عــن اقــواس لغــة البرمجــة ليســب ) جهنــم‬
‫القواس ( ، و لكن يقول الخر ) عندما وصلت الى مرحلة التنــوير ارتفعــت‬
‫القواس !( .‬
‫•‬
‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫ربما يستصغر البعض هذه النقطة و لكن في حقيقة المر هذه امور فطريــة‬
‫ل يمكــن تجاهلهــا! أل يمكــن ان تكــره قــراءة كتــاب لن خطــه لــم ترتــح لــه‬
‫عينك ؟ و ان كان هذا الكتاب الكثر مبيعا و غني بالمحتوى!‬
‫الشيء الهم هو:‬
‫• ان تعلم ان تعلمك لي لغة برمجـة سـيفيدك كـثيرا حــتى لــو انتقلـت الـى لغـة‬
‫اخرى .‬
‫• ان تعلم ان لغــات البرمجــة مبــاديء ان فهمتهــا ســهل عليــك النتقــال حســب‬
‫الحاجة الى لغة اخرى.‬
‫• لهذا نرى ان اغلب المبرمجين يعرفون اكثر من لغة و يســهل عليهــم التــأقلم‬
‫مع اي لغة جديدة يفرضها عليهم سوق العمل ، و كمثــال فــي بيــرل لــم اكــن‬
‫اعرف كيف اقوم بعمل برنامج ذو واجهة رسومية لننــي كنــت معتــاد علــى‬
‫عمل برامجي على الويب او سطر الوامر و لكن بعد تعلمــي مكتبــة ‪ Tk‬و‬
‫فهمي لكيفية عمــل الواجهــات الرســومية اســتطعت بكــل بســاطة و يســر ان‬
‫انقل برنامجي الى مكتبة ‪ wxperl‬و ايضا واجهة ‪.. GTK‬‬
‫• لــذلك شخصــيا ارى الهميــة المطلقــة الــتي يغفــل عنهــا الكــثيرون للجــانب‬
‫النظري و المنطقي للبرمجة بدل التركيز على حفــظ الــدوال و الكــواد فهــذه‬
‫اشياء بسيطة جدا حتى يمكن الرجوع اليها بسرعة من خلل كتيب الــدليل ،‬
‫بل يجب ان نعرف كيف يعمل البرنامج ل كيف يكتب البرنامج .‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫• شيء اخر يجب الشارة اليه هو عدم الهتمام كثيرا بمـا يشـاع عـن افضـلية‬
‫طريقة معينة في البرمجة ، مثل هناك اشارة دائمــة مــن خلل دراســتي فــي‬
‫الجامعة الى افضــلية البرمجــة الكائنيــة و لكــن يجــب ان نــدرك ان البرمجــة‬
‫الكائنية ليست دائما هــي الحــل الفضــل للمشــكلة ، توجــد مشــاكل و برامــج‬
‫استخدام البرمجة الكائنية فيها مجرد تطويل و تعقيد للحل ، و لكن طبعا في‬
‫برامج و نـواحي اخـرى سـيكون مـن الصـعب البرمجـة باسـتخدام البرمجـة‬
‫الجرائية بدل من البرمجة الكائنيــة فيهــا ، لــذلك دائمــا احــب ان اشــير الــى‬
‫اهمية الجانب النظري في البرمجة و هـو فهـم طــرق البرمجـة و مبادئهــا و‬
‫من ثم اختيار الطريقة الفضل .‬
‫• ايضا احـب ان اشـير الـى ان البرمجـة ممتعـة اذا كـانت تحـل مشـكلة نحتـاج‬
‫لحلها و ال ستكون البرمجة مملة و رتيبة و عــادة مــا نــترك المشــروع فــي‬
‫منتصفه ، مثل لينوس لم يشرع في كتابة نظامه ال من مشــكلة عاناهــا مــع‬
‫نظم التشغيل الموجودة في وقته و غيره من المثلة كثيرة ، و هنا نصل الى‬
‫نقطــة اخــرى و هــي ان البرامــج العملقــة ســيكون مــن الصــعب جــدا علــى‬
‫شخص واحد فقط تطويرها و كتابتها و هنا تظهر اهمية العمــل الجمــاعي و‬
‫الحتكاك بالمبرمجين الخرين و المشاركة في المحافل البرمجيــة و دراســة‬
‫اكواد الغير للعمل من حيث انتهى الخرون و ليس تضيع الــوقت فــي اعــادة‬
‫اختراع العجلة و تشتيت الجهود .‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫• النقطة الخيرة التي احب ان اختم بها هــي مســألة الدراســة البرمجيــة ، فــي‬
‫الجامعــة نمــل و نتضــجر مــن الشــياء النظريــة الــتي نتعلمهــا و نريــد تعلــم‬
‫الشــياء الكــووول علــى مــا يقــال !.. و لكــن لحقــا نــدرك ان هــذه الشــياء‬
‫النظرية المملة هي اهم ما تعلمناه و نرى لحقا مكانها في عــالم البرمجــة ،‬
‫كمثال كان هناك شخص دائما يتضجر من البرمجــة لســطر الوامــر و يقــول‬
‫ان هذا شيء قديم اكل الدهر عليه و شــرب و انــه علينــا ان نتعلــم البرمجــة‬
‫الحديثة فما نفع برامج سطر الوامر .. و لكن فــي حقيقــة المــر الجامعــة و‬
‫الكتب بشكل عام تعلمك البرمجة لسطر الوامر لنها تركز على المنطق فــي‬
‫حــل المشــاكل البرمجيــة و ســطر الوامــر مجــرد اداة لســتلم المتغيــرات و‬
‫التفاعــل مــع المســتخدم ، لحقــا ادركنــا ان الواجهــات الرســومية و برامــج‬
‫الويب مجرد قشور ل تنفع اذا لم يكـن خلفهــا اكـواد برمجيـة سـحرية تعمـل‬
‫بصمت خلف الستار ! و ان الذي تعلم تلك الكواد و المباديء و تمكن منهـا‬
‫لم يجد صعوبة في ان يغلفها بواجهات حديثة مثل ‪ QT‬او ‪..! GTk‬‬
‫:: &&& ::‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫:: نماذج البرمجة و اهم المصطلحات ::‬
‫في البدء كان الصفر و الواحد …‬
‫ثم جاءت اللغات التجميعية ، الــى هنــا و نحــن نتكلــم عــن اللغــات منخفضــة‬
‫المستوى اي انها ذات ارتباط شديد بالعتاد ، و ان كنا مع اللغات التجميعيــة‬
‫بدانا الماكروز و بعض الخصائص التي سنراها لحقا في اللغــات الجرائيــة‬
‫بشكل اكثر تقدما .‬
‫ثــم بــزغ الفجــر الجديــد مــع اللغــات عاليــة المســتوى و ظهــرت البرمجــة‬
‫الجرائية لتعلن عن ظهور عصر الهتمام بالمشكلة البرمجية !..‬
‫فقبل ان نتكلم عن لغات البرمجــة يجــب ان نســلط الضــوء علــى اهــم نمــاذج‬
‫البرمجة و اهم المصطلحات المرتبطــة بهــا ليســهل علينــا لحقــا فهــم لغــات‬
‫البرمجــة مــن خلل قــراءة اســطرها العريضــة . و فــي نهايــة هــذه الفقــرة‬
‫سنتعرض لمصطلحات متنوعة.‬
‫‪Programing Paradigms‬‬
‫يجب ان ننتبه الى انه ل يوجد اي تعريف رســمي لي نمــوذج مــن النمــاذج‬
‫التية ، و نقاط الشتراك كثيرة فالحدود هنا ليست فواصل ل يمكن تجاوزها‬
‫فالبرمجة الشيئية في النهاية هي برمجة اجرائية بطبيعتها. و لكن ما يعنينا‬
‫في حقيقة المر هنا هو النقاط التي يركز عليها كل نموذج من هذه النمــاذج‬
‫حيث عليه تتغير طريقة تفكير المبرمج في نظرته و تحليله و حله للمشــاكل‬
‫البرمجيـة . و هـذه النمـاذج القليلـة المـذكورة هنـا هـي المهمـة و ال هنـاك‬
‫العديد و العديد من النماذج كما هنالك العداد المهولة من لغات البرمجة.‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫‪ :: 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‬‬
‫اما الســطر فتكــون مرقمــة او معنونــة )‪ (Labels‬و مــن خلل هــذه الليــة‬
‫يمكن للبرنامج ان يقفز الى اي سطر برمجي.‬
‫البرمجة غير المنظمة توفر اساسيات اليات التحكم بسير البرنامــج و تــوفر‬
‫ايضا الـ ‪ Subroutines‬و سنتكلم عن هذه الشياء بقليل من التفصيل فــي‬
‫البرمجة الجرائية.‬
‫يبقى ان نعرف ان البرمجة غير المرتبة تتيح لنا انواع البيانات الولية مثل‬
‫العداد و النصوص و القوائم .‬
‫‪ :: Structured Programing‬البرمجة المنظمة‬
‫البرمجــة المنظمــة كالبرمجــة الغيــر منظمــة تعتــبر احــدى شــعب البرمجــة‬
‫المرية ) احدى اهم و اكبر نماذج البرمجة(. و اشتهرت البرمجــة المنظمــة‬
‫بازالتها للجملة الشهيرة ‪ GOTO‬او الحد من استخدامها.‬
‫و هناك ثلث منهجيات اكثر شهرة لكتابة البرامج المنظمة :‬
‫1 - طريقــة ادســجار دايجســترا حيــث هيكــل البرنامــج مكــون مــن مجموعــة‬
‫هياكل جزئية . بهذه الطريقة يمكن فهــم البرنامــج مــن خلل فهــم كــل جــزء‬
‫لوحده و به نتحصل على فصل و عزل للمهمات المختلفة.‬
‫2 - طريقة اخرى مشتقة من طريقة دايجسترا حيث يتم تقسيم البرنامج الــى‬
‫برامج جزئية مع وجود مدخل واحد فقط للبرنامــج و لكــن تعــارض و بقــوة‬
‫مبدء المخرج الموحد.‬
‫3 - طريقة جاكسون للبرمجة المنظمة و الــتي تعتمــد علــى محــاذاة البيانــات‬
‫المنظمة مع اجزاء البرنامج المنظمة.‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫يوجــد علــى القــل ثلث طــرق اساســية لتصــميم برامــج البيانــات المنظمــة‬
‫مقترحة باسماء اصحابها :‬
‫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‬‬
‫‪ :: Procedural‬البرمجة الجرائية‬
‫تعتمد على عملية توفير الخطوات اللزمة لكي يصــل البرنامــج الــى الحالــة‬
‫المطلوبة. و هي من اقدم النماذج و اكثرها انتشــارا و قريبــة جــدا للطريقــة‬
‫الفطرية في التفكير. و سنستعرض بعض اهــم المفــاهيم الــتي تتعامــل معهــا‬
‫باختصار ...‬
‫المتغيرات ‪:Variables‬‬
‫في البرمجة كما هو الحال في الرياضيات هناك حاجة ماسـة للتعامـل مـع المتغيـرات و ل‬
‫يخلو برنامج ما من متغير ال في حالت نادرة جـدا . ابسـط انـواع المتغيـرات هـو الـذي‬
‫يحمل قيمة واحدة فقط . مثل ص = 21. في هذه الحالة ص متغيـر يحمـل قيمـة معينـة‬
‫‪ Value‬و لكن هذه القيمة متغيرة فهي ليست ثابتة طالما البرنامج فـي طـور التنفيـذ فـي‬
‫اي لحظة ممكن تتغير هذه القيمة . بعض لغات البرمجة مثل جافـا تسـتوجب تحديـد نـوع‬
‫المتغير فاذا كان المتغير من نوع حرف مثل فل يمكن اسناد قيم رقمية للمتغير و لكـن فـي‬
‫لغات البرمجة الديناميكيةمثل بيرل و بي اتش بي ل يوجـد مثـل هـذا التقيـد فـالمتغير ص‬
‫مثل يمكن ان يحمل اي قيمة رقمية او نصية ..ألخ .‬
‫مثال:‬
‫;1 = ‪my $number‬‬
‫في هذا المثال اعلنا عن المتغير و في نفس الوقت اسندنا له قيمــة و هــي 1‬
‫كان بالمكان ان نعلن عن المتغير فقط دون اسناد اي قيمة :‬
‫;‪my $number‬‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫مثال اخر :‬
‫;”‪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‬‬
‫هذا المر مثل سيطبع لنــا القيمــة ذات الــترتيب 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‬‬
‫مثال:‬
‫/‪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‬‬
‫في هذه الحالة سيقوم المفسر بتنفيذ الوامـر مـن البدايـة الـى النهايـة و ينتهـي البرنامـج‬
‫بشكل تسلسلي ‪ ، 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‬‬
‫هذا مثال بسيط لدينا عبارة تأكيد دخــول و لكــن ل نريــد ان نطبعهــا لكــل مــن‬
‫يدخل الى برنامجنا، فقط في حالة تحقق الشرط نطبع العبارة . الشرط هو ما‬
‫بين القوسين الذين يليان كلمة ‪ ، 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‬‬
‫‪: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‬‬
‫دوائر التكرار:‬
‫في بعض الحيان نحتاج ان نكرر تنفيذ اوامر معينة ، و هنا تأتي دوائر التكرار .. عادة ما‬
‫يرافق كل دائرة تكرار عداد لديه قيمة صغرى و قيمة كـبرى لكـي تنتهـي عمليـة التكـرار‬
‫عنـد الوصـول للقيمـة الكـبرى و بـذلك نضـمن عـدم اسـتمرار التكـرار الـى مـا ل نهايـة‬
‫‪.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‬‬
‫)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‬‬
‫!‪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‬‬
‫‪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‬‬
‫;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‬‬
‫‪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‬‬
‫}"‪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‬‬
‫‪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‬‬
‫في المثــال الثــالث قمنــا بتحويــل النــص الــى الحــروف الكــبيرة و فــي المثــال‬
‫الخير الى الحروف الصغيرة . ما يهمنا هو // حيث بين هذين نضع التعابير‬
‫المعتادة و المر المهم الخر هو ما قبل // حيث نضع المعامل مثــل ‪ s‬معامــل‬
‫الستبدال .‬
‫‪ :: Event – Driven‬البرمجة المعتمدة على الحداث‬
‫هنـا مسـار البرنامـج يحـدد مـن خلل الحـوادث ، مثل : الحساسـات او مـن‬
‫خلل المستخدم كالنقر على الفأرة او رسائل من برامج اخرى او مــن خلل‬
‫‪ .threads‬عادة نتعامل مع هذه النوعية من البرمجــة جنبــا الــى جنــب مــع‬
‫برمجة الواجهات الرسومية فهي توفر الية الربط بين الواجهات الرســومية‬
‫و الكواد البرمجية و قد تكلمت عن اهم مباديء هذه الطريقة فــي البرمجــة‬
‫في المقالة المرفقة " انت تعرف الكثير ! اكتب برامجك الشخصية"، حيــث‬
‫سنستعرض كيفية انشاء برنامج يبني بثقل على هذه الطريقة.‬
‫‪ :: Object Oriented‬البرمجة الشيئية ) الكائنية(‬
‫الطريقة المتداولة للبرمجة و الكثر شهرة في اوســاط الشــركات الكــبيرة و‬
‫حتى الجامعات هذه اليام . البرمجة الشيئية ليســت مفهومــا جديــدا بــل لهــا‬
‫من القدم و التاريخ ما يشهد على نموها و تبلورها علــى مــدى عــدة لغــات‬
‫برمجية تبنت هذه النظرة ، و لكن تتبع الجـانب التـاريخي ليـس مكـانه هـذه‬
‫العجالة.‬
‫قبل ان نتكلم قليل عــن البرمجــة الشــيئية يجــب ان نعــرف لمــاذا لقــت هــذه‬
‫الطريقة في البرمجة نجاحا واسعا بحيث ان اللغة التي ل تدعم هــذه الرؤيــة‬
‫البرمجية و ل تتيح الدوات اللزمة لكتابة برامج شــيئية تعتــبر ناقصــة فــي‬
‫نظر الخبراء و الشركات ؟‬
‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫و لهذا نرى ان حتى اللغات التي لم تكتب اصــل علــى النمــوذج الشــيئي فــي‬
‫وقت لحق يتم اضافة الــدعم لهــذا النمــوذج ، و كمثــال لغــة البرمجــة بيــرل‬
‫التي هي لغة اجرائية في الصل و لحقا تم اضافة النموذج الشــيئي للغــة و‬
‫لغة البي اتش بي و غيرها الكثير من اللغات .‬
‫و ليس ما يهمنا هنا هو كيف تطبق كــل لغــة مفهــوم الكــائن ؟ و مــاذا يعنــي‬
‫الكائن خلف الستار .. و لكن نعم السؤال المهم هنا ؟ لماذا كل هذا الهتمام‬
‫بالبرمجة الشيئية مع ان اغلبنا دخلنا عالم البرمجة مــن منطلقــات مختلفــة؟‬
‫قد يكون المنطلــق الجــرائي اكثرهــا قرابــة للبداهــة! لمــاذا هنــاك مباهــاة و‬
‫مقارنات بين مستوى دعم كل لغة للبرمجــة الشــيئية ؟ و هنــاك ســؤال مهــم‬
‫اخر هل الفضلية للغات البرمجة الشيئية الصرفة مثل سمولتولك و ايفل او‬
‫للغات الهجينة الخرى التي تتيح نوعا من المرونة و ل تجبر المبرمــج فــي‬
‫ان ينظر لكل شيء على انه كائن ؟‬
‫شخصيا افضل الطريق الخيــر لنــه حــتى لغــات البرمجــة الكائنيــة الصــرفة‬
‫تختلف في تطبيق مبــادئ و مفــاهيم البرمجــة الشــيئية فلكــل وجهــة نظــر و‬
‫رؤى لمعالجة الموضوع محل الخلف ، لذلك المرونة دائما سلح جيد لكــل‬
‫لغــة برمجــة ، و ل اقصــد المرونــة بمعناهــا الضــيق مثل فــي العلن عــن‬
‫المتغيرات بل اريد المعنى الوسع و هو حرية المبرمج في معالجة المشكلة‬
‫بالطريقة و الرؤية التي يختارها فتكون اللغة اداة و ليست عقبة .‬
‫لذلك احب لغات البرمجة كلغـة بيـرل الـتي تجعـل مـن الحريـة شـعارا لهـا و‬
‫توفر للمبرمج عدة طرق لحل المشكلة يختار منها ما يشاء و يبدع ما يشاء‬
‫بدون ان تجبره اللغة على طريق معين .‬
‫على انه هنا ايضا اختلف و الكثير يرون ان هــذا المــر ســلح ذو حــدين و‬
‫في اغلب الحيان يرجحون كفــة الجــانب الســلبي فنســمع عبــارات مثــل ) ل‬
‫يمكــن قــراءة اكوادهــا ( او ) تعطيــك الحبــل و الكرســي لتشــنق نفســك ( و‬
‫غيرها من العبارات التهكمية .‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫و يفضلون الشعار المغاير ) هناك طريقــة واحــدة فقــط لعمــل هــذا ( و ذلــك‬
‫باعتبارهم يفيد التنظيم و يساعد على بناء المشــاريع العملقــة ، لــن احــول‬
‫الموضوع هنا الى مناقشة طويلة و ل انتصارا لطــرف علــى حســاب طــرف‬
‫اخــر لكــن ساستشــهد بمقولــة للمبرمــج الكــبير بــول غراهــام حيــث يقــول‬
‫مضمونا ) اننا كنا ل نعير الشركات الــتي تطلــب مــبرمجين جافــا اهتمامــا و‬
‫لكننا كنا نخشى الشركات التي تطلب مبرمجين ليســب او بيــرل لننــا حينهــا‬
‫نعلم انهم يريدون مبرمجين حقيقييــن !(. و فـي مكـان اخـر يقـول ) ان سـر‬
‫نجاحنا هو استخدامنا لليسب و لكن يبدو ان ل احد مهتم بسرقة سر نجاحنا‬
‫! (.‬
‫بعد كل هذا الستطراد لنذكر شيئا من مزايا البرمجة الشيئية :‬
‫1 - البساطة : حيث ان الكائنــات الوهميــة تحــاكي الكائنــات الحقيقيــة ، ذلــك‬
‫يؤدي الى تقليل التعقيد و هيكل برامج واضح للغاية و سهل الفهم.‬
‫2- سهولة الصيانة : حيــث ان عمليــة الصــيانة ســتكون ســهلة و ســنعرف‬
‫مكان الخطاء بالتحديد لن كل كائن له استقللية تامة.‬
‫3 - اعادة الستخدام : حيث ان الكائنــات يمكــن اعــادة اســتخدامها فــي عــدة‬
‫برامج.‬
‫4- التطوير : حيث ان عملية التوسع ستكون سهلة من خلل اضـافة اعـداد‬
‫قليلة من الكائنات الجديدة او التعديل المباشر علــى الكائنــات الموجــودة ، و‬
‫ذلك استجابة لي تغييرات او تحديات جديدة تفرضها بيئة التشغيل.‬
‫5 - التكاملية و تقليل العتمادية : حيـث ان كـل كـائن يمثـل كيانـا منفصـل ،‬
‫حيث ان العمل الداخلي للكائن منفصل عن اجزاء النظام الخرى.‬
‫6- سهولة التعديل : فهناك سهولة في اجراء اي تغييرات طفيفة في تمثيــل‬
‫البيانات او الجراءات في البرامج الشيئية. لن التغييرات داخــل اي كلس‬
‫ل تؤثر على الجزاء الخرى للبرنامج، حيث ان الطريقة الوحيدة للعالـــــم‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫الخــارجي فــي التصــال بهــذا الكلس هــو عــن طريــق واجهتــه باســتخدام‬
‫ميثودز الكلس نفسه.‬
‫الن ما هي البرمجة الشيئية ؟‬
‫هي بكل بساطة عملية محاكاة الواقع في البرمجــة هــي النظــر الــى الوجــود‬
‫على انــه مجـرد اشـياء او كائنــات ‪ Objects‬و مــن ثــم محاكــاته فــي عــالم‬
‫البرمجة . كل شيء في هذا الوجود يمكن ان ينظر اليه على انه كائن و كــل‬
‫كــائن لــه خصــائص)ســمات( ‪ Attributes‬و افعــال ‪ . Methods‬انــواع‬
‫الخصائص ‪ Field type‬ثابتة كان تكون قيمة رقمية او نصية و لكــن قيـم‬
‫الخصائص ‪ Field Value‬يمكن ان تختلف من حالة الى اخـرى . الكلس‬
‫‪ Class‬هو عبارة عــن قــالب ننشــيء منــه الكائنــات حيــث داخــل كــل كلس‬
‫سيتم تعريف خصائص و افعــال كــل كــائن مــن هــذا الكلس علــى انــه يجــب‬
‫النتبــاه الــى انــه عــادة ل يعتــبر الكلس كائنــا فــي حــد ذاتــه ال فــي اللغــات‬
‫الكائنية الصرفة . اذا عرفنا الن ان الكلس هــو مجــرد قــالب جــاهز لصــنع‬
‫كائنات من نوع ما .‬
‫نــأتي الن لنشــير الــى وجــود نــوع اخــر مــن الكلســات و هــو مــا يســمى‬
‫بالكلسات المجردة ‪ Abstract Class‬هذه الكلسات مهمتهــا تنظيميــة‬
‫فقط و ل يمكن انشاء اي كائن منها مباشرة بل يجب ان يكــون هنــاك كلس‬
‫يرث الكلس المجرد و ان ل يكون هو بدوره كلسا مجردا حينها فقط يمكن‬
‫ان ننشــيء كائنــات تحتــوي علــى خصــائص الكلس المجــرد . هنــا ذكرنــا‬
‫مصــطلح الوراثــة ‪ Inheritance‬و هــو بكــل بســاطة عمليــة انتقــال كــل‬
‫خصائص و افعال الكلس الب الى الكلس البن . لنأخذ بعض المثلــة قبــل‬
‫ان نواصل …‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫لنتخيل هناك مصنع للسيارات و نريد ان نحاكيه بالرؤيــة الشــيئية يمكــن ان‬
‫نبسط الى شيء مشابه الى:‬
‫‪abstract class Vehicle‬‬
‫‪abstract class Sedan‬‬
‫‪class Camry‬‬
‫نلحظ اننا انشأنا سلسلة من الكلسات لتنظيم المور حيث انه بــدانا بكلس‬
‫مجــرد باســم ‪) Vehicle‬مركبــة( و فيــه ســنعرف الخصــائص و الفعــال‬
‫الساسية التي يجب ان تحتويهــا كــل مركبــة ثــم انشــانا كلس مجــرد باســم‬
‫سيدان يرث كل ما في كلس فيهكل و يضيف عليها خصــائص و افعــال كــل‬
‫عربة من نوع صالون اخيرا انشأنا كلس باسم كامري يرث كــل خصــائص‬
‫سيدان و يضيف عليها مميزات و هوية الكامري التي نعرفها .‬
‫هنا يطرح السؤال لماذا نجعل من سيدان و فيهكل كلسات مجردة ؟ لماذا ل‬
‫نتركها كلسات طبيعية اليس الغرض فقط هو الوراثة ؟ فيكون الجواب بكل‬
‫بساطة لننا نعلم مسبقا اننا لن ننشيء اي كائن مــن هــذه الكلســات و هــذه‬
‫عادة برمجية جيدة يجب النتباه لها و على المستوى المهنــي يتخــذ القــرار‬
‫فيها وقت التخطيط ‪. Design‬‬
‫نلحظ ان المخطط الن قابــل جــدا للتطويــع و التعــديل فــي وقــت لحــق مثل‬
‫باضافة مزيد من انواع السـيارات بـل و فئات السـيارات . فـي المثـال اعله‬
‫كان المخطــط ينحــو منحــى عــامودي بطــبيعته اي سلســلة مــن العلــى الــى‬
‫السفل و لكن مع محاكاة امثلــة اكــثر تعقيــدا ســيبدو شــكل المخطــط و كــانه‬
‫شــجرة ذات غصــون متفرعــة تصــلح لن تحــاكي الظــواهر الطبيعيــة قبــل‬
‫الحقائق البرمجية كمشجرة الكائنات الحقيقية من ثدييات ...الخ.‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫قبل ان انتقل للنقطة القادمــة و بمــا ان الكلم عــن المخططــات ل بــأس بــأن‬
‫نذكر لغة النمذجة الموحدة ‪ UML‬و التي عادة مــا تــدرس جنبــا الــى جنــب‬
‫مع كورس لغات البرمجة الشيئية و هي لغة تمثيلية مفيدة جــدا فــي مرحلــة‬
‫التخطيط و تحتوي على 41 نوعا من المخططات تقع تحت مظلــة تصــنيفين‬
‫رئسين :‬
‫1- مخططات هيكلية تركز على عناصر النظام و ماذا يجب ان يحتوي.‬
‫2- مخططات تفاعلية )تصف سلوك الوبجكتس( تركـز علـى مـاذا يجـب ان‬
‫يحدث في النظام المحاكى و كيف سيتم التواصل و التفاعل بين العناصر.‬
‫من خلل هذا الستعراض البسيط بدانا نعرف سر قوة البرمجة الشيئية فــي‬
‫السيطرة على المشاريع العملقــة جــدا ، هــذه القــوة الــتي تنبــع فــي حقيقــة‬
‫المر من التجريد .‬
‫في البرمجة الجرائية عــادة هنــاك مشــكلة فــي كــون البيانــات مشــاعة لكــل‬
‫اجــــزاء البرنامــــج و لكــــن فــــي البرمجــــة الشــــيئية هنــــاك نــــوع مــــن‬
‫الكبسلة)التغليف( ‪ Encapsulation‬اي ان البيانات الخاصة بــاي كـائن ل‬
‫يمكن تعديلها ال من خلل ارسـال الرسـائل ‪ Messages‬الـى الكـائن و هـو‬
‫بدوره يقوم بعمــل اللزم ســواء بالتعــديل المباشــر او اعــادة ارســال رســالة‬
‫اخرى الى كائن اخر طلبا للمساعدة في اتمام الطلب.‬
‫من هنا نعرف انه في البرمجة الشــيئية تتــم المهــام عــن طريــق الرســائل و‬
‫مجموع الرسائل التي يفهمها الكائن تســمى بروتوكــول الكــائن ‪Protocol‬‬
‫بعبارة اخرى البروتوكول او الرسائل التي يمكــن للكــائن ان يتجــاوب معهــا‬
‫هي ذاتها الميثودز المعرفة سلفا في كلس الكائن .‬
‫نعود هنا للشارة الى اهمية التجريد هنا ايضــا فانــا كمســتخدم لــو اردت ان‬
‫ارسل ازهارا الى صديقي ما علي سوى ان اذهب الى محل الزهار و اخبره‬
‫باني اريد هذا النوع من الزهار لكي يتم ارساله الى صديقي .‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫هنا نلحظ انني اعطيت البائع رسالة تمثل طلبا و ل حاجة لي بمعرفة كيفية‬
‫تعامل البائع لتمام عملية الرســال . هــذه العمليــة تعــرف بــالبلك بوكســنج‬
‫‪ Black Boxing‬اي ان كل كائن مسؤول عن التعامــل مــع كــل رســالة او‬
‫طلــب بطريقتــه الخاصــة الــتي ل يجــب ان يعــرف عنهــا بقيــة الكائنــات اي‬
‫تفاصيل اضافية .‬
‫فبائع الزهور ربما يرسل طلب نقل الزهور الى محطة البريد او الــى شــركة‬
‫خاصة او ربما يعطيها لصــديق ســيذهب الــى منطقــة صــديقي !. و بمــا اننــا‬
‫نتكلـــــم عـــــن الرســـــائل لنتكلـــــم عـــــن البوليمـــــورفيزم ) التعدديـــــة(‬
‫‪ Polymorphism‬و هــي مــن اهــم مميــزات البرمجــة الشــيئية و تلخــص‬
‫بانها قدرة استجابة انواع مختلفة من الكائنات الى رسالة واحدة و لكن كــل‬
‫كائن يفسرها بطريقته الخاصـة . المثـال المشـهور الـذي سيوضـح لنـا هـذا‬
‫المفهوم هو لو ان احد مدراء الشركات عقد اجتماعا و بعد انتهاء الجتماع‬
‫قــال لمــوظفيه تــابعوا اعمــالكم فالرســالة هنــا واحــدة و لكــن كــل موظــف‬
‫سيستجيب بطريقته الخاصــة فموظــف التســويق ســيعود الــى محــل الــبيع و‬
‫موظف الدعم الفني سيعود الى مكتب الدعم الفني و هلم جرا .‬
‫الن بما اننا نفهم جيدا ميزة البوليمورفيزم ، لنعد الى الفعــال ) الميثــودز (‬
‫حيث يمكن ان تعايش حالت اقوى من البوليمورفيزم بدل من فقط التشارك‬
‫في اسماء الرسائل كما في المثال الســابق . الحالــة الكــثر انتشــارا هــي مــا‬
‫يعــرف بــالوفر لــود ‪ Method Overload‬و هــي قــدرة الكــائن علــى‬
‫الســتجابة لرســالة معينــة بعــدة اشــكال مختلفــة علــى حســب نــوع و عــدد‬
‫الرجيومنتس ‪ Parameters or arguments‬المرفقة مــع الرســالة ،‬
‫مثل :‬
‫;)(‪jump‬‬
‫;)‪jump(Int myNumber‬‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫فهنا لــو اعطانــا المرســل عــدد مــرات القفــز فــي الرســالة لســتجاب الكــائن‬
‫بتكرار عملية القفز عدد المرات المطلوبـة و لكــن لــو تـرك المرســل رســالة‬
‫فارغة من اي رقم ستكون الستجابة للميثود الفتراضي لنقــل قفــزة واحــدة‬
‫فقط .‬
‫هذا مثال بسيط و لكنه يوضح فكرة جيدة اخرى و هي توفير انواع مختلفــة‬
‫من الميثود لمعالجة حالت مختلفة من الرسائل و الطلبات .‬
‫الحالة الخرى هي ما يعرف بالميثود اوفر رايد ‪ 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‬‬
‫تعدد التوارث ‪Multiple Inheritance‬‬
‫في لغات البرمجة مثل سي ++ و بيرل هنــاك امكانيـة لي كلس بــان يــرث‬
‫من اكثر من كلس ، هذا الشيء ل يخلو من الفائدة الكثيرة على الرغم مــن‬
‫بعض العيوب و لكن في لغة جافا مثل ل يمكن للكلس ان يرث ال مـــــــــن‬
‫كلس واحد و هنا يظهر انه سنلقي صعوبة و محدودية و لكن جافــا تــوفر‬
‫ما يسمى بالواجهات ‪ Interface‬حيث يمكن لي كلس ان يطبق اكثر مــن‬
‫واجهة بالضافة الى وراثته من كلس معين . عندما نعلن عــن كلس بــانه‬
‫يطبق واجهة ما فاننا ننشيء في الحقيقة عقد يجب من خلله علــى الكلس‬
‫المطبق ان يوفر التطبيق البرمجي لكل ميثود موجود في الواجهة .‬
‫فــي البرمجــة الشــيئية كــثيرا مــا نتكلــم عــن محــددات الــترخيص ‪Access‬‬
‫‪Modifier‬و التي من خللها نضيف بعد اخر من اخفاء المعلومات ‪Data‬‬
‫‪ Hiding‬طبعا لكل لغة برمجية انـواع تحكـم مختلفـة و لكـن فـي جافـا مثل‬
‫لدينا :‬
‫‪1.private‬‬
‫‪2.protected‬‬
‫‪3.default‬‬
‫‪4. public‬‬
‫طبعا استخدام هذه الكلمات المفتاحية بالشكل الصحيح يحتاج خــبرة و قــرار‬
‫المبرمج نفسه و لكن القاعدة العامة هي كلما كان هناك تشديد في الوصــول‬
‫الى القيــم و الميثــودز كــان افضــل فنحــن قلنــا ان كــل كــائن يجــب ان يكــون‬
‫مسؤول عن نفسه فل يفضل التعــديل علــى المعلومــات مــن امــاكن كـثيرة و‬
‫مختلفة تؤدي بدورها الى المشاكل .‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫‪ :: Functional‬البرمجة الوظيفية‬
‫البرمجــة الوظيفيــة تعامــل الحوســبة كتقييــم للــدوال الرياضــية و تتجنــب‬
‫البيانــات المشــتركة ‪ Mutable‬و الحالــة ‪ .State‬تجــب الشــارة هنــا ان‬
‫البرمجة الوظيفية هي مجموعة افكار ان صح التعبير و ليست قوانين يجب‬
‫متابعتها لذلك هنــاك اختلف فــي تطــبيق البرمجــة الوظيفيــة فهنــاك اللغــات‬
‫الوظيفيــة الصــرفة ‪ pure functional‬كلغــة البرمجــة هاســكل و غيرهــا‬
‫حيث انها ل تتيح امكانية التغييـر او تحـديث قيمـة المتغيـر. بنـاء علـى هـذا‬
‫الشرط تكون المتغيرات كالمتغيرات في الرياضيات حيـث ص + 2 = 3 و‬
‫لكن يمكننا ان نقــول ض = ص+ 3 و لكننــا سننشــيء متغيــر اخــر لن ص‬
‫قيمة ثابتة غير قابلة للتغيير.‬
‫و لكن بشكل عام اللغات التي التي تدعم :‬
‫‪– Code references‬‬
‫‪– Closures‬‬
‫يمكن ان تسمى و ان تتيح البرمجة الوظيفية.‬
‫تعمدت ان ل اتكلم عن الــ ‪ Subroutines‬او الـ ‪ Functions‬في معرض‬
‫الكلم عن البرمجة الجرائية مع ان هذه الدوال تستخدم بكثرة في البرمجــة‬
‫الجرائية كأداة لستدعاء بعض الكواد التي يتكرر استخدامها في البرنامج‬
‫مثال بسيط هو بدل من ان نضع اكــواد تــذييل صــفحة ويــب فـي كــل صــفحة‬
‫يمكننــا بكــل بســاطة حفــظ و كتابــة الكــواد داخــل دالــة مــرة واحــدة فقــط و‬
‫الكتفاء باستدعاء الدالة اينما احتجنا لها ..‬
‫حسنا السؤال الن اذا كانت اللغات الجرائية تــوفر الــدوال فلمــاذا ل تســمى‬
‫كلها لغات وظيفية ؟ الجواب لكي نســتطيع ان نقــول عــن لغــة انهــا وظيفيــة‬
‫يجــب ان تتــوافر فيهــا بعــض المميــزات الــتي ذكرنــا بعضــها فــي البدايــة و‬
‫سنتطرق لبعضها بقليل من التفصيل كما سيأتي..‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫‪: References‬‬
‫اشرنا الى هذه النقطة كنقطة اساسية للبرمجة الوظيفيــة و ان كــانت ليســت‬
‫في حد ذاتها خاصية في البرمجــة الوظيفيــة ال انهـا اليـة تتيـح لنـا امكانيـة‬
‫البرمجة الوظيفية في بعض اللغات الجرائية.‬
‫طيب ما هو الـ ‪ reference‬؟ من اسمه هو اشــارة الــى مكــان المعلومــات.‬
‫بعبارة اخرى يمكننا ان نقول ان المشير او المرجع هو متغير لكنه ل يحمــل‬
‫القيمة الحقيقة انما يشير الى مكانها فقط . كمثال عندما اقــول تكلمنـا سـابقا‬
‫عن البرمجة الجرائية في صفحة 05 فأنا هنا اشير الى مكان المعلومة فــي‬
‫الكتاب و لكن ليس لدي المعلومة نفسها . في بيـرل اضــافة المعامــل  قبــل‬
‫اسم المتغير ينشيء لنا مؤشرا .. مثال:‬
‫;) ’‪my %hash = ( one => ‘Hello’, two => ‘World‬‬
‫;‪my $hashref = %hash‬‬
‫نلحظ هنا ان المتغير الذي يحمل القيم الحقيقيــة هــو ‪ hash‬و امــا المتغيــر‬
‫‪ hashref‬هو مجرد متغير يشير الى مكان المعلومات و الكلم هنا يطول و‬
‫يختلف مــن لغـة الـى اخــرى لـذلك سـنتجنب الطالــة بمــا اننـا اخــذنا الفكـرة‬
‫العامة.‬
‫الن لكي نتعرف اكثر على بعض المفاهيم المتداولة في البرمجــة الوظيفيــة‬
‫نحن بحاجة اول لن نعــرف كيفيــة كتابــة الــدوال بشــكل عــام ، المــر الــذي‬
‫سيتيح لنا فهم المفاهيم الكثر صعوبة .‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫اذا نبدا بمثال بسيط و هي دالة هيلو ! المشهورة..‬
‫{)(‪&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‬‬
‫جميل و اذا احببنا اضافة المزيد من القيم المــررة مــا علينــا ال ان نســتقبلها‬
‫كقائمة و نسندها لمتغيرات حسب الحاجة ، مرة اخرى هذا المر يختلف من‬
‫لغة الى اخرى و لكن هذا نموذج :‬
‫;)"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‬‬
‫هذه الدالة كما هو واضــح فقــط ترجــع قيمــة 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‬‬
‫الن ماذا تتوقعون ستكون نتيجة المرين الخرين ؟‬
‫النتيجــة ســتكون ‪ 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‬‬
‫الن سنحصــل علــى النتيجــة المتوقعــة 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‬‬
‫و هذه الكواد البرمجية لهذه العملية …:‬
‫;)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‬‬
‫‪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‬‬
‫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‬‬
: ‫الن نلحظ النتيجة‬
$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
‫المزيد من المصطلحــات :‬
‫‪IDE‬‬
‫هــــذه الكلمــــة تمــــر علينــــا كــــثيرا و هــــي اختصــــار ‪Integrated‬‬
‫‪ ، Development Enviroment‬اي بيئة التطــوير المتكاملــة ، حســنا‬
‫مــاذا يعنــي هــذا ؟ اعتقــد ان القليــل هــذه اليــام يبرمــج مــن خلل محــررات‬
‫النصوص مثل المفكرة فــي وينــدوز و ‪ vi‬فــي لينكــس ، حيــث يمكــن لنــا ان‬
‫نبرمــج برامــج كاملــة فقــط باســتخدام المفكــرة البســيطة ثــم نقــوم بعمليــة‬
‫الترجمــة للكــواد ، هــذه الطريقــة و ان كــانت جيــدة مــن ناحيــة انهــا تجــبر‬
‫المبرمج على العتماد على نفسه في البرمجة بدون اي تــدخل مــن برنامــج‬
‫الكتابة كمساعد ، ال انها تقلل من النتاجية . ل يزال هناك من يتعصب الــى‬
‫ان برامج كتابــة الكــواد يجــب ان تكــون بســيطة فــي حــد ذاتهــا و ل تغــرق‬
‫المبرمج فـي بحـار الخصــائص الــتي فـي العــادة ل يسـتخدمها بـذلك الشــكل‬
‫المستمر . الى عهد قريب كنت اتبنى هذا الرأي لني كنت ارى ان المبرمــج‬
‫فعل يجب ان يكون خــبيرا فــي لغتــه و حافظــا لكــل تفاصــيلها و خفاياهــا فل‬
‫يحتاج الى مساعدة من اي احد حتى لو كان برنامج التطــوير، و كنــت اتخــذ‬
‫من هذه الطريقة وسيلة لكي اصقل مهارتي، حيث كنت فــي وينــدوز اتعامــل‬
‫مباشرة مع المفكرة ، ثــم تطــور المــر الــى اســتخدامي لبرنامــج ‪ Padre‬و‬
‫الذي كان بسيطا جدا فــي امكانيــاته وقتهــا و لكــن احببتــه لنــه يقــدم خدمــة‬
‫التلوين للكواد. كنت اتجنب برنامج اكلبس او نــت بينــز بــل حــتى ‪Emacs‬‬
‫لنني كنت اؤمن بان الفترة التي سأقضيها في تعلم هذه البرامج و اكتشــاف‬
‫خفاياها و حفظ اختصــاراتها ، يجــب ان اســتغلها فــي تعلــم لغــتي المفضــلة.‬
‫على كل حال في يوم ما بدات العمل على مشروع لجافا و كان يتوجب علــي‬
‫عمله باستخدام اكلبس و من خلل عملي في هذا المشروع رايت ان الفــترة‬
‫التي احتجتها لتعلم البرنامج لم تكن بتلك الطول هذا فضل عن الفوائد الــتي‬
‫تحصلت عليها من اســتخدام اكلبــس ، عنــدها بــدات اؤمــن ببئيــات التطــوير‬
‫المتكاملة مع بعض التحفظات علــى بعــض النقــاط الــتي الــى الن افضــل ان‬
‫اعملها بنفسي مثل انشاء الواجهات الرسومية فهذه البرامج فقط تصلـــــح‬
‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫لتصــميم الشــكل الســريع للبرنامــج و لكــن عنــدما اريــد ان اكتــب الواجهــة‬
‫النهائية ساكتبها بنفسي لنني ل اريد كل تلك الكواد المحشوة من قبــل اداة‬
‫انشاء الواجهات ، و كذا الحال ايضــا فــي كتابــة اكــواد ‪ html‬فالتعامــل مــع‬
‫الدوات المرئيــة فــي هــذا المجــال تطويــل ل ارى لــه ضــرورة فــي اغلــب‬
‫الحيــان. علــى كــل حــال هــذه وجهــة نظــر … نعــود الــى بيئات التطــوير‬
‫المتكاملة ماذا تعني متكاملة هنا ؟ نستطيع ان نقول ان التكامل هنا يعني ان‬
‫نتحصل على برنامج واحد يقدم محرر نصوص و خدمات تحرير النصــوص‬
‫البرمجية مثل التلوين للكواد و ربما الكمال التلقائي و ايضــا ربمــا القــدرة‬
‫على تصحيح الخطاء في الوقت الحقيقي كما يوجد في اكلبس. ثم يجــب ان‬
‫يقدم البرنامج مفسر او مترجم للغة المعنية و قــد يســتخدم مفســر خــارجي.‬
‫ايضا قد تحتوي البيئة على ادوات البناء التلقائي. ايضا قد يحتوي البرنامج‬
‫ادوات لعملية التصحيح و التجريب. و مــا الــى ذلــك مــن خــدمات اخــرى قــد‬
‫تختلــف مــن برنامــج الــى اخــر حســب امكانيــاته مثــل تــوفير ادوات رســم‬
‫الواجهات الرسومية و ادوات العمل الجماعي ...الخ.‬
‫‪Compiled and interpreted‬‬
‫يمكن عادة تقســيم لغــات البرمجــة الــى مفســرة او مترجمــة او حــتى بعــض‬
‫اللغات توفر الثنين معا كما سيأتي. المترجم يحــول الكــود المصــدري ) مــا‬
‫نكتبه مثل بلغة سي( الى كود لغة اخرى غالبا الــى لغــة يفهمهــا الكمــبيوتر.‬
‫عادة الهدف الساسي مــن الترجمــة هــو التحصــل علــى ملــف تنفيــذي. فــي‬
‫اللغات المفسرة يتم ارسال الكواد الى مفسر اللغة و الذي يقوم هــو بــدوره‬
‫بتنفيذ الكواد مباشرة. بين هذا و ذاك توجد لغات لــديها مفســر و مــترجم و‬
‫توجد لغــات مثــل جافــا يتــم فــي البدايــة ترجمــة الملــف المصــدري الــى لغــة‬
‫وسطية ‪ byteCode‬و من ثم يتم تفسير هذا الكود من خلل المفسر الــذي‬
‫هو بالنسبة للجافا هو ذاته اللة التخيلية ‪. Virtual Machine‬‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫طبعا توجد الت تخيلية عديدة غير الخاصة بجافا لديها القدرة على التعامل‬
‫مع لغات متعـددة مثل ‪ Parrot‬و هـي اللـة التخيليـة الجديـدة الـتي تهـدف‬
‫لدعم لغات السكربتنج مثل بيرل و بايثون و روبي ...الــخ. اللغــات المفســرة‬
‫ل يتم التدقيق على الخطاء وقت الترجمة كما حال اللغات المترجمــة فعليــه‬
‫يجــب ان يتــم التــدقيق علــى الخطــاء وقــت التنفيــذ هــذا يعنــي ان الســرعة‬
‫ستكون اقل و هناك تفاوت كبير بين اداء المفسرات من حيث السرعة. لكــن‬
‫العتماد على المفسر يعطي ميزة انتقالية اكثر من المترجم للتنقل بين نظــم‬
‫التشغيل و النظمة المختلفة.‬
‫‪Syntax and Semantics‬‬
‫في البرمجة دائمـا مـا يمـر علينـا هـذين المصـطلحين ، فالخطـاء عـادة مـا‬
‫تصنف الى انها اخطاء سنتاكس اي اخطاء املئية ل تتبــع القواعــد العامــة‬
‫لكتابة ال كــواد فــي لغــة البرمجــة المعنيــة ، هــذه الخطــاء قــد تكــون بســبب‬
‫اخطاء فــي كتابــة الكلمــات المفتاحيــة للغــة ، او اخطــاء فــي ترتيــب الكتابــة‬
‫كالخطاء في مكان كتابة الشرط او اخطاء نســيان اضــافة ســيمي كلــون بعــد‬
‫انتهاء الجملة و ما الى ذلــك . اذا فالســنتكس بالنســبة لي لغــة هــو بعبــارة‬
‫اخرى قواعد كتابة الكواد في اللغة ، و هنا يظهــر تبــاين كــبير بيــن اللغــات‬
‫فمن اللغات ما يهتــم بــان يكــون ســهل القــراءة و يســتخدم طريقــة واضــحة‬
‫خالية من الرمـوز و القـواس الكـثيرة ، و هنـاك لغـات يتكـاثر فيهـا ظهـور‬
‫القواس المعقوفة و القــواس و الرمــوز و غيرهــا ، علــى انــه فــي الوهلــة‬
‫الولى يتصور ان الطريقة الولى هي الطريقة الفضل فمن منــا ل يحــب ان‬
‫تكون اللغة سهلة القراءة ال ان الموضوع ربما يكون اعقــد ممــا نتصــور ،‬
‫فمثل السراف في توضيح اسماء الميثودز و المتغيرات في جافا اثــار نقــدا‬
‫بسبب طول هذه السماء و صعوبة حفظهــا ، فــي الجــانب المقابــل فــي لغــة‬
‫مثل بيرل الكثير ممن يقراون بعض اكوادها يصابون بحالة خوف من كــثرة‬
‫الرموز المتواجدة و لكن في حقيقة المر هذه الرموز لم تضف عبثا فــ _$‬
‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫و |$ ، و غيرها من الرموز لم توضع ال للختصــار و مســاعدة المبرمــج‬
‫في ان يكتب اكواده باسـرع شـكل ممكـن . فـي ليسـب هنـاك كلم كـثير عـن‬
‫كثرة القواس فيها بين مؤيد و معارض لذلك ارى ان هذا الجانب و ان كان‬
‫ربما ثانويا ال انه مؤشر جيد لختيار لغة البرمجة التي ستبدا بها ، لنــه ل‬
‫يخفى ان كثير من المبرمجين انما يحبون و يتعصبون لبعض اللغــات لنهــم‬
‫يستمتعون في كتابة اكوادها . نعود الى موضوع السنتكس و نقول ان هــذه‬
‫النوعية من الخطاء ان ظهرت في البرنامج فهي ليست ذات اهمية قصوى‬
‫لنها عادة مــا ستصــطاد فــي مرحلــة بنــاء البرنامــج و سيشــير المــترجم او‬
‫المفسر الى مكان الخطاء . فضــل عــن انــه هــذه اليــام توجــد ‪ IDE's‬مثــل‬
‫اكلبس و غيره لــديها القــدرة علــى اصــطياد الخطــاء الطباعيــة فــي الــوقت‬
‫الحقيقي مباشرة .‬
‫اما السمنتكس فهي الخطاء المنطقية في البرنامج ، مثل لمــاذا برنامــج مــا‬
‫يرجع قيمة مغايرة للقيمة المتوقعة ، هذه الخطاء لن يشير لها المــترجم او‬
‫المفسر و سيتم تشغيل البرنامج بشكل طــبيعي لــذلك عــادة مــا يتــم اكتشــاف‬
‫مثل هذه الخطاء في وقــت التشــغيل و التجريــب ، ايضــا هــذه النوعيــة مــن‬
‫الخطاء تعرف بالبجز ‪ ، Bugs‬و قد يطول امر اكتشافها الى شهور بل الى‬
‫سنوات اذا كانت معقدة و مخفية.‬
‫قبل ان نختم هذه الفقرة يجب ان ننوه بمصــطلح ‪ ، Syntactic Sugar‬و‬
‫هو بكل بساطة اضافة المزيد من الســنتكس الــى لغــة برمجــة معينــة بحيــث‬
‫تزيد سهولة كتابة الكواد و تيسر علــى المــبرمجين قـراءة الكــواد، و لكــن‬
‫مع كل ذلك فازالتها مـرة اخـرى مـن اللغـة يجـب ان ل يحـدث اي اثـر علـى‬
‫قدرة اللغة. بعبارة اخــرى هــي كلمــات تضــاف الــى اللغــة كــي تســاعد علــى‬
‫التعبير عن بعض الخصائص بشكل اكثر تركيزا او اكــثر وضــوحا او بشــكل‬
‫مختلف و لكنها في حد ذاتها ل تضيف ميزة جديدة للغة البرمجة.‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫و لهذا نقرا في ويكيبيديا قولهم ) لغات البرمجة العالية المستوى لغــات الــة‬
‫مــع الكــثير و الكــثير مــن الــ ـ ‪ (. 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‬‬
‫‪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‬‬
‫دليل لغات البرمجة )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‬‬
: ‫لغات اثرت على بيرل‬
Lisp•
Awk•
Sed•
C•
++C•
Smalltalk•
Pascal•
: ‫لغات تأثرت ببيرل‬
Python•
Php•
Ruby•
Dao•
Javascript•
Falcon•
Windows PowerShell•

http://arabicplg.sourceforge.net/
Version 1.0 final release
‫خصائص اللغة :‬
‫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‬‬
‫دليل لغات البرمجة )2( :: لغة البرمجة جافا‬
‫لغة البرمجة : ‪Java‬‬
‫لغة الجافا في حقيقة المر عبارة عن امتــداد للغــة الــ ‪ ، oak‬حيــث ظهــرت‬
‫هذه اللغة في بداية التسعينات من قبل صن ميكروسستمز لتكون لغة ســهلة‬
‫الســتعمال و التنقــل و كــانت تســتهدف التواصــل بيــن اجهــزة التســلية مثــل‬
‫اجهزة اللعاب و الـ ‪ . VCR‬اما الهــدف الساســي هــو اســتثمار اللغــة فــي‬
‫اجهزة التلفاز التي تقدم خدمة الفيديو حسب الطلب . و في هذه الفترة بدات‬
‫النترنت بالرواج و قد لحظ مطوروا ‪ oak‬هذه الموجة و مستقبلها خاصــة‬
‫بعد ظهور اول متصفح جرافيكي، فتحول اهتمامهم الى الويب فأنشــؤا ويــب‬
‫رنر و هو عبارة عن متصفح يدعم )اوك(. حينها تم تغير اسم اوك الى جافا‬
‫لتعارض الحقوق و سمي الويب رنر ) هوت جافا ويــب بـراوزر( . و تطــور‬
‫المر لحقا بمشاركة العديد من الشركات و المطورين لتكتسب جافا شــعبية‬
‫و قوة كبيرة .‬
‫خصائص اللغة :‬
‫1. ل تعتمــد علـى نظــام معيــن : حيــث يقـوم الكومبــايلر الخـاص بالجافــا‬
‫بانتاج بايت كود تحوله ‪ JVM‬الى لغة اللة ، فبرامج الجافا تعمل علــى اي‬
‫نظام توجد فيه ‪.JVM‬‬
‫2. لغة برمجة كائنية‬
‫3. تحتوي على جامع قمامة ‪Garbage Collection‬‬
‫4. استايل الكتابة مشابه للسي ++‬
‫5. مكتبة قياسية غنية : تحوي عدد ضــخم مــن الكلســات و الميثــودز و‬
‫يمكن تصنيفها الى ست اقسام:‬
‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫•كلسات دعم اللغة‬
‫•كلسات اليوتلتي )الدوات(‬
‫•كلسات الدخال و الخراج‬
‫•كلسات الشبكة‬
‫•‪ 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‬‬
‫دليل لغات البرمجة )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‬‬
‫اهم اللغات التي تأثرت بها سي:‬
‫•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‬‬
: ‫اهم مجالت التطبيق‬
‫•انظمة التشغيل و برامج يونكس‬
‫•برمجة اللعاب‬
: ‫مثال برمجي هيلو ورد‬
#include<stdio.h>
main()
{printf (“hello world!”);}

http://arabicplg.sourceforge.net/
Version 1.0 final release
‫دليل لغات البرمجة )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‬‬
‫خصائص اللغة :‬
‫•لغة برمجة كائنية بحتة‬
‫•اسلوب الكتابة ديناميكي‬
‫•لغة متعددة التطبيقات‬
‫•تتوافر لها بيئة تطوير مرئية‬
‫اهم مجالت التطبيق :‬
‫•برامج الباتش لبرامج المينفريم الكبيرة.‬
‫•لديها القدرة على ادارة نظام التلفون الخاص بدولة كاملة‬
‫•نظم المعلومات الدارية‬
‫•مناسبة جدا للمشاريع العملقة‬
‫•تستخدم كلغة اكاديمية للتدريس في الجامعات‬
‫مثال كود خاص بنسخة غنو سمول تولك:‬
‫‪‘Hello World!’ displayNl‬‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫دليل لغات البرمجة )5( :: ليسب‬
‫لغة البرمجة :‪Lisp‬‬
‫مع منتصف الخمسينات من القرن الماضي ظهرت موجــة الهتمــام بالــذكاء‬
‫الصطناعي . نشأ هذا الهتمام الكبير بسبب رغبة اللغــويين بــالتعرف علــى‬
‫معالجة اللغات الطبيعية ، و علماء النفس بسبب محاولة محاكاة المعلومات‬
‫النسانية ، و اخيرا علماء الرياضيات بسبب الرغبة في جعل عمليــة اثبــات‬
‫النظريات عملية اتوماتيكية . و الشيء المشترك بين كل هذه التطبيقات هــو‬
‫الحاجة الى طريقة تسمح للكمبيوترات بمعالجة البيانات الرمزية على شــكل‬
‫قوائم.‬
‫كــانت شــركة ‪ IBM‬مــن اول الشــركات المهتمــة بهــذا المجــال فــي اواســط‬
‫الخمسينات. في نفس الوقت كان العمل جاريـا علـى مشـروع الفـورترن . و‬
‫لغلء تكلفــة اصــدار اول كومبــايلر للفــورتران تــم اضــافة معالجــة القــوائم‬
‫كاضافة مستقلة الى الفورتران عرفت باسم ‪.FLPL‬‬
‫فــي العـام 8591 عمـل جـون ماكـارثي فـي شـركة ‪ IBM‬فـي ادارة بحــوث‬
‫المعلومات. تم استقدام مكارثي ليعمـل علـى انشـاء مجموعـة مـن متطلبـات‬
‫عمل الحوسبة الرمزية.‬
‫المحاولة الولى كانت التفرقة بين التعــابير الجبريــة. هــذه التجربــة الوليــة‬
‫انتجت قائمة من متطلبات اللغــة مـن اهمهــا التعـابير الشـرطية، و العوديـة.‬
‫هذه المتطلبات لم تكن موجــودة فــي اي لغـة برمجــة فـي ذلـك الزمــان حــتى‬
‫اعلى اللغات مستوى حينذاك و هي فورتران.‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫تعود بدايات العمــل علــى ليســب الــى العــام 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‬‬
‫خصائص اللغة :‬
‫•لغة برمجة وظيفية‬
‫•لغة برمجة متعددة الساليب في البرمجة : ميتا، اجرائية ..‬
‫•جامع قمامة مبني داخل اللغة‬
‫• العتمـاد علـى العوديـة : و هـو مبـدا تسـتمد منـه ليسـب قـوة كـبيرة‬
‫خاصة في جانب الذكاء الصطناعي.‬
‫•طريقة الكتابة ديناميكية ، قوية‬
‫•كل شيء في ليسب قائمة‬
‫• متوفرة كلغة تفسيرية و كلغة مترجمة‬
‫اهم مجالت التطبيق :‬
‫سيطرت ليسب سيطرة تامة على مجال الذكاء الصطناعي لمدة تفوق الربع‬
‫قرن و الى الن تعتبر اكثر لغة انتشارا في مجال برمجة الذكاء الصطناعي‬
‫بالضافة الى ذلك فليسب تعتبر رائدة اللغات في مجال البرمجة الوظيفية .‬
‫• الذكاء الصطناعي:‬
‫• الروبوتات‬
‫• محركات اللعاب‬
‫• التعرف على النماط‬
‫• نظم ادارة الدفاع الجوي.‬
‫• ادارة و معالجة القوائم.‬
‫• تستخدم كلغة اكاديمية للتدريس في الجامعات ) البرمجة الوظيفية(‬
‫مثال كود ‪:Hello world‬‬
‫)( ‪(DEFUN HELLO-WORLD‬‬
‫)))‪(PRINT (LIST 'HELLO 'WORLD‬‬
‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫دليل لغات البرمجة )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‬‬
‫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‬‬
‫اهم التطبيقات :‬
‫في الوقت الحاضر تعتبر بايثون لغة برمجــة متعــددة الغــراض و لكــن مــن‬
‫اكثر استعمالت بايثون :‬
‫1. برمجة برامج لينكس‬
‫2. سكربتات ادارة النظام‬
‫3. التعامل مع قواعد البيانات‬
‫4. برامج الويب‬
‫مثال برمجي :‬
‫:)(‪>>> def hello‬‬
‫"!‪...print "Hello, World‬‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫دليل لغات البرمجة )7( :: لغة البرمجة فورتران‬
‫لغة البرمجة : ‪Fortran‬‬
‫تعتبر فورتران واحدة من اقدم لغات البرمجة . قام بتطويرها مجموعــة مــن‬
‫المبرمجين في ‪ IBM‬بقيادة جون باكوس ، حيث كــان اول ظهــور لهــا فــي‬
‫العــام 7591. جــاء اســم فــورتران مــن دمــج اختصــار كلمــتي “ترجمــة‬
‫الفورمــول” ، لن الهــدف الساســي كــان تســهيل عمليــة كتابــة المعــادلت‬
‫الرياضية في الكواد البرمجية.‬
‫فوتران تحتل مكانة خاصة بين لغات البرمجة لنهــا تعتــبر اول لغــة برمجــة‬
‫عالية المستوى بالضافة الى استخدامها اول مترجم على الطلق.‬
‫قبل ظهور فورتران كان على المبرمجين ان يبرمجوا باســتخدام اســمبلي و‬
‫التي كــانت تحتــاج الــى مجهــود مظنــي فــي الكتابــة اضــف الــى ذلــك عمليــة‬
‫تصحيح الخطاء التي كانت تحتاج مجهودا مضاعفا .‬
‫عليه ، كان الهــدف انشــاء لغــة برمجــة ســهلة التعلــم ، مناســبة للعديــد مــن‬
‫التطبيقات ، غير معتمدة على الة معينة مع التمتع بقدرات عالية فــي مجــال‬
‫الرياضيات .‬
‫مــع كــل هــذه المزايــا اســتطاع المــبرمجون ان يــبرمجوا باســتخدام فــوتران‬
‫005% اسرع من البرمجـة باسـتخدام اسـمبلي الشـيء الـذي اتـاح فرصـة‬
‫اكبر للتفكير في حل المشاكل بدل من كتابة الكواد و صيانتها .‬
‫اذا فورتران لها الفضل في انشاء نظرية الترجمة في علوم الكمبيوتر.‬
‫لكن مع التطور ظهرت مشكلة تعدد اصــدارات فــوتران ممــا حــدى المنظمــة‬
‫المريكيــة للمعــايير الــى اصــدار معــايير موحــدة فــي العــام 6691 عرفــت‬
‫بفــورتران 66 لحقهــا اصــدار فــورتران 77 فــي العــام 8791 و اصــدار‬
‫فورتران 09 في العام 0991 مع مزيد من الضــافات و المزايــا لهــذه اللغــة‬
‫العريقة.‬
‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫اهم اللغات التي تأثرت بفورتران :-‬
‫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‬‬
‫اهم التطبيقات :‬
‫فورتران قوية جدا في عدة مجالت ، اهمها :-‬
‫1. برامج معالجة المعادلت الرياضية .‬
‫2. البرامج الرياضية ، العلمية ، الحصائية ، و الهندسية .‬
‫مثال برمجي هيلو ورد :‬
‫'‪WRITE(6,*)'Hello world‬‬
‫‪STOP‬‬
‫‪END‬‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫دليل لغات البرمجة )8(:: لغة البرمجة ‪Algol‬‬
‫لغة البرمجة : ‪Algol‬‬
‫تعتـبر لغـة ‪ ) Algol‬اختصـار لكلمـتي “‪ALGOrithmic Language‬‬
‫“( واحــدة مــن اللغــات عاليــة المســتوى المخصصــة للبرمجــة العلميــة و‬
‫الحسابية . بدات في العام 0591 ، حيث طرحــت علــى شــكل تقريــر بعنــوان‬
‫الجول 85 و تطورت من خلل التقارير الى الجول 06 ثم 86 .‬
‫تم تصميم اللغة من قبل لجنة عالمية لكي تصبح لغة عالية المستوى . و قـد‬
‫تم طرح مشكلة النتقالية في تطــوير البرامــج مــن خلل اول اجتمــاع للجنــة‬
‫في مدينة زوريخ. و قد جعلت خاصية النتقاليــة و عــدم العتمــاد علــى الــة‬
‫معينة ، المصممين اكثر ابداعا و لكن في نفس الوقت جعلت عملية التطبيق‬
‫اكثر صعوبة .‬
‫و علــى الرغــم مــن عــدم وصــول ‪ Algol‬الــى مســتوى عــالي مــن الشــعبية‬
‫التجارية كما حصل لفورتران و كوبول ، ال انها تعتبر اهم لغة في عصــرها‬
‫من ناحية تأثيرها القــوي علــى اللغــات القادمــة . نظــام المفــردات و الهيكــل‬
‫النحوي الخاص بـ ‪ Algol‬اصبح شديد الشهرة لدرجة انــه فعليــا جــل لغــات‬
‫البرمجة يقال عنها " مشابه لـ ‪. "Algol‬‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫اهم اللغات التي تأثرت بـ ‪-: 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‬‬
: ‫مثال برمجي هيلو ورد‬

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
‫دليل لغات البرمجة )9( :: كوبول‬
‫لغة البرمجة : ‪Cobol‬‬
‫تعتبر كوبول واحدة من اوائل لغات البرمجة عالية المستوى . تــم تطويرهــا‬
‫في العام 9591 من قبل مجموعة من محترفي الكمبيوتر و منذ ذلك خضعت‬
‫اللغة للعديد من التعديلت و التحسينات. و لحل مشـكلة عــدم التوافقيـة بيـن‬
‫اصــدارات كوبــول المتعــددة قــامت المنظمــة الوطنيــة المريكيــة للقياســات‬
‫باصدار نسخة موحدة للغة في العام 8691، حيث عرف هذا الصــدار باســم‬
‫‪ . ANS COBOL‬و مع العام 4791 قامت المنظمة مــرة اخــرى باعــادة‬
‫طرح نسخة معدلة من كوبول تحتوي على المزيــد مــن المزايــا و الضــافات‬
‫الجديدة. و تكــررت هــذه العمليــة ايضــا فــي العــام 5891 . و فــي الصــدارة‬
‫الرابعة التي عرفت باسم كوبول 79 تم اضافة خصائص البرمجة الكائنيــة .‬
‫و يوجــد الن العديــد مــن المترجمــات لكوبــول علــى الرغــم مــن محــاولت‬
‫التوحيد في هذا المجال.‬
‫اهم اللغات التي تأثرت بها كوبول:‬
‫•‪FACT‬‬
‫•‪COMTRAN‬‬
‫•‪FLOW-MATIC‬‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫لغات تأثرت بكوبول :‬
‫•‪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‬‬
: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
‫دليل لغات البرمجة )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‬‬
‫في شتاء 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‬‬
‫خصائص اللغة :‬
‫1. تعمل على اغلب نظم التشغيل‬
‫2. مخصصة لتطوير الويب‬
‫3. كود بي اتش بي مضمن داخل وسوم الـ ‪. HTML‬‬
‫4. سهلة التعلم.‬
‫5. غنية بالدوال الكثيرة المبنية داخل اللغة.‬
‫6. اسلوب كتابة ديناميكي ، ضعيف.‬
‫7. لغة مفسرة‬
‫اهم مجالت التطبيق :‬
‫•بل شك اهم مجال لبي اتش بي هو قوتها فـي مجـال تطـوير مواقـع و‬
‫تطبيقات الويب.‬
‫•كما يمكن انشاء برامج ذات واجهة رسومية خاصة بسطح المكتب.‬
‫مثال كود ‪:Hello world‬‬
‫‪<?php‬‬
‫;’‪echo ‘Hello world‬‬
‫>?‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫دليل لغات البرمجة )11( :: ايفل‬
‫لغة البرمجة :‪Eiffel‬‬
‫لغة البرمجة ايفل من انشـاء برتنـارد ميـر و مـن تطـوير شـركته ” هندسـة‬
‫البرامج التفاعلية” سابقا ، بدا العمــل عليهــا فــي 5891 و كــان اول ظهــور‬
‫لها في العام 6891. و سميت بايفل تيمنــا بجوســتاف ايفــل المهنــدس الــذي‬
‫صمم برج ايفل المشهور . و يضيف مطوروا هذه اللغة ان باستخدامك هــذه‬
‫اللغة في مشاريعك ستتمكن من انجاز المشاريع في وقتهــا و ضــمن الطــار‬
‫المالي المرصود كما حدث تماما في بناء برج ايفل !..‬
‫ايفل لغة تعنى بالجودة و الكفاءة و قابلية الستفادة من الكــود فــي مشــاريع‬
‫لحقة ، اضافة الى انها قدمت مباديء برمجية جديدة وجدت طريقهــا لحقــا‬
‫الى لغات البرمجة المشهورة اليوم مثل الجافا .‬
‫اهم اللغات التي تأثرت بها ايفل :‬
‫•‪Ada‬‬
‫•‪Simula‬‬
‫•‪Z‬‬
‫لغات تأثرت بـ ايفل :‬
‫•‪Java‬‬
‫•‪#C‬‬
‫•‪Ruby‬‬
‫•‪D‬‬
‫•‪Lisaac‬‬
‫•‪Sather‬‬
‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫خصائص اللغة :‬
‫1. تعمل على اغلب انظمة التشغيل‬
‫2. لغة برمجة كائنية بحتة‬
‫3. تدعم التكرار و التعدد في التوارث‬
‫4. اسلوب الكتابة ثابت ، قوي‬
‫5. لغة مترجمة‬
‫6. التوثيق اللي‬
‫7. البرمجة بالعقد ‪design by contract‬‬
‫اهم مجالت التطبيق :‬
‫•انظمة التصالت‬
‫•التدريس الكاديمي‬
‫•النمذجة الولية السريعة‬
‫•البرامج التجارية‬
‫•برمجة اللعاب‬
‫•البرامج الطبية‬
‫•الطيران‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
: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
‫دليل لغات البرمجة )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‬‬
‫•3-‪Modula‬‬
‫•‪Modula-GM‬‬
‫خصائص اللغة :‬
‫1. تعمل على اغلب انظمة التشغيل‬
‫2. لغة برمجة امرية )الزامية( ، تنظيمية ، تعتمد الوحدات ) موجلر(‬
‫3. ميزة الوحدات اعطتها قوة كبيرة في تطوير المشاريع العملقة‬
‫4. اسلوب الكتابة ثابت ، قوي‬
‫5. لغة مترجمة‬
‫6. القدرة على البرمجة العالية و المنخفضة المستوى .‬
‫7. تعتبر سهلة التعلم بسبب صغر قاموسها النحوي.‬
‫اهم مجالت التطبيق :‬
‫•برمجة النظمة‬
‫•البرمجة المتزامنة‬
‫•برمجة النظمة المضمنة ) المدمجة(‬
‫•هندسة البرامج‬
‫•التعليم‬
‫•البرمجة الصوتية‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
: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
‫دليل لغات البرمجة )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‬‬
‫اهم اللغات التي اثرت على روبي :-‬
‫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‬‬
‫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‬‬
‫دليل لغات البرمجة )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‬‬
‫اهم اللغات التي تأثرت بباسكال :-‬
‫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‬‬
‫3-احتوائها على مجموعة جيدة من قوالب البيانات المهيكلة مثــل : القــوائم‬
‫و الريكوردز و الـ ‪. Sets‬‬
‫4 -دعــم البرمجــة الهيكليــة : و هــذا يتحصــل مــن خلل اســتخدام البرامــج‬
‫الضمنية او ما يعرف بالبروسيجرز و الفانكشن.‬
‫اهم التطبيقات :‬
‫كما اشرنا سابقا فالمجال الهم لباسكال هو بيئة التعليم . هــذه اللغــة اساســا‬
‫لم تصمم ال لهذا الغرض و هي الى الن خيار جيد لتعليم البرمجـة الهيكليـة‬
‫و لكن ما جعلها تفقد مكانها فـي بدايـة التسـعينات هــو ازديـاد شـعبية لغـات‬
‫البرمجة الشيئية مثل ‪ ++C‬و جافا و سمولتولك و بدء الجامعات و الكليات‬
‫تدريس مفاهيم هذه النوعية مـن البرمجـة . و لكـن تجـدر الشـارة الـى انـه‬
‫للمهتمين بالبرمجة الشيئية يوجد بديل باســم اوبجكــت باســكال و قــد برمــج‬
‫برنامج سكايب المشهور به ، و ليس الكلم عن هذا الموضوع .‬
‫مثال برمجي :‬
‫;‪program HelloWorld‬‬
‫‪begin‬‬
‫;)'‪writeln('Hello World‬‬
‫.‪end‬‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫دليل لغات البرمجة )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‬‬
‫اهم اللغات التي اثرت على 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‬‬
‫اهم التطبيقات :‬
‫1/‪ Pl‬كــانت تتمتــع بشــعبية كــبيرة فــي جــانب ادارة العمــال و التطبيقــات‬
‫العلمية. و كانت اللغة الرئيسية للتدريس في جامعة ميشيغان ديربورن لمدة‬
‫من الزمن . اما في الوقت الحاضر فشــعبيتها قلــت كــثيرا طبعــا ) و لكنهــا ل‬
‫تزال تستخدم( بسبب اللغات الجديدة و المفــاهيم الحديثــة . و مــن الشــركات‬
‫الــتي اســتخدمت 1/‪ Pl‬شــركة فــورد موتــورز المعروفــة و شــركة مــارثون‬
‫النفطية .‬
‫مثال برمجي :‬

‫;)‪Hello2: proc options(main‬‬
‫;)'!‪put list ('Hello, world‬‬
‫;2‪end Hello‬‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫دليل لغات البرمجة )51( :: هاسكل‬
‫لغة البرمجة : هاسكل‬
‫بعد اصدار لغة البرمجة ‪ Miranda‬في العام 5891 ، زاد الهتمــام بلغــات‬
‫البرمجة الوظيفية الكسولة . فمع العام 7891 ارتفع عــدد اللغــات الوظيفيــة‬
‫الصرفة الى اكثر من 21 لغة . طبعــا مــن هــذه اللغــات كــانت ميرنــدا الكــثر‬
‫اســـتخداما و لكنهـــا لـــم تكـــن مجانيـــة بـــل مملوكـــة لشـــركة ‪Research‬‬
‫‪ . Software‬لـــذلك فـــي مـــؤتمر اللغـــات البرمجيـــة الوظيفيـــة و هندســة‬
‫الكمبيوتر )78 ‪ (FPCA‬و الذي تم عقده في بورتلند اوريجون ، تم عقــد‬
‫اجتماع ابدى فيه المشاركون ضرورة انشاء لجنة لتعمل على انشاء معايير‬
‫مفتوحة لهذه اللغات .‬
‫و مع العام 0991 تـم النتهــاء مــن تعريــف هاســكل 1 . و فـي العــام 7991‬
‫تـوجت الجهـود بظهـور هاسـكل 89 الـتي وفـرت اصـدار ثـابت ، خفيـف و‬
‫متنقل من اللغة ، بالضافة الى مكتبة لغــرض التعليــم . و قــد رحبــت اللجنــة‬
‫بانشــاء الضــافات و البــدائل لهاســكل 89 عــن طريــق اضــافة الخصــائص‬
‫التجريبية .‬
‫لغة هاسكل تتطور بشكل سريع جدا و يعتبر المــترجم ” جلســكو ” ‪GHC‬‬
‫هو الكثر شيوعا في الســتخدام . يــذكر ان ســبب التسـمية هــو تيمنــا بعــالم‬
‫الرياضيات و المنطقي المريكي هاسكل كوري.‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
: 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
‫خصائص اللغة :‬
‫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‬‬
‫دليل لغات البرمجة )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‬‬
‫في هذا الصدار اصبح هناك امكانيــة انشــاء ازرار مــن تصــميم المســتخدم‬
‫بالضافة الى القدرة لبنــاء البرامــج مباشــرة الــى الكــود الــبرمجي التنفيــذي‬
‫لوينـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــدوز .‬
‫مع العام 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‬‬
‫اهم خصائص اللغة :‬
‫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‬‬
‫هناك امكانية لنشــاء برامــج عملقــة و معقــدة باســتخدام فيجــوال بيســك .‬
‫عليه فان اغلب استخدامات فيجــوال بيســك تقــع فــي برامــج وينــدوز ســواء‬
‫الصغيرة او الكبيرة .‬
‫مثال برمجي :‬
‫)(‪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‬‬
‫دليل لغات البرمجة )81( :: ‪JavaScript‬‬
‫لغة البرمجة : جافا سكربت‬
‫تم تطوير جافا سكربت بواسطة براندن ايك من شركة نتسكيب تحت مسمى‬
‫‪ ، Mocha‬و الذي تم تغييره لحقا الى ‪ livescript‬و في النهاية الى جافا‬
‫ســكربت . تــم اضــافة و تطــبيق جافــا ســكربت للمــرة الولــى فــي الصــدار‬
‫3‪ 2.0B‬من المتصفح العريق نتسكيب ) ديسمبر 5991(. و قد تســبب اســم‬
‫) جافا سكربت( الــى نــوع مــن المغالطــة فــي الربــط بينهــا و بيــن لغــة جافــا‬
‫المشهورة و اعزى البعض ذلك انه حركة تســويقية متعمــدة مــن نتســكيب .‬
‫في حقيقة المر جافا سكربت ليس لها علقة بلغة )جافا( من شركة صــن و‬
‫لكن الصفات المشــتركة بيـن اللغـتين كــثيرة . يظهـر هـذا التشـابه جليـا فـي‬
‫طريقة الكتابة و التي هي مشابهة للغة البرمجــة ســي ، اضــف الــى ذلــك ان‬
‫جافــا ســكربت تتبــع قواعــد التســمية علــى طريقــة جافــا. و قــد قيــل ان ســر‬
‫التسمية يكمن في صفقة بين نتسكيب و صــن حيــث تقــوم نتســكيب باضــافة‬
‫بيئة تشغيل جافا في متصــفحها الـذائع الصــيت وقتهــا. جافــا سـكربت تعتــبر‬
‫علمــة مســجلة لشــركة صــن و قــد تــم اســتخدامها تحــت ترخيــص لتقنيــات‬
‫مطورة من نتسكيب و موزيل .‬
‫المبــاديء الساســية فــي تصــميم اللغــة تــم اقتباســها مــن لغــتي ‪ Self‬و‬
‫‪.Scheme‬‬
‫و بسبب انتشار و نجاح جافا سكربت كلغة سكربت لطرف العميل في مواقع‬
‫الــويب قــامت ميكروســوفت بانشــاء اصــدارة متوافقــة خاصــة بهــا اســمتها‬
‫‪ Jscript‬لتتفادى مسائل الترخيص. و قد تم اضافة ‪ Jscript‬في الصدار‬
‫الثالث من انترنت اكسبلورر .‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫قامت نتسكيب بتقــديم جافــا الــى ‪ 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‬‬
‫اهم خصائص اللغة :‬
‫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‬‬
: ‫نموذج برمجي‬
<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
‫دليل لغات البرمجة )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‬‬
‫فــي العــام 0991 تــم اصــدار ‪The annotated C++ Reference‬‬
‫‪ ، Manual‬و الذي اصبح القاعـدة لنشـاء المعيـار فـي المسـتقبل . و مـن‬
‫الضافات المتأخرة نذكر : القوالب ، الستثناءات ، المساحات ..‬
‫و مع تطور لغـة الســي++ تطــورت معهــا مكتبــة قياســية و قــد كــانت اولــى‬
‫المكتبات اضافة هي مكتبة ‪ ، I/O Stream‬و من اهم المكتبــات الن هــي‬
‫مكتبة القالب القياسي .‬
‫و ل تــزال ســي++ تحظــى بشــعبية منقطعــة النظيــر فــي اوســاط المحافــل‬
‫البرمجية على الرغم من قدمها..‬
‫فلسفة تصميم سي++:‬
‫1 - ان تكون لغــة متعــددة الغــراض ، ثابتــة فــي الكتابــة ، ذات كفــاءة مثــل‬
‫السي و متنقلة مثل السي.‬
‫2 - ان تكون ذات نماذج متعددة : اجرائية ، كائنية ، تجريد البيانات …‬
‫3-ان تكون ذات توافق مع لغة السي‬
‫4-تجنب الخصائص التي تعتمد على منصة معينة‬
‫5-مصممة للعمل بدون الحاجة لبيئة برمجة معقدة‬
‫6 -اتاحــة الخيــارات للمبرمــج ، حــتى لــو كــانت هنــاك احتماليــة ان يخطيــء‬
‫المبرمج في الختيار.‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
: ++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
‫خصائص اللغة :‬
‫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‬‬
‫دليل لغات البرمجة )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‬‬
‫بعض اللغات التي اثرت على ‪: 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‬‬
‫اهم التطبيقات :‬
‫‪ 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‬‬
‫دليل لغات البرمجة )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‬‬
: ‫لغات اثرت على سلف‬
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
‫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
‫انت تعرف الكثير ! اكتب برامجك الشخصية !.‬

‫الكثير منا يعرف مباديء البرمجة و الكثير منا قد يكون تخرج من الجامعة‬
‫بدرجة بكالريوس في تقنية المعلومات او حتى دبلوم و لكيين فييي النهاييية ل‬
‫يستطيع ان يبرمييج برنامجييا متكييامل او لنقييل اي مشييروع برمجييي فنحيين‬
‫على ما نملكه من معرفة ينقصنا معرفة كيفييية دمييج مييا تعلمنيياه فييي وحييدة‬
‫واحدة لنخرج بشيء جميل ..‬
‫لنأخذ مثال : شييخص يعييرف اواميير قواعييد البيانييات و لكنييه ل يسييتطيع ان‬
‫ينشيء برنامج مدير مقالت .. لماذا ؟..‬
‫اول ماذا نعني ببرنامج متكامل؟‬
‫هنا نحن ل نقصد متكامل بمعنى كامل ل نقص و ل عيب فيه فل يوجد مثييل‬
‫هذا البرنامج الييى الن ، و لكيين مييا نقصييده انييه متكامييل بحيييث انييه يييؤدي‬
‫مجموعة من الوظائف المختلفة ، المبرمجيية بمهييارات مختلفيية ، المييؤطرة‬
‫في اطار واحد سهل الستخدام .‬
‫لهذا يمكن ان نرجع سبب عجز الكثير منا عن برمجة برنامييج متكامييل الييى‬
‫عدم اللمام بكل جوانب تطوير البرامج التي ل تشييمل البرمجيية فحسييب بييل‬
‫التخطيط و الختبييار و التصييحيح و التعامييل مييع المسييتخدم ..الييخ . فكتابيية‬
‫الكواد ما هي ال جزء من عملية البرمجة و هي الجزء الممتع و لكيين مييع‬
‫تطوير برنامج متكامل نحتاج الى اكييثر ميين المتعيية نحتيياج الييى الروتييين و‬
‫التعامل مع اشياء ل يلحظها المستخدم النهائي و لكنها تعمل بصمت خلف‬
‫الستار ..‬
‫هذه الشياء المملة تشمل مثل رسم الواجهة الرسييومية و التعامييل ميع كييل‬
‫الحييداث بشييكل مناسييب و التعامييل مييع الخطيياء و ليييس تجاهلهييا .. فميين‬
‫السهل ان نأخذ قيمة من المستخدم و لكن المشكلة و الملل تبدا حينما نريييد‬
‫ان نتأكد من ان المستخدم ادخل القيمة المناسبة من حيث النوع مثل ..‬
‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫اذا نلحظ ان برنامج ذو واجهة رسومية بسيط يأخذ عدد ميين المسييتخدم و‬
‫يقسمه على اخر بدل ان يكون مهمية سييريعة و سييهلة اصييبح امييرا ممل و‬
‫رتيبا حيث سنكتب الكثير من السطر البرمجية لرسم الواجهة و التأكد ميين‬
‫ظهورها بشكل صحيح ثم نتأكد من ان المستخدم ادخل رقمييا و ليييس حرفييا‬
‫و نتأكد ان الرقم المقسوم عليه ليس صفرا ..الخ.‬
‫عودا على بدء ، الكثير منا يجهل ان ما يملكه من معلومات بسيييطة بنظييره‬
‫هي كافية جدا لبناء برنامج متكامل ، المسألة تكميين فييي معرفيية الواميير و‬
‫المهارات المطلوبة و متى استخدمها ..‬
‫لقييد واجهييت الكييثير ميين الطلب يلقييون بيياللوم علييى المناهييج الدراسييية و‬
‫يتهمونها بالنظرية المحضة و لكنهم يغفلون ان ما تعلمييوه كيياف جييدا لبييدء‬
‫مشاريعهم الخاصة ، هذا ل يعني ان المر بسيط جدا و ل يحتيياج لي جهييد‬
‫و لكن بشكل عام المشروع بشكله الكلي يمكن كتابته بهذه الساسيات و قد‬
‫نحتيياج الييى البحييث و السييؤال و السييتعانة بمصييادر خارجييية فييي بعييض‬
‫الحيان و هذا هو المطلوب حيث سنكتسب مهارات جديدة قد ل نسييتخدمها‬
‫في هذا المشيروع باليذات و لكين تعيود بيالنفع فيي مشياريع اخيرى فعنيدما‬
‫ابحث عن دالة تقوم بعمل معين من خلل بحثي قد اقرا عن دالت مشييابهة‬
‫او حتى مختلفة استرجعها في وقت لحق ان احتجتها ..‬
‫و سنحاول في هذا الموضوع السير خطوة خطييوة لكتابيية برنامييج بسيييط و‬
‫لكيين سيينحاول ان نجعلييه متكييامل بحيييث نييرى الخطييوات الساسييية الييتي‬
‫نحتاجها لبناء برنامجنا الشخصي .‬
‫1- حدد فكرة البرنامج !.‬
‫هذه المسألة بديهييية الصييعوبة الييتي نجييدها فييي كتابيية مواضيييع التعييبير و‬
‫النشاء تكمن في عدم قدرتنا على تحديد موضوع محدد و شيق و هذه‬
‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫العقبيية اي عقبيية الخطييوة الولييى كييبيرة جييدا فالشيياعر اعطييه فقييط مطلييع‬
‫القصيدة و سيكملها تلقائيا ..‬
‫بالمثييل ل يمكيين ان نبرمييج بييدون ان نعييرف ميياذا نريييد بالضييبط و مييا هييو‬
‫الهدف الذي نرجوه ..‬
‫من الشياء التي تجدر الشارة اليها هنييا هييي ان الفكييرة ل يجييب ان تكييون‬
‫فريدة من نوعها و لم يسبق لحد ان قام بها ، المسألة ببساطة ابحييث عيين‬
‫فكرة او مشروع تحيس بحاجية شخصيية ليه مثل هنياك الكيثير مين براميج‬
‫مدراء الخبار المتوافرة و لكن منذ فترة و لييدي فكييرة عمييل برنامييج مييدير‬
‫اخبار يكون تركيزه فقييط علييى نشيير مقييالتي علييى شييكل مواضيييع صييالحة‬
‫للطباعة مباشرة . الكثير من البرامج تبدا من حاجة المبرمج الشخصية لها‬
‫و من ثم قد تكبر لشيء هو لم يتييوقعه او ل تكييبر المهييم ان البرنامييج يسييد‬
‫حاجية شخصيية ليي .. مين المثلية اليتي دائميا احيب ان استشيهد بهيا هيو‬
‫برنامج )كومبايز ايكون( هو برنامج صغير و بسيط جدا و لكيين يجعييل ميين‬
‫حياة مستخدم لينكس اكثر سييعادة ! الكييثير منييا ل يعييرف كيييف يغييير مييدير‬
‫النوافذ في جنوم و مع انها ليست بتلك الصعوبة و لكن هذا البرنامج يجعل‬
‫من العملية مجرد نقرة فأرة! ففكرة البرنامييج هييي تسييهيل عملييية روتينييية‬
‫للمستخدم العادي و البرنامج ناجح نجاحا جميل ..‬
‫التطبيق ) فكيرة البرناميج( : فييي هيذا الموضييوع مبيدئيا قيررت ان نبرميج‬
‫برنامج عميل لتويتر على سطح المكتب ، و لكنييي عييدلت برايييي و اخييترت‬
‫ان يكون قاموسا او لنقل برنامج ترجمة .‬
‫2- خطط للبرنامج مسبقا : فبدل من انشاء جداول قاعدة البيانييات مباشييرة‬
‫هكذا و من ثم اعادة كتابتها كلما اردت اضافة ميزة بسيييطة و اعييادة كتابيية‬
‫الكواد البرمجية التابعة لهذه الجداول ، خطط مسبقا للميزات و الختيارات‬
‫المطلوبة و ستقل الحاجة الى التعديل بعد ذلك .‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫ل بأس باستخدام برامج تخطيط جداول قواعد البيانات و طريقة اتصييالها و‬
‫ايضا استخدام ‪ UML‬لتخطيط سير البرنامج او تخطيط الكلسات و طريقة‬
‫تفاعلها . و لكن ل يجب ان نعقد المسألة اكثر من اللزم فاذا كان البرنامييج‬
‫بسيط فعل فل داعي لضاعة الكثير من الوقت في هذه المرحلة .‬
‫ايضا يمكن استخدام التخطيييط الييدوي بقلمييك و دفيتر ملحظاتييك !. و هييذه‬
‫طريقتي المفضلة خاصة اذا كان البرنامج صييغير او متوسييط الحجييم لننييي‬
‫اجييد متعيية فييي ذلييك فييالمهم ان نجعييل ميين العملييية متعيية خاصيية اذا كييان‬
‫المشروع شخصي و ل ينتظر منه ربح مادي مقابل لتعابك !.‬
‫التطبيق )التخطيط( :‬
‫طبعا هناك الكثير من الخيارات تعتمد على نقاط تلييي هييذه النقطيية ليذلك ليين‬
‫ندخل في تفاصيل المخطط الن و لكن بما لدينا من معلومات الن يمكننا ان‬
‫نرسم مخطط بسيط لسير البرنامج باسييتخدام ‪ UML‬او هكييذا علييى طريقيية‬
‫الخوارزميات :‬
‫حدد اللغات المطلوبية للترجمية -< اطليب النيص مين المسيتخدم -<اتصيل‬
‫بقاعدة البيانات -< ارجع قيمة النص -< اعد العملية‬
‫بسيط اليس كذلك ؟ يبدو ذلك في بداية المر !.‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫3- حدد ادواتك و اعرف قدراتك :‬
‫تحديد الدوات المناسبة للمهام المناسبة هيو مرحليية حساسيية فيي بنياء اي‬
‫مشروع ..‬
‫ما هي اللغة البرمجية المناسبة؟‬
‫ما هو الي ‪ IDE‬المناسب ؟‬
‫ما هي المكتبات المساعدة التي ساحتاجها ؟‬
‫ما هي المصادر المتوافرة للدعم ؟‬
‫ما هي الية التعامل مع المستخدم ؟‬
‫ما هي قاعدة البيانات المستخدمة ؟‬
‫..الخ‬
‫هذه السئلة حساسة جدا و تضمن الى حد كبير ان ل تقع في متاعب كثيرة‬
‫في مرحلة التطبيق .. و تختلف الجابات بالطبع حسب متطلبييات المشييروع‬
‫البرمجي ..‬
‫السييؤال الول مثل فييي حييال كييان المشييروع تطييبيق ويييب هييل سييي خيييار‬
‫مناسييب ؟ فييي اغلييب الحيييان ل .. فييي حييال برمجيية برنامييج ويييدجت هييل‬
‫) هاسكل ( مناسبة ؟ ل اعتقد ذلك.. ‪ php‬و بيرل و روبي خيييارات افضييل‬
‫في الحالة الولى و ‪ javascript‬في الحالة الثانية ..‬
‫السؤال الثالث ما هي المكتبات التي سأحتاجها ؟ كلما كان البرنامج اكييبر و‬
‫يحتاج الى اشياء معقدة كلمييا كييانت الحاجيية الييى المكتبييات اكييثر .. قبييل ان‬
‫ابدء في مشروع كتابة برنامج سطح مكتب يجب ان ادرس الخيييارات الييتي‬
‫تقدمها لي لغة البرمجة هل توفر لي ‪.. Wxwidgets ، GTK‬الخ ؟ اي‬
‫مكتبة سأختار هل سيكون برنامجي لويندوز او لينكس او ماك ؟ ..‬
‫ما هي المصادر المتوافرة ؟ هل اذا واجهتني مشكلة سأجد من يسيياعدني ؟‬
‫هل تتوافر مصادر غنية ؟ هل يوجد توثيق كامل؟ …‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫ل تنسى ان تعرف قدراتك بعض المكتبات ليست مجرد مكتبات بل عالم فييي‬
‫حد ذاتها فتوافر مكتبيية ‪ sdl‬ل يعنييي اننييي اسييتطيع كتابيية لعبيية فقييط ميين‬
‫خلل قراءة التوثيق بييل تتعييدى الييى مهييارات و تقنيييات و مفيياهيم اضييافية‬
‫تحتاج الى وقت كبير لتعلمها يييوازي ربمييا الييوقت الييذي قضيييته لتعلييم لغيية‬
‫البرمجة نفسها !.‬
‫التطبيق )حدد ادواتك ( :‬
‫سأكتفي بالجابة عن السييئلة المطروحيية سييلفا فقييط ، و ذلييك علييى حسييب‬
‫حاجة برنامجنا .‬
‫ما هي اللغة البرمجية المناسبة؟‬
‫بما انني اجيد بيرل و المشروع شخصييي و اللغيية مناسييبة لهكييذا نييوع ميين‬
‫المهام فل بأس من استخدامها .‬
‫ما هو الي ‪ IDE‬المناسب ؟‬
‫‪ Padre + wxGlade‬و ذليييك لن ‪ glade‬سيرسيييم لنيييا الواجهييية‬
‫الرسومية و بادري سيساعدنا في تطييوير اكييواد بيييرل خاصيية انييه برنامييج‬
‫مكتوب بها و بمكتبة ‪! wx‬‬
‫ما هي المكتبات المساعدة التي ساحتاجها ؟‬
‫سيينحتاج بعييض المكتبييات و لكيين المهييم الن هييو مكتبيية ‪ wxPerl‬الييتي‬
‫سييتوفر لنييا امكانييية انشيياء الواجهيية الرسييومية ، طيييب لميياذا ل نسييتخدم‬
‫‪ GTK‬او ‪ QT‬او حتى سوينج ؟!..‬
‫هنا نحتاج ان نعمل دراسة سريعة قبييل اتخيياذ القييرار فمكتبيية كيييوت مكتبيية‬
‫ممتازة جدا و لكن في بيرل هي خيار سيء لقليية المصييادر و قييدم الصييدار‬
‫المتوافر .. ‪ GTK‬ايضا ممتازة لو كنا سنكتفي بلينكس و لكيين ربمييا احييب‬
‫ان انقيل البرناميج الييى وينيدوز و تشيغيل هيذه المكتبيية هنياك لييس بييالمر‬
‫السييهل .. سييوينج ؟ سيينحتاج الييى مكتبييات اضييافية كييثيرة لكييي نسييتطيع‬
‫تشغيلها من بيرل فل داعي لكل هذا .. ‪ Tk‬افضل المكتبات المتوفرة لييبيرل‬
‫من ناحية التوثيق و لكنها ل تدعم العربية !. اذا الخيار الفضل هو‬
‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫‪ wxPerl‬فالتوثيق موجود و المكتبة قوية جييدا و متعييددة المنصييات فيي‬
‫حال رغبنا في تشغيلها في اي نظام تشيغيل لكيي تظهير و كأنهيا مين نفيس‬
‫برامج نظام التشغيل ..‬
‫ما هي المصادر المتوافرة للدعم ؟‬
‫بيرل ل يوجد لها دعم ميادي خاصية فييي عالمنيا العربييي ليذلك قيد ل تكيون‬
‫خيار مناسب للشركات هنا و لكن المصادر المتوافرة ممتازة جدا للمشاريع‬
‫الشخصية ميين كتييب و توثيييق و منتييديات و غييرف مسيياعدة و مجموعييات‬
‫بريدية ..‬
‫ما هي الية التعامل مع المستخدم ؟‬
‫سطر الوامر ؟ صفحات ويب؟ واجهة رسومية ؟ يبدو انكييم خمنتييم الخيييار‬
‫الثالث لننا تكلمنا عن المكتبة التي سنستخدمها !.‬
‫ما هي قاعدة البيانات المستخدمة ؟‬
‫فلت فايل ؟ مايسكوال ؟ اوراكل ؟! ‪ SQLight‬؟‬
‫يمكن اختيار الفلت فايل في المشاريع الصغيرة و المتوسطة و لكنها خيييار‬
‫سيء للمشاريع الكيبيرة و لين اختارهييا لكيي ل احتياج للكيثير مين السييطر‬
‫البرمجية لفتح و قفل و اغلق الملفات النصية ..‬
‫مايسييكوال ليين اسييتخدمها لن برنييامجي ل يحتيياج الييى سيييرفر فهييو ليييس‬
‫تطبيق ويب ..‬
‫اوراكل ليس لدي المال الكافي !.‬
‫‪ SQLite‬كنت ساستخدمها لو كنت ساصنع قاعدة الكلمات بنفسي و لكني‬
‫لني كسول سأستخدم قاعدة كلمات جاهزة !.‬
‫اذا الن لييدي خيييارين ان اسييتخدم قاعييدة بيانييات جيياهزة للكلمييات مثييل مييا‬
‫تييوفره ‪ Arabeyes‬و هييي ميين نوعييية الملفييات النصييية او ان اسييتخدم‬
‫قاعدة بيانات موجودة على الويب مثل ما توفره ‪BabelFish‬؟ و لكنه ل‬
‫ييييوفر اللغييية العربيييية اذا سييياختار ميييترجم جوجيييل الموجيييود عليييى :‬
‫‪http://translate.google.com‬‬
‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫4- رسم الواجهة الرسومية ‪: GUI‬‬
‫طبعييا يمكيين البييدء بعملييية كتابيية الكييواد و الييدوال الحقيقييية اول ثييم رسييم‬
‫الواجهة الرسومية خاصة لمن يحبون طريقة الختبار قبل البرمجيية و هييذا‬
‫ما فعلته انا عندما كنت اكتب الكواد التي سنستخدمها في هذا الموضوع و‬
‫لكن في المقالة هنييا فضييلت ان نرسييم الواجهيية الرسييومية بشييكل سييريع و‬
‫ننتهي منها اول ..‬
‫التطبيق :‬
‫اول و قبل كل شيء ارسم الواجهيية بيييدك كمييا تحييب ان تظهيير لحقييا لكييي‬
‫ترتاح في عملية وضع الشياء في اماكنها الصحيحة لحقا!...‬
‫هنا رسمي المتواضع ..:‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫بعدها يمكنني البدء في استخدام ‪ wxGlade‬للرسم الحقيقييي و ليين اتكلييم‬
‫عن هذه النقطة برجاء ان يشاهد المهتمييين الشيروحات اليتي عملتهيا لهيذا‬
‫البرنامج ..‬
‫5- ربط الواجهة الرسومية مع الكواد الحقيقية :‬
‫بعد رسم الواجهة الرسومية باستخدام برنامج ‪ wxGlade‬او اي برنامييج‬
‫تصميم واجهات مثييل ‪ Glade‬و ‪.. Tk builder‬الييخ نييأتي الييى مرحليية‬
‫الربط بين الواجهة و الكييود الييبرمجي … قبييل ان استرسييل يجييب ان انييوه‬
‫انني كنت من المعارضين لستخدام برامج رسم الواجهات الرسومية لنهييا‬
‫تضيف اكواد اضافية كثيرة يمكيين اختصييارها و لكيين الميييزة الييتي تجعلنييي‬
‫افضل استخدامها هو اول سرعة التصميم بالطبع فننتهي من هذه المرحليية‬
‫المملة بسرعة و ايضا توفيرها اليات جيدة لفصل الكود البرمجي عن الكود‬
‫المرئي و ذلك سواء باستخدام ملف وصفي منفصييل ) مثل ‪ (xml‬او حييتى‬
‫تضييمين الكييود الييبرمجي فييي الكييود المييرئي و لكيين بتييوفير اليييات مريحيية‬
‫لتحديث الكود المرئي بشكل منفصل عن الكود البرمجي .‬
‫نعود مرة اخرى ، انتهينا من تصميم الواجهة الرسومية و هكذا تبدو :‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫ماذا نفعل الن ؟‬
‫الخطوة الساسية الن هي ان نربط الواجهة بالكود و ذلك يتييم عيين طريييق‬
‫وضع متنصت ‪ (Action listener (handler‬لكل حدث ‪.. Event‬‬
‫طيب عندما اشاهد كل جزء من برنامجي اعرف انه يمكن ان تحدث احداث‬
‫كثيرة في برنامجي و لكن يمكنني فقييط الهتمييام بالحييداث الييتي لهييا تييأثير‬
‫مباشر على سير البرنامج .. مثل يمكننيي وضيع متنصيت لتحيرك المياوس‬
‫على منطقة الكتابة و عليه اخذ اكشن معين و لكن ل يوجد كثير جدوى من‬
‫فعل ذلك في برنامجنا الن ..‬
‫اذا سألخص اهم النقاط التي يجب ان اهتم بها كالتالي:‬
‫1 - سأضع متنصت للنقر على زر الخروج لنهاء كل عمليات البرنامج.‬
‫2- سأضع متنصت للنقر على زر ‪ Credit‬كي اظهر معلومات البرنامج.‬
‫3- سأضع متنصت لزر ‪ Swap‬و لكي يقوم باستبدال اماكن اللغتين .‬
‫4- سأضع متنصت لزر ‪ Tran‬و لكي يقوم بمهمة الترجمة و عرضها فييي‬
‫مكانها الصحيح .‬
‫ملحظات :‬
‫1 - الجزء الذي سيييظهر فيييه النييص المييترجم سيييتم اقفيياله بحيييث ل يمكيين‬
‫للمستخدم الكتابة فيه و لكن يمكنه النسخ منه و ايضا سيتم اظهييار رسييائل‬
‫الخطاء في هذا المكان.‬
‫2 - لدينا خيارات كثيرة في كيفية توفير الية اختيار اللغييات و لكيين سيينختار‬
‫‪ ComboBox‬لسهولته و لتوفيره المكان فهييو ل يأخييذ مكييان كييبير فييي‬
‫البرنامج و انما يتوسع فقط في حالت النقير علييه ليظهيير اللغيات المتييوفرة‬
‫) سنقوم باضافة 03+ لغة و لكن لن نضيف كل اللغات التي يوفرها جوجل‬
‫فبعضها الى الن في حالة تجريبية ( ..‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫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‬‬
$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
$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
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
$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
$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
$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
# 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
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
# 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
‫قد يسألني البعض الن كنت تدعي ان العملية ستكون سهلة و اننييا بمعرفيية‬
‫الساسيات يمكن ان ننشيء برنامج فما هذه الكواد الطويلة و المعقدة ؟..‬
‫و لكن في حقيقة المر ان استخدامنا لبرامج تصميم الواجهات وفر لنا هذه‬
‫المزايا :‬
‫1 - ازالية الحاجية اليى كتابية الكيواد الطويلية للوصيول اليى شيكل مبيدئي‬
‫للبرنامج ! خاصة مثل لو كانت المكتبة سوينج مثل .‬
‫2- تسهيل عملية اعادة ترتيب مواضع الشياء و رسمها.‬
‫3 - ازالة الحاجة الى حفظ خصائص العناصر المرئية و الحييداث المرتبطيية‬
‫بها . فأنا لست مضطر لن احفظ ما هي خصائص العنصر ) زر( و ما هييي‬
‫نوعية الحداث التي يستجيب لها.‬
‫4 - و اخيييرا الشيييء المهييم يزيييل عنييا الييى حييد كييبير عنيياء تعلييم المكتبيية‬
‫الرسومية خاصة فيما يتعلييق برسييم العناصيير و طريقيية العييرض، مثل هييذا‬
‫الكود الن ليس كل مبرمج بيرل يعرف كتابته بنفسييه و لكيين الن بسييهولة‬
‫يستطيع ان يعمل تطبيق لكل دالة فقط و ينتهي من البرنامج..‬
‫اذا الى الن نحن في الحقيقة لم نبرمج بل نصمم كأي برنامج تصييميم مثييل‬
‫‪ Gimp‬او فوتوشوب او فرونت بيج ...الخ. و اغلب المكتبييات الرسييومية‬
‫الن يتوافر لها عدة برامج تصميم تزيل هذا العبء عن المبرمج.‬
‫6- كتابة الكود الحقيقي ) تطبيق الدوال(:‬
‫مع هذه المرحلة يمكننا ان ان نقول بأن البرمجيية الحقيقييية بييدأت فمثل لييو‬
‫ان برنامجنا يقوم بعملييات حسيابية معقيدة فكيل ميا فعلنياه اليى الن مجيرد‬
‫تمهيد و البداية الفعلية هي في كتابة هذه المعادلت الرياضييية فييي الييدوال‬
‫الموجودة في البرنامج .‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫الن ، بما ان البرنامج ذو واجهة رسومية فهو يحتوي علييى دوال ل بييأس‬
‫بها افتراضيا و ذلك للتعامييل مييع كييل حييدث مهييم فييي البرنامييج . و بمييا ان‬
‫البرمجة الحدثية ل تبدا من اتجاه معين و ل تتبييع سييير عمييل ثييابت ) مثل‬
‫يمكن ان نبدا برنامج رسومي ما باختيار فتح ملف جديييد او يمكيين ان نبييدا‬
‫باستحضار ملف تم انشاؤه سابقا و من ثم تتييوالى الحييداث بشييكل مختلييف‬
‫في كل مرة تشغيل تقريبا.( ، فأنا شخصيا افضييل البييدء فييي تطييبيق الييدوال‬
‫التي :‬
‫1- ل تحتاج الى وقت و جهد طويل لنشائها‬
‫2 - ل تؤثر او تتفاعل مباشرة مع الحداث الخييرى فييي البرنامييج )او علييى‬
‫القل تتفاعل و تتأثر بشكل اقل من غيرها(.‬
‫و بالنظر الى برنامجنا يمكن ترتيب الدوال ) من القل الى الكثر( هكذا :‬
‫1- ‪onExit‬‬
‫2- ‪onCredit‬‬
‫3- ‪onSwap‬‬
‫4- ‪onTrans‬‬
‫النقطيية الييتي احييب ان اشييير اليهييا هنييا هييو ان الكييواد الييتي سييأكتبها فييي‬
‫التطبيق ليست بهدف تعليم لغيية البرمجيية بيييرل او مكتبيية ‪ wx‬و انمييا هييي‬
‫وسيلة لتجسيييد المبيياديء المجييردة و الفكييار فقييط فعليييه ل تهتييم عزيييزي‬
‫القاريء بكيفية كتابة المر المعين و لكن ركز على خطييوات الوصييول الييى‬
‫نتيجة معينة .‬
‫التطبيق )كتابة الكواد( :‬
‫1 - نبدا بدالية الخييروج و هيي دالية بسييطة مهمتهييا انهيياء جميييع عمليييات‬
‫البرنامج و الخروج بشكل سليم حسب طلب المستخدم :‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
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

-
‫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‬‬
‫,'‪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‬‬
‫** الدالة المساعدة ‪ : 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‬‬
‫ل مكان للفتراضات و مع السف كثير منا يترك هذه المرحلة اما لنه غير‬
‫مبالي او لنه ل يعرف او لنه ل يدرك اهميتها . ففي مثييال النييترنت هييذا،‬
‫ما سيحدث هو ان البرنامج عندما نطليب منيه الترجمية سيتصيل بيالنترنت‬
‫لثواني معدودة فاذا كان هناك اتصال جرت المور علييى احسيين مييا يييرام و‬
‫لكن لو كيان المسيتخدم غيير متصيل بالشيبكة فسيينهار البرناميج و يختفيي‬
‫هكذا بدون سابق انييذار بمجييرد النقيير علييى زر الترجميية . ربمييا البعييض ل‬
‫يهمه فهو يفترض ان المستخدم مدرك لوجييوب وجييود اتصييال قبييل تشييغيل‬
‫البرنامييج و لكيين مييع السييف هييذه نقطيية تحسييب علييى المبرمييج و تجعييل‬
‫برنامجه ناقصا و غييير احييترافي .. اذا دع عنييك الفتراضييات و تعامييل مييع‬
‫الخطاء …‬
‫7- التعامل مع الخطاء و الستثناءات :‬
‫قلنييا ان ميين الهمييية بمكييان ان يقييوم البرنامييج بالتعامييل مييع الخطيياء و‬
‫الستثناءات التي قد تحصل وقت تشييغيل البرنامييج ، و هييذا الميير هييو ميين‬
‫المور التي تمايز بين المبرمجين فكلمييا كييان المبرمييج مهتييم بالتفاصيييل و‬
‫معالجها كيان ذليك افضيل لبرنيامجه و لسيمعته كمبرميج . و فيي كيثير مين‬
‫الحيان تجاهل التعامل مع هييذه الخطيياء و السيتثناءات يجعييل الميبرمجين‬
‫ينظرون اليك كمبرمج مبتديء .‬
‫الن اين نبحث عن الخطاء و الستثناءات التي يمكن ان تحصل؟‬
‫في الغالب هناك حالتين يكثر جدا ظهور الخطاء و الستثناءات فيها :‬
‫1- التعامل مع النظام‬
‫2- التعامل مع المستخدم.‬
‫الحالة الولى مثالها عندما نحاول ان نفتح ملف : قييد تنجييح العملييية او ل‬
‫قد ل تنجح بسبب وجود قفل او صلحية معينة على الملف لذلك يجييب اخييذ‬
‫هذا المر بالحسبان و التعامل معه .‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫الحالة الثانية مثالها طلب قيمة من المستخدم : قد نكون نريييد قيميية رقمييية‬
‫لعمل حسابات مثل فيدخل المستخدم قيمة نصية ، عليه يجب ان نتأكييد ميين‬
‫القيمة المدخلة قبل الشروع في العمل عليها .‬
‫فييي النهاييية هنيياك انييواع ميين الخطيياء ل يمكيين التعامييل معهييا مثييل نفيياذ‬
‫المساحة من نظام التشغيل فلن يكون هناك مفسر لغة اصل كي يتعامل مييع‬
‫هذا الخطأ...‬
‫ايضا في بعض الحيان ل يتوقع ان نحصي جميع الخطاء التي قييد تحصييل‬
‫خاصة في المشاريع الكبيرة و لكن مهمتنا ان نقللها الى حد معقييول جييدا و‬
‫ل نترك عملية اكتشاف الخطاء للمستخدم خاصة في برامج الويب التي قد‬
‫تكون النتيجة غالية جدا حينها ان تم استخدام احد هذه الخطاء كثغييرة فييي‬
‫البرنامج .‬
‫و بما ان لكل لغة برمجية طريقية فيي التعاميل ميع السيتثناءات و الخطياء‬
‫ليس الهدف من التطبيق هنا هو كيفية كتابة الكواد و انما البحييث عنهييا و‬
‫طريقة محاصرتها و مدى اهميتها ..‬
‫التطبيق )البحث عن الستثناءات(:‬
‫الن سآتي الى برنييامجي و اخييذ كيل دالية علييى حيدى و ابحيث عيين وجيود‬
‫الخطاء و الستثناءات التي يجب التعامل معها ..‬
‫1 - داليية الخييروج ل تحتيياج الييى اضييافة اكييواد و داليية اظهييار المعلومييات‬
‫ايضا ، لييذلك سييأكتفي بييالتجريب المباشيير و ملحظيية سييلوك الييدالتين عنييد‬
‫النقر على الزر المعين . و يبدو ان الثنييتين تعملن بشييكل جيييد . و المهييم‬
‫ايضا انهما ل يطلبان اي قيم من المستخدم.‬
‫2- جميل نأتي اليى دالية ‪ : onSwap‬هكييذا مبيدئيا ميين مجيرد الملحظية‬
‫نعرف انها قد تسبب مشكلة اساسية جدا تسبب انهيييار البرنامييج، المشييكلة‬
‫هي في حالة ان قيم مربع الختيارات الول ل يساوي قيم مربع‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫الختيارات الثاني فهناك قيمة موجودة زائدة في اختيارات لغيية المصييدر و‬
‫هي ‪ 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‬‬
‫يجب علينا اذا ان نحرص على ايجاد الية لضمان عدم ارسال اي قيمة غير‬
‫القيم التي يوجد لها مقابل .. و ذلك قد فعلناه سابقا فعل !. نعييم فعلنيياه فييي‬
‫مرحلة تصميم البرنامج حيث عندما قمنا بتصييميم مربعييي الختيييارات قمنييا‬
‫بتوفير قيم افتراضية للغات معينة هي فقط ما يوفره البرنامييج للمسييتخدم و‬
‫لكي ل يقوم المستخدم باضافة اي لغة غير موجودة او اي نص ل معنى له‬
‫قمنا بقفل مربع الختيارات حيييث ل يمكيين البتيية ان يكتييب المسييتخدم قيميية‬
‫مربع الختيار بنفسه و انمييا عليييه ان يختييار ميين الموجييود فقييط و فقييط ..‬
‫القيمة التي وفرت لنا هذه الميزة في الكود كانت :‬
‫‪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‬‬
‫الن بكل بساطة سيتجاهل امر الترجمة اذا لم يتوافر نص للترجمة.‬
‫النقطة الثانية الكثر خطييورة الييتي تكلمنييا عنهييا سييابقا هييي فيي حييال عييدم‬
‫توافر اتصال بالنترنت سينهار البرنامج وقت النقر على زر الترجمة ..‬
‫قد يسأل البعض لماذا ينهار البرنامج كامل؟‬
‫ينهييار البرنامييج لن داليية الترجميية تحيياول انشيياء كييائن ميين نييوع جوجييل‬
‫ترانسليتر و هذا يحتاج اليى اتصيال بيالنترنت فعنيدما يفشيل البرناميج فيي‬
‫انشاء هذا الكائن سيرجع خطأ من النوع الذي يجب التعامل معه ‪ 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‬‬
‫اذا كان الكائن انشيء بنجاح فييالطبع هنيياك اتصييال و ان كييان الكييائن فشييل‬
‫فهذا يعني انه ل يوجد اتصال او نوع اخر من الخطيياء .. و لكيين كمييا قلنييا‬
‫سابقا ان الخطا هذا ل يصلح ان نضعه في جملة شرطية ‪( 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‬‬
‫اما اذا لم يوجد خطا فنتابع البرنامج كما المعتاد و نرجع النص المترجم .‬
‫8- مرحلة التحزيم :‬
‫هذه المرحلة النهائية في تطوير البرنامج حيث بعد النتهاء من التخطيط و‬
‫البرمجيية و التصييحيح و بعييد التأكييد ميين ان البرنامييج وصييل مرحليية نضييج‬
‫مناسبة يمكننا ان نقوم بتحزيمه و القيام بنشره .‬
‫طبعا اساليب التحزيم تختلف كثيرا جدا بحسب اللغة و نظام التشغيل و نوع‬
‫البرنامييج . و لكيين الهييدف ميين هييذه المرحليية هييي تييوفير الييية سييهلة‬
‫للمستخدمين النهائين كي يجربوا البرنامج فل يعقل مثل ان اوزع برنامجي‬
‫على اصدقائي بشكل كود ‪ C‬و اقول لهم عليكم ببناءه ) ‪ ( Compile‬من‬
‫المصييدر! فالمسييتخدم النهييائي غالبييا ل يعييرف كيييف يقييوم بانشيياء ملييف‬
‫تنفيييذي ميين ملييف المصييدر، و الحقيقيية ان هييذه ليسييت مشييكلة المسييتخدم‬
‫النهييائي بييل حييتى المسييتخدمين المتقييدمين فييي الغلييب سيييحتاجون بعييض‬
‫الوقت و البحث كي يستطيعوا تشغيل برامج مكتوبة بلغة لم يتعيياملوا معهييا‬
‫ميين قبييل فاللغييات كييثيرة جييدا. اسييهل البرامييج هييي البرامييج المترجميية‬
‫‪ Compiled‬و يمكن استخدام برامج لتسهيل عملية التنصييب للمسيتخدم‬
‫كما نراه في الويندوز و لكن يعيبها ان الملف التنفيذي المبني لنظييام معييين‬
‫سيحتاج الى اعادة بناء في حال الرغبة بتغشيله في نظام اخر .‬
‫هناك ايضا برامج الويب و لها طريقيية تشييغيل مختلفيية و فييي هييذه الحاليية‬
‫يجب ان يكون هناك توثيق جيد لطريقة التنصيييب عليى السييرفر و يفضييل‬
‫انشيياء سييكربت يقييوم بمهميية التنصيييب بييدل ميين ان نييترك هييذه المهميية‬
‫للمستخدم فهذا السكربت يجييب ان يهتييم بانشيياء جييداول قواعييد البيانييات و‬
‫اسناد القيم المناسبة للختيارات المناسبة حسب طلييب المسيتخدم و اعطيياء‬
‫التصاريح المناسبة ...ألخ.‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫الخلصة ايا يكن نوع البرنامج يجب ان نحاول قدر المستطاع ان نوفر الية‬
‫سهلة لتشغيل البرنامج بدل من ترك المستخدم في متاهة التشغيل و البحث‬
‫عيين المييترجم او المفسيير المناسييب و بعييدها البحييث عيين المكتبييات الييتي‬
‫يحتاجها البرنامج ..الخ فيترك البرنامج لنه ل يستاهل العناء .‬
‫التطبيق :‬
‫في حالتنا استخدمنا لغة مفسرة و هي بيييرل ) امثليية اخييرى هييي بييايثون و‬
‫روبي ..ألخ( و التي تعطينا ميزة جيدة و هي النتقالية بين انظمة التشييغيل‬
‫المختلفة و لكن يعيبها هو وجوب وجود المفسر على جهاز المستخدم . اذا‬
‫سيكون هناك خيارين بالنسبة لبرنامج بيرل ) باسييتنثاء طبعييا خيييار تييوفير‬
‫المصدر فقط( :‬
‫1 - الول ان نرفييق المفسيير )حجمييه صييغير نسييبيا( مييع برنامجنييا فيقييوم‬
‫المستخدم بتنصيب المفسر ثم تشغيل البرنامج .‬
‫2- الثاني ان نستخدم ‪ PAR‬او ‪ PerlApp‬او ‪ Perl2exe‬و هذه كلهييا‬
‫ادوات لنشيياء ملييف تنفيييذي جيياهز لبرامييج بيييرل . و بهييذا ليين يحتيياج‬
‫المسييتخدم الييى تنصيييب اي شيييء فقييط دبييل كليييك علييى البرنامييج و سيييتم‬
‫التشغيل . ) ملحظة هامة : هذه الدوات في حقيقيية الميير ل تقييوم بعملييية‬
‫‪ compile‬كييل مييا فييي الميير انهييا تحلييل البرنامييج و تسييتورد الجييزاء‬
‫المطلوبة فقط من مفسر بيرل و المكتبات اللزمة و تحزمها مع بعض(‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫ملحظات بخصوص البرنامج :‬
‫1 - في السنوات الخيييرة وجييدنا تييوجه كييبير الييى نقييل البرامييج ميين سييطح‬
‫المكتب الى الويب و لكن ايضا هناك توجه الى نقل برامج الويب الى سطح‬
‫المكتب فأغلب المدونين في تويتر مثل ل يدخلون الى موقييع تويييتر و انمييا‬
‫يقومون باستخدام برامج سطح مكتب للقيييام بهييذه المهميية و هنيياك الكييثير‬
‫من هكذا برامج او ما يسمى بالعميل .‬
‫في اغلب الحيان الهدف منها هو اضافة ميزات جديدة الييى الخدميية الم او‬
‫الستفادة من قدرات الجهاز بشكل افضل و لكيين هنيياك ايضييا سييبب اخيير و‬
‫هو ان البعض يفضل استخدام برامج سطح المكتب بدل من تكييرار عمليييات‬
‫الييدخول و الخييروج الييى المتصييفح لييذلك هنيياك رواج كييبير لبرامييج الرفييع‬
‫المباشر الى فلكر مثل و غيرها من الخدمات.‬
‫2 - في هذا الموضوع قمت بتمثيل بناء البرنامج على شييكل برنامييج سييطح‬
‫مكتييب و لكيين كييان بالمكييان ان نسييتهدف منصييات اخييرى مثل ان نجعييل‬
‫البرنامج خاص للموبايلت كاندريود و ايفون ..ألخ بهذه الفكرة .‬
‫ايضييا كييان بالمكييان ان نسييتهدف جعييل البرنامييج يعمييل كاضييافة لمتصييفح‬
‫كفايرفوكس او كييودجت ‪ Widget‬لسطح المكتب . بل حتى كان يمكن ان‬
‫نضمن البرنامج في برنامج اكبر مثل لو كييان لييدينا برنامييج ويييب صييممناه‬
‫ليعمييل كمجليية او مييدير مقييالت كييان بالمكييان ان نضييمن هييذه الميييزة فييي‬
‫البرنامج .‬
‫فعلينا البحث عن المنصات التي سيلقي فيها البرنامج شعبية اكثر.‬
‫3 - طبعييا كييان بالمكييان اضييافة المزيييد ميين الخيييارات لهييذا البرنامييج مثييل‬
‫ترجمة موقع او ترجمة ملف ورد موجود في الجهاز ..ألخ و لكن هذا ليس‬
‫هدف الموضوع.‬
‫4- تعمدت الغاء مرحلة كتابيية الختبييارات ‪ Tests‬لنهييا طويليية و خاصيية‬
‫جييدا بلغيية بيييرل و سييتختلف كليييا مييع اي لغيية اخييرى فليين تقييع فييي فييائدة‬
‫العضاء كثيرا خصوصا انني اريد من المقالة ان تكون عامة.‬
‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫‪Our App In Action‬‬

‫ملحظات عامة :‬
‫تكلمنا عن بعض المراحل المهمة في تطوير البرامج ، و لكن هنيياك الكييثير‬
‫من النقاط المهمة التي يجب النتباه لها :‬
‫1 - ل تعد اختراع العجلة !. من الشياء المهمة التي يجييب ان ننتبييه لهييا و‬
‫الييتي قمنييا بتطبيقهييا فييي هييذا الموضييوع هييو عييدم تكييرار الجهييود ، فهييذا‬
‫البرنامج مثل كان بالمكان ان اطور لييه قاعييدة كلمييات بنفسييي و لكيين هييذا‬
‫شيء مكلف جدا بالنسبة لشخص واحد و في النهاية سييأترك الضييافة الييى‬
‫قاعدة الكلمات عندما ادرك ان هذا المر فوق طاقتي .‬
‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫فهذه المهمة تحتاج الى متطوعين و مساهمين المر الذي قد ل يتوفر لي .‬
‫و في الجهة المقابلة بدل ميين اسييتخدام المكتبيية الجيياهزة الييتي اسييتخدمتها‬
‫للتصال بجوجل كان ايضا بامكاني ان اقوم بعملية التصيال بنفسييي و ذليك‬
‫باستخدم ‪ LWP‬و لكن هذا سيحتاج الييى مزيييد جهييد و عنيياء و فييي اغلييب‬
‫الحيان لن تكون نتيجة اكوادي افضل من المبرمجين الييذين قيياموا بانشيياء‬
‫المكتبة التي استخدمناها لنهييا طييورت ميين قبييل مجموعيية ميين الشييخاص‬
‫المحترفين و تم اختبارها بشكل مكثف من اشخاص اخرين.‬
‫و لو على فرض كانت اكوادي افضل من اكواد هييذه المكتبيية فالعنيياء الييذي‬
‫سأتحصل عليه اكبر من الفائدة العائدة .‬
‫2- تقسيم البرنامج الى وحدات :‬
‫في هذا الموضوع مجموع السطر البرمجية كييانت 422 سييطر برمجييي و‬
‫لكيين لحظنييا سييهولة البحييث عيين الخطيياء و التعييديل علييى اي شيييء فييي‬
‫البرنامج بسهولة تامة ) و سيظل المر هكييذا حييتى لييو ضيياعفنا عييدد هييذه‬
‫السطر مرات و مييرات( و هييذا راجييع لكييون البرنامييج مقسييم الييى وحييدات‬
‫منطقية تسهل عملية البحث و التصحيح و تتبع الخطاء بدل ميين ان يكييون‬
‫البرنامج كله وحدة واحدة فتصييعب عملييية تتبييع مصيدر الخطيياء و معرفية‬
‫ماذا يؤثر على ماذا !؟‬
‫و سنذكر بعض اهم المور الساسية التي تساعد على جعل البرنامييج قابييل‬
‫للتطوير ‪ Scalable‬و التعديل ‪: Maintainable‬‬
‫1- تقسيم البرنامج الى وحدات منطقية‬
‫2- تقليل اعتمادية كل وحدة على وحدات اخرى ‪.Dependecy‬‬
‫3- عدم جعل المتغيرات مشاعة ‪ Global‬بل جعلها محصييورة فييي اضيييق‬
‫مجال ممكن بحيث ل يمكن تغيرهيا مين خيارج ميداها و لحظنيا هيذا طيوال‬
‫البرمجة التي قمنا بها في هذا الموضوع و لم نستخدم متغير عييام ال مييرة‬
‫واحدة و ذلك بهدف العلن المبكر.‬
‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫4 - استخدام تسميات واضحة للمتغيرات و الدوال و الكلسات .‬
‫5- كتابة الملحظات على الجزاء التي فيها صعوبة او فكرة .‬
‫و سييأكتفي بهييذا القييدر فالمقاليية طييالت كييثيرا و اعتييذر ميين هييذا .. و لكيين‬
‫سأختم بملحظات بسيطة و هي في طلب المساعدة فييي المنتييديات العربييية‬
‫او الجنبية :‬
‫1 - تجنب الطلبات العامة مثل : كيف ابرمج موقع ويب ؟ او كيييف اسييتخدم‬
‫المكتبة الفلنية ؟ بل الفضل تحديد السؤال في امر او دالة معينة …‬
‫2- البحث قبل السؤال .‬
‫3 - المحاولة قبل السؤال فالتفاعل مع السائل يزيد كييثيرا عنييدما يييرون انييه‬
‫بحث و سعى بنفسه ثم عرض مشكلته .‬
‫4 - عرض الكود البرمجي و هذه كييثيرا مييا تتكييرر فييالكثير ل يقبييل بعييرض‬
‫كامل الكود المصدري ، ربما هو خوف الحراج او خوف ان يسييرق الكييود‬
‫او شيء من هذا القبيل . و لكن عرض الكود البرمجي كامل و ليس جييزء‬
‫منه يساعد كثيرا على حل المشكلة .‬
‫5- اجعل سؤالك طلبا و ليس امرا !.‬
‫6- و في النهاية السؤال في طلب العلم ل يوجد به احراج ..‬

‫###‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
‫:: الخاتمة ::‬
‫تم بحمد ال النتهاء من النسخة النهائية الولى من هــذا‬
‫الكتاب اللكتروني في الخامس من شهر نوفمبر 0102 .‬
‫ادعو ال ـ انــي وفقــت لطــرح بعــض المواضــيع و النقــاط‬
‫المفيدة التي وقعت في فائدة القاريء الكريم . و انــا اذ ل‬
‫ادعي الكمــال بــل اســعى نحــوه امتثــل بقــوله تعــالى و مــا‬
‫ابريء نفسي ان النفس لمارة بالسوء ال ما رحم ربي.‬
‫للمراسلة بخصوص اي اقتراح او تعديل او نقد :‬
‫‪perl_sourcer@yahoo.com‬‬
‫على امل ان تكونوا من قراء النسخة القادمـــة.‬
‫و الصلة و السلم على سيد الخلق محمد و الــه الطيــبين‬
‫الطاهرين.‬

‫/‪http://arabicplg.sourceforge.net‬‬
‫‪Version 1.0 final release‬‬
:: ‫:: ترخيص الكتاب‬

http://arabicplg.sourceforge.net/
Version 1.0 final release
http://arabicplg.sourceforge.net/
Version 1.0 final release

More Related Content

PDF
01 Introduction in C++
PPT
مقارنة بين ثلاث لغات برمجة عربية
DOCX
Internet educational book links
PDF
Grade 1 reading
PDF
Grade 2 reading
PDF
Pmp guide 2016
PDF
رسالة ماجستير تسويق: أهمية نظام المعلومات التسويقي في اتخاذ القرارات التسويقية
PDF
تعلم برمجة.pdf
01 Introduction in C++
مقارنة بين ثلاث لغات برمجة عربية
Internet educational book links
Grade 1 reading
Grade 2 reading
Pmp guide 2016
رسالة ماجستير تسويق: أهمية نظام المعلومات التسويقي في اتخاذ القرارات التسويقية
تعلم برمجة.pdf

Similar to Prog guide 1 (20)

PDF
سي بالعربي.pdf
PPTX
4_5879580116761186441.pptx..............
PDF
مع الامثله البرمجه بسكراتس.اساسيات البرمجه
PPTX
C++ &amp; python
PPTX
الترجمة الفورية.pptx
PPTX
عرض مقدمة في البرمجة 01
PPTX
Bader madah
PDF
HTML - L1HTML - L1HTML - L1HTML - L1HTML - L1
PDF
لغات البرمجه بل تفصيل
PDF
الدرس 1.pdf
PDF
Visual basic.net احترف فيجوال بيسك
PDF
الشامل إلى علم الخوارزميات وخرائط التدفق .pdf
PDF
Python.pdf
PDF
Pythonnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn.pdf
PDF
Python.pdf
PDF
لقاء طلاب نادي جوجل للمطورين .pdf
PDF
Alshhrany c++
PDF
محاضره "مبرمجين اذن هنموت صغنططين :) " لمصطفى رسلان
DOCX
Sketch engine
PPT
Ayaspell arabic spellchecker
سي بالعربي.pdf
4_5879580116761186441.pptx..............
مع الامثله البرمجه بسكراتس.اساسيات البرمجه
C++ &amp; python
الترجمة الفورية.pptx
عرض مقدمة في البرمجة 01
Bader madah
HTML - L1HTML - L1HTML - L1HTML - L1HTML - L1
لغات البرمجه بل تفصيل
الدرس 1.pdf
Visual basic.net احترف فيجوال بيسك
الشامل إلى علم الخوارزميات وخرائط التدفق .pdf
Python.pdf
Pythonnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn.pdf
Python.pdf
لقاء طلاب نادي جوجل للمطورين .pdf
Alshhrany c++
محاضره "مبرمجين اذن هنموت صغنططين :) " لمصطفى رسلان
Sketch engine
Ayaspell arabic spellchecker
Ad

Recently uploaded (14)

PPTX
Arduino Programming language Chapter number - 2
PDF
‎⁨نظريات ونماذج لتبني التقنية في التعليم.
PDF
رواية "مؤامرة النبلاء" هي قصة مليئة بالإثارة والمغامرات
PDF
كتاب "فكّر خارج الصندوق" هو رحلة من الاسئلة
PPTX
المحاضره الثامنه الهضم والامتصاص داخل جسم الانسان .pptx
PPTX
Arduino Programming Chapter number - 1 1.pptx
PDF
خطة دورة طريقة الاستعداد لاختبار الرخصة المهنية التربوي(العام)
PDF
مراتب الدين - مادة التربية الإسلامية ppt
PPTX
jgiiiiiijoj yojjyojdbbojybojojyjdobjjjyh
PDF
كتاب ادارة المخازن.pdf - الشهادة الدولية
PDF
ادارة علاقات الموردين-الشهادة الدولية في المشتريات والامداد
PDF
ادارة الصحة و السلامة المهنية osha30.pdf
PDF
Maysra Catalogue Version #1 (important Business Tips in your Pocket).pdf
PPTX
حقيبة دمج مهارات التفكير في التدريس - عرض بوربوينت.pptx
Arduino Programming language Chapter number - 2
‎⁨نظريات ونماذج لتبني التقنية في التعليم.
رواية "مؤامرة النبلاء" هي قصة مليئة بالإثارة والمغامرات
كتاب "فكّر خارج الصندوق" هو رحلة من الاسئلة
المحاضره الثامنه الهضم والامتصاص داخل جسم الانسان .pptx
Arduino Programming Chapter number - 1 1.pptx
خطة دورة طريقة الاستعداد لاختبار الرخصة المهنية التربوي(العام)
مراتب الدين - مادة التربية الإسلامية ppt
jgiiiiiijoj yojjyojdbbojybojojyjdobjjjyh
كتاب ادارة المخازن.pdf - الشهادة الدولية
ادارة علاقات الموردين-الشهادة الدولية في المشتريات والامداد
ادارة الصحة و السلامة المهنية osha30.pdf
Maysra Catalogue Version #1 (important Business Tips in your Pocket).pdf
حقيبة دمج مهارات التفكير في التدريس - عرض بوربوينت.pptx
Ad

Prog guide 1

  • 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