‫مختصر‬

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

‫عضــــو‬

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

‫ رخصة الكتاب‬Creative Commons
http://creativecommon...
‫:: اهداء ::‬
‫الى ناحيتـــها ،،‬
‫الى قبلتهـــا ،،‬
‫الى سموهـــا ،،‬
‫الى حبهــــا ،،‬
‫الى روحها ،،‬
‫الى جسمها ،،‬
‫ال...
‫:: مدخـــل ::‬
‫• بسم ال الرحمن الرحيم و الصلة و السلم علــى ســيد المرســلين محمــد و‬
‫اله الطاهرين ، اللهم صل على محمد...
‫• عليــه اشــكر كــل مــن ســاعدني و اخــذ بيــدي ســواء: بعبــارات شــكر و‬
‫استحســان ، نقــد بنــاء او اقــتراح مفيــد...
‫:: مقدمة ::‬
‫• ل اريد ان امثل دور المبرمج المحنك هنا ، فأنا واقعا لست اهل لذلك، و لكـن‬
‫بحكم تخصصي في هذا المجال و اهتم...
‫• حسنا الن ، انت عازم على المواصلة و الجد في تعلم لغــة برمجــة معينــة و‬
‫لكنك ل تســتطيع ان تختــار اي لغــة تناســبك؟...
‫ربما يستصغر البعض هذه النقطة و لكن في حقيقة المر هذه امور فطريــة‬
‫ل يمكــن تجاهلهــا! أل يمكــن ان تكــره قــراءة كتــا...
‫• شيء اخر يجب الشارة اليه هو عدم الهتمام كثيرا بمـا يشـاع عـن افضـلية‬
‫طريقة معينة في البرمجة ، مثل هناك اشارة دائمــة م...
‫• النقطة الخيرة التي احب ان اختم بها هــي مســألة الدراســة البرمجيــة ، فــي‬
‫الجامعــة نمــل و نتضــجر مــن الشــياء ا...
‫:: نماذج البرمجة و اهم المصطلحات ::‬
‫في البدء كان الصفر و الواحد …‬
‫ثم جاءت اللغات التجميعية ، الــى هنــا و نحــن نتكل...
‫‪ :: Imperative‬البرمجة المرية ) اللزامية(‬
‫تصف الحوسبة من ناحية الجمل التي تغير حالة ‪ State‬البرنامج. و تندرج‬
‫تحتها ...
‫اما الســطر فتكــون مرقمــة او معنونــة )‪ (Labels‬و مــن خلل هــذه الليــة‬
‫يمكن للبرنامج ان يقفز الى اي سطر برمجي.‬
‫ا...
‫يوجــد علــى القــل ثلث طــرق اساســية لتصــميم برامــج البيانــات المنظمــة‬
‫مقترحة باسماء اصحابها :‬
‫1. ‪J. Dominique...
‫‪ :: Procedural‬البرمجة الجرائية‬
‫تعتمد على عملية توفير الخطوات اللزمة لكي يصــل البرنامــج الــى الحالــة‬
‫المطلوبة. و...
‫مثال اخر :‬
‫;”‪my $name = “ali‬‬
‫;”‪$name = “Tomy‬‬
‫في هذا المثال المتغير كان يحمل قيمة علي و لكن تم تغيير القيمة الى ...
‫هذا المر مثل سيطبع لنــا القيمــة ذات الــترتيب 0 و هــي بعبــارة اخــرى اول‬
‫قيمة موجودة و في مثالنــا هــي علــي. طبعـ...
‫مثال:‬
‫/‪my %hash= qw‬‬
‫‪0555555 ali‬‬
‫‪0666666 yasser‬‬
‫;/‪0899999 basem‬‬
‫فــي هــذا المثــال قمنــا بانشــاء هــا...
‫في هذه الحالة سيقوم المفسر بتنفيذ الوامـر مـن البدايـة الـى النهايـة و ينتهـي البرنامـج‬
‫بشكل تسلسلي ‪ ، Sequenced‬مثال:...
‫هذا مثال بسيط لدينا عبارة تأكيد دخــول و لكــن ل نريــد ان نطبعهــا لكــل مــن‬
‫يدخل الى برنامجنا، فقط في حالة تحقق الشر...
‫‪:Unless‬‬
‫الجملة الشرطية ‪ Unless‬تعمــل بعكــس الجملــة الشــرطية ‪ if‬تمامــا . فكأننــا‬
‫نقول اذا كان الشرط غير متح...
‫دوائر التكرار:‬
‫في بعض الحيان نحتاج ان نكرر تنفيذ اوامر معينة ، و هنا تأتي دوائر التكرار .. عادة ما‬
‫يرافق كل دائرة تكر...
‫)01..1( ‪for‬‬
‫{‬
‫"‪print "looping 10 times!n‬‬
‫}‬
‫هنا سنطبع الجملة التي بين القواس المعقوفة 01 مرات.‬
‫‪:Foreach‬‬
‫...
‫!‪Ali You are a member of the family‬‬
‫!‪Sara You are a member of the family‬‬
‫!‪Yosra You are a member of the family‬‬...
‫‪do while‬‬
‫في بعض الحيان نريد ان نقوم بعملية التكرار مرة واحدة علـى القـل بغـض النظـر عـن‬
‫كون الشرط متحققا او ل هنا ن...
‫;01 = ‪my $controller‬‬
‫)02 == ‪until ($controller‬‬
‫{‬
‫;"‪print"going up until 19n‬‬
‫;++‪$controller‬‬
‫}‬
‫في هذا ا...
‫‪when("Hashem"){say "welcome $name your are the‬‬
‫}"‪3d‬‬
‫}}"‪default{say "I don't know you‬‬
‫نلحظ هنا كيف ان البرنامج...
‫}"‪else {say "I don't know you‬‬
‫}‬
‫‪Expression Modifiers‬‬
‫في اللغة هناك تراكيب مختلفة للجملة مثل "اسمي علي" او "علي ...
‫‪Regular Expressions‬‬
‫او باختصار ‪ Regex‬هي التعابير المعتادة و توفرها لغات البرمجــة للتعامــل‬
‫مع النصوص و المدخلت ب...
‫في المثــال الثــالث قمنــا بتحويــل النــص الــى الحــروف الكــبيرة و فــي المثــال‬
‫الخير الى الحروف الصغيرة . ما يهمن...
‫و لهذا نرى ان حتى اللغات التي لم تكتب اصــل علــى النمــوذج الشــيئي فــي‬
‫وقت لحق يتم اضافة الــدعم لهــذا النمــوذج ، ...
‫و يفضلون الشعار المغاير ) هناك طريقــة واحــدة فقــط لعمــل هــذا ( و ذلــك‬
‫باعتبارهم يفيد التنظيم و يساعد على بناء الم...
‫الخــارجي فــي التصــال بهــذا الكلس هــو عــن طريــق واجهتــه باســتخدام‬
‫ميثودز الكلس نفسه.‬
‫الن ما هي البرمجة الشيئي...
‫لنتخيل هناك مصنع للسيارات و نريد ان نحاكيه بالرؤيــة الشــيئية يمكــن ان‬
‫نبسط الى شيء مشابه الى:‬
‫‪abstract class Vehi...
‫قبل ان انتقل للنقطة القادمــة و بمــا ان الكلم عــن المخططــات ل بــأس بــأن‬
‫نذكر لغة النمذجة الموحدة ‪ UML‬و التي عادة...
‫هنا نلحظ انني اعطيت البائع رسالة تمثل طلبا و ل حاجة لي بمعرفة كيفية‬
‫تعامل البائع لتمام عملية الرســال . هــذه العمليــة...
‫فهنا لــو اعطانــا المرســل عــدد مــرات القفــز فــي الرســالة لســتجاب الكــائن‬
‫بتكرار عملية القفز عدد المرات المطلوب...
‫تعدد التوارث ‪Multiple Inheritance‬‬
‫في لغات البرمجة مثل سي ++ و بيرل هنــاك امكانيـة لي كلس بــان يــرث‬
‫من اكثر من كل...
‫‪ :: Functional‬البرمجة الوظيفية‬
‫البرمجــة الوظيفيــة تعامــل الحوســبة كتقييــم للــدوال الرياضــية و تتجنــب‬
‫البيان...
‫‪: References‬‬
‫اشرنا الى هذه النقطة كنقطة اساسية للبرمجة الوظيفيــة و ان كــانت ليســت‬
‫في حد ذاتها خاصية في البرمجــة...
‫اذا نبدا بمثال بسيط و هي دالة هيلو ! المشهورة..‬
‫{)(‪&hello(); sub hello‬‬
‫};"‪print "welcome to ali website‬‬
‫في هذا ...
‫جميل و اذا احببنا اضافة المزيد من القيم المــررة مــا علينــا ال ان نســتقبلها‬
‫كقائمة و نسندها لمتغيرات حسب الحاجة ، مر...
‫هذه الدالة كما هو واضــح فقــط ترجــع قيمــة 3 ، نلحــظ اننــا اســندنا القيمــة‬
‫المرجعة الى المتغير ‪ number‬و في المر...
‫الن ماذا تتوقعون ستكون نتيجة المرين الخرين ؟‬
‫النتيجــة ســتكون ‪ number‬ســيكون 11 و ‪ total‬ســيكون 12 . نلحــظ‬
‫كيف ...
‫الن سنحصــل علــى النتيجــة المتوقعــة 21 و 01 للمتغيريــن اللــذين خــارج‬
‫الدالة حيث اختفى تأثير الدالة على المتغيــرا...
‫و هذه الكواد البرمجية لهذه العملية …:‬
‫;)5( ‪$fv = fact‬‬
‫;"‪print "factorial 5 is $fvn‬‬
‫{ ‪sub fact‬‬
‫;‪my $val = s...
‫‪Higher-order functions‬‬
‫الن ســنبدأ اســتعراض بعــض الخصــائص الحقيقيــة للبرمجــة الوظيفيــة. و‬
‫ســنبدا بالــدوال ا...
‫3- سنحتفظ بالمتغيرات في المدى المحيط‬
‫4- نستطيع انشائهم في وقت التنفيذ‬
‫‪: Closures‬‬
‫لندرس هذا المثال :‬
‫{ ‪sub demo...
: ‫الن نلحظ النتيجة‬
$ref->("Ali"); # Mr. Ali!
$ref_2->("Yosra"); # Ms. Yosra!
‫نلحــظ كيـف ان الدالـة احتفظـت بالمـدخلت ف...
‫المزيد من المصطلحــات :‬
‫‪IDE‬‬
‫هــــذه الكلمــــة تمــــر علينــــا كــــثيرا و هــــي اختصــــار ‪Integrated‬‬
‫‪ ، D...
‫لتصــميم الشــكل الســريع للبرنامــج و لكــن عنــدما اريــد ان اكتــب الواجهــة‬
‫النهائية ساكتبها بنفسي لنني ل اريد كل ت...
‫طبعا توجد الت تخيلية عديدة غير الخاصة بجافا لديها القدرة على التعامل‬
‫مع لغات متعـددة مثل ‪ Parrot‬و هـي اللـة التخيليـة...
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Prog guide 1
Upcoming SlideShare
Loading in …5
×

Prog guide 1

1,405 views

Published on

prog guide

Published in: Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,405
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
32
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Prog guide 1

  1. 1. ‫مختصر‬ ‫دليل لغات البرمجة‬ ‫كتبه‬ ‫علي آل ياسين‬ ‫راهب في صومعة‬ ‫عضــــو‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  2. 2. :: ‫:: بسم ال الرحمن الرحيم‬ :: ‫:: تم اعداد الكتاب باستخدام برنامج‬ ‫ رخصة الكتاب‬Creative Commons http://creativecommons.org/licenses/by-nc-sa/3.0/us/ ‫مرفق في النهاية مستند الترخيص‬ http://arabicplg.sourceforge.net/ Version 1.0 final release
  3. 3. ‫:: اهداء ::‬ ‫الى ناحيتـــها ،،‬ ‫الى قبلتهـــا ،،‬ ‫الى سموهـــا ،،‬ ‫الى حبهــــا ،،‬ ‫الى روحها ،،‬ ‫الى جسمها ،،‬ ‫الى وقوفها ،،‬ ‫الى جلوسها ،،‬ ‫الى قنوتها ،،‬ ‫الى دعائها ،،‬ ‫الى ركوعها ،،‬ ‫الى سجودها ،،‬ ‫الى انبساطها ،،‬ ‫الى انقباضها ،،‬ ‫الى ابتسامتها ،،‬ ‫الى سرورها ،،‬ ‫الى صاحبــــة الشــــــأن ،،‬ ‫اليك ،، جعلني ال فداك ،،‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  4. 4. ‫:: مدخـــل ::‬ ‫• بسم ال الرحمن الرحيم و الصلة و السلم علــى ســيد المرســلين محمــد و‬ ‫اله الطاهرين ، اللهم صل على محمد و ال محمد كما صليت على ابراهيم و‬ ‫ال ابراهيــم اللهــم و صــل و ســلم و ترحــم و بــارك علــى محمــد و ال محمــد‬ ‫كأفضل ما صليت و باركت و ترحمت على احد من خلقك انك سميع مجيد.‬ ‫• جائتني فكرة هذا الكتاب اللكتروني بعد ان قــرات كتــاب "حــرب البرامــج"‬ ‫للكاتب الرائع كيث كرتس، و على الرغم من ان عملي هــذا لــم و لــن يصــل‬ ‫الى مستوى عمل شخص في مستوى هذا المبرمج ، ل مــن حيــث الكــم "‬ ‫003 صــفحة" و ل مــن حيــث المســتوى "خــبرة ســنين فــي البرمجــة مــع‬ ‫ميكروسوفت و غير ذلك.‬ ‫• ال ان هذا لم يمنعني من ان اشرع في كتيب يكون بمثابة دليل مختصــر الــى‬ ‫لغات البرمجة متجنبا الطالة المملة و التفاصيل التقنية الدقيقــة او التوغــل‬ ‫في شرح الكواد البرمجية التي من شأنها ان تبعد كل من ليــس لــه اهتمــام‬ ‫بالبرمجة.‬ ‫• عملي اذا في هــذا المختصــر هــو التعريــف بــالخطوط العريضــة بــاهم لغــات‬ ‫البرمجة في عالمهـا الواسـع. مـع اضـافة تعريـف بـأهم المصـطلحات الـتي‬ ‫يجب ان تعرف كي نستطيع من خللها قراءة تلك الخطوط العريضة.‬ ‫• و هذه النسخة النهائية الولى اطرحها في منتداي المفضــل مجتمــع لينكــس‬ ‫العربي ليماني بان الذي جعل المصادر الحرة عظيمة هو مبدا المشــاركة ،‬ ‫لهذا انا اطمح في ان ارى القتراحات و النقد لهذه الصدارة كي نستمر في‬ ‫مسلسل تطور هذا الكتاب من مسودة ابتدائيــة كمــا كــان قبــل ســنة و بضــع‬ ‫شهور الى كتاب غني و مفيد خلل الشهور القادمة.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  5. 5. ‫• عليــه اشــكر كــل مــن ســاعدني و اخــذ بيــدي ســواء: بعبــارات شــكر و‬ ‫استحســان ، نقــد بنــاء او اقــتراح مفيــد و اطمــح للمزيــد مــن المشــاركة و‬ ‫المعونة.‬ ‫• يوجد الكثير من المصطلحات البرمجيــة البحتــة طبعــا لــم اســتطع تفاديهــا و‬ ‫ايضا لم يكن باستطاعتي اضافة تعريفهــا كلهــا خــوف الطالــة و لكــن قمــت‬ ‫باضافة مقالة اضافية تعنــى بشــرح اهــم تلــك المصــطلحات مــع اســتعراض‬ ‫سريع لهم نمــاذج البرمجــة و ذلــك نــزول عنــد رغبــة الكــثير مــن اخــواني‬ ‫العضاء. و ايضا ارفقت في نهاية الكتاب مقالة تعنى بكيفية انشاء برنامج‬ ‫بالقليل من الجهد و دراسة بعض جوانب التطوير و المــور الــتي يجــب ان‬ ‫تأخذ في الحسبان في هذه العملية.‬ ‫• تخصصــي فــي علــوم الحاســب اللــي طبعــا ل يعطينــي الخــبرة الكافيــة فــي‬ ‫استعراض كل لغات البرمجة ، بل في حقيقة المر اللغات التي تعاملت معها‬ ‫هي فقط بيرل كلغة اساسية و سي++ و جافا و سمول تولك و بي اتش بي‬ ‫و قليل جدا من بايثون فكان هناك حاجة كبيرة للترجمة الصرفة في اللغــات‬ ‫الباقية فارجو الشارة الى مواطن الخلل فــي اي مكــان مــن هــذه المقــالت‬ ‫كي اقوم بتصحيحه ان وجد في الصدارات القادمة.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  6. 6. ‫:: مقدمة ::‬ ‫• ل اريد ان امثل دور المبرمج المحنك هنا ، فأنا واقعا لست اهل لذلك، و لكـن‬ ‫بحكم تخصصي في هذا المجال و اهتمــامي بالجــانب النظــري منــه خاصـة ،‬ ‫احببــت ان اكتــب بعــض الســطر لمــن لــديهم اهتمــام بالبرمجــة و لكنهــم لــم‬ ‫يقدموا بعد :‬ ‫• هناك نقــاط كــثيرة يجــب ان تاخــذ فــي الحســبان قبــل الشــروع فــي تعلــم لغــة‬ ‫برمجة، و لكن لحظــت ان المشــكلة الساســية عنــدنا هــي ليســت فــي عــدم‬ ‫القدرة على اختيار لغة معينة بل في عدم العزم على التعلم ابتداء. من منا ل‬ ‫يحب ان يقال عنــه مبرمــج ؟ خاصــة ان البرمجــة مثــل الرياضــيات يوصــف‬ ‫اصحابها بالذكاء و العبقرية . الكثير منا يقــول و يتمنــى و يخطــط ان يكــون‬ ‫مبرمجا عندما يقرا عن المبرمجين و المخترقين و قصص نجاح البرامج و‬ ‫المواقع و لكن عندما يبدا اول خطــوة فــي الدراســة يعــرف ان هنــاك الكــثير‬ ‫ليتعلمه و ان المادة ليست ممتعة كما كان يتصور و يبدا بالشعور بالممــل و‬ ‫من ثم يترك ما شرع فــي قراتــه مــن كتــاب او دورة تعليميــة . هنــاك حكمــة‬ ‫يابانية تقول " الطموح بدون عمل مجرد حلم يقظة ". شخصيا كنت اعاني‬ ‫من هذه المشكلة و هي تكديس الكتــب و الــدورات و المحاضــرات و غيرهــا‬ ‫على امل اني ساقراها و اشرع في تعلمها في وقت ما ! و الن لهــا ســنوات‬ ‫و لم اقرا منها شي ! اذا هذه المشكلة الولى التي يجب ان نجتازها ! و هي‬ ‫ان ندرك ان مجرد تحميل الكتب و الدورات التعليمية سواء في البرمجــة او‬ ‫غيرها من الفنون لن يجعل منا شيئا ! بل هو البدء و الصرار في تعلم هذه‬ ‫الشياء المملــة و المــواد الثقيلــة و اكمــال الكتــب و الــدورات الــى نهاياتهــا‬ ‫بالضــافة الــى الممارســة و التفكيــر هــو مــا يضــيف الــى حصــيلتنا الشــيء‬ ‫المفيد.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  7. 7. ‫• حسنا الن ، انت عازم على المواصلة و الجد في تعلم لغــة برمجــة معينــة و‬ ‫لكنك ل تســتطيع ان تختــار اي لغــة تناســبك؟ هــذه المشــكلة الثانيــة و نــرى‬ ‫الكثير من المواضيع من هذه الشاكلة ماذا اتعلم ؟ مــا هــي افضــل لغــة ؟ مــا‬ ‫هي اقوى لغة ؟ ايهما القوى بيرل او بــايثون ؟ جافــا او ســي شــارب ! فــي‬ ‫حقيقة المر ل يوجد شيء اسمه اللغة القوى و كل مــن يقــول هنــاك شــيء‬ ‫من هذا القبيل فهو في حقيقة المر واهم ، فكل لغة قوية في جانب معيــن و‬ ‫عادة ما يكون هو الجانب الذي انشئت من اجلــه اساســا، طبعــا يوجــد لغــات‬ ‫تصلح لكل شيء تقريبا و لكن يبقى انها ل تقدم كفائة و انتاجيــة عاليــة فــي‬ ‫كــل شـيء فمثل لغـة مخصصـة للـويب مثــل بـي اتـش بــي و ان كــان هنــاك‬ ‫امكانيــة عمــل برامــج ســطح مكتــب بهــا فهــي لــن تكــون بقــوة و ســهولة و‬ ‫انتاجية لغات البرمجة المخصصة لهذا الجانب و العكس صحيح . علــى هــذا‬ ‫فسيكون الجواب على سؤالك هو: ما هو احتياجك؟ ماذا تريــد ان تبرمــج؟‬ ‫هل تريد ان تتعلم لنفسك ام لسوق العمل ؟ و منه تختار لغة البرمجــة الــتي‬ ‫تريدها، لهذا هذا الكتيب ربما يكـون جيـدا فـي اختيـار لغـة برمجتـك الولـى‬ ‫فهــو يعرفــك بالهــداف الساســية الــتي انشــئت لهــا لغــات البرمجــة و اهــم‬ ‫التطبيقات التي تستخدم فيها هذه اللغات. و النقطة الجديرة بالذكر ايضا هي‬ ‫اطلعك على امثلة مــن طريقـة كتابـة الكـواد فـي لغــات مختلفـة باعتقــادي‬ ‫الشخصي سيؤثر على اهتمامك و اســتمتاعك بلغــة البرمجــة الــتي تختارهــا‬ ‫فهناك الكثير من المبرمجين يستخدمون لغات معينة لنهم يحبــون اســلوبها‬ ‫فــي الكتابــة و ايضــا طريقــة معالجتهــا للمشـاكل البرمجيـة . مثل : اذا كنـت‬ ‫تحب ان يكون كل شيء واضح في اسماء المتغيــرات و الكلمــات المفتاحيــة‬ ‫و غيرهــا و تكــره اســتخدام الكــثير مــن الختصــارات و الرمــوز كــالقواس‬ ‫الكثيرة في ليسب و القواس المعقوفة و ما الــى ذلــك فــذلك بــالطبع ســيؤثر‬ ‫علــى اختيــارك. مثــاله : قــولهم عــن اقــواس لغــة البرمجــة ليســب ) جهنــم‬ ‫القواس ( ، و لكن يقول الخر ) عندما وصلت الى مرحلة التنــوير ارتفعــت‬ ‫القواس !( .‬ ‫•‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  8. 8. ‫ربما يستصغر البعض هذه النقطة و لكن في حقيقة المر هذه امور فطريــة‬ ‫ل يمكــن تجاهلهــا! أل يمكــن ان تكــره قــراءة كتــاب لن خطــه لــم ترتــح لــه‬ ‫عينك ؟ و ان كان هذا الكتاب الكثر مبيعا و غني بالمحتوى!‬ ‫الشيء الهم هو:‬ ‫• ان تعلم ان تعلمك لي لغة برمجـة سـيفيدك كـثيرا حــتى لــو انتقلـت الـى لغـة‬ ‫اخرى .‬ ‫• ان تعلم ان لغــات البرمجــة مبــاديء ان فهمتهــا ســهل عليــك النتقــال حســب‬ ‫الحاجة الى لغة اخرى.‬ ‫• لهذا نرى ان اغلب المبرمجين يعرفون اكثر من لغة و يســهل عليهــم التــأقلم‬ ‫مع اي لغة جديدة يفرضها عليهم سوق العمل ، و كمثــال فــي بيــرل لــم اكــن‬ ‫اعرف كيف اقوم بعمل برنامج ذو واجهة رسومية لننــي كنــت معتــاد علــى‬ ‫عمل برامجي على الويب او سطر الوامر و لكن بعد تعلمــي مكتبــة ‪ Tk‬و‬ ‫فهمي لكيفية عمــل الواجهــات الرســومية اســتطعت بكــل بســاطة و يســر ان‬ ‫انقل برنامجي الى مكتبة ‪ wxperl‬و ايضا واجهة ‪.. GTK‬‬ ‫• لــذلك شخصــيا ارى الهميــة المطلقــة الــتي يغفــل عنهــا الكــثيرون للجــانب‬ ‫النظري و المنطقي للبرمجة بدل التركيز على حفــظ الــدوال و الكــواد فهــذه‬ ‫اشياء بسيطة جدا حتى يمكن الرجوع اليها بسرعة من خلل كتيب الــدليل ،‬ ‫بل يجب ان نعرف كيف يعمل البرنامج ل كيف يكتب البرنامج .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  9. 9. ‫• شيء اخر يجب الشارة اليه هو عدم الهتمام كثيرا بمـا يشـاع عـن افضـلية‬ ‫طريقة معينة في البرمجة ، مثل هناك اشارة دائمــة مــن خلل دراســتي فــي‬ ‫الجامعة الى افضــلية البرمجــة الكائنيــة و لكــن يجــب ان نــدرك ان البرمجــة‬ ‫الكائنية ليست دائما هــي الحــل الفضــل للمشــكلة ، توجــد مشــاكل و برامــج‬ ‫استخدام البرمجة الكائنية فيها مجرد تطويل و تعقيد للحل ، و لكن طبعا في‬ ‫برامج و نـواحي اخـرى سـيكون مـن الصـعب البرمجـة باسـتخدام البرمجـة‬ ‫الجرائية بدل من البرمجة الكائنيــة فيهــا ، لــذلك دائمــا احــب ان اشــير الــى‬ ‫اهمية الجانب النظري في البرمجة و هـو فهـم طــرق البرمجـة و مبادئهــا و‬ ‫من ثم اختيار الطريقة الفضل .‬ ‫• ايضا احـب ان اشـير الـى ان البرمجـة ممتعـة اذا كـانت تحـل مشـكلة نحتـاج‬ ‫لحلها و ال ستكون البرمجة مملة و رتيبة و عــادة مــا نــترك المشــروع فــي‬ ‫منتصفه ، مثل لينوس لم يشرع في كتابة نظامه ال من مشــكلة عاناهــا مــع‬ ‫نظم التشغيل الموجودة في وقته و غيره من المثلة كثيرة ، و هنا نصل الى‬ ‫نقطــة اخــرى و هــي ان البرامــج العملقــة ســيكون مــن الصــعب جــدا علــى‬ ‫شخص واحد فقط تطويرها و كتابتها و هنا تظهر اهمية العمــل الجمــاعي و‬ ‫الحتكاك بالمبرمجين الخرين و المشاركة في المحافل البرمجيــة و دراســة‬ ‫اكواد الغير للعمل من حيث انتهى الخرون و ليس تضيع الــوقت فــي اعــادة‬ ‫اختراع العجلة و تشتيت الجهود .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  10. 10. ‫• النقطة الخيرة التي احب ان اختم بها هــي مســألة الدراســة البرمجيــة ، فــي‬ ‫الجامعــة نمــل و نتضــجر مــن الشــياء النظريــة الــتي نتعلمهــا و نريــد تعلــم‬ ‫الشــياء الكــووول علــى مــا يقــال !.. و لكــن لحقــا نــدرك ان هــذه الشــياء‬ ‫النظرية المملة هي اهم ما تعلمناه و نرى لحقا مكانها في عــالم البرمجــة ،‬ ‫كمثال كان هناك شخص دائما يتضجر من البرمجــة لســطر الوامــر و يقــول‬ ‫ان هذا شيء قديم اكل الدهر عليه و شــرب و انــه علينــا ان نتعلــم البرمجــة‬ ‫الحديثة فما نفع برامج سطر الوامر .. و لكن فــي حقيقــة المــر الجامعــة و‬ ‫الكتب بشكل عام تعلمك البرمجة لسطر الوامر لنها تركز على المنطق فــي‬ ‫حــل المشــاكل البرمجيــة و ســطر الوامــر مجــرد اداة لســتلم المتغيــرات و‬ ‫التفاعــل مــع المســتخدم ، لحقــا ادركنــا ان الواجهــات الرســومية و برامــج‬ ‫الويب مجرد قشور ل تنفع اذا لم يكـن خلفهــا اكـواد برمجيـة سـحرية تعمـل‬ ‫بصمت خلف الستار ! و ان الذي تعلم تلك الكواد و المباديء و تمكن منهـا‬ ‫لم يجد صعوبة في ان يغلفها بواجهات حديثة مثل ‪ QT‬او ‪..! GTk‬‬ ‫:: &&& ::‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  11. 11. ‫:: نماذج البرمجة و اهم المصطلحات ::‬ ‫في البدء كان الصفر و الواحد …‬ ‫ثم جاءت اللغات التجميعية ، الــى هنــا و نحــن نتكلــم عــن اللغــات منخفضــة‬ ‫المستوى اي انها ذات ارتباط شديد بالعتاد ، و ان كنا مع اللغات التجميعيــة‬ ‫بدانا الماكروز و بعض الخصائص التي سنراها لحقا في اللغــات الجرائيــة‬ ‫بشكل اكثر تقدما .‬ ‫ثــم بــزغ الفجــر الجديــد مــع اللغــات عاليــة المســتوى و ظهــرت البرمجــة‬ ‫الجرائية لتعلن عن ظهور عصر الهتمام بالمشكلة البرمجية !..‬ ‫فقبل ان نتكلم عن لغات البرمجــة يجــب ان نســلط الضــوء علــى اهــم نمــاذج‬ ‫البرمجة و اهم المصطلحات المرتبطــة بهــا ليســهل علينــا لحقــا فهــم لغــات‬ ‫البرمجــة مــن خلل قــراءة اســطرها العريضــة . و فــي نهايــة هــذه الفقــرة‬ ‫سنتعرض لمصطلحات متنوعة.‬ ‫‪Programing Paradigms‬‬ ‫يجب ان ننتبه الى انه ل يوجد اي تعريف رســمي لي نمــوذج مــن النمــاذج‬ ‫التية ، و نقاط الشتراك كثيرة فالحدود هنا ليست فواصل ل يمكن تجاوزها‬ ‫فالبرمجة الشيئية في النهاية هي برمجة اجرائية بطبيعتها. و لكن ما يعنينا‬ ‫في حقيقة المر هنا هو النقاط التي يركز عليها كل نموذج من هذه النمــاذج‬ ‫حيث عليه تتغير طريقة تفكير المبرمج في نظرته و تحليله و حله للمشــاكل‬ ‫البرمجيـة . و هـذه النمـاذج القليلـة المـذكورة هنـا هـي المهمـة و ال هنـاك‬ ‫العديد و العديد من النماذج كما هنالك العداد المهولة من لغات البرمجة.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  12. 12. ‫‪ :: Imperative‬البرمجة المرية ) اللزامية(‬ ‫تصف الحوسبة من ناحية الجمل التي تغير حالة ‪ State‬البرنامج. و تندرج‬ ‫تحتها العديد من النماذج كما سيأتي..‬ ‫‪ :: Non-Structured Programing‬البرمجة الغير منظمة‬ ‫قبل البدء في الكلم عن النماذج المرتبة )الجرائيــة ، الكائنيــة ..( يجــب ان‬ ‫نذكر بأنه في البداية كام هنــاك نمــوذج البرمجــة الغيـر مرتبـة. يوجــد لغــات‬ ‫عالية و منخفضة المستوى تستخدم هذا النموذج منها:‬ ‫‪MSX Basic‬‬ ‫‪GWBasic‬‬ ‫‪Focal Joss‬‬ ‫‪Mumps‬‬ ‫‪Telcomp‬‬ ‫‪Cobol‬‬ ‫‪Machin Level code‬‬ ‫بعض نظم السمبلي‬ ‫‪Assembly Debuggers‬‬ ‫و بعض لغات السكربتنج مثل ‪.MS-Dos Batch file Lang‬‬ ‫البرمجة الغير منظمة تنتقد بعنــف لنهــا تنتــج اكــواد صــعبة القــراءة او مــا‬ ‫يعرف بـ ) اكواد السبجتي!( لهذا ل تعتبر في بعض الوقات خيــار مناســب‬ ‫للمشاريع المهمة و لكن في الجهــة المقابلــة يمــدحها البعــض للحريــة الــتي‬ ‫توفرهـــا للمبرمـــج و يشـــبهونها بطريقـــة كتابـــة موتســـارت للمقطوعـــات‬ ‫الموسيقية.‬ ‫البرامج التي تكتب بهذه الطريقـة عـادة مـا تتكـون مـن مجموعـة اوامـر او‬ ‫جمل متتالية )عادة كل جملة في سطر مستقل (.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  13. 13. ‫اما الســطر فتكــون مرقمــة او معنونــة )‪ (Labels‬و مــن خلل هــذه الليــة‬ ‫يمكن للبرنامج ان يقفز الى اي سطر برمجي.‬ ‫البرمجة غير المنظمة توفر اساسيات اليات التحكم بسير البرنامــج و تــوفر‬ ‫ايضا الـ ‪ Subroutines‬و سنتكلم عن هذه الشياء بقليل من التفصيل فــي‬ ‫البرمجة الجرائية.‬ ‫يبقى ان نعرف ان البرمجة غير المرتبة تتيح لنا انواع البيانات الولية مثل‬ ‫العداد و النصوص و القوائم .‬ ‫‪ :: Structured Programing‬البرمجة المنظمة‬ ‫البرمجــة المنظمــة كالبرمجــة الغيــر منظمــة تعتــبر احــدى شــعب البرمجــة‬ ‫المرية ) احدى اهم و اكبر نماذج البرمجة(. و اشتهرت البرمجــة المنظمــة‬ ‫بازالتها للجملة الشهيرة ‪ GOTO‬او الحد من استخدامها.‬ ‫و هناك ثلث منهجيات اكثر شهرة لكتابة البرامج المنظمة :‬ ‫1 - طريقــة ادســجار دايجســترا حيــث هيكــل البرنامــج مكــون مــن مجموعــة‬ ‫هياكل جزئية . بهذه الطريقة يمكن فهــم البرنامــج مــن خلل فهــم كــل جــزء‬ ‫لوحده و به نتحصل على فصل و عزل للمهمات المختلفة.‬ ‫2 - طريقة اخرى مشتقة من طريقة دايجسترا حيث يتم تقسيم البرنامج الــى‬ ‫برامج جزئية مع وجود مدخل واحد فقط للبرنامــج و لكــن تعــارض و بقــوة‬ ‫مبدء المخرج الموحد.‬ ‫3 - طريقة جاكسون للبرمجة المنظمة و الــتي تعتمــد علــى محــاذاة البيانــات‬ ‫المنظمة مع اجزاء البرنامج المنظمة.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  14. 14. ‫يوجــد علــى القــل ثلث طــرق اساســية لتصــميم برامــج البيانــات المنظمــة‬ ‫مقترحة باسماء اصحابها :‬ ‫1. ‪J. Dominique Warner‬‬ ‫2. ‪Ken Orr‬‬ ‫3. ‪Michael Jackson‬‬ ‫من المنظور الدوني يمكن ان نرى البرامج المنظمــة علــى انهــا مكونــة مــن‬ ‫اليات تحكم مسار البرنامج تنقسم الى ثلث انواع :‬ ‫‪ : Sequence‬و نقصد بها تنفيذ اوامر بترتيب تسلسلي منظم.‬ ‫‪ : Selection‬و نقصــد بهــا تنفيــذ مجموعــة اوامــر اعتمــادا علــى حالــة‬ ‫البرنامج و ذلك عادة مــن خلل الكلمــات المفتاحيــة : ..‪if.. then .. else‬‬ ‫‪..switch..case‬‬ ‫‪ : Repetition‬و نقصد بها تنفيذ اوامر معينة و تكرار عمليــة التنفيــذ الــى‬ ‫ان يصل البرنامج الى حالة معينة أو تنفيذ مجموعة اوامر علــى كــل عنصــر‬ ‫من عناصر مجموعة ما . و ذلك يتم عادة من خلل الكلمات المفتاحية :‬ ‫‪while.. repeat .. for .. do while.. until‬‬ ‫ربما يمر علينا مصطلح ‪ Block-Structured‬و هو صفة للغات البرمجــة‬ ‫التي توفر فــي طريقــة كتابتهــا الكلمــات المفتاحيــة مــع القــواس الــتي تضــم‬ ‫الوامــر المجــزءة . امــا النــوع الثــاني هــو ‪ Comb-Structured‬و هــي‬ ‫اللغات التي توفر الية الكلمــات المفتاحيــة المتسلســلة الــتي تحتــوي بـداخلها‬ ‫الوامر المجزءة . مثال الخير فــي لغــة ‪ Ada‬الــ ‪ Block‬مكــون مــن اربــع‬ ‫اجزاء :‬ ‫‪DECLARE BEGIN EXCEPTION END‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  15. 15. ‫‪ :: Procedural‬البرمجة الجرائية‬ ‫تعتمد على عملية توفير الخطوات اللزمة لكي يصــل البرنامــج الــى الحالــة‬ ‫المطلوبة. و هي من اقدم النماذج و اكثرها انتشــارا و قريبــة جــدا للطريقــة‬ ‫الفطرية في التفكير. و سنستعرض بعض اهــم المفــاهيم الــتي تتعامــل معهــا‬ ‫باختصار ...‬ ‫المتغيرات ‪:Variables‬‬ ‫في البرمجة كما هو الحال في الرياضيات هناك حاجة ماسـة للتعامـل مـع المتغيـرات و ل‬ ‫يخلو برنامج ما من متغير ال في حالت نادرة جـدا . ابسـط انـواع المتغيـرات هـو الـذي‬ ‫يحمل قيمة واحدة فقط . مثل ص = 21. في هذه الحالة ص متغيـر يحمـل قيمـة معينـة‬ ‫‪ Value‬و لكن هذه القيمة متغيرة فهي ليست ثابتة طالما البرنامج فـي طـور التنفيـذ فـي‬ ‫اي لحظة ممكن تتغير هذه القيمة . بعض لغات البرمجة مثل جافـا تسـتوجب تحديـد نـوع‬ ‫المتغير فاذا كان المتغير من نوع حرف مثل فل يمكن اسناد قيم رقمية للمتغير و لكـن فـي‬ ‫لغات البرمجة الديناميكيةمثل بيرل و بي اتش بي ل يوجـد مثـل هـذا التقيـد فـالمتغير ص‬ ‫مثل يمكن ان يحمل اي قيمة رقمية او نصية ..ألخ .‬ ‫مثال:‬ ‫;1 = ‪my $number‬‬ ‫في هذا المثال اعلنا عن المتغير و في نفس الوقت اسندنا له قيمــة و هــي 1‬ ‫كان بالمكان ان نعلن عن المتغير فقط دون اسناد اي قيمة :‬ ‫;‪my $number‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  16. 16. ‫مثال اخر :‬ ‫;”‪my $name = “ali‬‬ ‫;”‪$name = “Tomy‬‬ ‫في هذا المثال المتغير كان يحمل قيمة علي و لكن تم تغيير القيمة الى تومي‬ ‫و سيظل المتغير يحمل اسم تومي الى نهاية البرنامج اذا لم يتم اعادة تغييــر‬ ‫هذه القيمة.‬ ‫القوائم ‪:Arrays‬‬ ‫طيب ماذا لــو كنــا نريــد ان ننشــيء متغيــر و لكــن يحمــل عــدة اســماء . مثل‬ ‫اسماء اصدقاء البيئة. يمكننا ان نستخدم القــوائم او اللســتة و هــي متغيــر و‬ ‫لكن يحمل عدة قيم بداخله و ذلك بحســب ترتيـب رقمـي فاللسـتة تبـدا مـن 0‬ ‫للعنصر الول و 1 للعنصر الثاني ..الخ‬ ‫مرة اخرى هنــاك لغــات برمجــة تطلــب تحديــد نــوع العناصــر الموجــودة فــي‬ ‫القائمة و لغات ل تطلب، مثالنا هنا قائمة باسماء طلب ..‬ ‫;‪my @array = qwali yasser salman‬‬ ‫الن المتغيــر ‪ array‬يحمــل ثلث قيــم علــي و ياســر و ســلمان و يمكــن‬ ‫الوصول الى كل قيمة بتحديد رقم القيمة :‬ ‫;]0[‪print $array‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  17. 17. ‫هذا المر مثل سيطبع لنــا القيمــة ذات الــترتيب 0 و هــي بعبــارة اخــرى اول‬ ‫قيمة موجودة و في مثالنــا هــي علــي. طبعــا هكــذا يمكننــا اضــافة عناصــر و‬ ‫ازالة عناصر بكل بساطة.‬ ‫‪:Null value‬‬ ‫و هي القيمة الغير معرفة و ل تعني الصفر كما يتوهم البعض . مثل العلن‬ ‫عن متغير بدون اسناد قيمة سيحتوي على قيمة غير معرفة ، و من الشياء‬ ‫الساسية في اختبار البرامج البحث عن القيم الغير معرفــة و يمكــن التحقــق‬ ‫بأن المتغير يحمل قيمة باليات مختلفة منهــا الدالــة ‪ defined‬فــي بيــرل ، و‬ ‫مثالها :‬ ‫;‪my $number‬‬ ‫{))‪if (defined($number‬‬ ‫};‪print $number‬‬ ‫}"‪else {print "undefined value‬‬ ‫الهاش ‪:Hash‬‬ ‫يوجد نوع اخر من المتغيرات يشبه القوائم الى حد كبير اسمه الهاش و لكن الختلف هنا‬ ‫ان القيم تمثل على شكل مفتاح ‪ key‬و قيمة ‪ . value‬بعبارة اخرى كنا في القوائم نشير‬ ‫الى القيم باستخدام مفاتيح رقمية 0...* و لكن في الهاش يمكننا نحن ان نحدد المفاتيح و‬ ‫التي يجـب ان تكـون مميـزة و غيـر مكـررة و بـذلك نسـتطيع تمثيـل قاعـدة بيانـات مثـل‬ ‫القواميس و دليل الهاتف ..الخ‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  18. 18. ‫مثال:‬ ‫/‪my %hash= qw‬‬ ‫‪0555555 ali‬‬ ‫‪0666666 yasser‬‬ ‫;/‪0899999 basem‬‬ ‫فــي هــذا المثــال قمنــا بانشــاء هــاش يحمــل ارقــام المــوظفين و لن ارقــام‬ ‫التليفونات عادة مميزة و غير مكررة قمنا بجعلها مفاتيح للوصول الــى اســم‬ ‫الموظف المطلوب .‬ ‫مرة اخرى يمكننا التعديل على كل عنصر في الهاش لوحده او نقــوم بعمليــة‬ ‫على جميع العناصر، و ادناه مثال يطبع كــل القيــم الموجــودة فــي الهــاش و‬ ‫سنتكلم عن دوائر التكرار بعد قليل :‬ ‫)‪foreach $phoneNumber(keys %hash‬‬ ‫}"‪{print "$phoneNumber = $hash{$phoneNumber} n‬‬ ‫مسار البرنامج ‪: Workflow‬‬ ‫عندما نكتب برنامجا سيكون علينا في اغلب الحيان التحكـم فـي سـير البرنامـج اعتمـادا‬ ‫على المتغيرات و طلبات المستخدم ، فقط في البرامج البسيطة ل نحتاج الى تغييــر مســار‬ ‫البرنامج .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  19. 19. ‫في هذه الحالة سيقوم المفسر بتنفيذ الوامـر مـن البدايـة الـى النهايـة و ينتهـي البرنامـج‬ ‫بشكل تسلسلي ‪ ، Sequenced‬مثال:‬ ‫;1= ‪{my $number‬‬ ‫;2= 2‪my $number‬‬ ‫;2‪print $number+$number‬‬ ‫}‬ ‫في هذا المثال سيقوم البرنامج بانشاء متغير و يسند له قيمة و متغيــر ثــاني‬ ‫و يسند له قيمة و في النهاية يجمع القيمتين و يطبعهما الى الشاشة .‬ ‫نلحظ عدم وجود اي تشـعب فـي البرنامـج . و لكـن هـذا كمـا قلنـا للبرامـج‬ ‫البسيطة و لكن في اغلب الحيــان ســنحتاج الــى ادوات للتحكــم بســير العمــل‬ ‫‪ Control Structeres‬و مرة اخرى كل لغة برمجة توفر اليات مختلفة و لكن سنأخذ‬ ‫بعض المثلة الدارجة :‬ ‫الجملة الشرطية ‪:If‬‬ ‫باستخدام ‪ if‬و الـتي تعنـي "اذا" نسـتطيع ان نحصـر تنفيـذ جـزء معيـن مـن البرنامـج‬ ‫بحسب الشرط. مثال:‬ ‫)"‪if ($user eq "Ali‬‬ ‫}"!‪{print "Access granted‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  20. 20. ‫هذا مثال بسيط لدينا عبارة تأكيد دخــول و لكــن ل نريــد ان نطبعهــا لكــل مــن‬ ‫يدخل الى برنامجنا، فقط في حالة تحقق الشرط نطبع العبارة . الشرط هو ما‬ ‫بين القوسين الذين يليان كلمة ‪ ، if‬و في هــذه الحالــة الشــرط هــو ان يكــون‬ ‫المتغير يحمل قيمة ‪. Ali‬‬ ‫جميل، الن نستطيع ان ننفذ امر اخر اذا كــان الشــرط غيــر متحققــا . و ذلــك‬ ‫يتم عن طريق استخدام كلمة ‪. else‬‬ ‫}"‪else{ print "I don't know you‬‬ ‫الن البرنامــج عنــدما يصــل الــى الجملــة الشــرطية و يــرى ان الشــرط غيــر‬ ‫متحقــق ســينفذ مــا هــو موجــود فــي ‪ else‬و فــي مثالنــا يطبــع جملــة انــا ل‬ ‫اعرفك !.‬ ‫يمكننا ايضـا اضــافة مزيـد مـن الشـروط لنفـس الجملـة الشـرطية باســتخدام‬ ‫‪ ) elsif‬حرف ‪ e‬محذوف عمدا في لغة البرمجة بيرل( .‬ ‫)"‪elsif($user eq "fatima‬‬ ‫}"!‪{print "Hi fatima‬‬ ‫الن ســيقوم البرنامــج بــالتحقق مــن الشــرط الول و اذا كــان غيــر متحققــا‬ ‫سيذهب الى الشرط الثــاني و يتأكـد هــل قيمــة المســتخدم فاطمـة ؟ فــاذا كــان‬ ‫الشــرط متحققــا ســيطبع الجملــة المناســبة و ال ســيذهب الــى ‪ else‬و يطبــع‬ ‫الجملة انا ل اعرفك !.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  21. 21. ‫‪:Unless‬‬ ‫الجملة الشرطية ‪ Unless‬تعمــل بعكــس الجملــة الشــرطية ‪ if‬تمامــا . فكأننــا‬ ‫نقول اذا كان الشرط غير متحقق افعل كذا و كذا . بعكس ما كنا نفعــل فــي ‪if‬‬ ‫حيث كنا نقول اذا كان الشرط متحقق فافعل كذا و كذا ..‬ ‫مثال :‬ ‫)01 == ‪unless($a‬‬ ‫{‬ ‫;"01 ‪print "The number isn't‬‬ ‫}‬ ‫في هذا المثال سيقوم البرنامج بطباعة جملة " هذا الرقم ليــس 01” مــا دام‬ ‫ان الشــرط فــي العلــى غيــر متحقــق و بــالطبع كنــا نســتطيع ان نكتــب هــذا‬ ‫بطريقة ‪ if‬و لكن سيكون الشرط بالنفي و ليس باليجاب … هكذا :‬ ‫)01 =! ‪if ($a‬‬ ‫{‬ ‫;"01 ‪print "The number isn't‬‬ ‫}‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  22. 22. ‫دوائر التكرار:‬ ‫في بعض الحيان نحتاج ان نكرر تنفيذ اوامر معينة ، و هنا تأتي دوائر التكرار .. عادة ما‬ ‫يرافق كل دائرة تكرار عداد لديه قيمة صغرى و قيمة كـبرى لكـي تنتهـي عمليـة التكـرار‬ ‫عنـد الوصـول للقيمـة الكـبرى و بـذلك نضـمن عـدم اسـتمرار التكـرار الـى مـا ل نهايـة‬ ‫‪.infinite loop‬‬ ‫لنبدا بالــ ‪ for loop‬مثالها على طريقة السي :‬ ‫)++‪for ($a=0;$a<10;$a‬‬ ‫}"‪{print "loop $a‬‬ ‫نلحظ ان بعد كلمة ‪ for‬يوجد قيمة صــغرى لبدايــة العــداد و مــن ثــم الشــرط‬ ‫الذي ستتحقق منه الدائرة عند تنفيذ كــل دورة و هــو هنــا ان يكــون المتغيــر‬ ‫اقل من 01 . و في النهاية سنزيد قيمة العداد +1 مــع انتهــاء كــل دورة .. و‬ ‫بذلك ستنفذ الوامر التي بين القواس المعقوفة 01 مرات لنحصل على هــذا‬ ‫الناتج :‬ ‫‪loop 0loop 1loop 2loop 3loop 4loop 5loop 6loop 7loop‬‬ ‫9 ‪8loop‬‬ ‫ايضا يمكننا ان نمرر قائمـة بيـن قوســي الــ ‪ for‬مثل مــن 1 الـى 01 حيــث‬ ‫ستكون القيمة الصغرى واحد و القيمة الكبرى 01.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  23. 23. ‫)01..1( ‪for‬‬ ‫{‬ ‫"‪print "looping 10 times!n‬‬ ‫}‬ ‫هنا سنطبع الجملة التي بين القواس المعقوفة 01 مرات.‬ ‫‪:Foreach‬‬ ‫طريقة عملها مشابهة للـ ‪ for‬و تختلف قليل بين كل لغة و اخرى و لكن في‬ ‫بيرل عادة ما نستخدمها مع القوائم...مثل :‬ ‫;/‪my @list = qw/Ali Sara Yosra Mamdoh‬‬ ‫{)‪foreach (@list‬‬ ‫;"‪print $_, " You are a member of the family!n‬‬ ‫}‬ ‫في هذا المثال نلحظ ان لكل عنصر من عناصر القائمة ســيتم طباعــة اســمه‬ ‫و مــن ثــم طباعــة الجملــة ‪!You are a member of the family‬‬ ‫امامه . فتكون النتيجة :‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  24. 24. ‫!‪Ali You are a member of the family‬‬ ‫!‪Sara You are a member of the family‬‬ ‫!‪Yosra You are a member of the family‬‬ ‫!‪Mamdoh You are a member of the family‬‬ ‫‪: While‬‬ ‫دائرة التكرار ‪ while‬تقوم بعملية مشــابهة ايضــا فهــي تقــوم بتكــرار تنفيــذ‬ ‫اوامر معينة عدد مرات محددة مازال الشرط متحققا .‬ ‫مثال:‬ ‫;01 =‪$a‬‬ ‫)0 =! ‪while ($a‬‬ ‫};--‪{print $a‬‬ ‫في هذا المثال سنتأكد مــن الشــرط هــل المتغيــر ل يســاوي صــفر؟ اذا كــانت‬ ‫الجابة نعم سيتم طباعة قيمــة المتغيــر مــع انقاصــها -1 . فــاذا كــان الشــرط‬ ‫متحققا تنتهي الدائرة مع وصول المتغير للقيمة 0 . في مثالنا اذا ســيتم العــد‬ ‫التنازلي من 01 الى 1 ...‬ ‫12345678901 :‪Ouputs‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  25. 25. ‫‪do while‬‬ ‫في بعض الحيان نريد ان نقوم بعملية التكرار مرة واحدة علـى القـل بغـض النظـر عـن‬ ‫كون الشرط متحققا او ل هنا نستخدم ‪.. do while‬‬ ‫;01=‪my $a‬‬ ‫{ ‪do‬‬ ‫;"‪print "this is a do while loop‬‬ ‫;++‪$a‬‬ ‫}‬ ‫;)01< ‪while ($a‬‬ ‫نلحظ هنا ان الوامر الموجودة داخل القواس المعقوفة سـتنفذ علـى القـل مـرة واحـدة‬ ‫حتى لو كان الشرط الموجود في ‪ while‬غير صـحيح . فـي مثالنـا قيمـة المتغيـر 01 و‬ ‫الشرط هو ان نقوم بتنفيذ الوامر اذا كان العدد اصغر من عشرة لهذا الشرط غير متحقق‬ ‫و لكن لننا استخدمنا ‪ do while‬فسيتم تنفيذ الوامر مرة واحدة و من ثم تقييم الشــرط‬ ‫و بما انه غير متحقق سنخرج من التكرار .‬ ‫‪:Until‬‬ ‫‪ until‬تقوم بعملية عكسية لما تقوم به ‪ while‬فهي تبدا بشرط غير متحقـق بـدل مـن‬ ‫الشرط المتحقـق فـي ‪ while‬و سـتنتهي الـدائرة عنـدما يصـبح الشـرط متحققـا بخلف‬ ‫‪ while‬التي تنتهي عندما يصبح الشرط غير متحققا .. مثال:‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  26. 26. ‫;01 = ‪my $controller‬‬ ‫)02 == ‪until ($controller‬‬ ‫{‬ ‫;"‪print"going up until 19n‬‬ ‫;++‪$controller‬‬ ‫}‬ ‫في هذا المثال سنقوم بالصعود بداية من 01 و انتهاء الى 91 حيث ســيكون‬ ‫الشرط متحققا عند وصول المتغير الى قيمة 02 و بذلك ينتهي التكرار ..‬ ‫‪:Given-When‬‬ ‫في بعض الحيان بدل من الكثار مـن الجمـل الشـرطية ‪ if else‬يمكننـا ان نحـدد مسـار‬ ‫البرنامج بالية اسهل و اجمل للكتابة حيث سنقوم بتحليل قيمة المتغير و بنـاء علـى قيمتـه‬ ‫سنتخذ الجراء المناسب:‬ ‫{) ‪given( $name‬‬ ‫}"‪when("Ali"){ say "welcome $name your are the 1st‬‬ ‫}"‪when("Saleh"){say "welcome $name your are the 2nd‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  27. 27. ‫‪when("Hashem"){say "welcome $name your are the‬‬ ‫}"‪3d‬‬ ‫}}"‪default{say "I don't know you‬‬ ‫نلحظ هنا كيف ان البرنامج سيختبر قيمة المتغيــر ‪ name‬و عليــه ســيتخذ‬ ‫الجراء المناسب فنحن هنا باسـتخدام كلمـة ‪ when‬سـنحدد القيـم المتوقعـة‬ ‫مثل ان يكــون الســم علــي او صــالح او هاشــم و ل ننســى ان نمــرر قيمــة‬ ‫افتراضــية فــي حــال كــانت قيمــة المتغيــر ل تتطــابق مــع اي مــن القيــم الــتي‬ ‫توقعناها فـ ‪ default‬هنا تعمل عمل ‪ else‬و هي الحالة العامة .‬ ‫‪Switch case‬‬ ‫المثــال اعله علــى طريقــة بيــرل و لكــن فــي بعــض اللغــات الخــرى طريقــة‬ ‫الكتابة تختلف و ان كان المفهوم واحدا فبــدل مــن ‪ given when‬نســتخدم‬ ‫‪ switch case‬حيث ‪ switch‬تاخذ المتغير المراد اختبــاره و ‪ case‬تاخــذ‬ ‫القيم المتوقعة … مثال:‬ ‫;‪use Switch‬‬ ‫{) ‪switch ( $name‬‬ ‫}"‪case "Ali" { say "welcome $name your are the 1st‬‬ ‫}"‪case "Saleh" {say "welcome $name your are the 2nd‬‬ ‫‪case "Hashem" {say "welcome $name your are the‬‬ ‫}"‪3d‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  28. 28. ‫}"‪else {say "I don't know you‬‬ ‫}‬ ‫‪Expression Modifiers‬‬ ‫في اللغة هناك تراكيب مختلفة للجملة مثل "اسمي علي" او "علي هو اسمي" تركيبين‬ ‫مختلفين لنفس المعنى . في اللغات البشرية تتاح هذه المكانيـة لتفيـد معنـى التأكيـد علـى‬ ‫جزء معين من الجملة .‬ ‫مثل علي و خالد ذهبا لحفل التخرج . ماذا لو كنا نريد التأكيد على الحفل و ليس على مــن‬ ‫ذهب للحفل نسـتطيع ان نقـول لحفـل التخـرج ذهـب علـي و خالـد ! هنـا سـنركز اهتمـام‬ ‫السامع الى كلمة حفـل التخـرج . معـدلت التعـابير ‪ Expression modifiers‬تعمـل‬ ‫بمثل هذه اللية فهي تعكس ترتيب الجمل الشرطية و دوائر التكـرار و هـذه امثلـة نلحـظ‬ ‫كيف ان الشرط يقع في نهاية الجملة بعد المر الذي سينفذ في حال كان الشرط متحققا:‬ ‫;1 = ‪$bool‬‬ ‫;5 = ‪$a‬‬ ‫;‪say "I am in love" if $bool‬‬ ‫;‪say "false" unless $bool‬‬ ‫;9 < ‪say "my name is", ($a++) while $a‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  29. 29. ‫‪Regular Expressions‬‬ ‫او باختصار ‪ Regex‬هي التعابير المعتادة و توفرها لغات البرمجــة للتعامــل‬ ‫مع النصوص و المدخلت بالضافة الى استخدامها في ادوات و اوامر ادارة‬ ‫النظم بكثرة. طبعا هذه عالم في حــد ذاتهــا و لكــن نختصــر فنقــول انــه هنــاك‬ ‫رموز توفرها اللغة ) ايضا تختلف من لغــة الــى اخــرى( لكــي تســهل عمليــة‬ ‫التعامل مع النصوص كعملية اجتزاء جزء معيــن او البحــث عــن نــص بهيئة‬ ‫معينة. و سنأخذ بعض المثلة فقط لتقريب الفكرة ...‬ ‫‪1- if($string =~ m/(A|E|I|O|U|Y|a|e|i|o|u|y)/) {print‬‬ ‫}"‪"String contains a vowel!n‬‬ ‫;/‪2-$string =~ s/Ali Yami/Ali Qahtani‬‬ ‫/]‪3-Change everything to upper case: $string =~ tr/[a-z‬‬ ‫;/]‪[A-Z‬‬ ‫/]‪4-Change everything to lower case $string =~ tr/[A-Z‬‬ ‫;/]‪[a-z‬‬ ‫في المثال الول قمنا باختبار النص هــل يوجــد فيــه احــد حــروف العلــة ؟ اذا‬ ‫كان الجواب نعم سنطبع جملة تؤكد هذا المر.‬ ‫في المثال الثاني قمنا باستبدال علي اليامي بعلي القحطاني كمــا نعمــل ‪find‬‬ ‫‪ and replace‬في برامج الوفيس.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  30. 30. ‫في المثــال الثــالث قمنــا بتحويــل النــص الــى الحــروف الكــبيرة و فــي المثــال‬ ‫الخير الى الحروف الصغيرة . ما يهمنا هو // حيث بين هذين نضع التعابير‬ ‫المعتادة و المر المهم الخر هو ما قبل // حيث نضع المعامل مثــل ‪ s‬معامــل‬ ‫الستبدال .‬ ‫‪ :: Event – Driven‬البرمجة المعتمدة على الحداث‬ ‫هنـا مسـار البرنامـج يحـدد مـن خلل الحـوادث ، مثل : الحساسـات او مـن‬ ‫خلل المستخدم كالنقر على الفأرة او رسائل من برامج اخرى او مــن خلل‬ ‫‪ .threads‬عادة نتعامل مع هذه النوعية من البرمجــة جنبــا الــى جنــب مــع‬ ‫برمجة الواجهات الرسومية فهي توفر الية الربط بين الواجهات الرســومية‬ ‫و الكواد البرمجية و قد تكلمت عن اهم مباديء هذه الطريقة فــي البرمجــة‬ ‫في المقالة المرفقة " انت تعرف الكثير ! اكتب برامجك الشخصية"، حيــث‬ ‫سنستعرض كيفية انشاء برنامج يبني بثقل على هذه الطريقة.‬ ‫‪ :: Object Oriented‬البرمجة الشيئية ) الكائنية(‬ ‫الطريقة المتداولة للبرمجة و الكثر شهرة في اوســاط الشــركات الكــبيرة و‬ ‫حتى الجامعات هذه اليام . البرمجة الشيئية ليســت مفهومــا جديــدا بــل لهــا‬ ‫من القدم و التاريخ ما يشهد على نموها و تبلورها علــى مــدى عــدة لغــات‬ ‫برمجية تبنت هذه النظرة ، و لكن تتبع الجـانب التـاريخي ليـس مكـانه هـذه‬ ‫العجالة.‬ ‫قبل ان نتكلم قليل عــن البرمجــة الشــيئية يجــب ان نعــرف لمــاذا لقــت هــذه‬ ‫الطريقة في البرمجة نجاحا واسعا بحيث ان اللغة التي ل تدعم هــذه الرؤيــة‬ ‫البرمجية و ل تتيح الدوات اللزمة لكتابة برامج شــيئية تعتــبر ناقصــة فــي‬ ‫نظر الخبراء و الشركات ؟‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  31. 31. ‫و لهذا نرى ان حتى اللغات التي لم تكتب اصــل علــى النمــوذج الشــيئي فــي‬ ‫وقت لحق يتم اضافة الــدعم لهــذا النمــوذج ، و كمثــال لغــة البرمجــة بيــرل‬ ‫التي هي لغة اجرائية في الصل و لحقا تم اضافة النموذج الشــيئي للغــة و‬ ‫لغة البي اتش بي و غيرها الكثير من اللغات .‬ ‫و ليس ما يهمنا هنا هو كيف تطبق كــل لغــة مفهــوم الكــائن ؟ و مــاذا يعنــي‬ ‫الكائن خلف الستار .. و لكن نعم السؤال المهم هنا ؟ لماذا كل هذا الهتمام‬ ‫بالبرمجة الشيئية مع ان اغلبنا دخلنا عالم البرمجة مــن منطلقــات مختلفــة؟‬ ‫قد يكون المنطلــق الجــرائي اكثرهــا قرابــة للبداهــة! لمــاذا هنــاك مباهــاة و‬ ‫مقارنات بين مستوى دعم كل لغة للبرمجــة الشــيئية ؟ و هنــاك ســؤال مهــم‬ ‫اخر هل الفضلية للغات البرمجة الشيئية الصرفة مثل سمولتولك و ايفل او‬ ‫للغات الهجينة الخرى التي تتيح نوعا من المرونة و ل تجبر المبرمــج فــي‬ ‫ان ينظر لكل شيء على انه كائن ؟‬ ‫شخصيا افضل الطريق الخيــر لنــه حــتى لغــات البرمجــة الكائنيــة الصــرفة‬ ‫تختلف في تطبيق مبــادئ و مفــاهيم البرمجــة الشــيئية فلكــل وجهــة نظــر و‬ ‫رؤى لمعالجة الموضوع محل الخلف ، لذلك المرونة دائما سلح جيد لكــل‬ ‫لغــة برمجــة ، و ل اقصــد المرونــة بمعناهــا الضــيق مثل فــي العلن عــن‬ ‫المتغيرات بل اريد المعنى الوسع و هو حرية المبرمج في معالجة المشكلة‬ ‫بالطريقة و الرؤية التي يختارها فتكون اللغة اداة و ليست عقبة .‬ ‫لذلك احب لغات البرمجة كلغـة بيـرل الـتي تجعـل مـن الحريـة شـعارا لهـا و‬ ‫توفر للمبرمج عدة طرق لحل المشكلة يختار منها ما يشاء و يبدع ما يشاء‬ ‫بدون ان تجبره اللغة على طريق معين .‬ ‫على انه هنا ايضا اختلف و الكثير يرون ان هــذا المــر ســلح ذو حــدين و‬ ‫في اغلب الحيان يرجحون كفــة الجــانب الســلبي فنســمع عبــارات مثــل ) ل‬ ‫يمكــن قــراءة اكوادهــا ( او ) تعطيــك الحبــل و الكرســي لتشــنق نفســك ( و‬ ‫غيرها من العبارات التهكمية .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  32. 32. ‫و يفضلون الشعار المغاير ) هناك طريقــة واحــدة فقــط لعمــل هــذا ( و ذلــك‬ ‫باعتبارهم يفيد التنظيم و يساعد على بناء المشــاريع العملقــة ، لــن احــول‬ ‫الموضوع هنا الى مناقشة طويلة و ل انتصارا لطــرف علــى حســاب طــرف‬ ‫اخــر لكــن ساستشــهد بمقولــة للمبرمــج الكــبير بــول غراهــام حيــث يقــول‬ ‫مضمونا ) اننا كنا ل نعير الشركات الــتي تطلــب مــبرمجين جافــا اهتمامــا و‬ ‫لكننا كنا نخشى الشركات التي تطلب مبرمجين ليســب او بيــرل لننــا حينهــا‬ ‫نعلم انهم يريدون مبرمجين حقيقييــن !(. و فـي مكـان اخـر يقـول ) ان سـر‬ ‫نجاحنا هو استخدامنا لليسب و لكن يبدو ان ل احد مهتم بسرقة سر نجاحنا‬ ‫! (.‬ ‫بعد كل هذا الستطراد لنذكر شيئا من مزايا البرمجة الشيئية :‬ ‫1 - البساطة : حيث ان الكائنــات الوهميــة تحــاكي الكائنــات الحقيقيــة ، ذلــك‬ ‫يؤدي الى تقليل التعقيد و هيكل برامج واضح للغاية و سهل الفهم.‬ ‫2- سهولة الصيانة : حيــث ان عمليــة الصــيانة ســتكون ســهلة و ســنعرف‬ ‫مكان الخطاء بالتحديد لن كل كائن له استقللية تامة.‬ ‫3 - اعادة الستخدام : حيث ان الكائنــات يمكــن اعــادة اســتخدامها فــي عــدة‬ ‫برامج.‬ ‫4- التطوير : حيث ان عملية التوسع ستكون سهلة من خلل اضـافة اعـداد‬ ‫قليلة من الكائنات الجديدة او التعديل المباشر علــى الكائنــات الموجــودة ، و‬ ‫ذلك استجابة لي تغييرات او تحديات جديدة تفرضها بيئة التشغيل.‬ ‫5 - التكاملية و تقليل العتمادية : حيـث ان كـل كـائن يمثـل كيانـا منفصـل ،‬ ‫حيث ان العمل الداخلي للكائن منفصل عن اجزاء النظام الخرى.‬ ‫6- سهولة التعديل : فهناك سهولة في اجراء اي تغييرات طفيفة في تمثيــل‬ ‫البيانات او الجراءات في البرامج الشيئية. لن التغييرات داخــل اي كلس‬ ‫ل تؤثر على الجزاء الخرى للبرنامج، حيث ان الطريقة الوحيدة للعالـــــم‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  33. 33. ‫الخــارجي فــي التصــال بهــذا الكلس هــو عــن طريــق واجهتــه باســتخدام‬ ‫ميثودز الكلس نفسه.‬ ‫الن ما هي البرمجة الشيئية ؟‬ ‫هي بكل بساطة عملية محاكاة الواقع في البرمجــة هــي النظــر الــى الوجــود‬ ‫على انــه مجـرد اشـياء او كائنــات ‪ Objects‬و مــن ثــم محاكــاته فــي عــالم‬ ‫البرمجة . كل شيء في هذا الوجود يمكن ان ينظر اليه على انه كائن و كــل‬ ‫كــائن لــه خصــائص)ســمات( ‪ Attributes‬و افعــال ‪ . Methods‬انــواع‬ ‫الخصائص ‪ Field type‬ثابتة كان تكون قيمة رقمية او نصية و لكــن قيـم‬ ‫الخصائص ‪ Field Value‬يمكن ان تختلف من حالة الى اخـرى . الكلس‬ ‫‪ Class‬هو عبارة عــن قــالب ننشــيء منــه الكائنــات حيــث داخــل كــل كلس‬ ‫سيتم تعريف خصائص و افعــال كــل كــائن مــن هــذا الكلس علــى انــه يجــب‬ ‫النتبــاه الــى انــه عــادة ل يعتــبر الكلس كائنــا فــي حــد ذاتــه ال فــي اللغــات‬ ‫الكائنية الصرفة . اذا عرفنا الن ان الكلس هــو مجــرد قــالب جــاهز لصــنع‬ ‫كائنات من نوع ما .‬ ‫نــأتي الن لنشــير الــى وجــود نــوع اخــر مــن الكلســات و هــو مــا يســمى‬ ‫بالكلسات المجردة ‪ Abstract Class‬هذه الكلسات مهمتهــا تنظيميــة‬ ‫فقط و ل يمكن انشاء اي كائن منها مباشرة بل يجب ان يكــون هنــاك كلس‬ ‫يرث الكلس المجرد و ان ل يكون هو بدوره كلسا مجردا حينها فقط يمكن‬ ‫ان ننشــيء كائنــات تحتــوي علــى خصــائص الكلس المجــرد . هنــا ذكرنــا‬ ‫مصــطلح الوراثــة ‪ Inheritance‬و هــو بكــل بســاطة عمليــة انتقــال كــل‬ ‫خصائص و افعال الكلس الب الى الكلس البن . لنأخذ بعض المثلــة قبــل‬ ‫ان نواصل …‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  34. 34. ‫لنتخيل هناك مصنع للسيارات و نريد ان نحاكيه بالرؤيــة الشــيئية يمكــن ان‬ ‫نبسط الى شيء مشابه الى:‬ ‫‪abstract class Vehicle‬‬ ‫‪abstract class Sedan‬‬ ‫‪class Camry‬‬ ‫نلحظ اننا انشأنا سلسلة من الكلسات لتنظيم المور حيث انه بــدانا بكلس‬ ‫مجــرد باســم ‪) Vehicle‬مركبــة( و فيــه ســنعرف الخصــائص و الفعــال‬ ‫الساسية التي يجب ان تحتويهــا كــل مركبــة ثــم انشــانا كلس مجــرد باســم‬ ‫سيدان يرث كل ما في كلس فيهكل و يضيف عليها خصــائص و افعــال كــل‬ ‫عربة من نوع صالون اخيرا انشأنا كلس باسم كامري يرث كــل خصــائص‬ ‫سيدان و يضيف عليها مميزات و هوية الكامري التي نعرفها .‬ ‫هنا يطرح السؤال لماذا نجعل من سيدان و فيهكل كلسات مجردة ؟ لماذا ل‬ ‫نتركها كلسات طبيعية اليس الغرض فقط هو الوراثة ؟ فيكون الجواب بكل‬ ‫بساطة لننا نعلم مسبقا اننا لن ننشيء اي كائن مــن هــذه الكلســات و هــذه‬ ‫عادة برمجية جيدة يجب النتباه لها و على المستوى المهنــي يتخــذ القــرار‬ ‫فيها وقت التخطيط ‪. Design‬‬ ‫نلحظ ان المخطط الن قابــل جــدا للتطويــع و التعــديل فــي وقــت لحــق مثل‬ ‫باضافة مزيد من انواع السـيارات بـل و فئات السـيارات . فـي المثـال اعله‬ ‫كان المخطــط ينحــو منحــى عــامودي بطــبيعته اي سلســلة مــن العلــى الــى‬ ‫السفل و لكن مع محاكاة امثلــة اكــثر تعقيــدا ســيبدو شــكل المخطــط و كــانه‬ ‫شــجرة ذات غصــون متفرعــة تصــلح لن تحــاكي الظــواهر الطبيعيــة قبــل‬ ‫الحقائق البرمجية كمشجرة الكائنات الحقيقية من ثدييات ...الخ.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  35. 35. ‫قبل ان انتقل للنقطة القادمــة و بمــا ان الكلم عــن المخططــات ل بــأس بــأن‬ ‫نذكر لغة النمذجة الموحدة ‪ UML‬و التي عادة مــا تــدرس جنبــا الــى جنــب‬ ‫مع كورس لغات البرمجة الشيئية و هي لغة تمثيلية مفيدة جــدا فــي مرحلــة‬ ‫التخطيط و تحتوي على 41 نوعا من المخططات تقع تحت مظلــة تصــنيفين‬ ‫رئسين :‬ ‫1- مخططات هيكلية تركز على عناصر النظام و ماذا يجب ان يحتوي.‬ ‫2- مخططات تفاعلية )تصف سلوك الوبجكتس( تركـز علـى مـاذا يجـب ان‬ ‫يحدث في النظام المحاكى و كيف سيتم التواصل و التفاعل بين العناصر.‬ ‫من خلل هذا الستعراض البسيط بدانا نعرف سر قوة البرمجة الشيئية فــي‬ ‫السيطرة على المشاريع العملقــة جــدا ، هــذه القــوة الــتي تنبــع فــي حقيقــة‬ ‫المر من التجريد .‬ ‫في البرمجة الجرائية عــادة هنــاك مشــكلة فــي كــون البيانــات مشــاعة لكــل‬ ‫اجــــزاء البرنامــــج و لكــــن فــــي البرمجــــة الشــــيئية هنــــاك نــــوع مــــن‬ ‫الكبسلة)التغليف( ‪ Encapsulation‬اي ان البيانات الخاصة بــاي كـائن ل‬ ‫يمكن تعديلها ال من خلل ارسـال الرسـائل ‪ Messages‬الـى الكـائن و هـو‬ ‫بدوره يقوم بعمــل اللزم ســواء بالتعــديل المباشــر او اعــادة ارســال رســالة‬ ‫اخرى الى كائن اخر طلبا للمساعدة في اتمام الطلب.‬ ‫من هنا نعرف انه في البرمجة الشــيئية تتــم المهــام عــن طريــق الرســائل و‬ ‫مجموع الرسائل التي يفهمها الكائن تســمى بروتوكــول الكــائن ‪Protocol‬‬ ‫بعبارة اخرى البروتوكول او الرسائل التي يمكــن للكــائن ان يتجــاوب معهــا‬ ‫هي ذاتها الميثودز المعرفة سلفا في كلس الكائن .‬ ‫نعود هنا للشارة الى اهمية التجريد هنا ايضــا فانــا كمســتخدم لــو اردت ان‬ ‫ارسل ازهارا الى صديقي ما علي سوى ان اذهب الى محل الزهار و اخبره‬ ‫باني اريد هذا النوع من الزهار لكي يتم ارساله الى صديقي .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  36. 36. ‫هنا نلحظ انني اعطيت البائع رسالة تمثل طلبا و ل حاجة لي بمعرفة كيفية‬ ‫تعامل البائع لتمام عملية الرســال . هــذه العمليــة تعــرف بــالبلك بوكســنج‬ ‫‪ Black Boxing‬اي ان كل كائن مسؤول عن التعامــل مــع كــل رســالة او‬ ‫طلــب بطريقتــه الخاصــة الــتي ل يجــب ان يعــرف عنهــا بقيــة الكائنــات اي‬ ‫تفاصيل اضافية .‬ ‫فبائع الزهور ربما يرسل طلب نقل الزهور الى محطة البريد او الــى شــركة‬ ‫خاصة او ربما يعطيها لصــديق ســيذهب الــى منطقــة صــديقي !. و بمــا اننــا‬ ‫نتكلـــــم عـــــن الرســـــائل لنتكلـــــم عـــــن البوليمـــــورفيزم ) التعدديـــــة(‬ ‫‪ Polymorphism‬و هــي مــن اهــم مميــزات البرمجــة الشــيئية و تلخــص‬ ‫بانها قدرة استجابة انواع مختلفة من الكائنات الى رسالة واحدة و لكن كــل‬ ‫كائن يفسرها بطريقته الخاصـة . المثـال المشـهور الـذي سيوضـح لنـا هـذا‬ ‫المفهوم هو لو ان احد مدراء الشركات عقد اجتماعا و بعد انتهاء الجتماع‬ ‫قــال لمــوظفيه تــابعوا اعمــالكم فالرســالة هنــا واحــدة و لكــن كــل موظــف‬ ‫سيستجيب بطريقته الخاصــة فموظــف التســويق ســيعود الــى محــل الــبيع و‬ ‫موظف الدعم الفني سيعود الى مكتب الدعم الفني و هلم جرا .‬ ‫الن بما اننا نفهم جيدا ميزة البوليمورفيزم ، لنعد الى الفعــال ) الميثــودز (‬ ‫حيث يمكن ان تعايش حالت اقوى من البوليمورفيزم بدل من فقط التشارك‬ ‫في اسماء الرسائل كما في المثال الســابق . الحالــة الكــثر انتشــارا هــي مــا‬ ‫يعــرف بــالوفر لــود ‪ Method Overload‬و هــي قــدرة الكــائن علــى‬ ‫الســتجابة لرســالة معينــة بعــدة اشــكال مختلفــة علــى حســب نــوع و عــدد‬ ‫الرجيومنتس ‪ Parameters or arguments‬المرفقة مــع الرســالة ،‬ ‫مثل :‬ ‫;)(‪jump‬‬ ‫;)‪jump(Int myNumber‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  37. 37. ‫فهنا لــو اعطانــا المرســل عــدد مــرات القفــز فــي الرســالة لســتجاب الكــائن‬ ‫بتكرار عملية القفز عدد المرات المطلوبـة و لكــن لــو تـرك المرســل رســالة‬ ‫فارغة من اي رقم ستكون الستجابة للميثود الفتراضي لنقــل قفــزة واحــدة‬ ‫فقط .‬ ‫هذا مثال بسيط و لكنه يوضح فكرة جيدة اخرى و هي توفير انواع مختلفــة‬ ‫من الميثود لمعالجة حالت مختلفة من الرسائل و الطلبات .‬ ‫الحالة الخرى هي ما يعرف بالميثود اوفر رايد ‪ Method Override‬و‬ ‫هي شكل من اشكال البوليمورفيزم يحدث في حال لو كــان هنــاك ميثــود فــي‬ ‫الكلس الب و يرثه الكلس البن و لكننـا نريـد للكلس البــن ان يسـتجيب‬ ‫بطريقة مغايرة لما يفعله الكلس الب . هنا نستخدم الوفر رايد حيث نقــوم‬ ‫باضــافة ميثــود فــي الكلس البــن يحمــل نفــس اســم و توقيــع الميثــود‬ ‫‪ Signature‬فـــي الكلس الب ، و لكـــن فـــي جســـم الميثـــود ‪Method‬‬ ‫‪ Body‬نقوم باضافة اكواد مغايرة لمــا هــو موجــود فــي كلس الب . مثــال‬ ‫بسيط :‬ ‫{ ‪public class DaddyClass‬‬ ‫{)(‪public void aMethod‬‬ ‫‪// Do something here‬‬ ‫}}‬ ‫{ ‪public class myClass extends DaddyClass‬‬ ‫{)(‪public void aMethod‬‬ ‫‪// respond differently from my daddy‬‬ ‫}}‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  38. 38. ‫تعدد التوارث ‪Multiple Inheritance‬‬ ‫في لغات البرمجة مثل سي ++ و بيرل هنــاك امكانيـة لي كلس بــان يــرث‬ ‫من اكثر من كلس ، هذا الشيء ل يخلو من الفائدة الكثيرة على الرغم مــن‬ ‫بعض العيوب و لكن في لغة جافا مثل ل يمكن للكلس ان يرث ال مـــــــــن‬ ‫كلس واحد و هنا يظهر انه سنلقي صعوبة و محدودية و لكن جافــا تــوفر‬ ‫ما يسمى بالواجهات ‪ Interface‬حيث يمكن لي كلس ان يطبق اكثر مــن‬ ‫واجهة بالضافة الى وراثته من كلس معين . عندما نعلن عــن كلس بــانه‬ ‫يطبق واجهة ما فاننا ننشيء في الحقيقة عقد يجب من خلله علــى الكلس‬ ‫المطبق ان يوفر التطبيق البرمجي لكل ميثود موجود في الواجهة .‬ ‫فــي البرمجــة الشــيئية كــثيرا مــا نتكلــم عــن محــددات الــترخيص ‪Access‬‬ ‫‪Modifier‬و التي من خللها نضيف بعد اخر من اخفاء المعلومات ‪Data‬‬ ‫‪ Hiding‬طبعا لكل لغة برمجية انـواع تحكـم مختلفـة و لكـن فـي جافـا مثل‬ ‫لدينا :‬ ‫‪1.private‬‬ ‫‪2.protected‬‬ ‫‪3.default‬‬ ‫‪4. public‬‬ ‫طبعا استخدام هذه الكلمات المفتاحية بالشكل الصحيح يحتاج خــبرة و قــرار‬ ‫المبرمج نفسه و لكن القاعدة العامة هي كلما كان هناك تشديد في الوصــول‬ ‫الى القيــم و الميثــودز كــان افضــل فنحــن قلنــا ان كــل كــائن يجــب ان يكــون‬ ‫مسؤول عن نفسه فل يفضل التعــديل علــى المعلومــات مــن امــاكن كـثيرة و‬ ‫مختلفة تؤدي بدورها الى المشاكل .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  39. 39. ‫‪ :: Functional‬البرمجة الوظيفية‬ ‫البرمجــة الوظيفيــة تعامــل الحوســبة كتقييــم للــدوال الرياضــية و تتجنــب‬ ‫البيانــات المشــتركة ‪ Mutable‬و الحالــة ‪ .State‬تجــب الشــارة هنــا ان‬ ‫البرمجة الوظيفية هي مجموعة افكار ان صح التعبير و ليست قوانين يجب‬ ‫متابعتها لذلك هنــاك اختلف فــي تطــبيق البرمجــة الوظيفيــة فهنــاك اللغــات‬ ‫الوظيفيــة الصــرفة ‪ pure functional‬كلغــة البرمجــة هاســكل و غيرهــا‬ ‫حيث انها ل تتيح امكانية التغييـر او تحـديث قيمـة المتغيـر. بنـاء علـى هـذا‬ ‫الشرط تكون المتغيرات كالمتغيرات في الرياضيات حيـث ص + 2 = 3 و‬ ‫لكن يمكننا ان نقــول ض = ص+ 3 و لكننــا سننشــيء متغيــر اخــر لن ص‬ ‫قيمة ثابتة غير قابلة للتغيير.‬ ‫و لكن بشكل عام اللغات التي التي تدعم :‬ ‫‪– Code references‬‬ ‫‪– Closures‬‬ ‫يمكن ان تسمى و ان تتيح البرمجة الوظيفية.‬ ‫تعمدت ان ل اتكلم عن الــ ‪ Subroutines‬او الـ ‪ Functions‬في معرض‬ ‫الكلم عن البرمجة الجرائية مع ان هذه الدوال تستخدم بكثرة في البرمجــة‬ ‫الجرائية كأداة لستدعاء بعض الكواد التي يتكرر استخدامها في البرنامج‬ ‫مثال بسيط هو بدل من ان نضع اكــواد تــذييل صــفحة ويــب فـي كــل صــفحة‬ ‫يمكننــا بكــل بســاطة حفــظ و كتابــة الكــواد داخــل دالــة مــرة واحــدة فقــط و‬ ‫الكتفاء باستدعاء الدالة اينما احتجنا لها ..‬ ‫حسنا السؤال الن اذا كانت اللغات الجرائية تــوفر الــدوال فلمــاذا ل تســمى‬ ‫كلها لغات وظيفية ؟ الجواب لكي نســتطيع ان نقــول عــن لغــة انهــا وظيفيــة‬ ‫يجــب ان تتــوافر فيهــا بعــض المميــزات الــتي ذكرنــا بعضــها فــي البدايــة و‬ ‫سنتطرق لبعضها بقليل من التفصيل كما سيأتي..‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  40. 40. ‫‪: References‬‬ ‫اشرنا الى هذه النقطة كنقطة اساسية للبرمجة الوظيفيــة و ان كــانت ليســت‬ ‫في حد ذاتها خاصية في البرمجــة الوظيفيــة ال انهـا اليـة تتيـح لنـا امكانيـة‬ ‫البرمجة الوظيفية في بعض اللغات الجرائية.‬ ‫طيب ما هو الـ ‪ reference‬؟ من اسمه هو اشــارة الــى مكــان المعلومــات.‬ ‫بعبارة اخرى يمكننا ان نقول ان المشير او المرجع هو متغير لكنه ل يحمــل‬ ‫القيمة الحقيقة انما يشير الى مكانها فقط . كمثال عندما اقــول تكلمنـا سـابقا‬ ‫عن البرمجة الجرائية في صفحة 05 فأنا هنا اشير الى مكان المعلومة فــي‬ ‫الكتاب و لكن ليس لدي المعلومة نفسها . في بيـرل اضــافة المعامــل قبــل‬ ‫اسم المتغير ينشيء لنا مؤشرا .. مثال:‬ ‫;) ’‪my %hash = ( one => ‘Hello’, two => ‘World‬‬ ‫;‪my $hashref = %hash‬‬ ‫نلحظ هنا ان المتغير الذي يحمل القيم الحقيقيــة هــو ‪ hash‬و امــا المتغيــر‬ ‫‪ hashref‬هو مجرد متغير يشير الى مكان المعلومات و الكلم هنا يطول و‬ ‫يختلف مــن لغـة الـى اخــرى لـذلك سـنتجنب الطالــة بمــا اننـا اخــذنا الفكـرة‬ ‫العامة.‬ ‫الن لكي نتعرف اكثر على بعض المفاهيم المتداولة في البرمجــة الوظيفيــة‬ ‫نحن بحاجة اول لن نعــرف كيفيــة كتابــة الــدوال بشــكل عــام ، المــر الــذي‬ ‫سيتيح لنا فهم المفاهيم الكثر صعوبة .‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  41. 41. ‫اذا نبدا بمثال بسيط و هي دالة هيلو ! المشهورة..‬ ‫{)(‪&hello(); sub hello‬‬ ‫};"‪print "welcome to ali website‬‬ ‫في هذا المقال البسيط قمنا بتعرف دالة اسمها هيلوو بين القواس المعقوفة‬ ‫وضعنا الوامر التي سيتم تنفيذها في حــال اســتدعينا الدالــة و ذلــك يتــم )اي‬ ‫الستدعاء( فقط بكتابة اسم الدالة و القوسين.‬ ‫‪: Parameters‬‬ ‫حسنا الن لماذا وضــعنا القوســين بعــد اســم الدالــة؟ هــذه القــواس تســتخدم‬ ‫لتمرير قيم الى داخل الدالــة و بــذلك نضــفي ديناميكيــة الــى دالتنــا فهــي الن‬ ‫تستطيع ان تنتج قيم مختلفة بحسب القيمة المررة . اذا لنعدل المثال قليل :‬ ‫{)(‪&hello("Visitor1"); sub hello‬‬ ‫;‪$name = shift‬‬ ‫;"‪print "welcome to ali websiten‬‬ ‫};"‪print "welcome $name‬‬ ‫جميل الن نلحظ اننا وضعنا قيمة بين القوســين لكــي نســتخدمها لحقــا فــي‬ ‫داخل الدالة و هناك عــدة طــرق لكيفيـة اســتقبال القيــم تختلــف مــن لغــة الــى‬ ‫اخرى و لكن في مثالنا ‪ shift‬ستسند القيمة المــررة الــى المتغيــر ‪ name‬و‬ ‫بذلك ستكون نتيجة الدالة طباعة جمل مختلفة بحسب اسم الزائر المدخل.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  42. 42. ‫جميل و اذا احببنا اضافة المزيد من القيم المــررة مــا علينــا ال ان نســتقبلها‬ ‫كقائمة و نسندها لمتغيرات حسب الحاجة ، مرة اخرى هذا المر يختلف من‬ ‫لغة الى اخرى و لكن هذا نموذج :‬ ‫;)"2‪&hello("Visitor1","Visitor‬‬ ‫;_@ = )2‪sub hello(){my ($name1, $name‬‬ ‫;"‪print "welcome to ali websiten‬‬ ‫;"1‪print "welcome $name‬‬ ‫};"2‪print "welcome $name‬‬ ‫نلحظ الن اننا نستطيع ان نتعامل مع العديد من القيم المــررة بهــذه الليــة .‬ ‫في بعض الحيان ل نريد فقط ان ننفذ اوامر بل نريد من الدالة ان ترجــع لنــا‬ ‫قيمة لكي نسندها الى متغير مثل .‬ ‫كل ما علينا فعلــه الن هــو ان نســتخدم كلمــة ‪ return‬ففــي المثــال البســيط‬ ‫ادناه هذه الدالة:‬ ‫{)(‪sub hello‬‬ ‫};3 ‪return‬‬ ‫;)(‪my $number = hello‬‬ ‫;‪print $number‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  43. 43. ‫هذه الدالة كما هو واضــح فقــط ترجــع قيمــة 3 ، نلحــظ اننــا اســندنا القيمــة‬ ‫المرجعة الى المتغير ‪ number‬و في المر الخير طبعنا قيمة المتغير التي‬ ‫في طبيعة الحال ستكون مجرد الرقم 3.‬ ‫‪:Scoping‬‬ ‫من المور المهمة جدا في البرمجة ما يعـرف بالمـدى او مـدة حيـاة المتغيـر . فـي اغلـب‬ ‫لغات البرمجة مدى المتغير محصور بين القـواس المعقوفـة مثل دائرة تكـرار او جملـة‬ ‫شرطية او حتى في كائن او في بكج ..ألخ مما يعني ان المتغير خاص بالمنطقـة المعـرف‬ ‫بها و ل يمكن استخدامه خارجها، و لكن هناك متغيرات تكون عامة يمكن الوصول اليهــا‬ ‫من اماكن متعددة مما يجعلها عرضة للتغيير بشكل مسـتمر ، مـاذا لـو كـان اسـم المتغيـر‬ ‫العام هو ذاته اسم المتغير الخاص ستتولد لدينا مشاكل فـي المـدى و نحصـل علـى نتـائج‬ ‫ربما تكون غير متوقعة .. لندرس هذا المثال :‬ ‫;01 = ‪$total‬‬ ‫;21 = ‪$number‬‬ ‫;)‪&adding($number‬‬ ‫)(‪sub adding‬‬ ‫;‪{$number = shift‬‬ ‫;‪$total = $total + --$number‬‬ ‫;‪}print $number‬‬ ‫;‪print $total‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  44. 44. ‫الن ماذا تتوقعون ستكون نتيجة المرين الخرين ؟‬ ‫النتيجــة ســتكون ‪ number‬ســيكون 11 و ‪ total‬ســيكون 12 . نلحــظ‬ ‫كيف ان قيمة المتغير العام تغيرت لن ‪ number‬صادف انه موجــود ايضــا‬ ‫في الدالة الن لنتخيل كيف ستكون هذه مشكلة كبيرة جدا ان تقــوم كــل دالــة‬ ‫بتغير المتغيرات العامة ، بالطبع مــا سنحصــل عليــه هــو فوضــى حيــن تتبــع‬ ‫الخطاء .. اذا يجــب ان نجعــل مــن متغيــرات كــل دالــة متغيــرات خاصــة بهــا‬ ‫بحيث ل يكون لها تأثير جانبي علــى متغيــرات البرنامــج ‪ side effects‬و‬ ‫في المقابل ايضا يجب ان نحرص علــى ان ل نجعــل مــن متغيــرات البرنامــج‬ ‫متغيرات عامة فهذا مصدر لكثير من المشاكل ، في اكثر اللغــات هــذه ليســت‬ ‫مشكلة فالمتغيرات ليست عامة ابتداء و لكــن فـي لغــات مثــل بيـرل يجــب ان‬ ‫نستخدم ‪ use strict‬للحصول على هذه الميزة و من ثم نقوم بالعلن عن‬ ‫كل متغير باســتخدام ‪ my‬و بــذلك نتفــادى تعــارض تــأثير اســماء المتغيــرات‬ ‫خارج مداها .. لنعدل الكود اذا :‬ ‫;01 = ‪my $total‬‬ ‫;21 = ‪my $number‬‬ ‫;)‪&adding($number‬‬ ‫)(‪sub adding‬‬ ‫;‪{ my $number = shift; my $total = $total + --$number‬‬ ‫;‪}print $number‬‬ ‫;‪print $total‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  45. 45. ‫الن سنحصــل علــى النتيجــة المتوقعــة 21 و 01 للمتغيريــن اللــذين خــارج‬ ‫الدالة حيث اختفى تأثير الدالة على المتغيــرات الخارجيـة . فالنتيجـة الن ان‬ ‫اصبح لدينا متغيرين لهما نفس السم فــي خــارج و داخــل الدالــة و لكــن فــي‬ ‫الحقيقة كل منهم متغير مختلف عن الخر فقط صادف انهما بنفس السم .‬ ‫العودية ‪: Recursion‬‬ ‫العودية هي عندما نستخدم و نطبق الدالة في داخل تعريفها . بعبــارة اخــرى‬ ‫الدالة تستدعي نفسهـا. و في البرمجة الشيئية عندما يستدعي الميثود نفسه‬ ‫يســمى ‪ .recursive method‬أقــرب مثــال لتوضــيح الفكــرة هــو طريقــة‬ ‫حساب الـ ‪ factorial‬لرقم معين و الذي يتــم عــن طريــق ضــرب العــدد مــع‬ ‫العداد الصغر منه مثل للعدد 5 ) 1*2*3*4*5( = 521.‬ ‫لبرمجة هذه العملية بالعودية نلحظ النمــط هــو العــدد الصــلي ضــرب العــدد‬ ‫الصلي-1 و هكذا الى ان نصل الى الواحد و بناء عليه نوقف عملية الطــرح‬ ‫و نبدا العملية عكسية و عودية حيث ان الواحد قيمة معلومــة ضــرب الدالــة‬ ‫التي كانت في النتظار و هكذا .. اذا ما سيحدث داخل الدالة هو :‬ ‫)1-5(‪5*f‬‬ ‫)1-4(‪4*f‬‬ ‫)1-3(‪3*f‬‬ ‫)1-2(‪2*f‬‬ ‫‪f(1)=1 stop‬‬ ‫عندما نصل الى هذه النقطة سترجع الدالــة قيمــة معلومــة و ليــس اســتدعاء‬ ‫للدالة مرة اخرى عليه بما ان القيمة معلومة نضربها مع الثنين ...ألخ.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  46. 46. ‫و هذه الكواد البرمجية لهذه العملية …:‬ ‫;)5( ‪$fv = fact‬‬ ‫;"‪print "factorial 5 is $fvn‬‬ ‫{ ‪sub fact‬‬ ‫;‪my $val = shift‬‬ ‫{ )1 > ‪if ($val‬‬ ‫;)1-‪$fv = $val * fact($val‬‬ ‫{ ‪} else‬‬ ‫;1 = ‪$fv‬‬ ‫}‬ ‫}‬ ‫هذه الظــاهرة لهــا اســتخدامات كــثيرة و مفيــدة و كمثــال اخيــر دالــة لتحويــل‬ ‫الرقام الى ما يمثلها من الـ ‪ Binary‬باستخدام العودية...‬ ‫{ ‪sub binary‬‬ ‫;_@ = )‪my ($n‬‬ ‫;1 == ‪return $n if $n == 0 || $n‬‬ ‫;)2/‪my $k = int($n‬‬ ‫;2 % ‪my $b = $n‬‬ ‫;)‪my $E = binary($k‬‬ ‫;‪return $E . $b‬‬ ‫}‬ ‫و كما شاهدنا في المثالين و في اي حالة اخــرى يجــب تــوفير نقطــة ليقــاف‬ ‫عملية الستدعاء المتكرر و ال لن تتوقف عملية الستدعاء كمــا هــي الحــال‬ ‫في دوائر التكرار اللنهائية.‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  47. 47. ‫‪Higher-order functions‬‬ ‫الن ســنبدأ اســتعراض بعــض الخصــائص الحقيقيــة للبرمجــة الوظيفيــة. و‬ ‫ســنبدا بالــدوال العاليــة حســب اصــطلحهم و ربمــا يعرفهــا البعــض بالـــ‬ ‫‪ callbacks‬او ‪ .factories‬و تسمى الدالة بهذا السم عنــدما تحقــق احــد‬ ‫المرين :‬ ‫1- ان تستقبل دالة كمدخل )قيمة ممررة(‬ ‫2- ان ترجع دالة بدل من قيمة معينة‬ ‫و قبل ان نأخذ بعض المثلة يجب ان نتعرف على :‬ ‫‪Anonymous subroutines‬‬ ‫و هي الدوال المجهولة او بعبارة اخرى ليس لها اسم !. مثل :‬ ‫;}2+)(‪my $number_plus_two = sub {return shift‬‬ ‫5# ;)3(>-‪print $number_plus_two‬‬ ‫في هذا المثال نلحظ اننا انشأنا متغير و لكن لم نسند له قيمة بل اســندنا لــه‬ ‫دالة و المهم هنا نلحظ انها ل تحتوي على اسم الن نلحظ عند تمرير قيمة‬ ‫3 سيتم جمعها مع 2 لتكون النتيجة 5.‬ ‫اذا نستطيع ان نقول للدوال المجهولة فوائد منها :‬ ‫1- اننا نستطيع ان نسندها الى متغير او قائمة او هاش‬ ‫2- نستطيع ان نمررهم الى دوال اخرى ‪Arguments‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  48. 48. ‫3- سنحتفظ بالمتغيرات في المدى المحيط‬ ‫4- نستطيع انشائهم في وقت التنفيذ‬ ‫‪: Closures‬‬ ‫لندرس هذا المثال :‬ ‫{ ‪sub demo‬‬ ‫;‪my $name = shift‬‬ ‫}"!‪return sub{ print "hello $name‬‬ ‫}‬ ‫;)"‪my $ref = demo("Ali‬‬ ‫‪&$ref(); # hello Ali‬‬ ‫المر الذي يلفت النظر هنا هو اننا نلحظ ان الدالة المجهولــة اســتطاعت ان‬ ‫تصل الى متغير غير معرف في مداها بــل موجــود فــي الدالــة المحيطــة بهــا.‬ ‫هذه الظاهرة تسمى بالكلوجرز .‬ ‫مثال اكثر تقدما :‬ ‫{ ‪sub demo‬‬ ‫;_@ = )‪my ($title‬‬ ‫;_@=)‪return sub{ my ($name‬‬ ‫}" !‪print "$title $name‬‬ ‫}‬ ‫;)".‪my $ref = demo("Mr‬‬ ‫;)".‪my $ref_2 = demo("Ms‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  49. 49. : ‫الن نلحظ النتيجة‬ $ref->("Ali"); # Mr. Ali! $ref_2->("Yosra"); # Ms. Yosra! ‫نلحــظ كيـف ان الدالـة احتفظـت بالمـدخلت فــي المرحلــة الولــى و مــن ثـم‬ .‫طبعت المتغيرين بالشكل الصحيح‬ @@To be completed in the upcoming release. @TODO currying, lazy eval, streams, more on closures, more on Higher functions, continuation ..etc (‫ :: البرمجة التعريفية ) اعلنية‬Declarative ‫وصف لمنطق الحوسبة بدون وصف طريقة التحكم بمجراها، و بذلك تكون‬ .Imperative ‫عكس الـ‬ @@To be completed in the upcoming release. http://arabicplg.sourceforge.net/ Version 1.0 final release
  50. 50. ‫المزيد من المصطلحــات :‬ ‫‪IDE‬‬ ‫هــــذه الكلمــــة تمــــر علينــــا كــــثيرا و هــــي اختصــــار ‪Integrated‬‬ ‫‪ ، Development Enviroment‬اي بيئة التطــوير المتكاملــة ، حســنا‬ ‫مــاذا يعنــي هــذا ؟ اعتقــد ان القليــل هــذه اليــام يبرمــج مــن خلل محــررات‬ ‫النصوص مثل المفكرة فــي وينــدوز و ‪ vi‬فــي لينكــس ، حيــث يمكــن لنــا ان‬ ‫نبرمــج برامــج كاملــة فقــط باســتخدام المفكــرة البســيطة ثــم نقــوم بعمليــة‬ ‫الترجمــة للكــواد ، هــذه الطريقــة و ان كــانت جيــدة مــن ناحيــة انهــا تجــبر‬ ‫المبرمج على العتماد على نفسه في البرمجة بدون اي تــدخل مــن برنامــج‬ ‫الكتابة كمساعد ، ال انها تقلل من النتاجية . ل يزال هناك من يتعصب الــى‬ ‫ان برامج كتابــة الكــواد يجــب ان تكــون بســيطة فــي حــد ذاتهــا و ل تغــرق‬ ‫المبرمج فـي بحـار الخصــائص الــتي فـي العــادة ل يسـتخدمها بـذلك الشــكل‬ ‫المستمر . الى عهد قريب كنت اتبنى هذا الرأي لني كنت ارى ان المبرمــج‬ ‫فعل يجب ان يكون خــبيرا فــي لغتــه و حافظــا لكــل تفاصــيلها و خفاياهــا فل‬ ‫يحتاج الى مساعدة من اي احد حتى لو كان برنامج التطــوير، و كنــت اتخــذ‬ ‫من هذه الطريقة وسيلة لكي اصقل مهارتي، حيث كنت فــي وينــدوز اتعامــل‬ ‫مباشرة مع المفكرة ، ثــم تطــور المــر الــى اســتخدامي لبرنامــج ‪ Padre‬و‬ ‫الذي كان بسيطا جدا فــي امكانيــاته وقتهــا و لكــن احببتــه لنــه يقــدم خدمــة‬ ‫التلوين للكواد. كنت اتجنب برنامج اكلبس او نــت بينــز بــل حــتى ‪Emacs‬‬ ‫لنني كنت اؤمن بان الفترة التي سأقضيها في تعلم هذه البرامج و اكتشــاف‬ ‫خفاياها و حفظ اختصــاراتها ، يجــب ان اســتغلها فــي تعلــم لغــتي المفضــلة.‬ ‫على كل حال في يوم ما بدات العمل على مشروع لجافا و كان يتوجب علــي‬ ‫عمله باستخدام اكلبس و من خلل عملي في هذا المشروع رايت ان الفــترة‬ ‫التي احتجتها لتعلم البرنامج لم تكن بتلك الطول هذا فضل عن الفوائد الــتي‬ ‫تحصلت عليها من اســتخدام اكلبــس ، عنــدها بــدات اؤمــن ببئيــات التطــوير‬ ‫المتكاملة مع بعض التحفظات علــى بعــض النقــاط الــتي الــى الن افضــل ان‬ ‫اعملها بنفسي مثل انشاء الواجهات الرسومية فهذه البرامج فقط تصلـــــح‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  51. 51. ‫لتصــميم الشــكل الســريع للبرنامــج و لكــن عنــدما اريــد ان اكتــب الواجهــة‬ ‫النهائية ساكتبها بنفسي لنني ل اريد كل تلك الكواد المحشوة من قبــل اداة‬ ‫انشاء الواجهات ، و كذا الحال ايضــا فــي كتابــة اكــواد ‪ html‬فالتعامــل مــع‬ ‫الدوات المرئيــة فــي هــذا المجــال تطويــل ل ارى لــه ضــرورة فــي اغلــب‬ ‫الحيــان. علــى كــل حــال هــذه وجهــة نظــر … نعــود الــى بيئات التطــوير‬ ‫المتكاملة ماذا تعني متكاملة هنا ؟ نستطيع ان نقول ان التكامل هنا يعني ان‬ ‫نتحصل على برنامج واحد يقدم محرر نصوص و خدمات تحرير النصــوص‬ ‫البرمجية مثل التلوين للكواد و ربما الكمال التلقائي و ايضــا ربمــا القــدرة‬ ‫على تصحيح الخطاء في الوقت الحقيقي كما يوجد في اكلبس. ثم يجــب ان‬ ‫يقدم البرنامج مفسر او مترجم للغة المعنية و قــد يســتخدم مفســر خــارجي.‬ ‫ايضا قد تحتوي البيئة على ادوات البناء التلقائي. ايضا قد يحتوي البرنامج‬ ‫ادوات لعملية التصحيح و التجريب. و مــا الــى ذلــك مــن خــدمات اخــرى قــد‬ ‫تختلــف مــن برنامــج الــى اخــر حســب امكانيــاته مثــل تــوفير ادوات رســم‬ ‫الواجهات الرسومية و ادوات العمل الجماعي ...الخ.‬ ‫‪Compiled and interpreted‬‬ ‫يمكن عادة تقســيم لغــات البرمجــة الــى مفســرة او مترجمــة او حــتى بعــض‬ ‫اللغات توفر الثنين معا كما سيأتي. المترجم يحــول الكــود المصــدري ) مــا‬ ‫نكتبه مثل بلغة سي( الى كود لغة اخرى غالبا الــى لغــة يفهمهــا الكمــبيوتر.‬ ‫عادة الهدف الساسي مــن الترجمــة هــو التحصــل علــى ملــف تنفيــذي. فــي‬ ‫اللغات المفسرة يتم ارسال الكواد الى مفسر اللغة و الذي يقوم هــو بــدوره‬ ‫بتنفيذ الكواد مباشرة. بين هذا و ذاك توجد لغات لــديها مفســر و مــترجم و‬ ‫توجد لغــات مثــل جافــا يتــم فــي البدايــة ترجمــة الملــف المصــدري الــى لغــة‬ ‫وسطية ‪ byteCode‬و من ثم يتم تفسير هذا الكود من خلل المفسر الــذي‬ ‫هو بالنسبة للجافا هو ذاته اللة التخيلية ‪. Virtual Machine‬‬ ‫/‪http://arabicplg.sourceforge.net‬‬ ‫‪Version 1.0 final release‬‬
  52. 52. ‫طبعا توجد الت تخيلية عديدة غير الخاصة بجافا لديها القدرة على التعامل‬ ‫مع لغات متعـددة مثل ‪ Parrot‬و هـي اللـة التخيليـة الجديـدة الـتي تهـدف‬ ‫لدعم لغات السكربتنج مثل بيرل و بايثون و روبي ...الــخ. اللغــات ؀ الدر

×