‫مختصر‬

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

‫عضــــو‬

‫/‪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

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‬‬ ‫‪0555555ali‬‬ ‫‪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 "looping10 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 area 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 $nameyour 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 "Idon'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.
    ‫تعدد التوارث ‪MultipleInheritance‬‬ ‫في لغات البرمجة مثل سي ++ و بيرل هنــاك امكانيـة لي كلس بــان يــرث‬ ‫من اكثر من كلس ، هذا الشيء ل يخلو من الفائدة الكثيرة على الرغم مــن‬ ‫بعض العيوب و لكن في لغة جافا مثل ل يمكن للكلس ان يرث ال مـــــــــن‬ ‫كلس واحد و هنا يظهر انه سنلقي صعوبة و محدودية و لكن جافــا تــوفر‬ ‫ما يسمى بالواجهات ‪ 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.
    : ‫نموذج برمجي‬ <scripttype=”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 unlessdefined $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)); # endwxGlade } 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 } subOnSwap { 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 ofclass 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 InAction‬‬ ‫ملحظات عامة :‬ ‫تكلمنا عن بعض المراحل المهمة في تطوير البرامج ، و لكن هنيياك الكييثير‬ ‫من النقاط المهمة التي يجب النتباه لها :‬ ‫1 - ل تعد اختراع العجلة !. من الشياء المهمة التي يجييب ان ننتبييه لهييا و‬ ‫الييتي قمنييا بتطبيقهييا فييي هييذا الموضييوع هييو عييدم تكييرار الجهييود ، فهييذا‬ ‫البرنامج مثل كان بالمكان ان اطور لييه قاعييدة كلمييات بنفسييي و لكيين هييذا‬ ‫شيء مكلف جدا بالنسبة لشخص واحد و في النهاية سييأترك الضييافة الييى‬ ‫قاعدة الكلمات عندما ادرك ان هذا المر فوق طاقتي .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 156.
    ‫فهذه المهمة تحتاجالى متطوعين و مساهمين المر الذي قد ل يتوفر لي .‬ ‫و في الجهة المقابلة بدل ميين اسييتخدام المكتبيية الجيياهزة الييتي اسييتخدمتها‬ ‫للتصال بجوجل كان ايضا بامكاني ان اقوم بعملية التصيال بنفسييي و ذليك‬ ‫باستخدم ‪ LWP‬و لكن هذا سيحتاج الييى مزيييد جهييد و عنيياء و فييي اغلييب‬ ‫الحيان لن تكون نتيجة اكوادي افضل من المبرمجين الييذين قيياموا بانشيياء‬ ‫المكتبة التي استخدمناها لنهييا طييورت ميين قبييل مجموعيية ميين الشييخاص‬ ‫المحترفين و تم اختبارها بشكل مكثف من اشخاص اخرين.‬ ‫و لو على فرض كانت اكوادي افضل من اكواد هييذه المكتبيية فالعنيياء الييذي‬ ‫سأتحصل عليه اكبر من الفائدة العائدة .‬ ‫2- تقسيم البرنامج الى وحدات :‬ ‫في هذا الموضوع مجموع السطر البرمجية كييانت 422 سييطر برمجييي و‬ ‫لكيين لحظنييا سييهولة البحييث عيين الخطيياء و التعييديل علييى اي شيييء فييي‬ ‫البرنامج بسهولة تامة ) و سيظل المر هكييذا حييتى لييو ضيياعفنا عييدد هييذه‬ ‫السطر مرات و مييرات( و هييذا راجييع لكييون البرنامييج مقسييم الييى وحييدات‬ ‫منطقية تسهل عملية البحث و التصحيح و تتبع الخطاء بدل ميين ان يكييون‬ ‫البرنامج كله وحدة واحدة فتصييعب عملييية تتبييع مصيدر الخطيياء و معرفية‬ ‫ماذا يؤثر على ماذا !؟‬ ‫و سنذكر بعض اهم المور الساسية التي تساعد على جعل البرنامييج قابييل‬ ‫للتطوير ‪ Scalable‬و التعديل ‪: Maintainable‬‬ ‫1- تقسيم البرنامج الى وحدات منطقية‬ ‫2- تقليل اعتمادية كل وحدة على وحدات اخرى ‪.Dependecy‬‬ ‫3- عدم جعل المتغيرات مشاعة ‪ Global‬بل جعلها محصييورة فييي اضيييق‬ ‫مجال ممكن بحيث ل يمكن تغيرهيا مين خيارج ميداها و لحظنيا هيذا طيوال‬ ‫البرمجة التي قمنا بها في هذا الموضوع و لم نستخدم متغير عييام ال مييرة‬ ‫واحدة و ذلك بهدف العلن المبكر.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 157.
    ‫4 - استخدامتسميات واضحة للمتغيرات و الدوال و الكلسات .‬ ‫5- كتابة الملحظات على الجزاء التي فيها صعوبة او فكرة .‬ ‫و سييأكتفي بهييذا القييدر فالمقاليية طييالت كييثيرا و اعتييذر ميين هييذا .. و لكيين‬ ‫سأختم بملحظات بسيطة و هي في طلب المساعدة فييي المنتييديات العربييية‬ ‫او الجنبية :‬ ‫1 - تجنب الطلبات العامة مثل : كيف ابرمج موقع ويب ؟ او كيييف اسييتخدم‬ ‫المكتبة الفلنية ؟ بل الفضل تحديد السؤال في امر او دالة معينة …‬ ‫2- البحث قبل السؤال .‬ ‫3 - المحاولة قبل السؤال فالتفاعل مع السائل يزيد كييثيرا عنييدما يييرون انييه‬ ‫بحث و سعى بنفسه ثم عرض مشكلته .‬ ‫4 - عرض الكود البرمجي و هذه كييثيرا مييا تتكييرر فييالكثير ل يقبييل بعييرض‬ ‫كامل الكود المصدري ، ربما هو خوف الحراج او خوف ان يسييرق الكييود‬ ‫او شيء من هذا القبيل . و لكن عرض الكود البرمجي كامل و ليس جييزء‬ ‫منه يساعد كثيرا على حل المشكلة .‬ ‫5- اجعل سؤالك طلبا و ليس امرا !.‬ ‫6- و في النهاية السؤال في طلب العلم ل يوجد به احراج ..‬ ‫###‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 158.
    ‫:: الخاتمة ::‬ ‫تمبحمد ال النتهاء من النسخة النهائية الولى من هــذا‬ ‫الكتاب اللكتروني في الخامس من شهر نوفمبر 0102 .‬ ‫ادعو ال ـ انــي وفقــت لطــرح بعــض المواضــيع و النقــاط‬ ‫المفيدة التي وقعت في فائدة القاريء الكريم . و انــا اذ ل‬ ‫ادعي الكمــال بــل اســعى نحــوه امتثــل بقــوله تعــالى و مــا‬ ‫ابريء نفسي ان النفس لمارة بالسوء ال ما رحم ربي.‬ ‫للمراسلة بخصوص اي اقتراح او تعديل او نقد :‬ ‫‪perl_sourcer@yahoo.com‬‬ ‫على امل ان تكونوا من قراء النسخة القادمـــة.‬ ‫و الصلة و السلم على سيد الخلق محمد و الــه الطيــبين‬ ‫الطاهرين.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  • 159.
    :: ‫:: ترخيصالكتاب‬ http://arabicplg.sourceforge.net/ Version 1.0 final release
  • 160.