160
مختصرت البرمجة لغايل دل كتبهاسين آل ي علي راهب في صومعة عضــــوhttp://arabicplg.sourceforge.net/ Version 1.0 final release

Prog guide 1

  • Upload
    ferask

  • View
    966

  • Download
    14

Embed Size (px)

DESCRIPTION

prog guide

Citation preview

Page 1: Prog guide 1

مختصر

دليل لغات البرمجة

كتبه علي آل ياسين

راهب في صومعة

عضــــو

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

Page 2: Prog guide 1

:: بسم ال الرحمن الرحيم :: :: تم اعداد الكتاب باستخدام برنامج ::

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

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

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

Page 3: Prog guide 1

:: اهداء ::

الى ناحيتـــها ،،الى قبلتهـــا ،،

الى سموهـــا ،، الى حبهــــا ،،الى روحها ،،الى جسمها ،،الى وقوفها ،،الى جلوسها ،،الى قنوتها ،،الى دعائها ،،الى ركوعها ،،الى سجودها ،،الى انبساطها ،،الى انقباضها ،،الى ابتسامتها ،،الى سرورها ،،

الى صاحبــــة الشــــــأن ،،اليك ،، جعلني ال فداك ،،

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

Page 4: Prog guide 1

:: مدخـــل ::

بسم ال الرحمن الرحيم و الصلة و السلم علــى ســيد المرســلين محمــد و• اله الطاهرين ، اللهم صل على محمد و ال محمد كما صليت على ابراهيم و ال ابراهيــم اللهــم و صــل و ســلم و ترحــم و بــارك علــى محمــد و ال محمــدكأفضل ما صليت و باركت و ترحمت على احد من خلقك انك سميع مجيد.

جائتني فكرة هذا الكتاب اللكتروني بعد ان قــرات كتــاب "حــرب البرامــج"• للكاتب الرائع كيث كرتس، و على الرغم من ان عملي هــذا لــم و لــن يصــلالى مستوى عمل شخص في مستوى هذا المبرمج ، ل مــن حيــث الكــم "

صــفحة" و ل مــن حيــث المســتوى "خــبرة ســنين فــي البرمجــة مــع300ميكروسوفت و غير ذلك.

ال ان هذا لم يمنعني من ان اشرع في كتيب يكون بمثابة دليل مختصــر الــى•

لغات البرمجة متجنبا الطالة المملة و التفاصيل التقنية الدقيقــة او التوغــل في شرح الكواد البرمجية التي من شأنها ان تبعد كل من ليــس لــه اهتمــام

بالبرمجة.

عملي اذا في هــذا المختصــر هــو التعريــف بــالخطوط العريضــة بــاهم لغــات• البرمجة في عالمهـا الواسـع. مـع اضـافة تعريـف بـأهم المصـطلحات الـتي

يجب ان تعرف كي نستطيع من خللها قراءة تلك الخطوط العريضة.

و هذه النسخة النهائية الولى اطرحها في منتداي المفضــل مجتمــع لينكــس• العربي ليماني بان الذي جعل المصادر الحرة عظيمة هو مبدا المشــاركة ، لهذا انا اطمح في ان ارى القتراحات و النقد لهذه الصدارة كي نستمر في مسلسل تطور هذا الكتاب من مسودة ابتدائيــة كمــا كــان قبــل ســنة و بضــع

شهور الى كتاب غني و مفيد خلل الشهور القادمة.

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

Page 5: Prog guide 1

ــكر و• ــدي ســواء: بعبــارات ش عليــه اشــكر كــل مــن ســاعدني و اخــذ بي استحســان ، نقــد بنــاء او اقــتراح مفيــد و اطمــح للمزيــد مــن المشــاركة و

المعونة.

يوجد الكثير من المصطلحات البرمجيــة البحتــة طبعــا لــم اســتطع تفاديهــا و• ايضا لم يكن باستطاعتي اضافة تعريفهــا كلهــا خــوف الطالــة و لكــن قمــت باضافة مقالة اضافية تعنــى بشــرح اهــم تلــك المصــطلحات مــع اســتعراض سريع لهم نمــاذج البرمجــة و ذلــك نــزول عنــد رغبــة الكــثير مــن اخــواني العضاء. و ايضا ارفقت في نهاية الكتاب مقالة تعنى بكيفية انشاء برنامج بالقليل من الجهد و دراسة بعض جوانب التطوير و المــور الــتي يجــب ان

تأخذ في الحسبان في هذه العملية.

تخصصــي فــي علــوم الحاســب اللــي طبعــا ل يعطينــي الخــبرة الكافيــة فــي• استعراض كل لغات البرمجة ، بل في حقيقة المر اللغات التي تعاملت معها هي فقط بيرل كلغة اساسية و سي++ و جافا و سمول تولك و بي اتش بيــات و قليل جدا من بايثون فكان هناك حاجة كبيرة للترجمة الصرفة في اللغ الباقية فارجو الشارة الى مواطن الخلل فــي اي مكــان مــن هــذه المقــالت

كي اقوم بتصحيحه ان وجد في الصدارات القادمة.

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

Page 6: Prog guide 1

:: مقدمة ::

ل اريد ان امثل دور المبرمج المحنك هنا ، فأنا واقعا لست اهل لذلك، و لكـن• بحكم تخصصي في هذا المجال و اهتمــامي بالجــانب النظــري منــه خاصـة ، احببــت ان اكتــب بعــض الســطر لمــن لــديهم اهتمــام بالبرمجــة و لكنهــم لــم

يقدموا بعد :

هناك نقــاط كــثيرة يجــب ان تاخــذ فــي الحســبان قبــل الشــروع فــي تعلــم لغــة• برمجة، و لكن لحظــت ان المشــكلة الساســية عنــدنا هــي ليســت فــي عــدم القدرة على اختيار لغة معينة بل في عدم العزم على التعلم ابتداء. من منا ل يحب ان يقال عنــه مبرمــج ؟ خاصــة ان البرمجــة مثــل الرياضــيات يوصــف اصحابها بالذكاء و العبقرية . الكثير منا يقــول و يتمنــى و يخطــط ان يكــون مبرمجا عندما يقرا عن المبرمجين و المخترقين و قصص نجاح البرامج و المواقع و لكن عندما يبدا اول خطــوة فــي الدراســة يعــرف ان هنــاك الكــثير ليتعلمه و ان المادة ليست ممتعة كما كان يتصور و يبدا بالشعور بالممــل و من ثم يترك ما شرع فــي قراتــه مــن كتــاب او دورة تعليميــة . هنــاك حكمــة يابانية تقول " الطموح بدون عمل مجرد حلم يقظة ". شخصيا كنت اعاني من هذه المشكلة و هي تكديس الكتــب و الــدورات و المحاضــرات و غيرهــا على امل اني ساقراها و اشرع في تعلمها في وقت ما ! و الن لهــا ســنوات و لم اقرا منها شي ! اذا هذه المشكلة الولى التي يجب ان نجتازها ! و هيــة او ان ندرك ان مجرد تحميل الكتب و الدورات التعليمية سواء في البرمج غيرها من الفنون لن يجعل منا شيئا ! بل هو البدء و الصرار في تعلم هذه الشياء المملــة و المــواد الثقيلــة و اكمــال الكتــب و الــدورات الــى نهاياتهــا بالضــافة الــى الممارســة و التفكيــر هــو مــا يضــيف الــى حصــيلتنا الشــيء

المفيد.

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

Page 7: Prog guide 1

حسنا الن ، انت عازم على المواصلة و الجد في تعلم لغــة برمجــة معينــة و• لكنك ل تســتطيع ان تختــار اي لغــة تناســبك؟ هــذه المشــكلة الثانيــة و نــرى الكثير من المواضيع من هذه الشاكلة ماذا اتعلم ؟ مــا هــي افضــل لغــة ؟ مــا هي اقوى لغة ؟ ايهما القوى بيرل او بــايثون ؟ جافــا او ســي شــارب ! فــي حقيقة المر ل يوجد شيء اسمه اللغة القوى و كل مــن يقــول هنــاك شــيءــن و من هذا القبيل فهو في حقيقة المر واهم ، فكل لغة قوية في جانب معي عادة ما يكون هو الجانب الذي انشئت من اجلــه اساســا، طبعــا يوجــد لغــات تصلح لكل شيء تقريبا و لكن يبقى انها ل تقدم كفائة و انتاجيــة عاليــة فــي كــل شـيء فمثل لغـة مخصصـة للـويب مثــل بـي اتـش بــي و ان كــان هنــاك امكانيــة عمــل برامــج ســطح مكتــب بهــا فهــي لــن تكــون بقــوة و ســهولة و انتاجية لغات البرمجة المخصصة لهذا الجانب و العكس صحيح . علــى هــذا فسيكون الجواب على سؤالك هو: ما هو احتياجك؟ ماذا تريــد ان تبرمــج؟ هل تريد ان تتعلم لنفسك ام لسوق العمل ؟ و منه تختار لغة البرمجــة الــتي تريدها، لهذا هذا الكتيب ربما يكـون جيـدا فـي اختيـار لغـة برمجتـك الولـى فهــو يعرفــك بالهــداف الساســية الــتي انشــئت لهــا لغــات البرمجــة و اهــم التطبيقات التي تستخدم فيها هذه اللغات. و النقطة الجديرة بالذكر ايضا هي اطلعك على امثلة مــن طريقـة كتابـة الكـواد فـي لغــات مختلفـة باعتقــادي الشخصي سيؤثر على اهتمامك و اســتمتاعك بلغــة البرمجــة الــتي تختارهــا فهناك الكثير من المبرمجين يستخدمون لغات معينة لنهم يحبــون اســلوبها فــي الكتابــة و ايضــا طريقــة معالجتهــا للمشـاكل البرمجيـة . مثل : اذا كنـت تحب ان يكون كل شيء واضح في اسماء المتغيــرات و الكلمــات المفتاحيــة و غيرهــا و تكــره اســتخدام الكــثير مــن الختصــارات و الرمــوز كــالقواس الكثيرة في ليسب و القواس المعقوفة و ما الــى ذلــك فــذلك بــالطبع ســيؤثر علــى اختيــارك. مثــاله : قــولهم عــن اقــواس لغــة البرمجــة ليســب ( جهنــم القواس ) ، و لكن يقول الخر ( عندما وصلت الى مرحلة التنــوير ارتفعــت

القواس !) .•

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

Page 8: Prog guide 1

ربما يستصغر البعض هذه النقطة و لكن في حقيقة المر هذه امور فطريــة ل يمكــن تجاهلهــا! أل يمكــن ان تكــره قــراءة كتــاب لن خطــه لــم ترتــح لــه

عينك ؟ و ان كان هذا الكتاب الكثر مبيعا و غني بالمحتوى!

الشيء الهم هو:

ان تعلم ان تعلمك لي لغة برمجـة سـيفيدك كـثيرا حــتى لــو انتقلـت الـى لغـة•اخرى .

ان تعلم ان لغــات البرمجــة مبــاديء ان فهمتهــا ســهل عليــك النتقــال حســب•الحاجة الى لغة اخرى.

لهذا نرى ان اغلب المبرمجين يعرفون اكثر من لغة و يســهل عليهــم التــأقلم• مع اي لغة جديدة يفرضها عليهم سوق العمل ، و كمثــال فــي بيــرل لــم اكــن اعرف كيف اقوم بعمل برنامج ذو واجهة رسومية لننــي كنــت معتــاد علــى

ــة وTkعمل برامجي على الويب او سطر الوامر و لكن بعد تعلمــي مكتب فهمي لكيفية عمــل الواجهــات الرســومية اســتطعت بكــل بســاطة و يســر ان

..GTK و ايضا واجهة wxperlانقل برنامجي الى مكتبة

ــتي يغفــل عنهــا الكــثيرون للجــانب• ــة المطلقــة ال ــذلك شخصــيا ارى الهمي ل النظري و المنطقي للبرمجة بدل التركيز على حفــظ الــدوال و الكــواد فهــذه اشياء بسيطة جدا حتى يمكن الرجوع اليها بسرعة من خلل كتيب الــدليل ،

بل يجب ان نعرف كيف يعمل البرنامج ل كيف يكتب البرنامج .

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

Page 9: Prog guide 1

شيء اخر يجب الشارة اليه هو عدم الهتمام كثيرا بمـا يشـاع عـن افضـلية• طريقة معينة في البرمجة ، مثل هناك اشارة دائمــة مــن خلل دراســتي فــي الجامعة الى افضــلية البرمجــة الكائنيــة و لكــن يجــب ان نــدرك ان البرمجــة الكائنية ليست دائما هــي الحــل الفضــل للمشــكلة ، توجــد مشــاكل و برامــج استخدام البرمجة الكائنية فيها مجرد تطويل و تعقيد للحل ، و لكن طبعا في برامج و نـواحي اخـرى سـيكون مـن الصـعب البرمجـة باسـتخدام البرمجـة الجرائية بدل من البرمجة الكائنيــة فيهــا ، لــذلك دائمــا احــب ان اشــير الــى اهمية الجانب النظري في البرمجة و هـو فهـم طــرق البرمجـة و مبادئهــا و

من ثم اختيار الطريقة الفضل .

ايضا احـب ان اشـير الـى ان البرمجـة ممتعـة اذا كـانت تحـل مشـكلة نحتـاج• لحلها و ال ستكون البرمجة مملة و رتيبة و عــادة مــا نــترك المشــروع فــي منتصفه ، مثل لينوس لم يشرع في كتابة نظامه ال من مشــكلة عاناهــا مــع نظم التشغيل الموجودة في وقته و غيره من المثلة كثيرة ، و هنا نصل الى نقطــة اخــرى و هــي ان البرامــج العملقــة ســيكون مــن الصــعب جــدا علــى شخص واحد فقط تطويرها و كتابتها و هنا تظهر اهمية العمــل الجمــاعي و الحتكاك بالمبرمجين الخرين و المشاركة في المحافل البرمجيــة و دراســة اكواد الغير للعمل من حيث انتهى الخرون و ليس تضيع الــوقت فــي اعــادة

اختراع العجلة و تشتيت الجهود .

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

Page 10: Prog guide 1

النقطة الخيرة التي احب ان اختم بها هــي مســألة الدراســة البرمجيــة ، فــي• الجامعــة نمــل و نتضــجر مــن الشــياء النظريــة الــتي نتعلمهــا و نريــد تعلــم

علــى مــا يقــال !.. و لكــن لحقــا نــدرك ان هــذه الشــياء الكــووولالشــياء النظرية المملة هي اهم ما تعلمناه و نرى لحقا مكانها في عــالم البرمجــة ، كمثال كان هناك شخص دائما يتضجر من البرمجــة لســطر الوامــر و يقــول ان هذا شيء قديم اكل الدهر عليه و شــرب و انــه علينــا ان نتعلــم البرمجــة الحديثة فما نفع برامج سطر الوامر .. و لكن فــي حقيقــة المــر الجامعــة و الكتب بشكل عام تعلمك البرمجة لسطر الوامر لنها تركز على المنطق فــي حــل المشــاكل البرمجيــة و ســطر الوامــر مجــرد اداة لســتلم المتغيــرات و التفاعــل مــع المســتخدم ، لحقــا ادركنــا ان الواجهــات الرســومية و برامــج الويب مجرد قشور ل تنفع اذا لم يكـن خلفهــا اكـواد برمجيـة سـحرية تعمـل بصمت خلف الستار ! و ان الذي تعلم تلك الكواد و المباديء و تمكن منهـا

!..GTk او QTلم يجد صعوبة في ان يغلفها بواجهات حديثة مثل

:: &&& ::

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

Page 11: Prog guide 1

:: نماذج البرمجة و اهم المصطلحات ::

دء كان الصفر و الواحد …في الب ثم جاءت اللغات التجميعية ، الــى هنــا و نحــن نتكلــم عــن اللغــات منخفضــةــة المستوى اي انها ذات ارتباط شديد بالعتاد ، و ان كنا مع اللغات التجميعي بدانا الماكروز و بعض الخصائص التي سنراها لحقا في اللغــات الجرائيــة

بشكل اكثر تقدما .ــة المســتوى و ظهــرت البرمجــة ــات عالي ــد مــع اللغ ــزغ الفجــر الجدي ــم ب ث

الجرائية لتعلن عن ظهور عصر الهتمام بالمشكلة البرمجية !.. فقبل ان نتكلم عن لغات البرمجــة يجــب ان نســلط الضــوء علــى اهــم نمــاذج البرمجة و اهم المصطلحات المرتبطــة بهــا ليســهل علينــا لحقــا فهــم لغــات البرمجــة مــن خلل قــراءة اســطرها العريضــة . و فــي نهايــة هــذه الفقــرة

سنتعرض لمصطلحات متنوعة.

Programing Paradigms

يجب ان ننتبه الى انه ل يوجد اي تعريف رســمي لي نمــوذج مــن النمــاذج التية ، و نقاط الشتراك كثيرة فالحدود هنا ليست فواصل ل يمكن تجاوزها فالبرمجة الشيئية في النهاية هي برمجة اجرائية بطبيعتها. و لكن ما يعنينا في حقيقة المر هنا هو النقاط التي يركز عليها كل نموذج من هذه النمــاذج حيث عليه تتغير طريقة تفكير المبرمج في نظرته و تحليله و حله للمشــاكل البرمجيـة . و هـذه النمـاذج القليلـة المـذكورة هنـا هـي المهمـة و ال هنـاك

العديد و العديد من النماذج كما هنالك العداد المهولة من لغات البرمجة.

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

Page 12: Prog guide 1

Imperative(اللزامية ) البرمجة المرية :: البرنامج. و تندرجStateتصف الحوسبة من ناحية الجمل التي تغير حالة

تحتها العديد من النماذج كما سيأتي..

Non-Structured Programingالبرمجة الغير منظمة ::

قبل البدء في الكلم عن النماذج المرتبة (الجرائيــة ، الكائنيــة ..) يجــب ان نذكر بأنه في البداية كام هنــاك نمــوذج البرمجــة الغيـر مرتبـة. يوجــد لغــات

عالية و منخفضة المستوى تستخدم هذا النموذج منها:MSX Basic

GWBasicFocal Joss

MumpsTelcomp

CobolMachin Level code

بعض نظم السمبليAssembly Debuggers

.MS-Dos Batch file Langو بعض لغات السكربتنج مثل البرمجة الغير منظمة تنتقد بعنــف لنهــا تنتــج اكــواد صــعبة القــراءة او مــاــار مناســب يعرف بـ ( اكواد السبجتي!) لهذا ل تعتبر في بعض الوقات خي للمشاريع المهمة و لكن في الجهــة المقابلــة يمــدحها البعــض للحريــة الــتي توفرهـــا للمبرمـــج و يشـــبهونها بطريقـــة كتابـــة موتســـارت للمقطوعـــات

الموسيقية. البرامج التي تكتب بهذه الطريقـة عـادة مـا تتكـون مـن مجموعـة اوامـر او

جمل متتالية (عادة كل جملة في سطر مستقل ).

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

