PDA المساعد الشخصي الرقمي

عرض كامل الموضوع : ::: نظرة سريعة حول لغات البرمجة "لغة الجافا" ^^ :::



Sakura Shinjo
31-10-2008, 17:14
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاتهـــ....




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

الحاسب الآلي عبارة عن مجموعة مترابطة من الدوائر الكهربائية.
تخيّلوا معي زر كهربائي يشغّل عدداً من المصابيح التي إمّا تكون مطفأة أو مشتعلة.
لذا، فإن الكمبيوتر يفهم رقمين في الدنيا، هما (صفر) و (واحد).
و يقوم الكومبيوتر بتحويل كل شيء إلى ما يقابله حسب نظام العد الثنائي (يعني 1 و 0) و تسمّى هذه اللغة (التي تتكون من هذين الرقمين فقط) بلغة الآلة (Machine Code).

و كان للسيطرة على الكومبيوتر نكتب ما نطلق عليه اسم (برنامج) و هو يحتوي على عدد من الأوامر الموجهة للكومبيوتر ليحل مسألة معينة.

كان المبرمجون الأوائل (كان الله في عونهم) يكتبون البرامج بهذه اللغة! يكون شكل البرنامج هكذا:

101011101000101001010010
100101001010001001011010
010011110011100001010101
010101000100100000001001
011110111010010101010101



و كما ترون فإنه من الصعب جدّاً فهم شيئاً كالذي ترونه في الأعلى بعقلنا البشري. لذا فقد كان من الصعب أيضاً ايجاد الأخطاء و تصحيحها. ولكن تلك التي تعمل، فأنها تعمل بسرعة شديدة جدّاً نظراً لأنها مكتوبة بلغة تفهمها الآلة بصورة مباشرة. و تسمّى البرامج المكتوبة بلغة الآلة ببرامج الجيل الأول.

لم يستطع أجدادنا المبرمجون الاستمرار على هذا الحال، فقد كان فعلاً صعباً، لذلك قاموا باختراع لغة التجميع (Assembly) و هي لغة أبسط من لغة الآلة نظراً لاحتوائها على أوامر مثل (ADD و MOV)، و هكذا كما ترون فقد ابتعدنا قليلاً عن لغة الآلة التي سبق و ركّزت على أنها لا تفهم سوى الصفر والواحد. و هنا ظهرت الحاجة الماسّة إلى المفسّر (Interpreter) و هو برنامج يقوم بتحويل الأوامر بالتتابع من لغة ال Assembly إلى لغة الآلة، و يوقف البرنامج فوراً في حالة مواجهة خطأ في البرنامج و لا يقوم يالنظر (حتى لجبر الخاطر) إلى بقية البرنامج ^^

نلاحظ هنا أننا حصلنا على برنامج تسهل كتابته نسبياً و يمكن بسهولة ايجاد الأخطاء فيه و تصحيحها( بدلاً من البحلقة في الأصفار والآحاد ^^).

لكن.. التحويل من لغة التجميع إلى لغة الآلة، يأخذ جزء من وقت البرنامج، و هكذا أصبح البرنامج أبطأ قليلاً، و حين أقول قليلاً، فأنا أعني جزء من آلاف الأجزاء من الثانية الواحدة. و تعتبر لغة التجميع من الجيل الثاني (الذي يحتوي على هذه اللغة فقط)

المبرمجون لم يعجبهم الحال (كما لم يعجبني حين درست هذه اللغة ^^) لذا أرادوا لغات تكون قريبة من لغة الإنسان، يفهمها بسهولة و ليست معقّدة مثل لغة التجميع. لذا قاموا بوضع العديد من لغات البرمجة التي تقوم على أوامر مباشرة بلغتنا البشرية التي نفهمها بسهولة، ففي لغة الباسكال مثلاً إذا أردنا طباعة كلمة (Mexat) على الشاشة نكتب الأمر التالي ضمن البرنامج:

writeln("Mexat")