Page 13: Prog guide 1

) و مــن خلل هــذه الليــةLabelsاما الســطر فتكــون مرقمــة او معنونــة (يمكن للبرنامج ان يقفز الى اي سطر برمجي.

ــوفر البرمجة غير المنظمة توفر اساسيات اليات التحكم بسير البرنامــج و ت و سنتكلم عن هذه الشياء بقليل من التفصيل فــيSubroutinesايضا الـ

البرمجة الجرائية. يبقى ان نعرف ان البرمجة غير المرتبة تتيح لنا انواع البيانات الولية مثل

العداد و النصوص و القوائم .

Structured Programingالبرمجة المنظمة ::

البرمجــة المنظمــة كالبرمجــة الغيــر منظمــة تعتــبر احــدى شــعب البرمجــة المرية ( احدى اهم و اكبر نماذج البرمجة). و اشتهرت البرمجــة المنظمــة

او الحد من استخدامها.GOTOبازالتها للجملة الشهيرة و هناك ثلث منهجيات اكثر شهرة لكتابة البرامج المنظمة :

- طريقــة ادســجار دايجســترا حيــث هيكــل البرنامــج مكــون مــن مجموعــة1 هياكل جزئية . بهذه الطريقة يمكن فهــم البرنامــج مــن خلل فهــم كــل جــزء

لوحده و به نتحصل على فصل و عزل للمهمات المختلفة.ــى2 - طريقة اخرى مشتقة من طريقة دايجسترا حيث يتم تقسيم البرنامج ال

برامج جزئية مع وجود مدخل واحد فقط للبرنامــج و لكــن تعــارض و بقــوةمبدء المخرج الموحد.

- طريقة جاكسون للبرمجة المنظمة و الــتي تعتمــد علــى محــاذاة البيانــات3المنظمة مع اجزاء البرنامج المنظمة.

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

Page 14: Prog guide 1

يوجــد علــى القــل ثلث طــرق اساســية لتصــميم برامــج البيانــات المنظمــةمقترحة باسماء اصحابها :

1.J. Dominique Warner2.Ken Orr3.Michael Jackson

من المنظور الدوني يمكن ان نرى البرامج المنظمــة علــى انهــا مكونــة مــناليات تحكم مسار البرنامج تنقسم الى ثلث انواع :

Sequence.و نقصد بها تنفيذ اوامر بترتيب تسلسلي منظم : Selectionــة ــى حال ــادا عل ــر اعتم ــة اوام ــذ مجموع ــا تنفي ــد به : و نقص

..ifالبرنامج و ذلك عادة مــن خلل الكلمــات المفتاحيــة : then .. else.. switch..case..

Repetitionو نقصد بها تنفيذ اوامر معينة و تكرار عمليــة التنفيــذ الــى : ان يصل البرنامج الى حالة معينة أو تنفيذ مجموعة اوامر علــى كــل عنصــر

من عناصر مجموعة ما . و ذلك يتم عادة من خلل الكلمات المفتاحية : while.. repeat .. for .. do while.. until

و هو صفة للغات البرمجــةBlock-Structuredربما يمر علينا مصطلح التي توفر فــي طريقــة كتابتهــا الكلمــات المفتاحيــة مــع القــواس الــتي تضــم

و هــيComb-Structuredالوامــر المجــزءة . امــا النــوع الثــاني هــو اللغات التي توفر الية الكلمــات المفتاحيــة المتسلســلة الــتي تحتــوي بـداخلها

مكــون مــن اربــعBlock الـــ Adaالوامر المجزءة . مثال الخير فــي لغــة اجزاء :

DECLARE BEGIN EXCEPTION END

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

Page 15: Prog guide 1

Proceduralالبرمجة الجرائية ::

تعتمد على عملية توفير الخطوات اللزمة لكي يصــل البرنامــج الــى الحالــة المطلوبة. و هي من اقدم النماذج و اكثرها انتشــارا و قريبــة جــدا للطريقــة الفطرية في التفكير. و سنستعرض بعض اهــم المفــاهيم الــتي تتعامــل معهــا

باختصار ...

:Variablesالمتغيرات

في البرمجة كما هو الحال في الرياضيات هناك حاجة ماسـة للتعامـل مـع المتغيـرات و ل . ابسـط انـواع المتغيـرات هـو الـذييخلو برنامج ما من متغير ال في حالت نادرة جـدا

. في هذه الحالة ص متغيـر يحمـل قيمـة معينـة12يحمل قيمة واحدة فقط . مثل ص = Valueو لكن هذه القيمة متغيرة فهي ليست ثابتة طالما البرنامج فـي طـور التنفيـذ فـي

اي لحظة ممكن تتغير هذه القيمة . بعض لغات البرمجة مثل جافـا تسـتوجب تحديـد نـوع المتغير فاذا كان المتغير من نوع حرف مثل فل يمكن اسناد قيم رقمية للمتغير و لكـن فـي لغات البرمجة الديناميكيةمثل بيرل و بي اتش بي ل يوجـد مثـل هـذا التقيـد فـالمتغير ص

مثل يمكن ان يحمل اي قيمة رقمية او نصية ..ألخ .:مثال

my $number = 1;

1في هذا المثال اعلنا عن المتغير و في نفس الوقت اسندنا له قيمــة و هــي كان بالمكان ان نعلن عن المتغير فقط دون اسناد اي قيمة :

my $number;

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

Page 16: Prog guide 1

:مثال اخر

my $name = “ali”;

$name = “Tomy”;

في هذا المثال المتغير كان يحمل قيمة علي و لكن تم تغيير القيمة الى تومي و سيظل المتغير يحمل اسم تومي الى نهاية البرنامج اذا لم يتم اعادة تغييــر

هذه القيمة.

:Arraysالقوائم

. مثلطيب ماذا لــو كنــا نريــد ان ننشــيء متغيــر و لكــن يحمــل عــدة اســماء اسماء اصدقاء البيئة. يمكننا ان نستخدم القــوائم او اللســتة و هــي متغيــر و 0لكن يحمل عدة قيم بداخله و ذلك بحســب ترتيـب رقمـي فاللسـتة تبـدا مـن

للعنصر الثاني ..الخ 1للعنصر الول و

مرة اخرى هنــاك لغــات برمجــة تطلــب تحديــد نــوع العناصــر الموجــودة فــي..القائمة و لغات ل تطلب، مثالنا هنا قائمة باسماء طلب

my @array = qw\ali yasser salman\;

يحمــل ثلث قيــم علــي و ياســر و ســلمان و يمكــنarrayالن المتغيــر الوصول الى كل قيمة بتحديد رقم القيمة :

print $array[0];

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

Page 17: Prog guide 1

و هــي بعبــارة اخــرى اول0هذا المر مثل سيطبع لنــا القيمــة ذات الــترتيب قيمة موجودة و في مثالنــا هــي علــي. طبعــا هكــذا يمكننــا اضــافة عناصــر و

ازالة عناصر بكل بساطة.

Null value:

و هي القيمة الغير معرفة و ل تعني الصفر كما يتوهم البعض . مثل العلن عن متغير بدون اسناد قيمة سيحتوي على قيمة غير معرفة ، و من الشياء الساسية في اختبار البرامج البحث عن القيم الغير معرفــة و يمكــن التحقــق

فــي بيــرل ، وdefinedبأن المتغير يحمل قيمة باليات مختلفة منهــا الدالــة مثالها :

my $number;

if (defined($number)){

print $number;}

else {print "undefined value"}

:Hashالهاش يوجد نوع اخر من المتغيرات يشبه القوائم الى حد كبير اسمه الهاش و لكن الختلف هنا

. بعبارة اخرى كنا في القوائم نشيرvalue و قيمة keyان القيم تمثل على شكل مفتاح ...* و لكن في الهاش يمكننا نحن ان نحدد المفاتيح و0الى القيم باستخدام مفاتيح رقمية

التي يجـب ان تكـون مميـزة و غيـر مكـررة و بـذلك نسـتطيع تمثيـل قاعـدة بيانـات مثـلالقواميس و دليل الهاتف ..الخ

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

Page 18: Prog guide 1

:مثال

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

Page 19: Prog guide 1

في هذه الحالة سيقوم المفسر بتنفيذ الوامـر مـن البدايـة الـى النهايـة و ينتهـي البرنامـج ، مثال:Sequencedبشكل تسلسلي

{my $number =1;

my $number2 =2;

print $number+$number2;

}

في هذا المثال سيقوم البرنامج بانشاء متغير و يسند له قيمة و متغيــر ثــانيو يسند له قيمة و في النهاية يجمع القيمتين و يطبعهما الى الشاشة .

نلحظ عدم وجود اي تشـعب فـي البرنامـج . و لكـن هـذا كمـا قلنـا للبرامـج البسيطة و لكن في اغلب الحيــان ســنحتاج الــى ادوات للتحكــم بســير العمــل

Control Structeresو مرة اخرى كل لغة برمجة توفر اليات مختلفة و لكن سنأخذ بعض المثلة الدارجة :

:Ifالجملة الشرطية

و الـتي تعنـي "اذا" نسـتطيع ان نحصـر تنفيـذ جـزء معيـن مـن البرنامـجifباستخدام بحسب الشرط. مثال:

if ($user eq "Ali")

{print "Access granted!"}

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

Page 20: Prog guide 1

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

، و في هــذه الحالــة الشــرط هــو ان يكــون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

Page 21: Prog guide 1

Unless:

تمامــا . فكأننــاif تعمــل بعكــس الجملــة الشــرطية Unlessالجملة الشرطية ifنقول اذا كان الشرط غير متحقق افعل كذا و كذا . بعكس ما كنا نفعــل فــي

حيث كنا نقول اذا كان الشرط متحقق فافعل كذا و كذا ..

مثال :

unless($a == 10)

{

print "The number isn't 10";

}

” مــا دام10في هذا المثال سيقوم البرنامج بطباعة جملة " هذا الرقم ليــس ان الشــرط فــي العلــى غيــر متحقــق و بــالطبع كنــا نســتطيع ان نكتــب هــذا

و لكن سيكون الشرط بالنفي و ليس باليجاب … هكذا :ifبطريقة

if ($a != 10 )

{

print "The number isn't 10";

}

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

Page 22: Prog guide 1

:دوائر التكرار

في بعض الحيان نحتاج ان نكرر تنفيذ اوامر معينة ، و هنا تأتي دوائر التكرار .. عادة ما يرافق كل دائرة تكرار عداد لديه قيمة صغرى و قيمة كـبرى لكـي تنتهـي عمليـة التكـرار عنـد الوصـول للقيمـة الكـبرى و بـذلك نضـمن عـدم اسـتمرار التكـرار الـى مـا ل نهايـة

infinite loop.

مثالها على طريقة السي :for loopلنبدا بالــ

for ($a=0;$a<10;$a++)

{print "loop $a"}

يوجد قيمة صــغرى لبدايــة العــداد و مــن ثــم الشــرطforنلحظ ان بعد كلمة الذي ستتحقق منه الدائرة عند تنفيذ كــل دورة و هــو هنــا ان يكــون المتغيــر

مــع انتهــاء كــل دورة .. و1 . و في النهاية سنزيد قيمة العداد +10اقل من ــذا10بذلك ستنفذ الوامر التي بين القواس المعقوفة مرات لنحصل على ه

الناتج :

loop 0loop 1loop 2loop 3loop 4loop 5loop 6loop 7loop 8loop 9

حيــث10 الـى 1 مثل مــن forايضا يمكننا ان نمرر قائمـة بيـن قوســي الـــ .10ستكون القيمة الصغرى واحد و القيمة الكبرى

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

Page 23: Prog guide 1

for (1..10)

{

print "looping 10 times!\n"

}

مرات.10هنا سنطبع الجملة التي بين القواس المعقوفة

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

Page 24: Prog guide 1

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دائرة التكرار اوامر معينة عدد مرات محددة مازال الشرط متحققا .

:مثال$a= 10;

while ($a != 0)

{print $a--;}

في هذا المثال سنتأكد مــن الشــرط هــل المتغيــر ل يســاوي صــفر؟ اذا كــانت . فــاذا كــان الشــرط1الجابة نعم سيتم طباعة قيمــة المتغيــر مــع انقاصــها -

. في مثالنا اذا ســيتم العــد0متحققا تنتهي الدائرة مع وصول المتغير للقيمة ...1 الى 10التنازلي من

Ouputs: 10987654321

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

Page 25: Prog guide 1

do while

في بعض الحيان نريد ان نقوم بعملية التكرار مرة واحدة علـى القـل بغـض النظـر عـن ..do whileكون الشرط متحققا او ل هنا نستخدم

my $a=10;do {print "this is a do while loop";$a++;}while ($a <10);

نلحظ هنا ان الوامر الموجودة داخل القواس المعقوفة سـتنفذ علـى القـل مـرة واحـدة و10 غير صـحيح . فـي مثالنـا قيمـة المتغيـر whileحتى لو كان الشرط الموجود في

الشرط هو ان نقوم بتنفيذ الوامر اذا كان العدد اصغر من عشرة لهذا الشرط غير متحقق فسيتم تنفيذ الوامر مرة واحدة و من ثم تقييم الشــرطdo whileو لكن لننا استخدمنا

و بما انه غير متحقق سنخرج من التكرار .

Until:

until تقوم بعملية عكسية لما تقوم به whileفهي تبدا بشرط غير متحقـق بـدل مـن و سـتنتهي الـدائرة عنـدما يصـبح الشـرط متحققـا بخلفwhileالشرط المتحقـق فـي

while:التي تنتهي عندما يصبح الشرط غير متحققا .. مثال

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

Page 26: Prog guide 1

my $controller = 10;

until ($controller == 20)

{

print"going up until 19\n";

$controller++;

}

ــيكون19 و انتهاء الى 10في هذا المثال سنقوم بالصعود بداية من حيث س و بذلك ينتهي التكرار ..20الشرط متحققا عند وصول المتغير الى قيمة

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

Page 27: Prog guide 1

when("Hashem"){say "welcome $name your are the 3d"}

default{say "I don't know you"}}

و عليــه ســيتخذnameنلحظ هنا كيف ان البرنامج سيختبر قيمة المتغيــر سـنحدد القيـم المتوقعـةwhenالجراء المناسب فنحن هنا باسـتخدام كلمـة

ــي او صــالح او هاشــم و ل ننســى ان نمــرر قيمــة مثل ان يكــون الســم عل افتراضــية فــي حــال كــانت قيمــة المتغيــر ل تتطــابق مــع اي مــن القيــم الــتي

و هي الحالة العامة .else هنا تعمل عمل defaultتوقعناها فـ

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

Page 28: Prog guide 1

else {say "I don't know you"}

}

Expression Modifiers

في اللغة هناك تراكيب مختلفة للجملة مثل "اسمي علي" او "علي هو اسمي" تركيبين مختلفين لنفس المعنى . في اللغات البشرية تتاح هذه المكانيـة لتفيـد معنـى التأكيـد علـى

جزء معين من الجملة .

مثل علي و خالد ذهبا لحفل التخرج . ماذا لو كنا نريد التأكيد على الحفل و ليس على مــن ذهب للحفل نسـتطيع ان نقـول لحفـل التخـرج ذهـب علـي و خالـد ! هنـا سـنركز اهتمـام

تعمـلExpression modifiersالسامع الى كلمة حفـل التخـرج . معـدلت التعـابير بمثل هذه اللية فهي تعكس ترتيب الجمل الشرطية و دوائر التكـرار و هـذه امثلـة نلحـظكيف ان الشرط يقع في نهاية الجملة بعد المر الذي سينفذ في حال كان الشرط متحققا:

$bool = 1;

$a = 5;

say "I am in love" if $bool;

say "false" unless $bool;

say "my name is", ($a++) while $a < 9;

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

Page 29: Prog guide 1

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

Page 30: Prog guide 1

في المثــال الثــالث قمنــا بتحويــل النــص الــى الحــروف الكــبيرة و فــي المثــال حيث بين هذين نضع التعابير//الخير الى الحروف الصغيرة . ما يهمنا هو

معامــلs حيث نضع المعامل مثــل //المعتادة و المر المهم الخر هو ما قبل الستبدال .

Event – Drivenالبرمجة المعتمدة على الحداث ::

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

threadsعادة نتعامل مع هذه النوعية من البرمجــة جنبــا الــى جنــب مــع . برمجة الواجهات الرسومية فهي توفر الية الربط بين الواجهات الرســومية و الكواد البرمجية و قد تكلمت عن اهم مباديء هذه الطريقة فــي البرمجــة في المقالة المرفقة " انت تعرف الكثير ! اكتب برامجك الشخصية"، حيــث

سنستعرض كيفية انشاء برنامج يبني بثقل على هذه الطريقة.

Object Oriented(الكائنية ) البرمجة الشيئية ::

كثر شهرة في اوســاط الشــركات الكــبيرة والطريقة المتداولة للبرمجة و ال حتى الجامعات هذه اليام . البرمجة الشيئية ليســت مفهومــا جديــدا بــل لهــا من القدم و التاريخ ما يشهد على نموها و تبلورها علــى مــدى عــدة لغــات برمجية تبنت هذه النظرة ، و لكن تتبع الجـانب التـاريخي ليـس مكـانه هـذه

العجالة. قبل ان نتكلم قليل عــن البرمجــة الشــيئية يجــب ان نعــرف لمــاذا لقــت هــذه الطريقة في البرمجة نجاحا واسعا بحيث ان اللغة التي ل تدعم هــذه الرؤيــة البرمجية و ل تتيح الدوات اللزمة لكتابة برامج شــيئية تعتــبر ناقصــة فــي

نظر الخبراء و الشركات ؟

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

Page 31: Prog guide 1

و لهذا نرى ان حتى اللغات التي لم تكتب اصــل علــى النمــوذج الشــيئي فــي وقت لحق يتم اضافة الــدعم لهــذا النمــوذج ، و كمثــال لغــة البرمجــة بيــرلــة و التي هي لغة اجرائية في الصل و لحقا تم اضافة النموذج الشــيئي للغ

لغة البي اتش بي و غيرها الكثير من اللغات . و ليس ما يهمنا هنا هو كيف تطبق كــل لغــة مفهــوم الكــائن ؟ و مــاذا يعنــي الكائن خلف الستار .. و لكن نعم السؤال المهم هنا ؟ لماذا كل هذا الهتمام بالبرمجة الشيئية مع ان اغلبنا دخلنا عالم البرمجة مــن منطلقــات مختلفــة؟ قد يكون المنطلــق الجــرائي اكثرهــا قرابــة للبداهــة! لمــاذا هنــاك مباهــاة و مقارنات بين مستوى دعم كل لغة للبرمجــة الشــيئية ؟ و هنــاك ســؤال مهــم اخر هل الفضلية للغات البرمجة الشيئية الصرفة مثل سمولتولك و ايفل او للغات الهجينة الخرى التي تتيح نوعا من المرونة و ل تجبر المبرمــج فــي

ان ينظر لكل شيء على انه كائن ؟ شخصيا افضل الطريق الخيــر لنــه حــتى لغــات البرمجــة الكائنيــة الصــرفة تختلف في تطبيق مبــادئ و مفــاهيم البرمجــة الشــيئية فلكــل وجهــة نظــر و رؤى لمعالجة الموضوع محل الخلف ، لذلك المرونة دائما سلح جيد لكــل لغــة برمجــة ، و ل اقصــد المرونــة بمعناهــا الضــيق مثل فــي العلن عــن المتغيرات بل اريد المعنى الوسع و هو حرية المبرمج في معالجة المشكلة

بالطريقة و الرؤية التي يختارها فتكون اللغة اداة و ليست عقبة . لذلك احب لغات البرمجة كلغـة بيـرل الـتي تجعـل مـن الحريـة شـعارا لهـا و توفر للمبرمج عدة طرق لحل المشكلة يختار منها ما يشاء و يبدع ما يشاء

بدون ان تجبره اللغة على طريق معين . على انه هنا ايضا اختلف و الكثير يرون ان هــذا المــر ســلح ذو حــدين و في اغلب الحيان يرجحون كفــة الجــانب الســلبي فنســمع عبــارات مثــل ( ل يمكــن قــراءة اكوادهــا ) او ( تعطيــك الحبــل و الكرســي لتشــنق نفســك ) و

غيرها من العبارات التهكمية .

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

Page 32: Prog guide 1