و هذا كفيل بطباعة الكلمة على الشاشة ^^

و لكننا هنا ابتعدنا عن لغة الآلة كثيراً، لذا توجّب علينا استخدام المترجم بدلاً من المفسّر، لتحويل البرنامج إلى لغة الآلة.

و هذه اللغات هي لغات الجيل الثالث و منها: Pascal, COBOL, ForTran, Basic و منها أيضاً لغة ال C و التي تعتبر أسرع لغات الجيل الثالث على الإطلاق، بل انها في كثير من الأحيان تتصرّف كما لو كنت من الجيل الثاني (حيث يقوم بعض المصنّفون تصنيفها ضمن الجيل الثاني لهذا السبب).

إلى هنا و الكلام عند المبرمجين سهل و بسيط، تسألهم ما هو البرنامج فيجيبون فوراً: مجموعة من الأوامر لتأدية وظيفة معيّنة.

مُدخلات ، تحصل عليها -------> عمليات -----> تنتج منها ، مُخرجات

و لكن.. نعم لازالت هناك "لكن"! الإنسان بطبعه لا يفكّر في العمليات التي تحدث دون أن يفكّر في المعلومات أو الأشياء التي حدثت عليها أو صدرت منها هذه الأفعال. لا يمكن أن تكون الجملة الفعلية صحيحة دون فاعل أو مفعول.

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

و يجدر بالذكر أن جميع لغات الأجيال الثلاثة السابقة إذا تمّت ترجمتها على نظام تشغيل، لأنها لا تعمل إلا على هذا النظام.

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

إذاً أي برنامج يتصرّف هكذا:

البرنامج --------> المفسّر/المترجم --------> لغة الآلة

ولأن المترجم متصل مباشرة كما ترون بلغة الآلة فإنه يعتمد عليها. و يختلف من نظام تشغيل إلى آخر.

لذا قال المبرمجون أنهم سيتخيّلون وجود آلة! تكون هذه الآلة محددة و أطلقوا عليها اسم (Virtual machine) أو الآلة التخيّلية. و هم يكتبون برامجهم حسب هذه الآلة و ليس حسب نظام تشغيل محدد هكذا:

البرنامج --------> المفسّر/المترجم --------> الآلة التخيلية --------> لغة الآلة

نلاحظ الآن أن المترجم ابتعد عن لغة الآلة، و أصبح يترجم بناءً على آلة تخيلية.

ما الذي نستفيده؟ البرنامج سيعمل على أي جهاز عليه الآلة التخيلية مهما اختلف نظام التشغيل دون الحاجة لإعادة الترجمة ^^

من لغات الجيل الرابع: C++ and Java و Oracle و Visual Basic و غيرها، وهذه اللغات تعرف بأنها لغات تعتمد على البرمجة الشيئية.

والسؤال هنا عن البرمجة الشيئية!!
مفهوم العضو أو الشي (Object)

والآن حان الوقت لننظر إلى العالم من حولنا. نأخذ مثال بسيط (جهاز الكومبيوتر الخاص بك) سنفترض بعض صفاته وسنكتبها في ورقة:

الصفات

النوع: IBM
السرعة: 500MHz
الذاكرة: 128MB

إذاً اتفقنا أن جهازك له هذه الصفات، فلنفترض معاً بعض الوظائف التي يستطيع جهازك أن يقوم بها

الوظائف
الجمع
الحفظ
الإتصال بطابعة

ماذا نستنتج من ذلك؟

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

هل يشترك كومبيوتر آخر مع جهازك في هذه الصفات؟ نعم جهازي يشترك مع جهازك.
له نفس القدرات، وويشترك في وجود نفس الصفات مع اختلاف في الأرقام، أليس كذلك؟ فجهازينا لهما سرعة، وذاكرة ونوع، وكلاهما يستطيعان الحفظ والاتصال بطابعة.
إذا هناك صفات يشترك فيها أي جهاز كومبيوتر مع غيره من الأجهزة، وقدرات أساسية أيضاً، موجودة عند الجميع.

هذا يجعلنا نصنّف الأشياء إلى فئات تشترك في نفس الصفات ولها نفس القدرات ^^

مفهوم الفئة أو (Class)

الفئة هي الموديل أو التصميم الذي على أساسه أستطيع استخراج أعضاء وأشياء.

مثلاً نأتي بورقة، ونكتب عليها الآتي:

كومبيوتر

الوظائف الصفات
الجمع
الحفظ
الطباعة النوع
السرعة
الذاكرة

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

مثال آخر:

لو أخذنا فئة (الإنسان) هذا موديل أو شكل عام نعرف أن أي انسان له عينان، وأنه يفكّر، وأنه يبدع. ولكن حين أقول ....... يبدأ الموديل في أخذ الصفات المناسبة مثل لون العينين عند ...... أسود مثلاً وأنه يفكّر، وأنه مبدع وابداعه في الشعر أكثر من غيره.

ماذا نستنتج من ذلك؟

نستنتج أن الفئة أو ال Class هي الموديل الذي أصنع بحسبه الأشياء التي تشترك في الصفات. أو أنه الجامع الذي يجمع الأشياء الفعلية التي تندرج تحته. ولابد هنا من التنويه على نقطة محددة وهي أنّ الفئة ليست شيئاً محسوساً بينما العضو أو الشيء هو التمثيل المحسوس لهذه الفئة.


يتبع ^^
.
.

Sakura Shinjo
31-10-2008, 17:17
جرت العادة أن يقوم المبرمجون عند دراسة أي لغة فإنّهم يكتبون برنامج يقوم بعرض كلمتي
(Hello World) و سنقوم بالمثل:

نفتح ال notepad أو ال textpad و نكتب التالي:


http://www6.*********/2008/03/11/15/894561558.jpg

أقترح بعد أن نكتب البرنامج أن تحفظه في حافظة تقوم بتسميتها myjava تحت المشغّل C مباشرة.

و يجب أن تحفظه بهذا الاسم: HelloWorld.java و لاحظ الأحرف يجب أن تكون بنفس الصفة يعني هذا الاسم: Helloworld لن يقوم بالمطلوب.

و لأننا نكتب بلغة الجافا، فلابد أن يكون هناك البرنامج الخاص بلغة الجافا ^^

عبر ال Dos prompt أو ال Command نذهب إلى الحافظة myjava من ال :C

و للتأكّد نقوم بعرض محتويات الحافظة هكذا:


http://www6.*********/2008/03/11/15/853726202.jpg

الآن سنقوم بعمل الترجمة لهذا الملف. و للتذكير فالترجمة هنا تعني أننا سنحوّل الملف من لغة نفهمها نحن إلى لغة تفهمها لغة الآلة التخيليّة، تابع الخطوات على الصورة التالية:


http://www6.*********/2008/03/11/15/739531766.jpg

يقوم أمر javac باستدعاء المترجم الذي يقوم بترجمة الملف الذي اسمه يلي أمر javac.
المفروض إذا قمت بعمل كل شي تمام فإن النتيجة ستكون ظهور علامة الدوس مرّة أخرى كما في الشكل السابق ^^

أتعرف الآن ماذا ستجد لو قمت بعرض محتويات الحافظة؟ فلنجرّب:


http://www6.*********/2008/03/11/15/277006216.jpg
هل رأيت؟ لا تخف. فهذا ليس سحراً ، نعم لقد ظهر ملف جديد في الحافظة و هو HelloWorld.class نفس اسم الملف السابق و لكن بملحق (extension) جديد ^^ و هو class. لقد قامت الآلة التخيلية بانشاء هذا الملف القابل للتشغيل.

الآن جاء دور التشغيل:

http://www6.*********/2008/03/11/15/249260495.jpg
تلاحظ أننا حين كتبنا اسم الملف كتبناه بدون ملحق ذلك أنّه لاداعي له. لأن الآلة التخيلية لا تقوم بتشغيل أي ملف من نوع آخر. هي مخصصة لتشخيل الملفات من نوع class فقط لا غير. لذا لا داعى (و لا يجب) أن يتضمن اسم الملف المشغّل الملحق class معه.

و هكذا تشاهد في الشكل السابق كلمة Hello World الرائعة و هي تزيّن الشاشة دليل عمل البرنامج بنجاح.

أخطاء شائعة

بعد أن قمت بنسخ البرنامج المكتوب كما هو
و قمت بمحاولة ترجمته، قد تظهر لك هذه الأخطاء:

1)

http://www6.*********/2008/03/11/15/386661797.jpg
هذا الخطأ يعني أنك أخطأت في اسم الملف الذي تحاول عمل ترجمه له أي أنك تترجم ملفاً غير موجود.

2)
http://www6.*********/2008/03/11/15/530135021.jpg
هذا الخطأ ينتج اذا قمت بتسمية الملف باسم يختلف عن اسم الفئة في الداخل.

3) و قد يظهر لك هذا الخطأ أثناء محاولة تشغيل البرنامج و لو تمت الترجمة بنجاح:

http://www6.*********/2008/03/11/15/774387318.jpg

قد يحدث هذا الخطأ. و هو خطأ شائع و محيّر ><
فكما ترون عند الرقم (1) الclass الذي أحاول تشغيله موجود، و قمت بكتابة اسمه بالشكل الصحيح كما في الرقم (2) و مع ذلك يقول انه لا يجد الكلاس كما واضح في الرقم (3).

و هذا يعني أنّك نسيت اضافة (;.) في ال classpath. المسألة بسيطة قم بعمل التالي و تشغيل الملف مرة أخرى:
http://www6.*********/2008/03/11/15/896271704.jpg


والآن أود شرح ماحدث في السابق بطريقة أوضح ^^...
السطر الأوّل:



http://www2.*********/2008/03/13/15/923626102.jpg

السطر الأول يحتوي على تعريف الفئة (class).
و نحن هنا سنعرّف فئة جديدة اسمها HelloWorld. و قد اعتاد مبرمجو لغة الجافا على اعتماد تسمية الفئات بطريقة معيّنة (Naming Convention)

كلمة Public تسمى (مُغيّر دخول-Access Modifier) و هي تسبق تعريف الفئات classes والأعضاء Objects والمتغيّرات Variables و الوظائف Methods.

و مغيّر Public يعني أن هذه الفئة عامة و يمكن لأي فئة أخرى موجودة في الآلة التخيلية (virtual machine) أن تستخرج أعضاء منها، أو أن تقوم على تشغيلها.

و ملف الجافا قد يحتوي على تعريف لأكثر من فئة. و لكن فئة واحدة فقط يمكنها public و هي التي يتم تسمية الملف عليها.

فمثلاً، يمكنني أن أقول التالي:

public class FirstClass {
. .
. .
}

class SecondClass {
. .
. .
}

في المثال السابق يوجد لدينا ملف كتبناه على TextPad أو NotePad و يحتوي على تعريف فئتين. و نلاحظ أن احداهما فقط هي التي تم تعريفها لتكون public و على هذه الأساس، سيكون اسم الملف على هذه الفئة، وفي مثالنا سيكون: FirstClass.java.