و يفضلون الشعار المغاير ( هناك طريقــة واحــدة فقــط لعمــل هــذا ) و ذلــك باعتبارهم يفيد التنظيم و يساعد على بناء المشــاريع العملقــة ، لــن احــول الموضوع هنا الى مناقشة طويلة و ل انتصارا لطــرف علــى حســاب طــرفــة للمبرمــج الكــبير بــول غراهــام حيــث يقــول اخــر لكــن ساستشــهد بمقول مضمونا ( اننا كنا ل نعير الشركات الــتي تطلــب مــبرمجين جافــا اهتمامــا و لكننا كنا نخشى الشركات التي تطلب مبرمجين ليســب او بيــرل لننــا حينهــا نعلم انهم يريدون مبرمجين حقيقييــن !). و فـي مكـان اخـر يقـول ( ان سـر نجاحنا هو استخدامنا لليسب و لكن يبدو ان ل احد مهتم بسرقة سر نجاحنا

.( !

بعد كل هذا الستطراد لنذكر شيئا من مزايا البرمجة الشيئية :

- البساطة : حيث ان الكائنــات الوهميــة تحــاكي الكائنــات الحقيقيــة ، ذلــك1يؤدي الى تقليل التعقيد و هيكل برامج واضح للغاية و سهل الفهم.

- سهولة الصيانة : حيــث ان عمليــة الصــيانة ســتكون ســهلة و ســنعرف2مكان الخطاء بالتحديد لن كل كائن له استقللية تامة.

- اعادة الستخدام : حيث ان الكائنــات يمكــن اعــادة اســتخدامها فــي عــدة3برامج.

- التطوير : حيث ان عملية التوسع ستكون سهلة من خلل اضـافة اعـداد4 قليلة من الكائنات الجديدة او التعديل المباشر علــى الكائنــات الموجــودة ، و

ذلك استجابة لي تغييرات او تحديات جديدة تفرضها بيئة التشغيل. - التكاملية و تقليل العتمادية : حيـث ان كـل كـائن يمثـل كيانـا منفصـل ،5

حيث ان العمل الداخلي للكائن منفصل عن اجزاء النظام الخرى. - سهولة التعديل : فهناك سهولة في اجراء اي تغييرات طفيفة في تمثيــل6

البيانات او الجراءات في البرامج الشيئية. لن التغييرات داخــل اي كلسل تؤثر على الجزاء الخرى للبرنامج، حيث ان الطريقة الوحيدة للعالـــــم

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

Page 33: Prog guide 1

الخــارجي فــي التصــال بهــذا الكلس هــو عــن طريــق واجهتــه باســتخدامميثودز الكلس نفسه.

الن ما هي البرمجة الشيئية ؟

هي بكل بساطة عملية محاكاة الواقع في البرمجــة هــي النظــر الــى الوجــود و مــن ثــم محاكــاته فــي عــالمObjectsعلى انــه مجـرد اشـياء او كائنــات

ــل البرمجة . كل شيء في هذا الوجود يمكن ان ينظر اليه على انه كائن و كــه خصــائص(ســمات) ــائن ل ــالAttributesك ــواعMethods و افع . ان

ثابتة كان تكون قيمة رقمية او نصية و لكــن قيـمField typeالخصائص يمكن ان تختلف من حالة الى اخـرى . الكلسField Valueالخصائص

Classهو عبارة عــن قــالب ننشــيء منــه الكائنــات حيــث داخــل كــل كلس سيتم تعريف خصائص و افعــال كــل كــائن مــن هــذا الكلس علــى انــه يجــب النتبــاه الــى انــه عــادة ل يعتــبر الكلس كائنــا فــي حــد ذاتــه ال فــي اللغــات الكائنية الصرفة . اذا عرفنا الن ان الكلس هــو مجــرد قــالب جــاهز لصــنع

كائنات من نوع ما .ــأتي الن لنشــير الــى وجــود نــوع اخــر مــن الكلســات و هــو مــا يســمى ن

Abstractبالكلسات المجردة Classهذه الكلسات مهمتهــا تنظيميــة فقط و ل يمكن انشاء اي كائن منها مباشرة بل يجب ان يكــون هنــاك كلس يرث الكلس المجرد و ان ل يكون هو بدوره كلسا مجردا حينها فقط يمكنــا ــا ذكرن ــى خصــائص الكلس المجــرد . هن ان ننشــيء كائنــات تحتــوي عل

ــة ــلInheritanceمصــطلح الوراث ــال ك ــة انتق ــل بســاطة عملي و هــو بك خصائص و افعال الكلس الب الى الكلس البن . لنأخذ بعض المثلــة قبــل

ان نواصل …

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

Page 34: Prog guide 1

لنتخيل هناك مصنع للسيارات و نريد ان نحاكيه بالرؤيــة الشــيئية يمكــن اننبسط الى شيء مشابه الى:

abstract class Vehicleabstract class Sedan

class Camry

ــدانا بكلس نلحظ اننا انشأنا سلسلة من الكلسات لتنظيم المور حيث انه بــم ــرد باس ــالVehicleمج ــائص و الفع ــنعرف الخص ــه س ــة) و في (مركب

الساسية التي يجب ان تحتويهــا كــل مركبــة ثــم انشــانا كلس مجــرد باســم سيدان يرث كل ما في كلس فيهكل و يضيف عليها خصــائص و افعــال كــل عربة من نوع صالون اخيرا انشأنا كلس باسم كامري يرث كــل خصــائص

سيدان و يضيف عليها مميزات و هوية الكامري التي نعرفها . هنا يطرح السؤال لماذا نجعل من سيدان و فيهكل كلسات مجردة ؟ لماذا ل نتركها كلسات طبيعية اليس الغرض فقط هو الوراثة ؟ فيكون الجواب بكل بساطة لننا نعلم مسبقا اننا لن ننشيء اي كائن مــن هــذه الكلســات و هــذه عادة برمجية جيدة يجب النتباه لها و على المستوى المهنــي يتخــذ القــرار

. Designفيها وقت التخطيط نلحظ ان المخطط الن قابــل جــدا للتطويــع و التعــديل فــي وقــت لحــق مثل باضافة مزيد من انواع السـيارات بـل و فئات السـيارات . فـي المثـال اعله كان المخطــط ينحــو منحــى عــامودي بطــبيعته اي سلســلة مــن العلــى الــى السفل و لكن مع محاكاة امثلــة اكــثر تعقيــدا ســيبدو شــكل المخطــط و كــانهــل ــة قب شــجرة ذات غصــون متفرعــة تصــلح لن تحــاكي الظــواهر الطبيعي

الحقائق البرمجية كمشجرة الكائنات الحقيقية من ثدييات ...الخ.

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

Page 35: Prog guide 1

قبل ان انتقل للنقطة القادمــة و بمــا ان الكلم عــن المخططــات ل بــأس بــأن و التي عادة مــا تــدرس جنبــا الــى جنــبUMLنذكر لغة النمذجة الموحدة

مع كورس لغات البرمجة الشيئية و هي لغة تمثيلية مفيدة جــدا فــي مرحلــة نوعا من المخططات تقع تحت مظلــة تصــنيفين14التخطيط و تحتوي على

رئسين :

- مخططات هيكلية تركز على عناصر النظام و ماذا يجب ان يحتوي.1 - مخططات تفاعلية (تصف سلوك الوبجكتس) تركـز علـى مـاذا يجـب ان2

يحدث في النظام المحاكى و كيف سيتم التواصل و التفاعل بين العناصر.

ــي من خلل هذا الستعراض البسيط بدانا نعرف سر قوة البرمجة الشيئية ف السيطرة على المشاريع العملقــة جــدا ، هــذه القــوة الــتي تنبــع فــي حقيقــة

المر من التجريد . في البرمجة الجرائية عــادة هنــاك مشــكلة فــي كــون البيانــات مشــاعة لكــل اجــــزاء البرنامــــج و لكــــن فــــي البرمجــــة الشــــيئية هنــــاك نــــوع مــــن

اي ان البيانات الخاصة بــاي كـائن لEncapsulationالكبسلة(التغليف) الـى الكـائن و هـوMessagesيمكن تعديلها ال من خلل ارسـال الرسـائل

بدوره يقوم بعمــل اللزم ســواء بالتعــديل المباشــر او اعــادة ارســال رســالةاخرى الى كائن اخر طلبا للمساعدة في اتمام الطلب.

من هنا نعرف انه في البرمجة الشــيئية تتــم المهــام عــن طريــق الرســائل و Protocolمجموع الرسائل التي يفهمها الكائن تســمى بروتوكــول الكــائن

بعبارة اخرى البروتوكول او الرسائل التي يمكــن للكــائن ان يتجــاوب معهــاهي ذاتها الميثودز المعرفة سلفا في كلس الكائن .

نعود هنا للشارة الى اهمية التجريد هنا ايضــا فانــا كمســتخدم لــو اردت ان ارسل ازهارا الى صديقي ما علي سوى ان اذهب الى محل الزهار و اخبره

باني اريد هذا النوع من الزهار لكي يتم ارساله الى صديقي .

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

Page 36: Prog guide 1

هنا نلحظ انني اعطيت البائع رسالة تمثل طلبا و ل حاجة لي بمعرفة كيفية تعامل البائع لتمام عملية الرســال . هــذه العمليــة تعــرف بــالبلك بوكســنج

Black Boxingاي ان كل كائن مسؤول عن التعامــل مــع كــل رســالة او طلــب بطريقتــه الخاصــة الــتي ل يجــب ان يعــرف عنهــا بقيــة الكائنــات اي

تفاصيل اضافية .ــى شــركة فبائع الزهور ربما يرسل طلب نقل الزهور الى محطة البريد او ال خاصة او ربما يعطيها لصــديق ســيذهب الــى منطقــة صــديقي !. و بمــا اننــاـــــة) ـــــورفيزم ( التعددي ـــــم عـــــن البوليم ـــــم عـــــن الرســـــائل لنتكل نتكل

Polymorphismو هــي مــن اهــم مميــزات البرمجــة الشــيئية و تلخــص بانها قدرة استجابة انواع مختلفة من الكائنات الى رسالة واحدة و لكن كــل كائن يفسرها بطريقته الخاصـة . المثـال المشـهور الـذي سيوضـح لنـا هـذا المفهوم هو لو ان احد مدراء الشركات عقد اجتماعا و بعد انتهاء الجتماعــا واحــدة و لكــن كــل موظــف ــالكم فالرســالة هن ــابعوا اعم ــال لمــوظفيه ت ق سيستجيب بطريقته الخاصــة فموظــف التســويق ســيعود الــى محــل الــبيع و

موظف الدعم الفني سيعود الى مكتب الدعم الفني و هلم جرا . الن بما اننا نفهم جيدا ميزة البوليمورفيزم ، لنعد الى الفعــال ( الميثــودز ) حيث يمكن ان تعايش حالت اقوى من البوليمورفيزم بدل من فقط التشارك في اسماء الرسائل كما في المثال الســابق . الحالــة الكــثر انتشــارا هــي مــا

ــود ــالوفر ل ــرف ب Methodيع Overloadــى ــائن عل ــدرة الك ــي ق و ه الســتجابة لرســالة معينــة بعــدة اشــكال مختلفــة علــى حســب نــوع و عــدد

Parametersالرجيومنتس or arguments، المرفقة مــع الرســالة مثل :

jump();jump(Int myNumber);

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

Page 37: Prog guide 1

فهنا لــو اعطانــا المرســل عــدد مــرات القفــز فــي الرســالة لســتجاب الكــائن بتكرار عملية القفز عدد المرات المطلوبـة و لكــن لــو تـرك المرســل رســالة فارغة من اي رقم ستكون الستجابة للميثود الفتراضي لنقــل قفــزة واحــدة

فقط . ــة هذا مثال بسيط و لكنه يوضح فكرة جيدة اخرى و هي توفير انواع مختلف

من الميثود لمعالجة حالت مختلفة من الرسائل و الطلبات . و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

Page 38: Prog guide 1

Multiple Inheritanceتعدد التوارث في لغات البرمجة مثل سي ++ و بيرل هنــاك امكانيـة لي كلس بــان يــرث من اكثر من كلس ، هذا الشيء ل يخلو من الفائدة الكثيرة على الرغم مــن بعض العيوب و لكن في لغة جافا مثل ل يمكن للكلس ان يرث ال مـــــــــنــوفر ــا ت كلس واحد و هنا يظهر انه سنلقي صعوبة و محدودية و لكن جاف

حيث يمكن لي كلس ان يطبق اكثر مــنInterfaceما يسمى بالواجهات ــانه واجهة بالضافة الى وراثته من كلس معين . عندما نعلن عــن كلس بــى الكلس يطبق واجهة ما فاننا ننشيء في الحقيقة عقد يجب من خلله عل

المطبق ان يوفر التطبيق البرمجي لكل ميثود موجود في الواجهة .

Accessفــي البرمجــة الشــيئية كــثيرا مــا نتكلــم عــن محــددات الــترخيص Modifier و التي من خللها نضيف بعد اخر من اخفاء المعلوماتData

Hidingطبعا لكل لغة برمجية انـواع تحكـم مختلفـة و لكـن فـي جافـا مثل لدينا :

1.private2.protected3.default4. public طبعا استخدام هذه الكلمات المفتاحية بالشكل الصحيح يحتاج خــبرة و قــرار المبرمج نفسه و لكن القاعدة العامة هي كلما كان هناك تشديد في الوصــول الى القيــم و الميثــودز كــان افضــل فنحــن قلنــا ان كــل كــائن يجــب ان يكــون مسؤول عن نفسه فل يفضل التعــديل علــى المعلومــات مــن امــاكن كـثيرة و

مختلفة تؤدي بدورها الى المشاكل .

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

Page 39: Prog guide 1

Functionalالبرمجة الوظيفية :: ــب ــدوال الرياضــية و تتجن ــم لل ــل الحوســبة كتقيي ــة تعام ــة الوظيفي البرمج

ــة Mutableالبيانــات المشــتركة ــا انState و الحال . تجــب الشــارة هن البرمجة الوظيفية هي مجموعة افكار ان صح التعبير و ليست قوانين يجب متابعتها لذلك هنــاك اختلف فــي تطــبيق البرمجــة الوظيفيــة فهنــاك اللغــات

pureالوظيفيــة الصــرفة functionalكلغــة البرمجــة هاســكل و غيرهــا حيث انها ل تتيح امكانية التغييـر او تحـديث قيمـة المتغيـر. بنـاء علـى هـذا

= 2الشرط تكون المتغيرات كالمتغيرات في الرياضيات حيـث ص + و3 و لكننــا سننشــيء متغيــر اخــر لن ص3لكن يمكننا ان نقــول ض = ص+

قيمة ثابتة غير قابلة للتغيير.و لكن بشكل عام اللغات التي التي تدعم :

– Code references– Closures

يمكن ان تسمى و ان تتيح البرمجة الوظيفية. في معرضFunctions او الـ Subroutinesتعمدت ان ل اتكلم عن الــ

الكلم عن البرمجة الجرائية مع ان هذه الدوال تستخدم بكثرة في البرمجــة الجرائية كأداة لستدعاء بعض الكواد التي يتكرر استخدامها في البرنامج مثال بسيط هو بدل من ان نضع اكــواد تــذييل صــفحة ويــب فـي كــل صــفحة يمكننــا بكــل بســاطة حفــظ و كتابــة الكــواد داخــل دالــة مــرة واحــدة فقــط و

الكتفاء باستدعاء الدالة اينما احتجنا لها .. حسنا السؤال الن اذا كانت اللغات الجرائية تــوفر الــدوال فلمــاذا ل تســمى كلها لغات وظيفية ؟ الجواب لكي نســتطيع ان نقــول عــن لغــة انهــا وظيفيــة يجــب ان تتــوافر فيهــا بعــض المميــزات الــتي ذكرنــا بعضــها فــي البدايــة و

سنتطرق لبعضها بقليل من التفصيل كما سيأتي..

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

Page 40: Prog guide 1

References:

اشرنا الى هذه النقطة كنقطة اساسية للبرمجة الوظيفيــة و ان كــانت ليســت في حد ذاتها خاصية في البرمجــة الوظيفيــة ال انهـا اليـة تتيـح لنـا امكانيـة

البرمجة الوظيفية في بعض اللغات الجرائية. ؟ من اسمه هو اشــارة الــى مكــان المعلومــات.referenceطيب ما هو الـ

بعبارة اخرى يمكننا ان نقول ان المشير او المرجع هو متغير لكنه ل يحمــل القيمة الحقيقة انما يشير الى مكانها فقط . كمثال عندما اقــول تكلمنـا سـابقا

فأنا هنا اشير الى مكان المعلومة فــي50عن البرمجة الجرائية في صفحة قبــل\الكتاب و لكن ليس لدي المعلومة نفسها . في بيـرل اضــافة المعامــل

اسم المتغير ينشيء لنا مؤشرا .. مثال:my %hash = ( one => ‘Hello’, two => ‘World’ );my $hashref = \%hash;

و امــا المتغيــرhashنلحظ هنا ان المتغير الذي يحمل القيم الحقيقيــة هــو hashrefهو مجرد متغير يشير الى مكان المعلومات و الكلم هنا يطول و

يختلف مــن لغـة الـى اخــرى لـذلك سـنتجنب الطالــة بمــا اننـا اخــذنا الفكـرةالعامة.

ــة الن لكي نتعرف اكثر على بعض المفاهيم المتداولة في البرمجــة الوظيفي نحن بحاجة اول لن نعــرف كيفيــة كتابــة الــدوال بشــكل عــام ، المــر الــذي

سيتيح لنا فهم المفاهيم الكثر صعوبة .

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

Page 41: Prog guide 1

اذا نبدا بمثال بسيط و هي دالة هيلو ! المشهورة..

&hello(); sub hello(){

print "welcome to ali website";}

في هذا المقال البسيط قمنا بتعرف دالة اسمها هيلوو بين القواس المعقوفة وضعنا الوامر التي سيتم تنفيذها في حــال اســتدعينا الدالــة و ذلــك يتــم (اي

الستدعاء) فقط بكتابة اسم الدالة و القوسين.

Parameters:

حسنا الن لماذا وضــعنا القوســين بعــد اســم الدالــة؟ هــذه القــواس تســتخدم لتمرير قيم الى داخل الدالــة و بــذلك نضــفي ديناميكيــة الــى دالتنــا فهــي النتستطيع ان تنتج قيم مختلفة بحسب القيمة المررة . اذا لنعدل المثال قليل :

&hello("Visitor1"); sub hello(){

$name = shift;

print "welcome to ali website\n";

print "welcome $name";}

جميل الن نلحظ اننا وضعنا قيمة بين القوســين لكــي نســتخدمها لحقــا فــي داخل الدالة و هناك عــدة طــرق لكيفيـة اســتقبال القيــم تختلــف مــن لغــة الــى

وname ستسند القيمة المــررة الــى المتغيــر shiftاخرى و لكن في مثالنا بذلك ستكون نتيجة الدالة طباعة جمل مختلفة بحسب اسم الزائر المدخل.

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

Page 42: Prog guide 1

جميل و اذا احببنا اضافة المزيد من القيم المــررة مــا علينــا ال ان نســتقبلها كقائمة و نسندها لمتغيرات حسب الحاجة ، مرة اخرى هذا المر يختلف من

لغة الى اخرى و لكن هذا نموذج :

&hello("Visitor1","Visitor2");

sub hello(){my ($name1, $name2) = @_;

print "welcome to ali website\n";

print "welcome $name1";

print "welcome $name2";}

نلحظ الن اننا نستطيع ان نتعامل مع العديد من القيم المــررة بهــذه الليــة . في بعض الحيان ل نريد فقط ان ننفذ اوامر بل نريد من الدالة ان ترجــع لنــا

قيمة لكي نسندها الى متغير مثل .

ففــي المثــال البســيطreturnكل ما علينا فعلــه الن هــو ان نســتخدم كلمــة ادناه هذه الدالة:

sub hello(){

return 3;}

my $number = hello();

print $number;

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

Page 43: Prog guide 1

، نلحــظ اننــا اســندنا القيمــة3هذه الدالة كما هو واضــح فقــط ترجــع قيمــة و في المر الخير طبعنا قيمة المتغير التيnumberالمرجعة الى المتغير

.3في طبيعة الحال ستكون مجرد الرقم

Scoping: من المور المهمة جدا في البرمجة ما يعـرف بالمـدى او مـدة حيـاة المتغيـر . فـي اغلـب لغات البرمجة مدى المتغير محصور بين القـواس المعقوفـة مثل دائرة تكـرار او جملـة شرطية او حتى في كائن او في بكج ..ألخ مما يعني ان المتغير خاص بالمنطقـة المعـرف بها و ل يمكن استخدامه خارجها، و لكن هناك متغيرات تكون عامة يمكن الوصول اليهــا من اماكن متعددة مما يجعلها عرضة للتغيير بشكل مسـتمر ، مـاذا لـو كـان اسـم المتغيـر العام هو ذاته اسم المتغير الخاص ستتولد لدينا مشاكل فـي المـدى و نحصـل علـى نتـائج

ربما تكون غير متوقعة .. لندرس هذا المثال :$total = 10;

$number = 12;

&adding($number);

sub adding()

{$number = shift;

$total = $total + --$number;

}print $number;

print $total;

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

Page 44: Prog guide 1

الن ماذا تتوقعون ستكون نتيجة المرين الخرين ؟

. نلحــظ21 ســيكون total و 11 ســيكون numberالنتيجــة ســتكون صادف انه موجــود ايضــاnumberكيف ان قيمة المتغير العام تغيرت لن

في الدالة الن لنتخيل كيف ستكون هذه مشكلة كبيرة جدا ان تقــوم كــل دالــة بتغير المتغيرات العامة ، بالطبع مــا سنحصــل عليــه هــو فوضــى حيــن تتبــع الخطاء .. اذا يجــب ان نجعــل مــن متغيــرات كــل دالــة متغيــرات خاصــة بهــا

sideبحيث ل يكون لها تأثير جانبي علــى متغيــرات البرنامــج effectsو في المقابل ايضا يجب ان نحرص علــى ان ل نجعــل مــن متغيــرات البرنامــج متغيرات عامة فهذا مصدر لكثير من المشاكل ، في اكثر اللغــات هــذه ليســت مشكلة فالمتغيرات ليست عامة ابتداء و لكــن فـي لغــات مثــل بيـرل يجــب ان

للحصول على هذه الميزة و من ثم نقوم بالعلن عنuse strictنستخدم و بــذلك نتفــادى تعــارض تــأثير اســماء المتغيــراتmyكل متغير باســتخدام

خارج مداها .. لنعدل الكود اذا :

my $total = 10;

my $number = 12;

&adding($number);

sub adding()

{ my $number = shift; my $total = $total + --$number;

}print $number;

print $total;

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

Page 45: Prog guide 1

للمتغيريــن اللــذين خــارج10 و 12الن سنحصــل علــى النتيجــة المتوقعــة الدالة حيث اختفى تأثير الدالة على المتغيــرات الخارجيـة . فالنتيجـة الن ان اصبح لدينا متغيرين لهما نفس السم فــي خــارج و داخــل الدالــة و لكــن فــي

الحقيقة كل منهم متغير مختلف عن الخر فقط صادف انهما بنفس السم .

:Recursionالعودية

العودية هي عندما نستخدم و نطبق الدالة في داخل تعريفها . بعبــارة اخــرى الدالة تستدعي نفسهـا. و في البرمجة الشيئية عندما يستدعي الميثود نفسه

recursiveيســمى methodأقــرب مثــال لتوضــيح الفكــرة هــو طريقــة . لرقم معين و الذي يتــم عــن طريــق ضــرب العــدد مــعfactorialحساب الـ

.125) = 5*4*3*2*1 ( 5العداد الصغر منه مثل للعدد لبرمجة هذه العملية بالعودية نلحظ النمــط هــو العــدد الصــلي ضــرب العــدد

و هكذا الى ان نصل الى الواحد و بناء عليه نوقف عملية الطــرح1الصلي- و نبدا العملية عكسية و عودية حيث ان الواحد قيمة معلومــة ضــرب الدالــة

التي كانت في النتظار و هكذا .. اذا ما سيحدث داخل الدالة هو :5*f(5-1)4*f(4-1) 3*f(3-1)2*f(2-1)f(1)=1 stop عندما نصل الى هذه النقطة سترجع الدالــة قيمــة معلومــة و ليــس اســتدعاء

للدالة مرة اخرى عليه بما ان القيمة معلومة نضربها مع الثنين ...ألخ.

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

Page 46: Prog guide 1

و هذه الكواد البرمجية لهذه العملية …:$fv = fact (5);print "factorial 5 is $fv\n";sub fact { my $val = shift; if ($val > 1) { $fv = $val * fact($val-1); } else { $fv = 1; }} هذه الظــاهرة لهــا اســتخدامات كــثيرة و مفيــدة و كمثــال اخيــر دالــة لتحويــل

باستخدام العودية...Binaryالرقام الى ما يمثلها من الـ sub binary {my ($n) = @_;return $n if $n == 0 || $n == 1;my $k = int($n/2);my $b = $n % 2;my $E = binary($k);return $E . $b;} و كما شاهدنا في المثالين و في اي حالة اخــرى يجــب تــوفير نقطــة ليقــاف عملية الستدعاء المتكرر و ال لن تتوقف عملية الستدعاء كمــا هــي الحــال

في دوائر التكرار اللنهائية.

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

Page 47: Prog guide 1

Higher-order functions

الن ســنبدأ اســتعراض بعــض الخصــائص الحقيقيــة للبرمجــة الوظيفيــة. وــ ــض بالـ ــا البع ــا يعرفه ــطلحهم و ربم ــب اص ــة حس ــدوال العالي ــنبدا بال س

callbacks او factoriesو تسمى الدالة بهذا السم عنــدما تحقــق احــد . المرين :

- ان تستقبل دالة كمدخل (قيمة ممررة)1- ان ترجع دالة بدل من قيمة معينة2

و قبل ان نأخذ بعض المثلة يجب ان نتعرف على :

Anonymous subroutines

و هي الدوال المجهولة او بعبارة اخرى ليس لها اسم !. مثل :

my $number_plus_two = sub {return shift()+2};

print $number_plus_two->(3); #5

في هذا المثال نلحظ اننا انشأنا متغير و لكن لم نسند له قيمة بل اســندنا لــه دالة و المهم هنا نلحظ انها ل تحتوي على اسم الن نلحظ عند تمرير قيمة

.5 لتكون النتيجة 2 سيتم جمعها مع 3

اذا نستطيع ان نقول للدوال المجهولة فوائد منها :- اننا نستطيع ان نسندها الى متغير او قائمة او هاش1Arguments- نستطيع ان نمررهم الى دوال اخرى 2

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

Page 48: Prog guide 1

- سنحتفظ بالمتغيرات في المدى المحيط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

Page 49: Prog guide 1

الن نلحظ النتيجة :$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

Page 50: Prog guide 1

المزيد من المصطلحــات :IDE

Integratedهــــذه الكلمــــة تمــــر علينــــا كــــثيرا و هــــي اختصــــار Development Enviromentاي بيئة التطــوير المتكاملــة ، حســنا ،

مــاذا يعنــي هــذا ؟ اعتقــد ان القليــل هــذه اليــام يبرمــج مــن خلل محــررات فــي لينكــس ، حيــث يمكــن لنــا انviالنصوص مثل المفكرة فــي وينــدوز و

نبرمــج برامــج كاملــة فقــط باســتخدام المفكــرة البســيطة ثــم نقــوم بعمليــة الترجمــة للكــواد ، هــذه الطريقــة و ان كــانت جيــدة مــن ناحيــة انهــا تجــبر المبرمج على العتماد على نفسه في البرمجة بدون اي تــدخل مــن برنامــجــى الكتابة كمساعد ، ال انها تقلل من النتاجية . ل يزال هناك من يتعصب ال ان برامج كتابــة الكــواد يجــب ان تكــون بســيطة فــي حــد ذاتهــا و ل تغــرق المبرمج فـي بحـار الخصــائص الــتي فـي العــادة ل يسـتخدمها بـذلك الشــكل المستمر . الى عهد قريب كنت اتبنى هذا الرأي لني كنت ارى ان المبرمــج فعل يجب ان يكون خــبيرا فــي لغتــه و حافظــا لكــل تفاصــيلها و خفاياهــا فل يحتاج الى مساعدة من اي احد حتى لو كان برنامج التطــوير، و كنــت اتخــذ من هذه الطريقة وسيلة لكي اصقل مهارتي، حيث كنت فــي وينــدوز اتعامــل

وPadreمباشرة مع المفكرة ، ثــم تطــور المــر الــى اســتخدامي لبرنامــج الذي كان بسيطا جدا فــي امكانيــاته وقتهــا و لكــن احببتــه لنــه يقــدم خدمــة

Emacsالتلوين للكواد. كنت اتجنب برنامج اكلبس او نــت بينــز بــل حــتى لنني كنت اؤمن بان الفترة التي سأقضيها في تعلم هذه البرامج و اكتشــاف خفاياها و حفظ اختصــاراتها ، يجــب ان اســتغلها فــي تعلــم لغــتي المفضــلة. على كل حال في يوم ما بدات العمل على مشروع لجافا و كان يتوجب علــي عمله باستخدام اكلبس و من خلل عملي في هذا المشروع رايت ان الفــترة التي احتجتها لتعلم البرنامج لم تكن بتلك الطول هذا فضل عن الفوائد الــتي تحصلت عليها من اســتخدام اكلبــس ، عنــدها بــدات اؤمــن ببئيــات التطــوير المتكاملة مع بعض التحفظات علــى بعــض النقــاط الــتي الــى الن افضــل اناعملها بنفسي مثل انشاء الواجهات الرسومية فهذه البرامج فقط تصلـــــح

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

Page 51: Prog guide 1

لتصــميم الشــكل الســريع للبرنامــج و لكــن عنــدما اريــد ان اكتــب الواجهــةــل اداة النهائية ساكتبها بنفسي لنني ل اريد كل تلك الكواد المحشوة من قب

فالتعامــل مــعhtmlانشاء الواجهات ، و كذا الحال ايضــا فــي كتابــة اكــواد ــب ــي اغل ــه ضــرورة ف ــل ل ارى ل ــي هــذا المجــال تطوي ــة ف الدوات المرئيــى بيئات التطــوير ــود ال ــل حــال هــذه وجهــة نظــر … نع ــى ك ــان. عل الحي المتكاملة ماذا تعني متكاملة هنا ؟ نستطيع ان نقول ان التكامل هنا يعني ان نتحصل على برنامج واحد يقدم محرر نصوص و خدمات تحرير النصــوص البرمجية مثل التلوين للكواد و ربما الكمال التلقائي و ايضــا ربمــا القــدرة على تصحيح الخطاء في الوقت الحقيقي كما يوجد في اكلبس. ثم يجــب ان يقدم البرنامج مفسر او مترجم للغة المعنية و قــد يســتخدم مفســر خــارجي. ايضا قد تحتوي البيئة على ادوات البناء التلقائي. ايضا قد يحتوي البرنامج ادوات لعملية التصحيح و التجريب. و مــا الــى ذلــك مــن خــدمات اخــرى قــدــوفير ادوات رســم ــل ت ــاته مث ــى اخــر حســب امكاني تختلــف مــن برنامــج ال

الواجهات الرسومية و ادوات العمل الجماعي ...الخ.

Compiled and interpreted

يمكن عادة تقســيم لغــات البرمجــة الــى مفســرة او مترجمــة او حــتى بعــض اللغات توفر الثنين معا كما سيأتي. المترجم يحــول الكــود المصــدري ( مــا نكتبه مثل بلغة سي) الى كود لغة اخرى غالبا الــى لغــة يفهمهــا الكمــبيوتر. عادة الهدف الساسي مــن الترجمــة هــو التحصــل علــى ملــف تنفيــذي. فــيــدوره اللغات المفسرة يتم ارسال الكواد الى مفسر اللغة و الذي يقوم هــو ب بتنفيذ الكواد مباشرة. بين هذا و ذاك توجد لغات لــديها مفســر و مــترجم و توجد لغــات مثــل جافــا يتــم فــي البدايــة ترجمــة الملــف المصــدري الــى لغــة

ــذيbyteCodeوسطية و من ثم يتم تفسير هذا الكود من خلل المفسر ال .Virtual Machineهو بالنسبة للجافا هو ذاته اللة التخيلية

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

Page 52: Prog guide 1

طبعا توجد الت تخيلية عديدة غير الخاصة بجافا لديها القدرة على التعامل و هـي اللـة التخيليـة الجديـدة الـتي تهـدفParrotمع لغات متعـددة مثل

لدعم لغات السكربتنج مثل بيرل و بايثون و روبي ...الــخ. اللغــات المفســرةــه ل يتم التدقيق على الخطاء وقت الترجمة كما حال اللغات المترجمــة فعلي يجــب ان يتــم التــدقيق علــى الخطــاء وقــت التنفيــذ هــذا يعنــي ان الســرعة ستكون اقل و هناك تفاوت كبير بين اداء المفسرات من حيث السرعة. لكــنــم العتماد على المفسر يعطي ميزة انتقالية اكثر من المترجم للتنقل بين نظ

التشغيل و النظمة المختلفة.

Syntax and Semantics

في البرمجة دائمـا مـا يمـر علينـا هـذين المصـطلحين ، فالخطـاء عـادة مـا تصنف الى انها اخطاء سنتاكس اي اخطاء املئية ل تتبــع القواعــد العامــة

كــواد فــي لغــة البرمجــة المعنيــة ، هــذه الخطــاء قــد تكــون بســببلكتابة ال اخطاء فــي كتابــة الكلمــات المفتاحيــة للغــة ، او اخطــاء فــي ترتيــب الكتابــة كالخطاء في مكان كتابة الشرط او اخطاء نســيان اضــافة ســيمي كلــون بعــد انتهاء الجملة و ما الى ذلــك . اذا فالســنتكس بالنســبة لي لغــة هــو بعبــارة اخرى قواعد كتابة الكواد في اللغة ، و هنا يظهــر تبــاين كــبير بيــن اللغــات فمن اللغات ما يهتــم بــان يكــون ســهل القــراءة و يســتخدم طريقــة واضــحة خالية من الرمـوز و القـواس الكـثيرة ، و هنـاك لغـات يتكـاثر فيهـا ظهـور القواس المعقوفة و القــواس و الرمــوز و غيرهــا ، علــى انــه فــي الوهلــة الولى يتصور ان الطريقة الولى هي الطريقة الفضل فمن منــا ل يحــب ان تكون اللغة سهلة القراءة ال ان الموضوع ربما يكون اعقــد ممــا نتصــور ، فمثل السراف في توضيح اسماء الميثودز و المتغيرات في جافا اثــار نقــدا بسبب طول هذه السماء و صعوبة حفظهــا ، فــي الجــانب المقابــل فــي لغــةــثرة مثل بيرل الكثير ممن يقراون بعض اكوادها يصابون بحالة خوف من ك

_$الرموز المتواجدة و لكن في حقيقة المر هذه الرموز لم تضف عبثا فــ

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

Page 53: Prog guide 1

و |$ ، و غيرها من الرموز لم توضع ال للختصــار و مســاعدة المبرمــج في ان يكتب اكواده باسـرع شـكل ممكـن . فـي ليسـب هنـاك كلم كـثير عـن كثرة القواس فيها بين مؤيد و معارض لذلك ارى ان هذا الجانب و ان كان ربما ثانويا ال انه مؤشر جيد لختيار لغة البرمجة التي ستبدا بها ، لنــه ل يخفى ان كثير من المبرمجين انما يحبون و يتعصبون لبعض اللغــات لنهــمــذه يستمتعون في كتابة اكوادها . نعود الى موضوع السنتكس و نقول ان ه النوعية من الخطاء ان ظهرت في البرنامج فهي ليست ذات اهمية قصوى لنها عادة مــا ستصــطاد فــي مرحلــة بنــاء البرنامــج و سيشــير المــترجم او

مثــلIDE'sالمفسر الى مكان الخطاء . فضــل عــن انــه هــذه اليــام توجــد اكلبس و غيره لــديها القــدرة علــى اصــطياد الخطــاء الطباعيــة فــي الــوقت

الحقيقي مباشرة . اما السمنتكس فهي الخطاء المنطقية في البرنامج ، مثل لمــاذا برنامــج مــا يرجع قيمة مغايرة للقيمة المتوقعة ، هذه الخطاء لن يشير لها المــترجم او المفسر و سيتم تشغيل البرنامج بشكل طــبيعي لــذلك عــادة مــا يتــم اكتشــاف مثل هذه الخطاء في وقــت التشــغيل و التجريــب ، ايضــا هــذه النوعيــة مــن

، و قد يطول امر اكتشافها الى شهور بل الىBugsالخطاء تعرف بالبجز سنوات اذا كانت معقدة و مخفية.

Syntacticقبل ان نختم هذه الفقرة يجب ان ننوه بمصــطلح Sugarو ، هو بكل بساطة اضافة المزيد من الســنتكس الــى لغــة برمجــة معينــة بحيــث تزيد سهولة كتابة الكواد و تيسر علــى المــبرمجين قـراءة الكــواد، و لكــن مع كل ذلك فازالتها مـرة اخـرى مـن اللغـة يجـب ان ل يحـدث اي اثـر علـى قدرة اللغة. بعبارة اخــرى هــي كلمــات تضــاف الــى اللغــة كــي تســاعد علــى التعبير عن بعض الخصائص بشكل اكثر تركيزا او اكــثر وضــوحا او بشــكل

مختلف و لكنها في حد ذاتها ل تضيف ميزة جديدة للغة البرمجة.

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

Page 54: Prog guide 1

و لهذا نقرا في ويكيبيديا قولهم ( لغات البرمجة العالية المستوى لغــات الــةــ 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; $self->x(0); $self->y(0); }

package Point3D; //child classuse Moose;extends 'Point'; //Inherits

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

Page 55: Prog guide 1

has 'z' => (is => 'rw', isa => 'Int'); //Additional fieldafter 'clear' => sub { //overriding my $self = shift; $self->z(0);};

Garbage collection جمع القمامة في علوم الحاســب اللــي تعنــي نــوع مــن الدارة التوماتيكيــة ( التلقائية) للذاكرة. اي انهــا نــوع خــاص مــن ادارة المــوارد ، الــذاكرة فــي

ليحل مشاكل ليسب.1959مثالنا. و هي من اختراع جون مكارثي في العام ــد حيث يقوم جامع القمامة باستعادة الذاكرة المحجوزة من قبل كائنات لم تعــة مستخدمة من قبل البرنامج. اذا فجامع القمامة مهمته ان يجعل مــن عمليــان يحــرر ادارة الذاكرة اليدوية امرا تلقائيا بحيث ل يحتاج المبرمج نفسه ب

الذاكرة المشغولة.فلسفة عملها تتخلص في :

- ابحث عن اي كائن ل يمكن الوصول اليه في المستقبل.1- استعد الذاكرة المحجوزة من هذا الكائن.2

بعــض اللغــات تــوفر جــامع قمامــة و البعــض الخــر ل تــوفر ذلــك و تــتركهللمبرمج و سنأتي على امثلة لكل النوعين لحقا.

Persistenceــا هي الثبات و الستمرارية ، و هي مجموعة المعلومات التي تستمر حياته حــتى بعــد انتهــاء دورة تشــغيل البرنامــج . بــدون هــذه الخاصــية ســتعيشــاف المعلومات فقط في الذاكرة العشوائية المؤقتة مما يعني ضياعها مع ايق تشغيل الكمبيوتر . و يمكن ان نصــل الــى الســتمرارية و الثبــات مــن خلل حفظ هذه المعلومات على موارد الــذاكرة الدائمــة مثــل القــراص الصــلبة و الفلش دسك..الخ ، لغات البرمجــة تــوفر طــرق كــثيرة لحفــظ البيانــات مثــل

...الخ.XMLالكتابة الى الملفات النصية و ملفات

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

Page 56: Prog guide 1

) :: لغة البرمجة بيرل 1 دليل لغات البرمجة (

: PERLلغــة البرمجــة : Practical Extraction and Report Language

ــد المبرمــج و اللغــوي المشــهور ــى ي ــي عــالم المصــادرظهــرت عل جــدا ف حيــث بـدات مرحلــة التطـوير الــى ان1986 لري وال فـي العــام المفتوحة

وصلت اللغة الى مرحلة نضج عالي فــي الصــدارة الخامســة . و منــذ العــام و التي تعتبر اعادة كتابة كاملة للغة بالضافة6 بدا العمل على بيرل 2000

لمشروع الببغاء و هي المنصة التي سـتعمل عليهـا بيـرل مــع القـدرة ايضـالضافة عدة لغات اخرى.

تتمتع لغة البرمجة بيرل بارشيف ضخم من الضافات الجاهزة او ما يســمى و هــي عبــارة عــن مــوجلز جــاهزة للســتخدام و اضــافةCPANبالسيبان

المزيد من القدرات الى لغة البرمجة بيرل حيث يمكن اضافة مـوجلز خاصـةبمكتبات برمجة اللعاب و تصميم المواقع و غيرها من التطبيقات المفيدة .

ــع الريجكــس ــل م ــي التعام ــا ف ــرل شــهرة واســعة بســبب قوته اكتســبت بي ( التعابير المعتادة) ، و كفائتها في ادارة المواقــع العملقــة مثــل امــازون و

) و غيرها . و اخيــرا اللغــة لهــاIMDbسلشدوت و قاعدة بيانات الفلم ( شــعار مشــهور " يوجــد اكــثر مــن طريقــة لعمــل هــذا " و هــذا يرجــع الــىــواد ــة الك انسيابية اللغة و القدرة على التطويع مما ادى الى التفنن في كتاب

Justو ظهور شعار another perl hackerبالنتيجة ظهر بعــض ،، المتهكمين من مبرمجي اللغات الخرى و اتهموا الكتابة بهذه اللغة بالقبح .

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

Page 57: Prog guide 1

لغات اثرت على بيرل :

•Lisp •Awk •Sed •C •C ++•Smalltalk •Pascal

لغات تأثرت ببيرل :

•Python •Php •Ruby •Dao •Javascript •Falcon •Windows PowerShell

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

Page 58: Prog guide 1

خصائص اللغة :

مفسرة.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

Page 59: Prog guide 1

) :: لغة البرمجة جافا 2 دليل لغات البرمجة (

Javaلغة البرمجة :

، حيــث ظهــرتoakلغة الجافا في حقيقة المر عبارة عن امتــداد للغــة الـــ ــهلة هذه اللغة في بداية التسعينات من قبل صن ميكروسستمز لتكون لغة س

مثــلالتســليةالســتعمال و التنقــل و كــانت تســتهدف التواصــل بيــن اجهــزة . اما الهــدف الساســي هــو اســتثمار اللغــة فــيVCRاجهزة اللعاب و الـ

اجهزة التلفاز التي تقدم خدمة الفيديو حسب الطلب . و في هذه الفترة بدات هذه الموجة و مستقبلها خاصــةoakالنترنت بالرواج و قد لحظ مطوروا

بعد ظهور اول متصفح جرافيكي، فتحول اهتمامهم الى الويب فأنشــؤا ويــب رنر و هو عبارة عن متصفح يدعم (اوك). حينها تم تغير اسم اوك الى جافا لتعارض الحقوق و سمي الويب رنر ( هوت جافا ويــب بـراوزر) . و تطــور المر لحقا بمشاركة العديد من الشركات و المطورين لتكتسب جافا شــعبية

و قوة كبيرة .

خصائص اللغة :

ل تعتمــد علـى نظــام معيــن : حيــث يقـوم الكومبــايلر الخـاص بالجافــا.1ــى ايJVMبانتاج بايت كود تحوله الى لغة اللة ، فبرامج الجافا تعمل عل

.JVMنظام توجد فيه

لغة برمجة كائنية .2

Garbage Collectionتحتوي على جامع قمامة .3

استايل الكتابة مشابه للسي ++.4

مكتبة قياسية غنية : تحوي عدد ضــخم مــن الكلســات و الميثــودز و.5يمكن تصنيفها الى ست اقسام:

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

Page 60: Prog guide 1

كلسات دعم اللغة •كلسات اليوتلتي (الدوات)•كلسات الدخال و الخراج •كلسات الشبكة ••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

Page 61: Prog guide 1

) :: ســـي3دليل لغات البرمجة (

Cلغة البرمجة :

بتطــوير لغــة البرمجــة1972قام دينيس ريتشــي مــن معامــل بــل فــي العــام المشـهورة جـدا ســي. سـي تبنـي و تقتبـس كـثيرا مـن سـابقتها لغـة بـي و

سابقات بي :

CPl و BCPL..

CPLتم تطويرها لهدف اساسي هو ان تكون لغة برمجة عالية المســتوى و ان تكون غير مرتبطــة بمعالــج او نظــام معيــن اضــافة الــى ذلــك ان تتيــح

. و لكن نقطة ضــعفlow levelالفرصة للمبرمج للتحكم بالمور التحتية هذه اللغة كانت انها كبيرة جــدا فــي الســتخدام لعــدة تطبيقــات. و فــي العــام

مــعCPL و هي عبارة عــن نســخة مصـغرة للــ BCPL تم تطوير 1976 قــام كــن1970المحافظة على خصــائص و اهــداف اللغــة الم . و فــي عــام

و الــتي هــي الخــرى تصــغير للغــةBثومبسون من معامل بيل بانشاء لغــة BCPLمع هدف اساسي و هــو برمجــة النظــم. و فــي نهايــة المطــاف قــام

لتظهــر الــىB الــى BCPLدينيس ريتشي باعادة بعض المزايا العامة من .Cالوجود اللغة الفائقة الشهرة

و عندما ظهرت قوة سي و قابليتها العاليــة للتطويــع تــم اعــادة كتابــة نظــام التشغيل يــونكس بشــكل شـبه كامــل باســتخدام سـي و قــد كــان مبرمجــا فــي

و على مــدى الســبعينات تــم انتشــار هــذه اللغــة فــي،الساس بلغة اسمبلي الجامعات و الكليات لرتباطها بيونكس و توفر الكومبايلرز الخاصة بها . و مع انتشار سي و تبني كل مؤسسة تطوير نسخة خاصة ظهرت مشكلة عدم

الــىANSIالتوافقيــة ممــا حــدى المعهــد المريكــي الــوطني للمواصــفات تشكيل لجنة خاصة لتبني تعريف و مواصفات موحدة للغة سي.

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

Page 62: Prog guide 1

اهم اللغات التي تأثرت بها سي:

•ALGOL68 •FORTRAN •B, BCPL , CPL •Assembly •PL/I

اهم اللغات التي تأثرت و اخذت من سي:

•C ++•C #•JAVA •Perl •AWK •Limbo

خصائص اللغة :

لغة مترجمة ( تستخدم كومبايلر ) تتميز بالسرعة الكبيرة. • مـعlow levelلغـة تتيـح الوصـول الـى الوامـر و المهـام التحتيـة •

اسلوب كتابة عالي المستوى فهي لذلك تصلح لبرمجــة نظــم التشــغيلجنبا الى جنب مع برمجة التطبيقات المعتادة.

اغلــب الميــزات مفصــولة مــن قلــب اللغــة و تضــاف كمــوجلز جــاهزة•للستخدام.

لغة منظمة ، اجرائية . •اسلوب الكتابة ثابت و ضعيف •

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

Page 63: Prog guide 1

اهم مجالت التطبيق :

انظمة التشغيل و برامج يونكس •برمجة اللعاب •

:هيلو ورد مثال برمجي

#include<stdio.h>

main()

{printf (“hello world!”);}

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

Page 64: Prog guide 1

) :: سمول تولك 4 دليل لغات البرمجة (

Smalltalkلغة البرمجة :

بقيـادة (الن كـي)PARCقامت مجموعة البحـث التعليمـي فـي زيروكـس . و بعد المزيــد مــن72بتصميم لغة برمجة كائنية عرفت باسم سمول تولك

ــك التجارب و التطوير توالت نسخ اخرى الى ان انتهت اللغة الى سمول تول80.

اهم اللغات التي تأثرت بها سمول تولك:

•Lisp •Simula •Logo •Sketchpad

اهم اللغات التي تأثرت و اخذت من سمول تولك:

•Perl •Ruby •Python •Java •Objective C •Self •Falcon

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

Page 65: Prog guide 1

خصائص اللغة :

بحتةلغة برمجة كائنية •اسلوب الكتابة ديناميكي •لغة متعددة التطبيقات •تتوافر لها بيئة تطوير مرئية •

اهم مجالت التطبيق :

برامج الباتش لبرامج المينفريم الكبيرة. •لديها القدرة على ادارة نظام التلفون الخاص بدولة كاملة •نظم المعلومات الدارية •مناسبة جدا للمشاريع العملقة •تستخدم كلغة اكاديمية للتدريس في الجامعات •

سمول تولك:غنومثال كود خاص بنسخة

‘Hello World!’ displayNl

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

Page 66: Prog guide 1

) :: ليسب5دليل لغات البرمجة (

Lispلغة البرمجة :

مع منتصف الخمسينات من القرن الماضي ظهرت موجــة الهتمــام بالــذكاء الصطناعي . نشأ هذا الهتمام الكبير بسبب رغبة اللغــويين بــالتعرف علــى معالجة اللغات الطبيعية ، و علماء النفس بسبب محاولة محاكاة المعلوماتــة اثبــات النسانية ، و اخيرا علماء الرياضيات بسبب الرغبة في جعل عملي النظريات عملية اتوماتيكية . و الشيء المشترك بين كل هذه التطبيقات هــوــكل الحاجة الى طريقة تسمح للكمبيوترات بمعالجة البيانات الرمزية على ش

قوائم.

مــن اول الشــركات المهتمــة بهــذا المجــال فــي اواســطIBMكــانت شــركة الخمسينات. في نفس الوقت كان العمل جاريـا علـى مشـروع الفـورترن . وــايلر للفــورتران تــم اضــافة معالجــة القــوائم لغلء تكلفــة اصــدار اول كومب

.FLPLكاضافة مستقلة الى الفورتران عرفت باسم

فـي ادارة بحــوثIBM عمـل جـون ماكـارثي فـي شـركة 1958فــي العـام المعلومات. تم استقدام مكارثي ليعمـل علـى انشـاء مجموعـة مـن متطلبـات

عمل الحوسبة الرمزية.

المحاولة الولى كانت التفرقة بين التعــابير الجبريــة. هــذه التجربــة الوليــة انتجت قائمة من متطلبات اللغــة مـن اهمهــا التعـابير الشـرطية، و العوديـة. هذه المتطلبات لم تكن موجــودة فــي اي لغـة برمجــة فـي ذلـك الزمــان حــتى

اعلى اللغات مستوى حينذاك و هي فورتران.

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

Page 67: Prog guide 1

حيــث قــام جــون مكــارثي1956تعود بدايات العمــل علــى ليســب الــى العــام بتطوير اسس الليسب في مشــروع صـيف دارتمــوث للبحــاث. كــان طمــوح مكــارثي ان ينشــيء لغــة معالجــة قــوائم للــذكاء الصــطناعي . و فــي العــام

ظهرت حاسوبات1970 ظهرت اول اصدارة من ليسب . و مع العام 1965 خاصة فقط بتشغيل برامج ليسب عرفت بـــ ( اجهــزة ليســب) . و فــي مطلــع الثمانينــات تــم ادخــال مبــاديء البرمجــة الكائنيــة الــى ليســب . و مــع العــام

تــم نشــر1992 بــدا العمــل علــى توحيــد معــايير ليســب و فــي العــام 1986.ANSI Common Lispمعايير

فــي الــوقت الراهــن توجــد اصــدارات عديــدة مــن ليســب مــن اهمهــا شــيم و كومون ليسب و آرك بالضــافة الــى لغــات مخصصــة لتطبيقــات معينــة مثــلــوى و اجمــل ايماكس ليسب و اوتو ليسب. تعتبر ليسب في نظر الكثيرين اق لغة برمجة على الطلق و يوجد الكثير من المتعصبين لها فمــن امثلــة تلــك المقولت : ال يبرمج باستخدام ليسب! و تعتبر البرمجة بهـا متعـة للحريـة

التي توفرها للمبرمج كما تفعل بيرل .

كأمثلة فقط:Lispاهم اللغات التي تأثرت بـ

•Perl •Ruby •Python •Javascript •Forth •Mathematica •Falcon •Lua •Forth •Qi

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

Page 68: Prog guide 1

خصائص اللغة :

لغة برمجة وظيفية •لغة برمجة متعددة الساليب في البرمجة : ميتا، اجرائية .. •جامع قمامة مبني داخل اللغة • العتمـاد علـى العوديـة : و هـو مبـدا تسـتمد منـه ليسـب قـوة كـبيرة•

خاصة في جانب الذكاء الصطناعي. طريقة الكتابة ديناميكية ، قوية •كل شيء في ليسب قائمة •

متوفرة كلغة تفسيرية و كلغة مترجمة•

اهم مجالت التطبيق :

سيطرت ليسب سيطرة تامة على مجال الذكاء الصطناعي لمدة تفوق الربع قرن و الى الن تعتبر اكثر لغة انتشارا في مجال برمجة الذكاء الصطناعي

بالضافة الى ذلك فليسب تعتبر رائدة اللغات في مجال البرمجة الوظيفية .

الذكاء الصطناعي: •

الروبوتات •محركات اللعاب •التعرف على النماط •

نظم ادارة الدفاع الجوي. •ادارة و معالجة القوائم. •تستخدم كلغة اكاديمية للتدريس في الجامعات ( البرمجة الوظيفية)•

:Hello worldمثال كود

(DEFUN HELLO-WORLD () (PRINT (LIST 'HELLO 'WORLD)))

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

Page 69: Prog guide 1

) :: لغة البرمجة بايثون 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

Page 70: Prog guide 1

8.Modula-3

9. AlGOL 68

اهم اللغات التي تأثرت ببايثون :-

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

Page 71: Prog guide 1

اهم التطبيقات :

في الوقت الحاضر تعتبر بايثون لغة برمجــة متعــددة الغــراض و لكــن مــناكثر استعمالت بايثون :

برمجة برامج لينكس.1

سكربتات ادارة النظام.2

التعامل مع قواعد البيانات.3

برامج الويب.4

مثال برمجي :

>>> def hello():...print "Hello, World!"

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

Page 72: Prog guide 1

) :: لغة البرمجة فورتران7دليل لغات البرمجة (

Fortranلغة البرمجة :

تعتبر فورتران واحدة من اقدم لغات البرمجة . قام بتطويرها مجموعــة مــن بقيادة جون باكوس ، حيث كــان اول ظهــور لهــا فــيIBMالمبرمجين في

ــام ــة1957الع ــتي “ترجم ــار كلم ــج اختص ــن دم ــورتران م ــم ف ــاء اس . ج الفورمــول” ، لن الهــدف الساســي كــان تســهيل عمليــة كتابــة المعــادلت

الرياضية في الكواد البرمجية.

فوتران تحتل مكانة خاصة بين لغات البرمجة لنهــا تعتــبر اول لغــة برمجــةعالية المستوى بالضافة الى استخدامها اول مترجم على الطلق.

قبل ظهور فورتران كان على المبرمجين ان يبرمجوا باســتخدام اســمبلي و التي كــانت تحتــاج الــى مجهــود مظنــي فــي الكتابــة اضــف الــى ذلــك عمليــة

تصحيح الخطاء التي كانت تحتاج مجهودا مضاعفا .

عليه ، كان الهــدف انشــاء لغــة برمجــة ســهلة التعلــم ، مناســبة للعديــد مــن التطبيقات ، غير معتمدة على الة معينة مع التمتع بقدرات عالية فــي مجــال

الرياضيات .

مــع كــل هــذه المزايــا اســتطاع المــبرمجون ان يــبرمجوا باســتخدام فــوتران % اسرع من البرمجـة باسـتخدام اسـمبلي الشـيء الـذي اتـاح فرصـة500

اكبر للتفكير في حل المشاكل بدل من كتابة الكواد و صيانتها .

اذا فورتران لها الفضل في انشاء نظرية الترجمة في علوم الكمبيوتر.

لكن مع التطور ظهرت مشكلة تعدد اصــدارات فــوتران ممــا حــدى المنظمــةــام ــى اصــدار معــايير موحــدة فــي الع ــة للمعــايير ال عرفــت1966المريكي

و اصــدار1978 فــي العــام 77 لحقهــا اصــدار فــورتران 66بفــورتران مع مزيد من الضــافات و المزايــا لهــذه اللغــة1990 في العام 90فورتران العريقة.

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

Page 73: Prog guide 1

اهم اللغات التي تأثرت بفورتران :-

1.C

2. AlGOL 58

3.Basic

4.PL/I

خصائص اللغة :

لغة مترجمة ..1

اجرائية..2

غير محصورة لجهاز معين..3

قوية جدا في التعبير عن المعادلت و التعابير و الدوال الرياضية..4

توفر تحكم قوي للتخاطب مع الهاردوير..5

التحكم بموارد التخزين و الذاكرة..6

% مــن كفــاءة20كفاءة و سرعة عالية جدا لتطبيقاتها ، اقل فقط بـــ .7برامج السمبلي!.

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

Page 74: Prog guide 1

اهم التطبيقات :

فورتران قوية جدا في عدة مجالت ، اهمها :-

برامج معالجة المعادلت الرياضية ..1

البرامج الرياضية ، العلمية ، الحصائية ، و الهندسية ..2

:هيلو وردمثال برمجي

WRITE(6,*)'Hello world'STOPEND

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

Page 75: Prog guide 1

Algol ):: لغة البرمجة 8 دليل لغات البرمجة (

Algolلغة البرمجة :

ALGOrithmic ( اختصـار لكلمـتي “Algolتعتـبر لغـة Language ــة و ــة العلمي ــة المســتوى المخصصــة للبرمج ــات عالي ــن اللغ ــدة م “) واح

، حيث طرحــت علــى شــكل تقريــر بعنــوان1950الحسابية . بدات في العام .68 ثم 60 و تطورت من خلل التقارير الى الجول 58الجول

تم تصميم اللغة من قبل لجنة عالمية لكي تصبح لغة عالية المستوى . و قـد تم طرح مشكلة النتقالية في تطــوير البرامــج مــن خلل اول اجتمــاع للجنــة في مدينة زوريخ. و قد جعلت خاصية النتقاليــة و عــدم العتمــاد علــى الــة معينة ، المصممين اكثر ابداعا و لكن في نفس الوقت جعلت عملية التطبيق

اكثر صعوبة .

الــى مســتوى عــالي مــن الشــعبيةAlgolو علــى الرغــم مــن عــدم وصــول التجارية كما حصل لفورتران و كوبول ، ال انها تعتبر اهم لغة في عصــرها من ناحية تأثيرها القــوي علــى اللغــات القادمــة . نظــام المفــردات و الهيكــل

اصبح شديد الشهرة لدرجة انــه فعليــا جــل لغــاتAlgolالنحوي الخاص بـ " .Algolالبرمجة يقال عنها " مشابه لـ

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

Page 76: Prog guide 1

:-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

Page 77: Prog guide 1

:هيلو وردمثال برمجي

BEGINFILE F (KIND=REMOTE);EBCDIC ARRAY E [0:11];REPLACE E BY "HELLO WORLD!";WHILE TRUE DOBEGINWRITE (F, *, E); END;END.

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

Page 78: Prog guide 1

) :: كوبول 9 دليل لغات البرمجة (

Cobolلغة البرمجة :

تعتبر كوبول واحدة من اوائل لغات البرمجة عالية المستوى . تــم تطويرهــا من قبل مجموعة من محترفي الكمبيوتر و منذ ذلك خضعت1959في العام

اللغة للعديد من التعديلت و التحسينات. و لحل مشـكلة عــدم التوافقيـة بيـن اصــدارات كوبــول المتعــددة قــامت المنظمــة الوطنيــة المريكيــة للقياســات

، حيث عرف هذا الصــدار باســم1968باصدار نسخة موحدة للغة في العام ANS COBOL قامت المنظمة مــرة اخــرى باعــادة1974 . و مع العام

طرح نسخة معدلة من كوبول تحتوي على المزيــد مــن المزايــا و الضــافات . و فــي الصــدارة1985الجديدة. و تكــررت هــذه العمليــة ايضــا فــي العــام

ــة .97الرابعة التي عرفت باسم كوبول تم اضافة خصائص البرمجة الكائني و يوجــد الن العديــد مــن المترجمــات لكوبــول علــى الرغــم مــن محــاولت

التوحيد في هذا المجال.

اهم اللغات التي تأثرت بها كوبول:

•FACT •COMTRAN •FLOW-MATIC

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

Page 79: Prog guide 1

لغات تأثرت بكوبول :

•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

Page 80: Prog guide 1

: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

Page 81: Prog guide 1

) :: بي اتش بي 10 دليل لغات البرمجة (

PHPلغة البرمجة :

و قــد اسســهاPHP/FIفي البداية ظهرت البي اتــش بــي لول مــرة باســم علــى شــكل مجموعــة مــن ســكربتات1995راسموس ليردورف فــي العــام

مكتوبة بلغة الــبيرل لكــي يســيطر علــى احصــائيات مــوقعه و يكســب بعــض Personalالمعلومات عن رواد موقعه ، و ما لبث ان اطلــق عليهــا اســم (

Hompage Tools. ” ـــية ـــفحات الشخص ـــميم الص ) أي ” ادوات تص طبعا للتوسع في تغطية بعض العمليات الضافية بدأ راســموس بصــنع آليــة بلغــة الســي بوســعها التصــال بقواعــد البيانــات ، و تمكــن المســتخدمين أنــرض يصنعوا لهم صفحات ديناميكية بسيطة . و اخيرا قرر راسموس ان يع

يســتطيع أييهذا الكود المصدري المكتوب بلغة الســي علــى الجمهــور لكــ شخص استخدامه او حتى تصــليح بعــض الخطــاء الــتي قــد توجــد حــتى ان بعضهم عمل على توسيع الكود باضــافة بعــض الخصــائص الجديــدة . طبعــا في هذه المرحلة لم تكن البي اتش بي تحتوي ال على القليــل مــن الفنكشــنز الــتي نعرفهــا الن و كــان بهــا بعــض الشــبه مــن لغــة الــبيرل و لكــن طبعــا

بامكانيات اكثر تواضعا من ان تقارن بالبيرل .

و الــتي كــانت تحتــويPHP/FI ، تنزل النسخة الثانية من الـ 1997العام على النسخة الجديدة الثانية من الكود المصــدري المكتــوب بلغــة الســي ، و

موقــع50000كان هنــاك اللف مــن المســتخدمين يســتخدمونها و حــوالي كــانت الــبي1998اعلن تنصيبه للبي اتش بي على سيرفراته. و فــي العــام

اتش بي قد اكتسبت قاعدة جماهيرية كبيرة و مئات من اللف مــن المواقــع كانت ترسل معلنة انها قامت بتنصيب البي اتــش بــي علــى ســيرفراتها . أي

% من اجمالي10 حوالي 3بلغت نسبة المواقع التي تستخدم البي اتش بي ــد1998 رسميا في php3مواقع الويب . و قد تم اصدار في شهر جون بع

ان امضت حوالي تسعة اشهر تحت الستخدام التجريبي .

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

Page 82: Prog guide 1

الرســمي . بــدأphp3 و بعد فــترة وجيــزة مــن اصــدار الـــ 1998في شتاء زيف سوراسكي و اندي جوتمانز بإعــادة كتابــة و برمجــة نــواة الــبي اتــش

بي .

” ( وZEND Engineلهــذا الغــرض بــدأ تصــميم محــرك جديــد ســمي “ يتركب اسم المحرك الجديد من اول حرفين من اسم زيف و اخر حرفين مــن

تــم التعريــف بهــذا المحــرك لول مــرة1999اسم اندي ) . و في منتصفات بعد ان حقق الهداف المنشودة منه بنجاح قــوي و فــي شــهر مــي مــن عــام

تــم اصــدار بــي2004 رســميا. فــي العــام 4 تم اصدار البي اتش بــي 2000 مع المحرك الثاني و نظــام كــائني جديـد ممــا قـدم قــدرات كائنيــة5اتش بي

جديدة و قوية..

:phpاهم اللغات التي تأثرت بها

•Perl •C •Java •C ++

:PHPلغات تأثرت بـ

•PHP4Delphi •Falcon

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

Page 83: Prog guide 1

خصائص اللغة :

تعمل على اغلب نظم التشغيل .1مخصصة لتطوير الويب .2 . HTMLكود بي اتش بي مضمن داخل وسوم الـ .3سهلة التعلم. .4غنية بالدوال الكثيرة المبنية داخل اللغة. .5اسلوب كتابة ديناميكي ، ضعيف. .6لغة مفسرة .7

اهم مجالت التطبيق :

بل شك اهم مجال لبي اتش بي هو قوتها فـي مجـال تطـوير مواقـع و•تطبيقات الويب.

كما يمكن انشاء برامج ذات واجهة رسومية خاصة بسطح المكتب. •

:Hello worldمثال كود

<?php

echo ‘Hello world’;

?>

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

Page 84: Prog guide 1

) :: ايفل 11 دليل لغات البرمجة (

Eiffelلغة البرمجة :

لغة البرمجة ايفل من انشـاء برتنـارد ميـر و مـن تطـوير شـركته ” هندسـة و كــان اول ظهــور1985 ، بدا العمــل عليهــا فــي سابقاالبرامج التفاعلية”

. و سميت بايفل تيمنــا بجوســتاف ايفــل المهنــدس الــذي1986لها في العام صمم برج ايفل المشهور . و يضيف مطوروا هذه اللغة ان باستخدامك هــذه اللغة في مشاريعك ستتمكن من انجاز المشاريع في وقتهــا و ضــمن الطــار

المالي المرصود كما حدث تماما في بناء برج ايفل !..

ايفل لغة تعنى بالجودة و الكفاءة و قابلية الستفادة من الكــود فــي مشــاريع لحقة ، اضافة الى انها قدمت مباديء برمجية جديدة وجدت طريقهــا لحقــا

الى لغات البرمجة المشهورة اليوم مثل الجافا .

اهم اللغات التي تأثرت بها ايفل :

•Ada •Simula •Z

لغات تأثرت بـ ايفل :

•Java •C #•Ruby •D •Lisaac •Sather

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

Page 85: Prog guide 1

خصائص اللغة :

تعمل على اغلب انظمة التشغيل .1لغة برمجة كائنية بحتة.2تدعم التكرار و التعدد في التوارث .3اسلوب الكتابة ثابت ، قوي .4لغة مترجمة .5التوثيق اللي .6 design by contractالبرمجة بالعقد .7

اهم مجالت التطبيق :

انظمة التصالت •التدريس الكاديمي •النمذجة الولية السريعة •البرامج التجارية •برمجة اللعاب •البرامج الطبية •الطيران •

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

Page 86: Prog guide 1

: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

Page 87: Prog guide 1

2 ) ::موجول- 12 دليل لغات البرمجة (

Modula-2لغة البرمجة :

( مصـمم لغـة باســكال )Niklaus Wirthفي منتصف السبعينات ، كــان يقوم بتجــارب و دراســات فــي الــتزامن ادت الــى انشــاء لغــة جديــدة اســمها موجول. و لكن موجول لم تصدر بشكل رسمي ابدا حيث تم ايقاف تطويرها بعـد نشـر تقريرهــا . و لكـن نيكلـوس قـام ببنـاء لغـة برمجـة جديـدة هـدفها

. طبعــا فشــلLilithالساسي هو ان تكون لغة خاصة بجهاز سيعرف باسم الجهاز و لم يحقق النجاح المطلوب و لكن لغته الخاصة هذه تم نشــرها فــي

. هذه اللغة على بساطتها ال انهــا2 لنعرفها الن باسم موجول-1980العام قوية و جبارة بحيث انها كانت اللغة المنتشرة فــي اوربــا حــتى مــع موجــودــة ــة البرمج ــة لغ ــا خليف ــا مبرمجه ــد اعتبره ــا. و ق ــي ++ لحق ــا و س جاف

باسكال ..

اهم اللغات التي أثرت على هذه اللغة :

باسكال ••ALGOL •Mesa •Simula-67

لغات تأثرت بـهذه اللغة :

•Ada •Oberon •Lua •Fortran 90

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

Page 88: Prog guide 1

•Modula-3 •Modula-GM

خصائص اللغة :

تعمل على اغلب انظمة التشغيل .1لغة برمجة امرية (الزامية) ، تنظيمية ، تعتمد الوحدات ( موجلر) .2ميزة الوحدات اعطتها قوة كبيرة في تطوير المشاريع العملقة .3اسلوب الكتابة ثابت ، قوي .4لغة مترجمة .5القدرة على البرمجة العالية و المنخفضة المستوى . .6تعتبر سهلة التعلم بسبب صغر قاموسها النحوي. .7

اهم مجالت التطبيق :

برمجة النظمة •البرمجة المتزامنة •برمجة النظمة المضمنة ( المدمجة) •هندسة البرامج •التعليم •البرمجة الصوتية •

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

Page 89: Prog guide 1

: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

Page 90: Prog guide 1

) :: روبي 13 دليل لغات البرمجة (

Rubyلغة البرمجة :

عنــدما اراد يــوكيهيرو1993بــدات فكــرة لغــة البرمجــة روبــي فــي العــام ماتسوموتو ان يطور لغة برمجة تتفوق على بيرل في القــوة و تكــون اكــثر كائنية من بايثون ، لغــة تجمــع بيــن الوظيفيــة و المريــة . تــم اختيــار اســم روبي للغة قبل البدء في كتابة اللغة حيث كان هناك ايضا اسم كورال و لكن

تم استبعاد الخير لوجود لغة برمجة اخرى بهذا السم .

للعامــة تله0,95 تــم اصــدار روبــي 1995 ديســمبر مــن العــام 21في يوم ثلث اصدارات متلحقة خلل يومين فقط. رافق هــذا الصــدار العلن عــن

انطلق القائمة البريدية روبي باللغة اليابانية .

1.3 . اعقبــه الصــدار 1 تم اصــدار روبــي 1996 من العام 25في ديسمبر حيث رافقته انطلقة القائمة البريدية النجليزية . هذا المر1999في العام

تسبب في ازدياد شعبية اللغة و تم اصدار اول كتاب انجليزي لهذه اللغة فيــذا2000العام باسم " برمجة روبي" تجدر الشارة هنا الى انه تم طرح ه

الكتاب مجانا لحقا .

.2009 من العام 30 في يناير 1.9.1تم اصدار روبي

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

Page 91: Prog guide 1

اهم اللغات التي اثرت على روبي :-

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

Page 92: Prog guide 1

“Garbage Collection-لديها جامع قمامة “5

JRuby-تعمل على منصة جافا باستخدام 6

-تعمل على اغلب انظمة التشغيل7

-سهولة كتابة الضافات بلغة سي8

اهم التطبيقات :

ــم ــن اه ــدو ان م ــن يب ــراض و لك ــددة الغ ــة متع ــة عام ــة برمج ــي لغ روب.Ruby on Railsاستخداماتها الن برمجة تطبيقات الـويب باسـتخدام

يتم ايضا استخدام روبي في اغراض اخرى مثل التجسيم الثلثي و المحاكاةو ادارة النظم …

مثال برمجي :

puts "What's your favorite number?"number = gets.chompoutput_number = number.to_i + 1puts output_number.to_s + ' is a bigger and better favorite number.'

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

Page 93: Prog guide 1

) :: باسكال 14 دليل لغات البرمجة (

Pascalلغة البرمجة :

تم تطوير لغة البرمجة باسكال اساسا من قبل ” نيكلس ورث ” و هو عضو . قـام البرفسـور نيكلـس ورثIFIPالفدرالية العالميـة لمعالجـة النصـوص

بتطوير باسكال لتحوي المميزات التي تخلــو منهــا لغــات البرمجــة فــي ذلــكالوقت. و كان هدفه الرئيسي في ان يجعل من لغة باسكال :

- لغة ذات كفائة في مرحلتي التطبيق و التنفيذ .1

- لغة تسمح بتطوير برامج ذات هيكلية جيدة و تنظيم رشيق.2

-لغة لغرض تعليم مباديء البرمجة الساسية و المهمة.3

ــز و تعتبر لغة باسكال و التي سميت بهذا السم تيمنا بعالم الرياضيات ” بلي و الــتي بــدورها هــيALGOL60باسكال ” وريثة مباشرة للغة البرمجة

الخرى حظيت بكـون البرفسـور ورث احـد مطوريهـا . ايضـا فلغـة باسـكالAlgolتبني علــى العناصــر البرمجيــة مــن كل w و ALGOL68و قــد .

، تله اعـادة تصـحيح فـي1961ظهر اول تعريـف للغـة باسـكال فـي العـام . و قد تم تصميمها لكــي تكــون اللغــة المســتخدمة فــي الكليــات1973العام

لتعليم البرمجة و مفاهيم البرمجة و قد كانت بالفعل هي اللغـة المفضـلة فـيهذا المجال من نهايات الستينات الى بداية التسعينات .

اهم اللغات التي اثرت على باسكال :-

1-ALGOL

2-Cobol

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

Page 94: Prog guide 1

اهم اللغات التي تأثرت بباسكال :-

1.Java 2.Oberon 3.Oberon-2 4.Ada 5.Oxygene 6.Modula-2 7.Component Pascal 8.Object Pascal

خصائص اللغة :

-النموذج امري ، هيكلي ، اجرائي..1

-لغة مترجمة ، اغلب المترجمات كتبـت بلغـة باسـكال نفســها و لكــن جنــو2باسكال مكتوب بلغة سي .

-استايل الكتابة قوي و ثابت .3

-تدعم البوينترز4

-يوجد لها مفسر ايضا ..5

بعض مميزات اللغة لمجال تعليم البرمجة الهيكلية :

) و هي انواع البيانات الموجودة سلفا فيData types-احتوائها على (1اللغة مثل العداد الصحيحة و المنطقية و الحروف …الخ

-اضافة الى ذلك يمكن انشاء انواع بيانات جديدة يحددها المستخدم.2

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

Page 95: Prog guide 1

-احتوائها على مجموعة جيدة من قوالب البيانات المهيكلة مثــل : القــوائم3 .Setsو الريكوردز و الـ

ــة : و هــذا يتحصــل مــن خلل اســتخدام البرامــج4 -دعــم البرمجــة الهيكليالضمنية او ما يعرف بالبروسيجرز و الفانكشن.

اهم التطبيقات :

كما اشرنا سابقا فالمجال الهم لباسكال هو بيئة التعليم . هــذه اللغــة اساســا لم تصمم ال لهذا الغرض و هي الى الن خيار جيد لتعليم البرمجـة الهيكليـة و لكن ما جعلها تفقد مكانها فـي بدايـة التسـعينات هــو ازديـاد شـعبية لغـات

++ و جافا و سمولتولك و بدء الجامعات و الكلياتCالبرمجة الشيئية مثل تدريس مفاهيم هذه النوعية مـن البرمجـة . و لكـن تجـدر الشـارة الـى انـه للمهتمين بالبرمجة الشيئية يوجد بديل باســم اوبجكــت باســكال و قــد برمــج

برنامج سكايب المشهور به ، و ليس الكلم عن هذا الموضوع .

مثال برمجي :

program HelloWorld;

beginwriteln('Hello World');end.

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

Page 96: Prog guide 1

Pl/1) :: 15دليل لغات البرمجة (

Pl/1لغة البرمجة :

فــي اواســط الســتينات مــنIBM بواســطة Pl/1تــم تطــوير لغــة البرمجــة ــة ــان الســم الصــلي للغ ــد ك ــرن العشــرين. و ق ــة البرمجــةNPLالق ( لغ

ــنPl/1الجديدة) و لكن تم تغيير السم الى لتفادي المغالطة بين اللغــة و بيNPL( مختبر الفيزياء الوطني ) في انجلترا . لذلك لو تم تطــوير المــترجم

خارج انجلترا لربما بقي السم بدون تغيير .

قبل تطوير هذه اللغة البرمجية كانت لغات البرمجة تركز علــى جــانب معيــن من التطبيق مثل الـذكاء الصـطناعي او الحسـابات الرياضـية او المشـاريع

ــانت اولPl/1التجارية . و لكن لم تصمم لكي تستخدم بهذه الطريقة ، بل ك لغة برمجة ضخمة هدفها ان تغطي اغلب مجالت التطبيق . لذلك كــان علــى

Pl/1ان تواجه تحديات قوية لتنافس فورتران في المجال العلمي و كوبــول في مجال العمال ، فكان من هذه الهداف و التحديات :

-ان تكون لغة مترجمة مع سرعة تنفيذ مشابهة لفورتران.1

-ان تكون قابلة للتوسيع لدعم المزيد من الهاردوير و التطبيقات الجديدة.2

-زيادة النتاجية و تحسين الوقت المحتاج لعملية البرمجــة مــن خلل نقــل3المجهود من المبرمج الى المترجم.

-ان تكون متعددة المنصات و ان تعمل بشكل جيد علــى مســتوى كــل قطــع4الهاردوير و نظم التشغيل.

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

Page 97: Prog guide 1

:Pl/1اهم اللغات التي اثرت على

1-Cobol

2-Fortran

3-ALGOL

:-Pl/1اهم اللغات التي تأثرت ب

1.SP/k 2.REXX

خصائص اللغة :

-النموذج امري ، هيكلي ، اجرائي..1

-لغة مترجمة .2

-تحاول ان تحاكي اللغة النجليزية في طريقة الكتابة3

-تدعم العودية ، و مفاهيم البرمجة الهيكلية.4

ــة5 -ل توجد بها كلمات مفتاحية محجوزة ( يمكن ان يكون اسم المتغير كلممفتاحية )

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

Page 98: Prog guide 1

اهم التطبيقات :

Pl/1كــانت تتمتــع بشــعبية كــبيرة فــي جــانب ادارة العمــال و التطبيقــات العلمية. و كانت اللغة الرئيسية للتدريس في جامعة ميشيغان ديربورن لمدة من الزمن . اما في الوقت الحاضر فشــعبيتها قلــت كــثيرا طبعــا ( و لكنهــا ل تزال تستخدم) بسبب اللغات الجديدة و المفــاهيم الحديثــة . و مــن الشــركات

شــركة فــورد موتــورز المعروفــة و شــركة مــارثونPl/1الــتي اســتخدمت النفطية .

مثال برمجي :

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

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

Page 99: Prog guide 1

) :: هاسكل 15 دليل لغات البرمجة (

لغة البرمجة : هاسكل

، زاد الهتمــام بلغــات1985 في العام Mirandaبعد اصدار لغة البرمجة ارتفع عــدد اللغــات الوظيفيــة1987البرمجة الوظيفية الكسولة . فمع العام

لغة . طبعــا مــن هــذه اللغــات كــانت ميرنــدا الكــثر12الصرفة الى اكثر من Researchاســـتخداما و لكنهـــا لـــم تكـــن مجانيـــة بـــل مملوكـــة لشـــركة

Softwareلـــذلك فـــي مـــؤتمر اللغـــات البرمجيـــة الوظيفيـــة و هندســة . ــدFPCA 87الكمبيوتر ( ) و الذي تم عقده في بورتلند اوريجون ، تم عق

اجتماع ابدى فيه المشاركون ضرورة انشاء لجنة لتعمل على انشاء معاييرمفتوحة لهذه اللغات .

1997 . و فـي العــام 1 تـم النتهــاء مــن تعريــف هاســكل 1990و مع العام الـتي وفـرت اصـدار ثـابت ، خفيـف و98تـوجت الجهـود بظهـور هاسـكل

متنقل من اللغة ، بالضافة الى مكتبة لغــرض التعليــم . و قــد رحبــت اللجنــة عــن طريــق اضــافة الخصــائص98بانشــاء الضــافات و البــدائل لهاســكل

التجريبية .

GHCلغة هاسكل تتطور بشكل سريع جدا و يعتبر المــترجم ” جلســكو ” هو الكثر شيوعا في الســتخدام . يــذكر ان ســبب التسـمية هــو تيمنــا بعــالم

الرياضيات و المنطقي المريكي هاسكل كوري.

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

Page 100: Prog guide 1

:Haskellبعض اللغات التي اثرت على

1-Lisp

2-Miranda

3-APL

4-Ponder

5-Standard ML

6-Lazy ML

:-Haskellاهم اللغات التي تأثرت ب

1-Omega

2-Perl6

3-Python

4-Visual Basic 9

5-Clojure

6-Cat

7-Cayenne

8-Qi

9-Java Generics

10 -F#

11 -C#

12 -Scala

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

Page 101: Prog guide 1

خصائص اللغة :

-لغة برمجة وظيفية صرفة .1

-تستخدم التقييم الكسول .2

-استايل الكتابة ثابت و قوي .3

-ذات معايير و مواصفات مفتوحة.4

.Hackage-تتمتع بمجتمع فاعل و لديها مخزن غني بالمكتبات يدعى 5

يعتــبر مــترجم و مفســر ايضــا و يعمــل علــى اغلــب نظــمGHC-مــترجم 6النظمة و يتميز بالكفاءة العالية.

اهم التطبيقات :

هاســكل بــدات تــزداد شــعبيتها فــي الســتخدامات التجاريــة . المبرمجــة بلغـة هاســكل فكــانت6المشــهورة اودري تانــج قــامت بعمــل تطــبيق لــبيرل

ــاPugsالنتيجة نسخة تعمل بشكل جيد في زمن قياسي معروفة باسم . ايض اختـــارت هاســـكل كلغـــة تطـــوير لدوات النظـــام .Linspireتوزيعـــة

Xmonad و هو مدير نوافذ يعمل على Xالمشهور كتب كــامل باســتخدام هاسكل . و هناك الكثير مــن الســتخدامات و البرامــج لهاســكل علــى صــعيد

التطوير و قواعد البيانات و حتى المترجمات و اللعاب.

مثال برمجي :

module Main where

main :: IO ()main = putStr "Hello World!"

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

Page 102: Prog guide 1

) :: فيجوال بيسك17دليل لغات البرمجة (

Visual Basicلغة البرمجة :

، و الــتي قــدمت1991 فــي العــام 1.0تــم عــرض فيجــوال بيســك الصــدار ــم تطويرهــا طريقة السحب و الفلت لتصميم واجهات المستخدم ، و التي تــذي انشــأه ( الن كــوبر ) و شــركته مــن خلل برنامــج انشــاء الفــورمز ال

.Tripodالمعـــــــــــــــــــــــــــــــــــــــروف باســـــــــــــــــــــــــــــــــــــــم Tripodحيث تم التعاقد بين ميكروســوفت و كــوبر ( و شــركاؤه) لتطــوير

، و ذلـك تحـت المسـمى3.0ليكـون فـورم سيسـتم قابـل للبرمجـة لوينـدوز ــبرمجي ــي ).Rubyال ــة روب ــة البرمج ــع لغ ــة م ــا اي علق ــد هن ( ل توجTripodلم يكن يحتوي على لغة برمجة اطلقا ، لذلك قررت ميكروسوفت

لتنشيء ما يعرف بـفيجوال بيســكBasicبأن تدمج روبي مع لغة البرمجة ــج ــاء البرام ــي انش ــرئي ف ــانب الم ــى الج ــا عل ــة : لتركيزه ( بيســك المرئيبســــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــرعة ).

حيــث تــم تحســين بيئة البرمجــةVB2.0 تم اصدار 1992في نوفمبر العام تــم اصــدار1993لتكون اكثر ســهولة و اكــثر ســرعة . و فــي صــيف العــام

VB3ــم اضــافة ــة . و فــي هــذا الصــدار ت بنســختيه القياســية و الحترافيMicrosoft من 1.1الصدار Jet Database Engineو فــي العــام .

هــذا الصــدار كــان الول فــي دعــم انشــاء برامــجVB4 تــم اصــدار 199516bit 32 وbitايضــا مــع هــذا الصــدار اصــبحت هنــاك امكانيــة انشــاء .

كلسات غير ذات واجهة رسومية. و قد عانى هذا الصدار بعــض المشــاكلــــــــــــــــــــــــــــــــــــــــــــــــة . ــــــــــــــــــــــــــــــــــــــــــــــــي التوافقي ف

VB قررت ميكروســوفت ان تصــدر 1997مع الصدار الخامس في فبراير .32bitحصريا لمنصة

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

Page 103: Prog guide 1

في هذا الصدار اصبح هناك امكانيــة انشــاء ازرار مــن تصــميم المســتخدم بالضافة الى القدرة لبنــاء البرامــج مباشــرة الــى الكــود الــبرمجي التنفيــذيلوينـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــدوز .

، تم اصدار النسخة السادسة من فيجوال بيســك مــع العديــد1998مع العام من التحســينات اهمهــا القــدرة علــى انشــاء برامــج الــويب . و قــد تــم الغــاء

VB6 2008 من قبل ميكروسوفت مــع العــام . VB.NETيعتــبر وريــث VB6. و الــذي هــو جــزء مــن منصــة ، NETو ل يــوفر اي توافقيــة مــع

على الرغم مــن وجــود برامــج تقــوم بالتحويــلVBالصدارات السابقة من بين اكواد الصدارين ال ان التحويل التوماتيكي الكامل غيــر ممكــن لغلــبــن ــبير م ــع ك ــاك مجتم ــى الن هن ــه ال ــى ان ــارة ال ــدر الش ــاريع . تج المش

.VBالمستخدمين ل يزالون يدعمون و يبرمجون بالصدار السادس من

لغات اثرت على فيجوال بيسك :

1 -QuickBASIC

لغات تأثرت بفيجوال بيسك :

1 -VisualBasic.NET2-REALBasic3 -Gambas4 -Basic4ppc

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

Page 104: Prog guide 1

اهم خصائص اللغة :

- كائنية التوجه1- استايل الكتابة ثابت و قوي23 -Event Driven- لديها جامع قمامة4- بشكل عام ليست حساسة بالنسبة للحروف5- اندماج قوي مع نظام التشغيل ويندوز6- يوجد لها مترجم من الصدار الخامس جنبا الى جنب مع المفسر7

ــل اصــدار دوت ــى الصــدار الســادس ( قب ــوب فيجــوال بيســك ال بعــض عينيت ) :

ـــــــــــــــــة1 ـــــــــــــــــة الكائني ـــــــــــــــــعيف للبرمج ـــــــــــــــــم ض - دعــــ 2 ــــتري للـ ــــدخلت الريجس ــــدات م ــــى تعقي ــــة عل .COM- العتمادي - قبــل الصــدار الخــامس كــانت هنــاك مشــاكل مــن ناحيــة الداء للبرامــج3

المكتوبـــــة بهـــــذه اللغـــــة ، تـــــم ازالتهـــــا مـــــع الصـــــدار الخـــــامس..DLL- مشاكل في التوافقية بسبب تعدد اصدارات 4

اهم الستخدامات :

هــدفها الساســي هــو تســهيلBASICفيجــوال بيســك كمــا لغــة البرمجــة عمليــة البرمجـة ، حيــث انهــا وفــرت خاصــية البرمجــة الســريعة باســتخدام الســحب و الفلت للعناصــر لكــي يتــم انشــاء الواجهــة الرســومية بيســر و سهولة ، هذا اضافة الى توفير قيم افتراضية لغلب العناصر ما يساعد فــي تقليل كتابة الكواد من قبل المبرمج فأصبح انشاء البرامــج لوينــدوز شــيء

سهل و كأنه مجرد تصميم لصحفة ويب هذا بالطبع ل يعني انه ل توجد

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

Page 105: Prog guide 1

هناك امكانية لنشــاء برامــج عملقــة و معقــدة باســتخدام فيجــوال بيســك . عليه فان اغلب استخدامات فيجــوال بيســك تقــع فــي برامــج وينــدوز ســواء

الصغيرة او الكبيرة .

مثال برمجي :

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

Page 106: Prog guide 1

JavaScript) :: 18دليل لغات البرمجة (

لغة البرمجة : جافا سكربت

تم تطوير جافا سكربت بواسطة براندن ايك من شركة نتسكيب تحت مسمىMocha و الذي تم تغييره لحقا الى ، livescriptو في النهاية الى جافا

ســكربت . تــم اضــافة و تطــبيق جافــا ســكربت للمــرة الولــى فــي الصــدار2.0B3 و قد تســبب اســم1995 من المتصفح العريق نتسكيب ( ديسمبر .(

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

مطورة من نتسكيب و موزيل .

ــتي ــن لغ ــها م ــم اقتباس ــة ت ــميم اللغ ــي تص ــية ف ــاديء الساس وSelfالمبScheme.

و بسبب انتشار و نجاح جافا سكربت كلغة سكربت لطرف العميل في مواقع الــويب قــامت ميكروســوفت بانشــاء اصــدارة متوافقــة خاصــة بهــا اســمتها

Jscript لتتفادى مسائل الترخيص. و قد تم اضافة Jscriptفي الصدار الثالث من انترنت اكسبلورر .

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

Page 107: Prog guide 1

بهــدف توحيــد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

Page 108: Prog guide 1

اهم خصائص اللغة :

- متعددة النماذج : وظيفية ، كائنية …1

- لغة نصية (سكربت)2

- غير معتمدة على نظام تشغيل محدد3

- استايل الكتابة ديناميكي4

بدل من الكلسات للوراثةprototypes- تستخدم الـ 5

- لديها قدرة تعامل قوية مع التعــابير المعتــادة علــى طريقــة لغــة البرمجــة6بيرل

html-امكانية تضمينها داخل صفحات 7

- تحتاج الــى محــرك يقــوم بتفســير الكــواد المصــدرية ، و يعتــبر ســبايدر8مونكي اول محرك لجافا سكربت.

اهم الستخدامات :

طبعا الستخدام المبدئي لجافا سـكربت هــو فـي مواقــع الــويب و لكــن هنـاك بعض من البرامج قامت باضافة او تضمين مفسر جافــا ســكربت . مــن هــذه

البرامج التي نفذت بجافا سكربت:

Apple Dashboard Widgets

Microsoft Gadgets

Yahoo! Widgets

Google Desktop Gadgets

و الكثير من البرامج الخــرى الــتي تضــيف دعــم للســكربت مــن خلل جافــاسكربت مثل ادوبي اكروبات و فوتوشوب و دريم ويفر و اوبن اوفيــس …

الخ

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

Page 109: Prog guide 1

نموذج برمجي :

<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

Page 110: Prog guide 1

++C):: لغة البرمجة19دليل لغات البرمجة (

لغة البرمجة :: سي++

Bjarneبدا Stroustrup“ العمل على C with classesفي العــام ” ، و ذلك بعد ان جاءته فكــرت عمــل لغــة برمجــة جديــدة بعــد الخــبرة1979

التي اكتسبها في البرمجة لرسالة الدكتوراة. و قد كــان ستروســترب معجبــا بلغة البرمجة سمول لنها كانت تحتوي على كــثير مــن المزايــا المناســبة و المساعدة لبناء مشــاريع برمجيــة عملقــة و لكــن مــا يعيــب هــذه اللغــة هــو

بطئها مما يجعلها غير عملية في ارض الواقع.

ســريعة جــدا و لكــن يعيبهــا انهــاBCPLفــي الجهــة الخــرى كــانت لغــة منخفضة المستوى بشكل يجعلها غير مناسبة لتطوير المشــاريع العملقــة . بناء على ذلك قرر ستروسترب ان يطور لغة سي بإضافة مزايـا سـيمول. و قــد اختــار لغــة الســي لنهــا ســريعة ، متعــددة الغــراض ، متنقلــة ، و ذات شعبية واسعة. و لم تكن سيمول وحدها من اثرت علــى ســي ++ بــل هنــاك

. فمــن ضـمن اولــى الضــافاتCLU و 68المزيد مــن اللغــات مثــل الجــول نذكر : الكلسات ، المرسلت الفتراضية…

تم اعادة تسمية اللغة الى سي++، و تلها اضــافات جديــدة1983في العام للغة نذكر منها : الثوابت ، تعليقات السطر الواحد ، المراجع …

The تــم اصــدار كتــاب 1985و فــي العــام C++ Programming Languageفي نسخته الولى ، ليكون من اهم المصادر للغة لعــدم تــوافر

مــع مزيــد مــنC++ 2.0 تــم اصــدار 1989معيار موحد وقتها . في العام الضافات مثل : تعدد التوارث ، الكلسات المجردة …

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

Page 111: Prog guide 1

ــام ــي الع ــدار 1990ف ــم اص The ت annotated C++ Reference Manualو الذي اصبح القاعـدة لنشـاء المعيـار فـي المسـتقبل . و مـن ،

الضافات المتأخرة نذكر : القوالب ، الستثناءات ، المساحات ..

و مع تطور لغـة الســي++ تطــورت معهــا مكتبــة قياســية و قــد كــانت اولــىI/Oالمكتبات اضافة هي مكتبة Streamو من اهم المكتبــات الن هــي ،

مكتبة القالب القياسي .

ــل ــر فــي اوســاط المحاف ــة النظي ــزال ســي++ تحظــى بشــعبية منقطع و ل تالبرمجية على الرغم من قدمها..

فلسفة تصميم سي++:

- ان تكون لغــة متعــددة الغــراض ، ثابتــة فــي الكتابــة ، ذات كفــاءة مثــل1السي و متنقلة مثل السي.

- ان تكون ذات نماذج متعددة : اجرائية ، كائنية ، تجريد البيانات …2

-ان تكون ذات توافق مع لغة السي3

-تجنب الخصائص التي تعتمد على منصة معينة4

-مصممة للعمل بدون الحاجة لبيئة برمجة معقدة5

-اتاحــة الخيــارات للمبرمــج ، حــتى لــو كــانت هنــاك احتماليــة ان يخطيــء6المبرمج في الختيار.

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

Page 112: Prog guide 1

++ :Cبعض اللغات التي اثرت على

1 -C

2 -ALGOL68

3 -Simula

4 -CLU

5 -ML

6 -Ada 83

++ :-Cاهم اللغات التي تأثرت ب

1 -Perl

2 -Java

3 -Falcon

4 -php

5 -C#

6-Ada95

7-Lua

8 -D

9 -Aikido

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

Page 113: Prog guide 1

خصائص اللغة :

- لغة برمجة متعددة النماذج.1

- استايل الكتابة ثابت.2

- لغة مترجمة.3

- لغة وسطية المستوى.4

%)100- متوافقة مع لغة السي ( ليس 5

-ل يوجد بها جامع قمامة6

اهم التطبيقات :

ــارات ســي++ لغــة متعــددة الغــراض ، ذات شــعبية واســعة ، و مــن الخي المفضلة في المشاريع العملقة . يوجد لها الكثير من المترجمات . و برمــج بواسطتها الكثير جدا من البرامج مثل : برامج شركة ادوبي من فوتوشــوبــاد ــي البع ــميم الثلث ــج التص ــديزاين، برنام ــترويتر و ان ــات و الس و اكروب العملق (مايــــا) ، برنامــــج الوتوكــــاد، متصــــفح كروميــــوم ، متصــــفحــيمبيان ، ــف س ــام الهوات ــرد) ، نظ ــدر ب ــد ( ثان ــل البري ــايرفوكس ، عمي الف

….الخ . و قد تم تطوير العديــد و العديــدKDEالواجهة الرسومية النيقة من اللعاب باستخدام هذه اللغة مثل :

Civilization and the Jews

World of Warcraft

Shanghai Mah Jongg Essentialsالخ.…

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

Page 114: Prog guide 1

Scala) :: 20دليل لغات البرمجة (

لغة البرمجة :: سكال

لغة البرمجة سكال لغة حديثة تجمع بين خصائص و قــوة البرمجـة الكائنيـةScalableو البرمجـة الوظيفيـة و السـم اختصـار لــ “ Languageو ”

الذي يلمح الى قدرة اللغة على التوسع بحسب احتياجات المســتخدم و ليــسهذا امر بعيد كونها تبني بقوة على اللغة العملقة جافا رائدة هذا المجال.

على يد مارتن اودرسكي في معامــل (2001بدا تصميم هذه اللغة في العام EPFL و قد كان مارتن عمل علــى .(Funnelو هــي لغــة برمجــة تجمــع

، هذا بالضافةPetri Netsبين البرمجة الوظيفية و لغة التمثيل الرياضية Generic (مــترجم جافــا) و javacالى انــه عمــل علــى Javaو قــد تـم .

علــى منصــة الجافــا و مــن ثــم2004 و بداية 2003اصدار اللغة في نهاية . و قد تم اصدار النسخة الثانية فــي2004 في شهر جون Netعلى منصة .

.2006مارس من العام

سكال تعمل على منصة جافا و متوافقة مع برامج جافا و لديها القدرة ايضا ( منصة جافا للجوالت) . و تجدر الشــارةJ2MEعلى العمل فوق منصة

الى ان النسخة الــتي تعمــل علــى منصــة دوت نيــت ليســت حديثــة و لــم يتــمتحديثها بالشكل الكامل الى وقت كتابة هذه المقالة.

طريقة عمل سكال تشابه طريقة عمل جافا حيث يقوم مــترجم ســكال بتوليــدbyteCode، ( لغة وسطية) يشبه الى حد كبير ما يولده مترجم جافا . بــل

ــواد ســكال ( ــن ارجــاع اك ــا مــع بعــضDecompileيمك ــواد جاف ــى اك ) ال فهي ل تفرق بين اكواد جافا و سكال ،JVMالستثناءات . اما بالنسبة للـ

.Scala-library.jarالفرق الوحيد هو في مكتبة اضافية واحدة

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

Page 115: Prog guide 1

: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

Page 116: Prog guide 1

اهم التطبيقات :

Lift و هو اطار برمجة ويب مجاني يشابه في هدفه Ruby on Rails. مكتوب بسكال هذا يعني القــدرة علــى الســتفادة مــن مكتبــاتliftو بما ان

اعلنــت2009. في ابريل liftجافا و حاويات الويب الخاصة بها في برامج تويتر انها قامت بنقل اجزاء كبيرة من روبي الى ســكال و انهــا تعمــل علــى نقل مــا تبقــى ، هــذا اثــر بعــض النتقــادات لروبــي اون ريلــز و انهــا تعــاني

مشاكل في ادارة المشاريع العملقة .

تم كتابته كامل باســتخدام ســكال. و ايضــاWattzOnايضا برنامج الويب يستخدم سكال .Fourthsquareموقع

مثال برمجي :

object HelloWorld { def main(args: Array[String]) { println("Hello, world!") } }

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

Page 117: Prog guide 1

Self) :: 21دليل لغات البرمجة (

لغة البرمجة :: سلف

بواسطة ديفد انجــار و رانــدال ســمث فــي العــامselfتم تطوير لغة البرمجة Xerox في معامل 1986 Parcكان هدفهم الساسي هو دفــع و تطــوير .

ـــك بعـــد ان نشـــرت معامـــل زيروكـــس لغـــة فـــن البرمجـــة الكائنيـــة و ذلSmalltalk-80ــل ــدها انتق ــا. بع ــام الجــدي به ــدات الشــركات بالهتم و ب

الثنان الى جامعة ستانفورد و واصل العمل على اللغــة حيــث اســتطاعا فــي ان ينشئا اول مترجم للغة.1987العام

تم اصــدار اول نســخة للســتخدام العــام و فــي العــام التــالي1990في العام انتقل فريق التطوير الى شركة صــن ميركوسســتمز . و تتــابعت الصـدارات

تــم نشــره4.3. الصدار 1995الى ان وقفت في الصدارة الرابعة في العام حيث اصبح يعمل على نظام ماك و سولرس .2006في العام

و في الصدار الجديد تم اضافة دعـم لينكـس بالضـافة الـى المــاك مــن قبــل مجموعة مــن المطــورين الصــليين بالضــافة الــى مجموعــة متطوعــة مــن

المبرمجين .

) و قـدPrototypesسيلف لغة برمجة كائنيـة تعتمـد علــى مبــدا النمــاذج ( استخدمت فـي الغلـب كنظـام تجريـبي لبنــاء و تصـميم لغـات البرمجـة فــي

اســتمر تطــوير لغــة ســيلف مــن2006الثمانينات و التســعينات . فــي العــام و هي منصة مكتوبة كليا بلغة سيلف .kleinخلل مشروع

Justالعديــد مــن تقنيــات الترجمــة فــي الــوقت المطلــوب ( in time compilationتم تطويرها و تحسينها من خلل البحاث التي تمــت فــي (

هذه اللغة لتصل الى سرعة تقارب نصــف ســرعة اكــواد ســي المخصصــة .ــا مــن خلل هذه التقنيات بالطبع لقت رواجا واسعا و تم استخدامها في جاف

Hotspot VM.

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

Page 118: Prog guide 1

لغات اثرت على سلف :

•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

Page 119: Prog guide 1

- تحتوي على جامع قمامة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

Page 120: Prog guide 1

انت تعرف الكثير ! اكتب برامجك الشخصية !.

الكثير منا يعرف مباديء البرمجة و الكثير منا قد يكون تخرج من الجامعة بدرجة بكالريوس في تقنية المعلومات او حتى دبلوم و لكيين فييي النهاييية ل يستطيع ان يبرمييج برنامجييا متكييامل او لنقييل اي مشييروع برمجييي فنحيين على ما نملكه من معرفة ينقصنا معرفة كيفييية دمييج مييا تعلمنيياه فييي وحييدة

واحدة لنخرج بشيء جميل .. لنأخذ مثال : شييخص يعييرف اواميير قواعييد البيانييات و لكنييه ل يسييتطيع ان

ينشيء برنامج مدير مقالت .. لماذا ؟..اول ماذا نعني ببرنامج متكامل؟

هنا نحن ل نقصد متكامل بمعنى كامل ل نقص و ل عيب فيه فل يوجد مثييل هذا البرنامج الييى الن ، و لكيين مييا نقصييده انييه متكامييل بحيييث انييه يييؤدي مجموعة من الوظائف المختلفة ، المبرمجيية بمهييارات مختلفيية ، المييؤطرة

في اطار واحد سهل الستخدام . لهذا يمكن ان نرجع سبب عجز الكثير منا عن برمجة برنامييج متكامييل الييى عدم اللمام بكل جوانب تطوير البرامج التي ل تشييمل البرمجيية فحسييب بييل التخطيط و الختبييار و التصييحيح و التعامييل مييع المسييتخدم ..الييخ . فكتابيية الكواد ما هي ال جزء من عملية البرمجة و هي الجزء الممتع و لكيين مييع تطوير برنامج متكامل نحتاج الى اكييثر ميين المتعيية نحتيياج الييى الروتييين و التعامل مع اشياء ل يلحظها المستخدم النهائي و لكنها تعمل بصمت خلف

الستار .. هذه الشياء المملة تشمل مثل رسم الواجهة الرسييومية و التعامييل ميع كييل الحييداث بشييكل مناسييب و التعامييل مييع الخطيياء و ليييس تجاهلهييا .. فميين السهل ان نأخذ قيمة من المستخدم و لكن المشكلة و الملل تبدا حينما نريييد

ان نتأكد من ان المستخدم ادخل القيمة المناسبة من حيث النوع مثل ..

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

Page 121: Prog guide 1

اذا نلحظ ان برنامج ذو واجهة رسومية بسيط يأخذ عدد ميين المسييتخدم و يقسمه على اخر بدل ان يكون مهمية سييريعة و سييهلة اصييبح امييرا ممل و رتيبا حيث سنكتب الكثير من السطر البرمجية لرسم الواجهة و التأكد ميين ظهورها بشكل صحيح ثم نتأكد من ان المستخدم ادخل رقمييا و ليييس حرفييا

و نتأكد ان الرقم المقسوم عليه ليس صفرا ..الخ.

عودا على بدء ، الكثير منا يجهل ان ما يملكه من معلومات بسيييطة بنظييره هي كافية جدا لبناء برنامج متكامل ، المسألة تكميين فييي معرفيية الواميير و

المهارات المطلوبة و متى استخدمها .. لقييد واجهييت الكييثير ميين الطلب يلقييون بيياللوم علييى المناهييج الدراسييية و يتهمونها بالنظرية المحضة و لكنهم يغفلون ان ما تعلمييوه كيياف جييدا لبييدء مشاريعهم الخاصة ، هذا ل يعني ان المر بسيط جدا و ل يحتيياج لي جهييد و لكن بشكل عام المشروع بشكله الكلي يمكن كتابته بهذه الساسيات و قد نحتيياج الييى البحييث و السييؤال و السييتعانة بمصييادر خارجييية فييي بعييض الحيان و هذا هو المطلوب حيث سنكتسب مهارات جديدة قد ل نسييتخدمها في هذا المشيروع باليذات و لكين تعيود بيالنفع فيي مشياريع اخيرى فعنيدما ابحث عن دالة تقوم بعمل معين من خلل بحثي قد اقرا عن دالت مشييابهة

او حتى مختلفة استرجعها في وقت لحق ان احتجتها .. و سنحاول في هذا الموضوع السير خطوة خطييوة لكتابيية برنامييج بسيييط و لكيين سيينحاول ان نجعلييه متكييامل بحيييث نييرى الخطييوات الساسييية الييتي

نحتاجها لبناء برنامجنا الشخصي .

- حدد فكرة البرنامج !.1

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

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

Page 122: Prog guide 1

العقبيية اي عقبيية الخطييوة الولييى كييبيرة جييدا فالشيياعر اعطييه فقييط مطلييعالقصيدة و سيكملها تلقائيا ..

بالمثييل ل يمكيين ان نبرمييج بييدون ان نعييرف ميياذا نريييد بالضييبط و مييا هييوالهدف الذي نرجوه ..

من الشياء التي تجدر الشارة اليها هنييا هييي ان الفكييرة ل يجييب ان تكييون فريدة من نوعها و لم يسبق لحد ان قام بها ، المسألة ببساطة ابحييث عيين فكرة او مشروع تحيس بحاجية شخصيية ليه مثل هنياك الكيثير مين براميج مدراء الخبار المتوافرة و لكن منذ فترة و لييدي فكييرة عمييل برنامييج مييدير اخبار يكون تركيزه فقييط علييى نشيير مقييالتي علييى شييكل مواضيييع صييالحة للطباعة مباشرة . الكثير من البرامج تبدا من حاجة المبرمج الشخصية لها و من ثم قد تكبر لشيء هو لم يتييوقعه او ل تكييبر المهييم ان البرنامييج يسييد حاجية شخصيية ليي .. مين المثلية اليتي دائميا احيب ان استشيهد بهيا هيو برنامج (كومبايز ايكون) هو برنامج صغير و بسيط جدا و لكيين يجعييل ميين حياة مستخدم لينكس اكثر سييعادة ! الكييثير منييا ل يعييرف كيييف يغييير مييدير النوافذ في جنوم و مع انها ليست بتلك الصعوبة و لكن هذا البرنامج يجعل من العملية مجرد نقرة فأرة! ففكرة البرنامييج هييي تسييهيل عملييية روتينييية

للمستخدم العادي و البرنامج ناجح نجاحا جميل ..

التطبيق ( فكيرة البرناميج) : فييي هيذا الموضييوع مبيدئيا قيررت ان نبرميج برنامج عميل لتويتر على سطح المكتب ، و لكنييي عييدلت برايييي و اخييترت

ان يكون قاموسا او لنقل برنامج ترجمة .

فبدل من انشاء جداول قاعدة البيانييات مباشييرة خطط للبرنامج مسبقا :-2 هكذا و من ثم اعادة كتابتها كلما اردت اضافة ميزة بسيييطة و اعييادة كتابيية الكواد البرمجية التابعة لهذه الجداول ، خطط مسبقا للميزات و الختيارات

المطلوبة و ستقل الحاجة الى التعديل بعد ذلك .

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

Page 123: Prog guide 1

ل بأس باستخدام برامج تخطيط جداول قواعد البيانات و طريقة اتصييالها و لتخطيط سير البرنامج او تخطيط الكلسات و طريقةUMLايضا استخدام

تفاعلها . و لكن ل يجب ان نعقد المسألة اكثر من اللزم فاذا كان البرنامييجبسيط فعل فل داعي لضاعة الكثير من الوقت في هذه المرحلة .

ايضا يمكن استخدام التخطيييط الييدوي بقلمييك و دفيتر ملحظاتييك !. و هييذه طريقتي المفضلة خاصة اذا كان البرنامج صييغير او متوسييط الحجييم لننييي اجييد متعيية فييي ذلييك فييالمهم ان نجعييل ميين العملييية متعيية خاصيية اذا كييان

المشروع شخصي و ل ينتظر منه ربح مادي مقابل لتعابك !.

التطبيق (التخطيط) :

طبعا هناك الكثير من الخيارات تعتمد على نقاط تلييي هييذه النقطيية ليذلك ليين ندخل في تفاصيل المخطط الن و لكن بما لدينا من معلومات الن يمكننا ان

او هكييذا علييى طريقييةUMLنرسم مخطط بسيط لسير البرنامج باسييتخدام الخوارزميات :

حدد اللغات المطلوبية للترجمية -> اطليب النيص مين المسيتخدم ->اتصيلبقاعدة البيانات -> ارجع قيمة النص -> اعد العملية

بسيط اليس كذلك ؟ يبدو ذلك في بداية المر !.

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

Page 124: Prog guide 1

- حدد ادواتك و اعرف قدراتك :3

تحديد الدوات المناسبة للمهام المناسبة هيو مرحليية حساسيية فيي بنياء ايمشروع ..

ما هي اللغة البرمجية المناسبة؟ المناسب ؟IDEما هو الي

ما هي المكتبات المساعدة التي ساحتاجها ؟ما هي المصادر المتوافرة للدعم ؟ما هي الية التعامل مع المستخدم ؟ما هي قاعدة البيانات المستخدمة ؟

..الخ هذه السئلة حساسة جدا و تضمن الى حد كبير ان ل تقع في متاعب كثيرة في مرحلة التطبيق .. و تختلف الجابات بالطبع حسب متطلبييات المشييروع

البرمجي .. السييؤال الول مثل فييي حييال كييان المشييروع تطييبيق ويييب هييل سييي خيييار مناسييب ؟ فييي اغلييب الحيييان ل .. فييي حييال برمجيية برنامييج ويييدجت هييل

و بيرل و روبي خيييارات افضييلphp( هاسكل ) مناسبة ؟ ل اعتقد ذلك.. في الحالة الثانية ..javascriptفي الحالة الولى و

السؤال الثالث ما هي المكتبات التي سأحتاجها ؟ كلما كان البرنامج اكييبر و يحتاج الى اشياء معقدة كلمييا كييانت الحاجيية الييى المكتبييات اكييثر .. قبييل ان ابدء في مشروع كتابة برنامج سطح مكتب يجب ان ادرس الخيييارات الييتي

..الخ ؟ ايWxwidgets ، GTKتقدمها لي لغة البرمجة هل توفر لي مكتبة سأختار هل سيكون برنامجي لويندوز او لينكس او ماك ؟ ..

ما هي المصادر المتوافرة ؟ هل اذا واجهتني مشكلة سأجد من يسيياعدني ؟هل تتوافر مصادر غنية ؟ هل يوجد توثيق كامل؟ …

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

Page 125: Prog guide 1

ل تنسى ان تعرف قدراتك بعض المكتبات ليست مجرد مكتبات بل عالم فييي ل يعنييي اننييي اسييتطيع كتابيية لعبيية فقييط ميينsdlحد ذاتها فتوافر مكتبيية

خلل قراءة التوثيق بييل تتعييدى الييى مهييارات و تقنيييات و مفيياهيم اضييافية تحتاج الى وقت كبير لتعلمها يييوازي ربمييا الييوقت الييذي قضيييته لتعلييم لغيية

البرمجة نفسها !.

التطبيق (حدد ادواتك ) : سأكتفي بالجابة عن السييئلة المطروحيية سييلفا فقييط ، و ذلييك علييى حسييب

حاجة برنامجنا .ما هي اللغة البرمجية المناسبة؟

بما انني اجيد بيرل و المشروع شخصييي و اللغيية مناسييبة لهكييذا نييوع ميينالمهام فل بأس من استخدامها .

المناسب ؟IDEما هو الي Padre + wxGlade و ذليييك لن gladeسيرسيييم لنيييا الواجهييية

الرسومية و بادري سيساعدنا في تطييوير اكييواد بيييرل خاصيية انييه برنامييج !wxمكتوب بها و بمكتبة

ما هي المكتبات المساعدة التي ساحتاجها ؟ الييتيwxPerlسيينحتاج بعييض المكتبييات و لكيين المهييم الن هييو مكتبيية

سييتوفر لنييا امكانييية انشيياء الواجهيية الرسييومية ، طيييب لميياذا ل نسييتخدمGTK او QT..!او حتى سوينج ؟

هنا نحتاج ان نعمل دراسة سريعة قبييل اتخيياذ القييرار فمكتبيية كيييوت مكتبيية ممتازة جدا و لكن في بيرل هي خيار سيء لقليية المصييادر و قييدم الصييدار

ايضا ممتازة لو كنا سنكتفي بلينكس و لكيين ربمييا احييبGTKالمتوافر .. ان انقيل البرناميج الييى وينيدوز و تشيغيل هيذه المكتبيية هنياك لييس بييالمر السييهل .. سييوينج ؟ سيينحتاج الييى مكتبييات اضييافية كييثيرة لكييي نسييتطيع

افضل المكتبات المتوفرة لييبيرلTkتشغيلها من بيرل فل داعي لكل هذا .. من ناحية التوثيق و لكنها ل تدعم العربية !. اذا الخيار الفضل هو

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

Page 126: Prog guide 1

wxPerlفالتوثيق موجود و المكتبة قوية جييدا و متعييددة المنصييات فيي حال رغبنا في تشغيلها في اي نظام تشيغيل لكيي تظهير و كأنهيا مين نفيس

برامج نظام التشغيل ..ما هي المصادر المتوافرة للدعم ؟

بيرل ل يوجد لها دعم ميادي خاصية فييي عالمنيا العربييي ليذلك قيد ل تكيون خيار مناسب للشركات هنا و لكن المصادر المتوافرة ممتازة جدا للمشاريع الشخصية ميين كتييب و توثيييق و منتييديات و غييرف مسيياعدة و مجموعييات

بريدية ..ما هي الية التعامل مع المستخدم ؟

سطر الوامر ؟ صفحات ويب؟ واجهة رسومية ؟ يبدو انكييم خمنتييم الخيييارالثالث لننا تكلمنا عن المكتبة التي سنستخدمها !.

ما هي قاعدة البيانات المستخدمة ؟ ؟SQLightفلت فايل ؟ مايسكوال ؟ اوراكل ؟!

يمكن اختيار الفلت فايل في المشاريع الصغيرة و المتوسطة و لكنها خيييار سيء للمشاريع الكيبيرة و لين اختارهييا لكيي ل احتياج للكيثير مين السييطر

البرمجية لفتح و قفل و اغلق الملفات النصية .. مايسييكوال ليين اسييتخدمها لن برنييامجي ل يحتيياج الييى سيييرفر فهييو ليييس

تطبيق ويب ..اوراكل ليس لدي المال الكافي !.

SQLiteكنت ساستخدمها لو كنت ساصنع قاعدة الكلمات بنفسي و لكني لني كسول سأستخدم قاعدة كلمات جاهزة !.

اذا الن لييدي خيييارين ان اسييتخدم قاعييدة بيانييات جيياهزة للكلمييات مثييل مييا و هييي ميين نوعييية الملفييات النصييية او ان اسييتخدمArabeyesتييوفره

؟ و لكنه لBabelFishقاعدة بيانات موجودة على الويب مثل ما توفره ييييوفر اللغييية العربيييية اذا سييياختار ميييترجم جوجيييل الموجيييود عليييى :

http://translate.google.com

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

Page 127: Prog guide 1

:GUI- رسم الواجهة الرسومية 4

طبعييا يمكيين البييدء بعملييية كتابيية الكييواد و الييدوال الحقيقييية اول ثييم رسييم الواجهة الرسومية خاصة لمن يحبون طريقة الختبار قبل البرمجيية و هييذا ما فعلته انا عندما كنت اكتب الكواد التي سنستخدمها في هذا الموضوع و لكن في المقالة هنييا فضييلت ان نرسييم الواجهيية الرسييومية بشييكل سييريع و

ننتهي منها اول ..

التطبيق : اول و قبل كل شيء ارسم الواجهيية بيييدك كمييا تحييب ان تظهيير لحقييا لكييي

ترتاح في عملية وضع الشياء في اماكنها الصحيحة لحقا!...هنا رسمي المتواضع ..:

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

Page 128: Prog guide 1

للرسم الحقيقييي و ليين اتكلييمwxGladeبعدها يمكنني البدء في استخدام عن هذه النقطة برجاء ان يشاهد المهتمييين الشيروحات اليتي عملتهيا لهيذا

البرنامج ..

- ربط الواجهة الرسومية مع الكواد الحقيقية :5

او اي برنامييجwxGladeبعد رسم الواجهة الرسومية باستخدام برنامج ..الييخ نييأتي الييى مرحلييةTk builder و Gladeتصميم واجهات مثييل

الربط بين الواجهة و الكييود الييبرمجي … قبييل ان استرسييل يجييب ان انييوه انني كنت من المعارضين لستخدام برامج رسم الواجهات الرسومية لنهييا تضيف اكواد اضافية كثيرة يمكيين اختصييارها و لكيين الميييزة الييتي تجعلنييي افضل استخدامها هو اول سرعة التصميم بالطبع فننتهي من هذه المرحليية المملة بسرعة و ايضا توفيرها اليات جيدة لفصل الكود البرمجي عن الكود

) او حييتىxmlالمرئي و ذلك سواء باستخدام ملف وصفي منفصييل ( مثل تضييمين الكييود الييبرمجي فييي الكييود المييرئي و لكيين بتييوفير اليييات مريحيية

لتحديث الكود المرئي بشكل منفصل عن الكود البرمجي .نعود مرة اخرى ، انتهينا من تصميم الواجهة الرسومية و هكذا تبدو :

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

Page 129: Prog guide 1

ماذا نفعل الن ؟ الخطوة الساسية الن هي ان نربط الواجهة بالكود و ذلك يتييم عيين طريييق

.. Event) لكل حدث Action listener (handlerوضع متنصت طيب عندما اشاهد كل جزء من برنامجي اعرف انه يمكن ان تحدث احداث كثيرة في برنامجي و لكن يمكنني فقييط الهتمييام بالحييداث الييتي لهييا تييأثير مباشر على سير البرنامج .. مثل يمكننيي وضيع متنصيت لتحيرك المياوس على منطقة الكتابة و عليه اخذ اكشن معين و لكن ل يوجد كثير جدوى من

فعل ذلك في برنامجنا الن ..

اذا سألخص اهم النقاط التي يجب ان اهتم بها كالتالي:

- سأضع متنصت للنقر على زر الخروج لنهاء كل عمليات البرنامج.1 كي اظهر معلومات البرنامج.Credit- سأضع متنصت للنقر على زر 2 و لكي يقوم باستبدال اماكن اللغتين .Swap- سأضع متنصت لزر 3 و لكي يقوم بمهمة الترجمة و عرضها فيييTran- سأضع متنصت لزر 4

مكانها الصحيح .

ملحظات : - الجزء الذي سيييظهر فيييه النييص المييترجم سيييتم اقفيياله بحيييث ل يمكيين1

للمستخدم الكتابة فيه و لكن يمكنه النسخ منه و ايضا سيتم اظهييار رسييائلالخطاء في هذا المكان.

- لدينا خيارات كثيرة في كيفية توفير الية اختيار اللغييات و لكيين سيينختار2ComboBoxلسهولته و لتوفيره المكان فهييو ل يأخييذ مكييان كييبير فييي

البرنامج و انما يتوسع فقط في حالت النقير علييه ليظهيير اللغيات المتييوفرة + لغة و لكن لن نضيف كل اللغات التي يوفرها جوجل30( سنقوم باضافة

فبعضها الى الن في حالة تجريبية ) ..

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

Page 130: Prog guide 1

- لن نضع متنصت خاص بكل صندوق اختيار بل سنطلبها يدويا في داليية3الترجمة، لن هذا الحدث ليس مهما ال في حالة النقر على زر الترجمة .

التطبيق : حيييثwxGladeسيكون لدينا ملف بيرل جاهز بعييد توليييده ميين برنامييج

سيينكون جيياهزين لبييدء الربييط بييين البرنامييج و الواجهيية ميين خلل تطييبيقImplement: الدوال التي قمنا بالعلن عنها مبدئيا

use Wx 0.15 qw[:allclasses];

use strict;

package MyFrame1;

use Wx qw[:everything];

use base qw(Wx::Frame);

use strict;

sub new {

my( $self, $parent, $id, $title, $pos, $size, $style, $name ) = @_;

$parent = undef unless defined $parent;

$id = -1 unless defined $id;

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

Page 131: Prog guide 1

$title = "" unless defined $title;

$pos = wxDefaultPosition unless defined $pos;

$size = wxDefaultSize unless defined $size;

$name = "" 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

Page 132: Prog guide 1

$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

Page 133: Prog guide 1

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

Page 134: Prog guide 1

$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

Page 135: Prog guide 1

$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

Page 136: Prog guide 1

$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

Page 137: Prog guide 1

# 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

Page 138: Prog guide 1

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

Page 139: Prog guide 1

# 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

Page 140: Prog guide 1

قد يسألني البعض الن كنت تدعي ان العملية ستكون سهلة و اننييا بمعرفييةالساسيات يمكن ان ننشيء برنامج فما هذه الكواد الطويلة و المعقدة ؟.. و لكن في حقيقة المر ان استخدامنا لبرامج تصميم الواجهات وفر لنا هذه

المزايا : - ازالية الحاجية اليى كتابية الكيواد الطويلية للوصيول اليى شيكل مبيدئي1

للبرنامج ! خاصة مثل لو كانت المكتبة سوينج مثل .- تسهيل عملية اعادة ترتيب مواضع الشياء و رسمها.2 - ازالة الحاجة الى حفظ خصائص العناصر المرئية و الحييداث المرتبطيية3

بها . فأنا لست مضطر لن احفظ ما هي خصائص العنصر ( زر) و ما هييينوعية الحداث التي يستجيب لها.

- و اخيييرا الشيييء المهييم يزيييل عنييا الييى حييد كييبير عنيياء تعلييم المكتبيية4 الرسومية خاصة فيما يتعلييق برسييم العناصيير و طريقيية العييرض، مثل هييذا الكود الن ليس كل مبرمج بيرل يعرف كتابته بنفسييه و لكيين الن بسييهولة

يستطيع ان يعمل تطبيق لكل دالة فقط و ينتهي من البرنامج..

اذا الى الن نحن في الحقيقة لم نبرمج بل نصمم كأي برنامج تصييميم مثييلGimpاو فوتوشوب او فرونت بيج ...الخ. و اغلب المكتبييات الرسييومية

الن يتوافر لها عدة برامج تصميم تزيل هذا العبء عن المبرمج.

- كتابة الكود الحقيقي ( تطبيق الدوال):6

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

الموجودة في البرنامج .

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

Page 141: Prog guide 1

الن ، بما ان البرنامج ذو واجهة رسومية فهو يحتوي علييى دوال ل بييأس بها افتراضيا و ذلك للتعامييل مييع كييل حييدث مهييم فييي البرنامييج . و بمييا ان البرمجة الحدثية ل تبدا من اتجاه معين و ل تتبييع سييير عمييل ثييابت ( مثل يمكن ان نبدا برنامج رسومي ما باختيار فتح ملف جديييد او يمكيين ان نبييدا باستحضار ملف تم انشاؤه سابقا و من ثم تتييوالى الحييداث بشييكل مختلييف في كل مرة تشغيل تقريبا.) ، فأنا شخصيا افضييل البييدء فييي تطييبيق الييدوال

التي :- ل تحتاج الى وقت و جهد طويل لنشائها1 - ل تؤثر او تتفاعل مباشرة مع الحداث الخييرى فييي البرنامييج (او علييى2

القل تتفاعل و تتأثر بشكل اقل من غيرها).و بالنظر الى برنامجنا يمكن ترتيب الدوال ( من القل الى الكثر) هكذا :

1 -onExit2 -onCredit3 -onSwap4 -onTrans

النقطيية الييتي احييب ان اشييير اليهييا هنييا هييو ان الكييواد الييتي سييأكتبها فييي و انمييا هيييwxالتطبيق ليست بهدف تعليم لغيية البرمجيية بيييرل او مكتبيية

وسيلة لتجسيييد المبيياديء المجييردة و الفكييار فقييط فعليييه ل تهتييم عزيييزي القاريء بكيفية كتابة المر المعين و لكن ركز على خطييوات الوصييول الييى

نتيجة معينة .

التطبيق (كتابة الكواد) :

- نبدا بدالية الخييروج و هيي دالية بسييطة مهمتهييا انهيياء جميييع عمليييات1البرنامج و الخروج بشكل سليم حسب طلب المستخدم :

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

Page 142: Prog guide 1

sub OnExit {my ($self, $event) = @_;

# wxGlade: MyFrame1::OnExit <event_handler>$self->Close();

# end wxGlade}2 -onCreditو مهمتها هي توفير معلومات عن البرنامج مثل : تاريخ

الصيدارة و رقمهيا و حقيوق النشير مثل ..اليخ) و يمكين ان تكتيب بطيرق )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

Page 143: Prog guide 1

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

Page 144: Prog guide 1

referer => 'http://myhome', format => 'text', userip => '192.168.1.1', );

- نعود الى داخل الدالة .. بما ان جوجل ل تتعامل مع اللغات باسمائها بل2 arabicباختصيياراتها فعلينييا اول اسييتبدال كييل لغيية باختصييارها … مثل

.arستصبح اذا اول سطرين :

my $tag_1 = getTag($self->{origin}->GetValue());my $tag_2 = getTag($self->{destination}->GetValue());

و هييي داليية مسيياعدة كتبتهيياgetTagنلحظ اننييا اسييتدعينا داليية اسييمها لتقييوم بعملييية الحصييول علييى الختصييار سأضييع الكييود الخيياص بهييا بعييد

النتهاء من هذه الدالة .- الن ننشيء الكائن بما ان لدينا كل المعلومات :3

$object = Lingua::Translate->new( src => $tag_1, dest => $tag_2 );

- الن انتهينا سنأخذ قيمة النص الموجود و من ثم ننفييذ ميثييود الترجميية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

Page 145: Prog guide 1

: كما قلنا هذه الدالة تقوم بمقارنية كييل اسييم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

Page 146: Prog guide 1

ل مكان للفتراضات و مع السف كثير منا يترك هذه المرحلة اما لنه غير مبالي او لنه ل يعرف او لنه ل يدرك اهميتها . ففي مثييال النييترنت هييذا، ما سيحدث هو ان البرنامج عندما نطليب منيه الترجمية سيتصيل بيالنترنت لثواني معدودة فاذا كان هناك اتصال جرت المور علييى احسيين مييا يييرام و لكن لو كيان المسيتخدم غيير متصيل بالشيبكة فسيينهار البرناميج و يختفيي هكذا بدون سابق انييذار بمجييرد النقيير علييى زر الترجميية . ربمييا البعييض ل يهمه فهو يفترض ان المستخدم مدرك لوجييوب وجييود اتصييال قبييل تشييغيل البرنامييج و لكيين مييع السييف هييذه نقطيية تحسييب علييى المبرمييج و تجعييل برنامجه ناقصا و غييير احييترافي .. اذا دع عنييك الفتراضييات و تعامييل مييع

الخطاء …

- التعامل مع الخطاء و الستثناءات :7

قلنييا ان ميين الهمييية بمكييان ان يقييوم البرنامييج بالتعامييل مييع الخطيياء و الستثناءات التي قد تحصل وقت تشييغيل البرنامييج ، و هييذا الميير هييو ميين المور التي تمايز بين المبرمجين فكلمييا كييان المبرمييج مهتييم بالتفاصيييل و معالجها كيان ذليك افضيل لبرنيامجه و لسيمعته كمبرميج . و فيي كيثير مين الحيان تجاهل التعامل مع هييذه الخطيياء و السيتثناءات يجعييل الميبرمجين

ينظرون اليك كمبرمج مبتديء .الن اين نبحث عن الخطاء و الستثناءات التي يمكن ان تحصل؟

في الغالب هناك حالتين يكثر جدا ظهور الخطاء و الستثناءات فيها :- التعامل مع النظام 1- التعامل مع المستخدم.2

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

هذا المر بالحسبان و التعامل معه .

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

Page 147: Prog guide 1

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

القيمة المدخلة قبل الشروع في العمل عليها . فييي النهاييية هنيياك انييواع ميين الخطيياء ل يمكيين التعامييل معهييا مثييل نفيياذ المساحة من نظام التشغيل فلن يكون هناك مفسر لغة اصل كي يتعامل مييع

هذا الخطأ... ايضا في بعض الحيان ل يتوقع ان نحصي جميع الخطاء التي قييد تحصييل خاصة في المشاريع الكبيرة و لكن مهمتنا ان نقللها الى حد معقييول جييدا و ل نترك عملية اكتشاف الخطاء للمستخدم خاصة في برامج الويب التي قد تكون النتيجة غالية جدا حينها ان تم استخدام احد هذه الخطاء كثغييرة فييي

البرنامج . و بما ان لكل لغة برمجية طريقية فيي التعاميل ميع السيتثناءات و الخطياء ليس الهدف من التطبيق هنا هو كيفية كتابة الكواد و انما البحييث عنهييا و

طريقة محاصرتها و مدى اهميتها ..

التطبيق (البحث عن الستثناءات):

الن سآتي الى برنييامجي و اخييذ كيل دالية علييى حيدى و ابحيث عيين وجيودالخطاء و الستثناءات التي يجب التعامل معها ..

- داليية الخييروج ل تحتيياج الييى اضييافة اكييواد و داليية اظهييار المعلومييات1 ايضا ، لييذلك سييأكتفي بييالتجريب المباشيير و ملحظيية سييلوك الييدالتين عنييد النقر على الزر المعين . و يبدو ان الثنييتين تعملن بشييكل جيييد . و المهييم

ايضا انهما ل يطلبان اي قيم من المستخدم. : هكييذا مبيدئيا ميين مجيرد الملحظيةonSwap- جميل نأتي اليى دالية 2

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

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

Page 148: Prog guide 1

الختيارات الثاني فهناك قيمة موجودة زائدة في اختيارات لغيية المصييدر و هييذه القيميية تخييبر جوجييل ان عليييه هييو البحييث عيين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); }

ايضا قد تسبب مشاكل فهي تستقبل قيمة و ترجع قيمييةgetTag- دالة 3 مقابلة لها و لكن ليو كيانت القيمية المسيتقبلة ل يوجيد لهيا مقابيل ؟.. مياذا

سنفعل الن !.

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

Page 149: Prog guide 1

يجب علينا اذا ان نحرص على ايجاد الية لضمان عدم ارسال اي قيمة غير القيم التي يوجد لها مقابل .. و ذلك قد فعلناه سابقا فعل !. نعييم فعلنيياه فييي مرحلة تصميم البرنامج حيث عندما قمنا بتصييميم مربعييي الختيييارات قمنييا بتوفير قيم افتراضية للغات معينة هي فقط ما يوفره البرنامييج للمسييتخدم و لكي ل يقوم المستخدم باضافة اي لغة غير موجودة او اي نص ل معنى له قمنا بقفل مربع الختيارات حيييث ل يمكيين البتيية ان يكتييب المسييتخدم قيميية مربع الختيار بنفسه و انمييا عليييه ان يختييار ميين الموجييود فقييط و فقييط ..

القيمة التي وفرت لنا هذه الميزة في الكود كانت :wxCB_READONLY

: OnTrans- دالة 4 هذه الدالة هييي اهييم دوال البرنامييج و هييي اكييثر الييدوال عرضيية للخطيياء، النقطة الولى التي يجب النتباه اليهييا اننييا بييالنقر علييى زر الترجميية نقييوم باستدعاء الدالة و تنفيذ كل خطييوات الترجميية حييتى لييو كييان المسييتخدم لييم يييدخل نييص للترجميية اصييل ( تييرك الخانيية فارغيية) هييذه العملييية ل تسييبب مشاكل و ل ترجع اخطاء لن محرك جوجييل سييرجع قيمية فارغيية ايضييا و بذلك لن يلحظ المستخدم اي شيء! و لكن ل معنى لهذا فلماذا نقوم بتنفيييذ

اوامر ل تعطينا نتيجة في نهاية المطاف؟ لذلك سنعدل على الدالة بحيث انها ل تقوم بالتنفيذ ال اذا كانت هنيياك قيميية للترجميية و ذلييك ببسيياطة يتييم بالتأكييد ميين ان قيميية خانيية النييص المصييدر

.اذا:Trueصحيحة if ($self->{origin_text}->GetValue())

{Rest of code here}else {$event->Skip;}

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

Page 150: Prog guide 1

الن بكل بساطة سيتجاهل امر الترجمة اذا لم يتوافر نص للترجمة.

النقطة الثانية الكثر خطييورة الييتي تكلمنييا عنهييا سييابقا هييي فيي حييال عييدمتوافر اتصال بالنترنت سينهار البرنامج وقت النقر على زر الترجمة ..

قد يسأل البعض لماذا ينهار البرنامج كامل؟ ينهييار البرنامييج لن داليية الترجميية تحيياول انشيياء كييائن ميين نييوع جوجييل ترانسليتر و هذا يحتاج اليى اتصيال بيالنترنت فعنيدما يفشيل البرناميج فيي

وFatalانشاء هذا الكائن سيرجع خطأ من النوع الذي يجب التعامل معه ليس اختياري . طيب لماذا هذا الخطا يجب التعامل معه ؟ لنه بكييل بسيياطة كل السطر البرمجية التي تعتمد على هذا الكائن ستفشل لنه ل يوجد كييائن

اساسا ..مثل هذا المر :

$trans = $object->translate($message); object الخاص بالكائن و لكن كييائن translateنحن نريد تنفيذ ميثود

اساسا غير معرف عندنا لننا لم ننشئه بنجاح في العملية السابقة .. طيب كيف نتاكد من وجود اتصال بييالنترنت ..؟ اقييترح احييد العضيياء فييي

منتدى بيرل ان نقوم بعملية اختبار للتصال قبل محاولة انشاء الكائن .. و لكن هذه العملية مكلفة لن المستخدم عنييدما ينقيير علييى زر الترجميية مييا سيحدث ان الدالة في بداية المر سييتختبر وجييود التصييال و هييذا يسييتغرق بضع ثوان و من ثم تقوم بانشاء الكائن باتصال جديد و اخيرا تقييوم بتنفيييذ

الميثود و ستزيد ثوان النتظار هكذا ..فكرتي كانت مغايرة :

البرنامج كله ل يحتاج اتصال لكن هذا المر يحتاج اتصال :$object = Lingua::Translate->new( src => $tag_1, dest => $tag_2 ) اذا يمكنني ان اعرف هل يوجد اتصال او ل من خلل هذا الميير نفسييه و ل

داعي لضافة المزيد من الوامر للتأكد من وجود اتصال .

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

Page 151: Prog guide 1

اذا كان الكائن انشيء بنجاح فييالطبع هنيياك اتصييال و ان كييان الكييائن فشييل فهذا يعني انه ل يوجد اتصال او نوع اخر من الخطيياء .. و لكيين كمييا قلنييا

)if (objectسابقا ان الخطا هذا ل يصلح ان نضعه في جملة شرطية سييينهار البرنامييج و ليين يتييابعfalseلنه في هذه الحاليية لييو كييان خطييا

الجملة الشرطية .. اذا الحييل ان نعمييل تقيييم لهييذا الميير و بنيياء علييى النتيجيية ناخييذ الكشيين المناسب و لكي ل تبدو السطر البرمجية القادميية غريبيية فكييروا بهييا علييى

… اذا :eval في لغة جافا و لكننا هنا في بيرل نستخدم tryطريقة 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

Page 152: Prog guide 1

اما اذا لم يوجد خطا فنتابع البرنامج كما المعتاد و نرجع النص المترجم .

- مرحلة التحزيم :8

هذه المرحلة النهائية في تطوير البرنامج حيث بعد النتهاء من التخطيط و البرمجيية و التصييحيح و بعييد التأكييد ميين ان البرنامييج وصييل مرحليية نضييج

مناسبة يمكننا ان نقوم بتحزيمه و القيام بنشره . طبعا اساليب التحزيم تختلف كثيرا جدا بحسب اللغة و نظام التشغيل و نوع البرنامييج . و لكيين الهييدف ميين هييذه المرحليية هييي تييوفير الييية سييهلة للمستخدمين النهائين كي يجربوا البرنامج فل يعقل مثل ان اوزع برنامجي

) منCompile و اقول لهم عليكم ببناءه ( Cعلى اصدقائي بشكل كود المصييدر! فالمسييتخدم النهييائي غالبييا ل يعييرف كيييف يقييوم بانشيياء ملييف تنفيييذي ميين ملييف المصييدر، و الحقيقيية ان هييذه ليسييت مشييكلة المسييتخدم النهييائي بييل حييتى المسييتخدمين المتقييدمين فييي الغلييب سيييحتاجون بعييض الوقت و البحث كي يستطيعوا تشغيل برامج مكتوبة بلغة لم يتعيياملوا معهييا ميين قبييل فاللغييات كييثيرة جييدا. اسييهل البرامييج هييي البرامييج المترجميية

Compiledو يمكن استخدام برامج لتسهيل عملية التنصييب للمسيتخدم كما نراه في الويندوز و لكن يعيبها ان الملف التنفيذي المبني لنظييام معييين

سيحتاج الى اعادة بناء في حال الرغبة بتغشيله في نظام اخر . هناك ايضا برامج الويب و لها طريقيية تشييغيل مختلفيية و فييي هييذه الحاليية يجب ان يكون هناك توثيق جيد لطريقة التنصيييب عليى السييرفر و يفضييل انشيياء سييكربت يقييوم بمهميية التنصيييب بييدل ميين ان نييترك هييذه المهميية للمستخدم فهذا السكربت يجييب ان يهتييم بانشيياء جييداول قواعييد البيانييات و اسناد القيم المناسبة للختيارات المناسبة حسب طلييب المسيتخدم و اعطيياء

التصاريح المناسبة ...ألخ.

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

Page 153: Prog guide 1

الخلصة ايا يكن نوع البرنامج يجب ان نحاول قدر المستطاع ان نوفر الية سهلة لتشغيل البرنامج بدل من ترك المستخدم في متاهة التشغيل و البحث عيين المييترجم او المفسيير المناسييب و بعييدها البحييث عيين المكتبييات الييتي

يحتاجها البرنامج ..الخ فيترك البرنامج لنه ل يستاهل العناء .

التطبيق :

في حالتنا استخدمنا لغة مفسرة و هي بيييرل ( امثليية اخييرى هييي بييايثون و روبي ..ألخ) و التي تعطينا ميزة جيدة و هي النتقالية بين انظمة التشييغيل المختلفة و لكن يعيبها هو وجوب وجود المفسر على جهاز المستخدم . اذا سيكون هناك خيارين بالنسبة لبرنامج بيرل ( باسييتنثاء طبعييا خيييار تييوفير

المصدر فقط) : - الول ان نرفييق المفسيير (حجمييه صييغير نسييبيا) مييع برنامجنييا فيقييوم1

المستخدم بتنصيب المفسر ثم تشغيل البرنامج . و هذه كلهيياPerl2exe او PerlApp او PAR- الثاني ان نستخدم 2

ادوات لنشيياء ملييف تنفيييذي جيياهز لبرامييج بيييرل . و بهييذا ليين يحتيياج المسييتخدم الييى تنصيييب اي شيييء فقييط دبييل كليييك علييى البرنامييج و سيييتم التشغيل . ( ملحظة هامة : هذه الدوات في حقيقيية الميير ل تقييوم بعملييية

compileكييل مييا فييي الميير انهييا تحلييل البرنامييج و تسييتورد الجييزاء المطلوبة فقط من مفسر بيرل و المكتبات اللزمة و تحزمها مع بعض)

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

Page 154: Prog guide 1

ملحظات بخصوص البرنامج :

- في السنوات الخيييرة وجييدنا تييوجه كييبير الييى نقييل البرامييج ميين سييطح1 المكتب الى الويب و لكن ايضا هناك توجه الى نقل برامج الويب الى سطح المكتب فأغلب المدونين في تويتر مثل ل يدخلون الى موقييع تويييتر و انمييا يقومون باستخدام برامج سطح مكتب للقيييام بهييذه المهميية و هنيياك الكييثير

من هكذا برامج او ما يسمى بالعميل . في اغلب الحيان الهدف منها هو اضافة ميزات جديدة الييى الخدميية الم او الستفادة من قدرات الجهاز بشكل افضل و لكيين هنيياك ايضييا سييبب اخيير و هو ان البعض يفضل استخدام برامج سطح المكتب بدل من تكييرار عمليييات الييدخول و الخييروج الييى المتصييفح لييذلك هنيياك رواج كييبير لبرامييج الرفييع

المباشر الى فلكر مثل و غيرها من الخدمات. - في هذا الموضوع قمت بتمثيل بناء البرنامج على شييكل برنامييج سييطح2

مكتييب و لكيين كييان بالمكييان ان نسييتهدف منصييات اخييرى مثل ان نجعييلالبرنامج خاص للموبايلت كاندريود و ايفون ..ألخ بهذه الفكرة .

ايضييا كييان بالمكييان ان نسييتهدف جعييل البرنامييج يعمييل كاضييافة لمتصييفح لسطح المكتب . بل حتى كان يمكن انWidgetكفايرفوكس او كييودجت

نضمن البرنامج في برنامج اكبر مثل لو كييان لييدينا برنامييج ويييب صييممناه ليعمييل كمجليية او مييدير مقييالت كييان بالمكييان ان نضييمن هييذه الميييزة فييي

البرنامج .فعلينا البحث عن المنصات التي سيلقي فيها البرنامج شعبية اكثر.

- طبعييا كييان بالمكييان اضييافة المزيييد ميين الخيييارات لهييذا البرنامييج مثييل3 ترجمة موقع او ترجمة ملف ورد موجود في الجهاز ..ألخ و لكن هذا ليس

هدف الموضوع. لنهييا طويليية و خاصييةTests- تعمدت الغاء مرحلة كتابيية الختبييارات 4

جييدا بلغيية بيييرل و سييتختلف كليييا مييع اي لغيية اخييرى فليين تقييع فييي فييائدةالعضاء كثيرا خصوصا انني اريد من المقالة ان تكون عامة.

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

Page 155: Prog guide 1

Our App In Action

ملحظات عامة : تكلمنا عن بعض المراحل المهمة في تطوير البرامج ، و لكن هنيياك الكييثير

من النقاط المهمة التي يجب النتباه لها : - ل تعد اختراع العجلة !. من الشياء المهمة التي يجييب ان ننتبييه لهييا و1

الييتي قمنييا بتطبيقهييا فييي هييذا الموضييوع هييو عييدم تكييرار الجهييود ، فهييذا البرنامج مثل كان بالمكان ان اطور لييه قاعييدة كلمييات بنفسييي و لكيين هييذا شيء مكلف جدا بالنسبة لشخص واحد و في النهاية سييأترك الضييافة الييى

قاعدة الكلمات عندما ادرك ان هذا المر فوق طاقتي .

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

Page 156: Prog guide 1

فهذه المهمة تحتاج الى متطوعين و مساهمين المر الذي قد ل يتوفر لي . و في الجهة المقابلة بدل ميين اسييتخدام المكتبيية الجيياهزة الييتي اسييتخدمتها للتصال بجوجل كان ايضا بامكاني ان اقوم بعملية التصيال بنفسييي و ذليك

و لكن هذا سيحتاج الييى مزيييد جهييد و عنيياء و فييي اغلييبLWPباستخدم الحيان لن تكون نتيجة اكوادي افضل من المبرمجين الييذين قيياموا بانشيياء المكتبة التي استخدمناها لنهييا طييورت ميين قبييل مجموعيية ميين الشييخاص

المحترفين و تم اختبارها بشكل مكثف من اشخاص اخرين. و لو على فرض كانت اكوادي افضل من اكواد هييذه المكتبيية فالعنيياء الييذي

سأتحصل عليه اكبر من الفائدة العائدة .

- تقسيم البرنامج الى وحدات : 2 سييطر برمجييي و224في هذا الموضوع مجموع السطر البرمجية كييانت

لكيين لحظنييا سييهولة البحييث عيين الخطيياء و التعييديل علييى اي شيييء فييي البرنامج بسهولة تامة ( و سيظل المر هكييذا حييتى لييو ضيياعفنا عييدد هييذه السطر مرات و مييرات) و هييذا راجييع لكييون البرنامييج مقسييم الييى وحييدات منطقية تسهل عملية البحث و التصحيح و تتبع الخطاء بدل ميين ان يكييون البرنامج كله وحدة واحدة فتصييعب عملييية تتبييع مصيدر الخطيياء و معرفية

ماذا يؤثر على ماذا !؟ و سنذكر بعض اهم المور الساسية التي تساعد على جعل البرنامييج قابييل

:Maintainable و التعديل Scalableللتطوير

- تقسيم البرنامج الى وحدات منطقية1.Dependecy- تقليل اعتمادية كل وحدة على وحدات اخرى 2 بل جعلها محصييورة فييي اضيييقGlobal- عدم جعل المتغيرات مشاعة 3

مجال ممكن بحيث ل يمكن تغيرهيا مين خيارج ميداها و لحظنيا هيذا طيوال البرمجة التي قمنا بها في هذا الموضوع و لم نستخدم متغير عييام ال مييرة

واحدة و ذلك بهدف العلن المبكر.

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

Page 157: Prog guide 1

- استخدام تسميات واضحة للمتغيرات و الدوال و الكلسات .4- كتابة الملحظات على الجزاء التي فيها صعوبة او فكرة .5

و سييأكتفي بهييذا القييدر فالمقاليية طييالت كييثيرا و اعتييذر ميين هييذا .. و لكيين سأختم بملحظات بسيطة و هي في طلب المساعدة فييي المنتييديات العربييية

او الجنبية : - تجنب الطلبات العامة مثل : كيف ابرمج موقع ويب ؟ او كيييف اسييتخدم1

المكتبة الفلنية ؟ بل الفضل تحديد السؤال في امر او دالة معينة …- البحث قبل السؤال .2 - المحاولة قبل السؤال فالتفاعل مع السائل يزيد كييثيرا عنييدما يييرون انييه3

بحث و سعى بنفسه ثم عرض مشكلته . - عرض الكود البرمجي و هذه كييثيرا مييا تتكييرر فييالكثير ل يقبييل بعييرض4

كامل الكود المصدري ، ربما هو خوف الحراج او خوف ان يسييرق الكييود او شيء من هذا القبيل . و لكن عرض الكود البرمجي كامل و ليس جييزء

منه يساعد كثيرا على حل المشكلة .- اجعل سؤالك طلبا و ليس امرا !. 5- و في النهاية السؤال في طلب العلم ل يوجد به احراج ..6

###

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

Page 158: Prog guide 1

:: الخاتمة ::

ــذا تم بحمد ال النتهاء من النسخة النهائية الولى من ه .2010الكتاب اللكتروني في الخامس من شهر نوفمبر

ادعو الــ انــي وفقــت لطــرح بعــض المواضــيع و النقــاط المفيدة التي وقعت في فائدة القاريء الكريم . و انــا اذ ل ادعي الكمــال بــل اســعى نحــوه امتثــل بقــوله تعــالى و مــاابريء نفسي ان النفس لمارة بالسوء ال ما رحم ربي.

للمراسلة بخصوص اي اقتراح او تعديل او نقد :[email protected]

على امل ان تكونوا من قراء النسخة القادمـــة.

و الصلة و السلم على سيد الخلق محمد و الــه الطيــبينالطاهرين.

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

Page 159: Prog guide 1

:: ترخيص الكتاب ::

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

Page 160: Prog guide 1

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