نلاحظ أن السطر الأوّل ينتهي برمز (}) و هو يعني أن تعريف الفئة (class) سيبدأ عند هذه النقطة. و بما أن لكل شيء بداية و نهاية، فإننا نتوقّع أن يتوقّف تعريف البرنامج عند العلامة المقابلة ({) و هذا يعني أن تعريف الفئات يكون دائماً محصوراً بين رمزي المجموعة

السطر الثاني:

http://www2.*********/2008/03/13/15/362588768.jpg
السطر الثاني يأتي لتعريف وظيفة(method) من الوظائف.

هذه الوظيفة هي ذات نوعية خاصة، انها ال main method و هي نقطة البداية لأي برنامج يتم تشغيله من مشغّل الدوس (Dos prompt).

لنعد بذاكرتنا قليلاً إلى الوراء، هل تذكرون ما قلناه حين تحدّثنا في مقارنة بين البرمجة بالطريقة التقليدية (Proccess Oriented) و البرمجة بالطريقة بالكائنات الشيئية؟ لقد ذكرنا شيئاً عن نقطة البداية. ففي البرمجة بالكائنات الشيئية نضع نقطة البداية، ثم يقوم أعضاء الفئات المختلفة بتقاذف الأحداث فيما بينها.

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

إن أي برنامج جافا، قد يتكون من عدة ملفات (بحيث يكون كل ملف محتوياً لى تعريف فئة)، و يجب أن تحتوي فئة واحدة على نقطة البداية، التي تتمثّل في وظيفة main.

وظيفة ال main method هي في الحقيقة نقطة البداية التي تتحدّث عنها الآلة التخيلية للجافا، في حالة قمنا بتشغيل أي ملف جافا من محرك الدوس. و هي في الواقع فئة تتبع للفئة بشكل عام و لا تخص الأعضاء المنتمين لهذه الفئة.

السطر الثالث:

http://www2.*********/2008/03/13/15/426820749.jpg

إن هذا السطر في الواقع يقوم باستدعاء و ظيفة println التي تقوم بكتابة ما يمرر لها في الأقواس (و في حالتنا هو Hello World). ما سبق هذه الوظيفة هو عنوان العضو و الفئة التي توجد فيها هذه الوظيفة، حتى تقوم الآلة التخيلية بتشغيلها بشكل صحيح.

السطر الرابع والخامس:

http://www2.*********/2008/03/13/15/767993752.jpg

نقوم هنا بغلق الأقواس، و نلاحظ أن تعريف الفئة قد تضمّن تعريف الوظيفة main و نلاحظ أننا نغلق القوس الداخلي أولاً ثم الخارجي و هكذا.

ملاحظات:
في السطر الثالث، الكلمة الأولى و هي System هي في الواقع اسم لفئة. و في هذه الفئة توجد صفة اسمها out.
out في الواقع هي عضو في فئة PrintStream و يستطيع أعضاء هذه الفئة استخدام وظيفة ال println ^^
هذا هو تسلسل هذ الكلمات.

لبدء البرمجة الحقيقة بلغة الجافا يجب أن يكون لدينا خلفية واضحة عن مسمى المتغيرات ^^
المتغيرات هي العلب التي تحفظ في داخلها قيم، قد تتغير. و حتى نفهمها سنأخذ مثالاً.

يتبع ^^
.
.
.

Sakura Shinjo
31-10-2008, 17:18
لنفرض أنك ذهبت إلى أحد المحلات التجارية حيث أخبرك البائع أنّك فزت بقسيمة شرائية، و طلب منك تعبئة ورقة صغيرة لتسجيل معلوماتك مثل الورقة التالية:

لاســــــم:.........................
رقم الهاتف:.........................
العنـــوان:.........................



إنك في هذه الحالة ستكتب اسمك بجانب "الاسم"، و ستكتب عنوانك بجانب "العنوان". و لو أراد الله سبحانه و تعالى أن يفوز شخص غيرك فإن الاسم الذي سيكتب في خانة "الاسم" سيكون مختلفاً بالتأكيد. و هذا بالضبط هو المتغيّر. فخانة الاسم تعتبر متغيّر، قد يأخذ قيمة اسمك أو اسمي أو اسم أي شخص آخر.

و لكن لنكن واقعيين، هل من الممكن أن يأتي شخص و يكتب في خانة الاسم:"1234567"؟ لا أظن، فهمها كان أبوه عاشقاً للارقام، فلن يسمي ابنه بالأرقام ^^ من جهة أخرى فلن يكتب شخص مهما بلغت غرابة أطواره كلمة "الشمس المشرقة" في خانة رقم الهاتف.

إذا المتغير قد يأخذ قيماً مختلفة ذات نوع محدد. فهناك متغيرات تأخذ قيماً حرفية مكونة من أحرف فقط مثل خانة الاسم. و هناك متغيرات رقمية مكونة من أرقام فقط مثل خانة رقم الهاتف.

في لغة الجافا توجد أنواع من المتغيرات،

المتغيرات الرقمية (Numaric Data Types):

في لغة الجافا توجد لدينا 6 أنواع للمتغيرات الرقمية، نستطيع تقسيمها إلى قسمين كبيرين:

المتغيرات الصحيحة(Integral Variables): و تتكون من 4 أنواع:

byte: و هذا النوع يخزّن الأرقام الصحيحة في حجم من الذاكرة مقداره بايت واحدة.
short: و هذا النوع يخزّن الأرقام الصحيحة في حجم من الذاكرة مقداره 2 بايت.
int: و هذا النوع يخزّن الأرقام الصحيحة في حجم من الذاكرة مقداره 4 بايت.
long: و هذا النوع يخزّن الأرقام الصحيحة في حجم من الذاكرة مقداره 8 بايت.

المتغيرات الكسرية(Floating Point Variables): و تتكون من نوعين:

float: و هذا النوع يخزّن الأرقام الكسرية في حجم من الذاكرة مقداره 4 بايت.
double: و هذا النوع يخزّن الأرقام الكسرية في حجم من الذاكرة مقداره 8 بايت.

المتغيرات النصية (Textual Data Types):

تضم نوع واحد فقط:

char: و يخزّن في حجم من الذاكرة مقداره 2 بايت. و هذا المتغيّر يخزّن حرفاً واحداً فقط. و يجدر بي أن أوضح هنا أن أي زر يمكن أن تضغط عليه في الكيبورد هو في الواقع char. و بالمناسبة فإن الرقم 1 يختلف كثيراً عن الحرف '1' و يكتب هكذا محصوراً بين علامتي تنصيص مفردتين. و الثاني '1' لا يمكن اجراء عمليات حسابية عليه لأنه مخزّن على أساس انه متغير نصّي. و لكن 1 لو تم تخزينه في متغير رقمي فيمكن بالطبع اجراء عمليات حسابية عليه.

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

المتغيرات المنطقية

و تضم نوع واحد فقط:

boolean: و هذا النوع يخزّن نوعاً مميزاً من القيم. انه يخزّن قيمة من اثنتين فقط هما: true, false. و هذا النوع من المتغيرات يستخدم في المقارنات المنطقية ..

المتغيرات التي يعرفها المبرمج(Aggregate Data Types):

و هي المتغيرات التي يقوم المبرمج بتعريف نوعها. مثل ال classes لتي نقوم بكتابتها في ملفات و برامج الجافا. ملخص:


المتغير هو مكان لتخزين القيم التي يحتاج المبرمج لحفظها بشكل مؤقت. و قد تتغير من آن إلى آخر. و يتم تحديد نوع القيمة التي يخزنها أي متغير.
أنواع المتغيرات لها حجم محدد للتخزين في الذاكرة.
يستطيع المبرمج أن يعرف أنواعاً لا عدد لها من المتغيرات باستخدام ال classes. اشهار المتغيرات:

ان اشهار المتغيرات يتم في الجافا على هذه الصيغة:

كود: type identifier;

لنفرض مثلاً اننا نريد اشهار متغير من نوع متغير صحيح int


كود: int x;

في السطر السابق يمثّل (x) اسم لمتغير من نوع رقم صحيح يتم تخزينه في 4 بايت. و يمكن اعطاؤه أي قيمة مثلاُ:


كود: x=10;

و هكذا نكون أعطينا المتغير (x) القيمة 10. و بالمثل نستطيع اشهار متغيرات من أي نوع آخر.

و توفر الجافا اعطاء المتغيرات قيم مبدئية عند اشهارها، مثلاً.. نستطيع أن نكتب في برنامجنا:


كود: double x=14.3;
char ch='m';

اننا في ما سبق، قد قمنا باشهار متغيرين الأول من نوع double و قد أعطيناه قيمة مبدئية هي: 14.3، اما المتغير الثاني فهو متغير نصي من نوع char و أعطيناه قيمة مبدئية هي الحرف 'm'.


مثال على اشهار واعطاء قيم للمتغيرات في الجافا:

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


http://www2.*********/2008/05/05/01/524275248.gif

في السطر السابع (و يقع في المنطقة الوردية) مثلاُ قمنا بانشاء متغير من نوع short و أعطيناه قيمة مبدئية هي 200. و نلاحظ ان جميع جمل الجافا تنتهي بـ ( ; ).

بينما في السطر السادس قمنا بانشاء متغير من نوع byte و لم نعطه اي قيمة مبدئية.

عند تشغيل البرنامج السابق ستواجه المشكلة التالية:

ان هذه المشكلة ظهرت تحديداً عندما حاولنا طباعة المتغيرين b وnumber. لاحظ انها لم تظهر عندما قمنا باشهارهما. و لكنها ظهرت عند محاولتنا لاستخدامهما. هل تستطيع ان تعطي سبباً لذلك؟

في الواقع ان السبب هو اننا لم نعطهما قيمة مبدئية! ثم حاولنا طباعتهما. الآن ما الذي نحاول فعله؟ نطبع قيمة لا نعرفها! لذا سيتوقف مترجم الجافا و يعطيك الخطأ السابق.

كيف نعالج المشكلة؟ نعطيهما قيماً قبل أن نحاول طباعتهما.

http://www2.*********/2008/05/05/01/725263055.gif نلاحظ في هذه الصورة أننا قمنا باعطاء قيماً للمتغيرات التي اشهرناها عن طريق المساواة في حالة المتغير b و عن طريق وضع ناتج الطرح في المتغير number. و هكذا حللنا المشكلة.

يمكننا أيضاً ترتيب الطباعة في الأسطر من 28 إلى 35.

لنأخذ السطر الـ 30 مثلاُ



كود: System.out.println("number = " + number); كود PHP:
"number = "

ثم قمنا بعلامة زائد التي تعني اننا سنطبع شيئاً آخر إلى جانبها. ثم وضعنا اسم المتغير number و هذا يعني انه سيقوم بطباعة قيمة المتغير number.



http://www2.*********/2008/05/05/01/357996628.gif]

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

و في آخر الصورة ترى ان جمل الطباعة في البرنامج قد قامت بعملها الجيّد.

مثال على استخدام المتغيرات في الجافا:
هنا لدينا برنامج يقوم بانشاء ثلاثة متغيرات من نوع عدد صحيح int. و البرنامج يقوم باعطاء المتغيرين الأولين x , y قيم أولية. ثم يضع ناتج الجمع في المتغير الثالث z.

http://www2.*********/2008/05/05/01/577500539.gif

لاحظ جملة الطباعة في آخر البرنامج.. مرتبة جداً، أليس كذلك؟

انظروا الى النتيجة ^^

http://www2.*********/2008/05/05/01/428255994.gif



أتمنى أن تكونوا قد استفدتم من الموضوع ولو بجزئية بسيطة "ولو سطر واحد^^"...
فلبرمجة عالم جميل ورائع جداً ، وخلفه الكثير من الأسرار ^^...
في أمان الله...
......................


المصدر:
Object-Oriented Programming with Java
by: C. Thomas Wu, McGraw Hill


.
.
.
.
.

AL EMPRATOOR
01-11-2008, 05:00
السلام عليكم ورحمة الله وبركاته

كيفك أخي العزيز...
إن شاء الله بأفضل حال ^_^

ما شاء الله..
موضوعك أكثر من رائع

قرأت أول جزء
ولي عودة لأقرأ الباقي ^_^

دمت بخير وفي أمان الله