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

إضغط هنا للخروج

Header
 
 

 مسينجر مدير الموقع :

 
الاشتراك في جروب شبكة لايف نت
Email:
زيارة الجروب
 

إعلانات إدارية


العودة   لايف نت > ღ♥ღ لايف نت التقني ღ♥ღ > لغات البرمجة
القرآن الكريم الترجمة توبيكات للماسنجرحماية الروابط إسترجاع كلمة المرور طلب كود تفعيل العضوية تفعيل العضوية
قوانين الموقع ألعاب تسجيل دخول مسينجر مركز التحميل مقياس الحب زخرفة SMS الخطة الاعلانية
أفلام ثيمات XP مسينجر دروس تعليمية تعاريف البرامج دليل المواقع ترددات ديجتال أكواد جافا

لغات البرمجة programing C++ visual studio database borland pascal


الجافا متجدد

لغات البرمجة


رد
 
LinkBack (1) أدوات الموضوع طرق مشاهدة الموضوع
قديم 07-11-2007   #12 (permalink)

مشرف سابق

 
الصورة الرمزية MaZeN

 



 
مرشح مرة واحده في موضوع واحد
عدد مرات الفوز : 0
MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.
إرسال رسالة عبر مراسل MSN إلى MaZeN إرسال رسالة عبر مراسل Yahoo إلى MaZeN
افتراضي رد: الجافا (متجدد)


شرح البرنامج الأوّل:

لقد قمنا في الدرس السابق بكتابة برنامج صغير، و قد كان بهذا الشكل:



اليوم سنقوم بفهمه سطراً سطراً
فلنبدأ بسم الله الرحمن الرحيم:

السطر الأوّل:


السطر الأول يحتوي على تعريف الفئة (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) سيبدأ عند هذه النقطة. و بما أن لكل شيء بداية و نهاية، فإننا نتوقّع أن يتوقّف تعريف البرنامج عند العلامة المقابلة ({) و هذا يعني أن تعريف الفئات يكون دائماً محصوراً بين رمزي المجموعة

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

السطر الثاني يأتي لتعريف وظيفة(method) من الوظائف. سنتعرّف على الوظائف بشكل مفصّل في درس قادم ان شاء الله. لكن ما يهمّنا الآن هو الوظيفة الموجودة بين أيدينا.

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

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

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


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


ملاحظات:

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

يلا الى اللقاء في الدرس القادم

 

التوقيع

MaZeN غير متواجد حالياً   رد مع اقتباس
   
قديم 08-11-2007   #13 (permalink)

مشرف سابق

 
الصورة الرمزية MaZeN

 



 
مرشح مرة واحده في موضوع واحد
عدد مرات الفوز : 0
MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.
إرسال رسالة عبر مراسل MSN إلى MaZeN إرسال رسالة عبر مراسل Yahoo إلى MaZeN
افتراضي رد: الجافا (متجدد)


الآلة التخيلية للجافا JVM:


تمهيد


تذكر شركة ال Sun Microsystems أن قوة لغة الجافا تكمن في قوة ثلاث وحدات فيها:
الآلة التخيلية Java Virtual Machine
جامع نفايات البرنامج Garbage Collector
أمان الكود Security of the code
و في الواقع فإن المحورين الثاني والثالث، على أهمية عظيمة، و لكنهما يتحركان ضمن المحور الأول و هو الآلة التخيلية.
الآلة التخيلية للغة الجافا:



تنقسم هذه الالية الى اربعة اقسام:

class loader: إن محمل الفئات (Class Loader) يقوم على قراءة الملف (class) و احضاره من المكان الذي تم حفظه فيه إلى الآلة التخيلية. تماماً مثلما يقوم قارئ الملفات في الكومبيوتر باحضار الملفات المطلوبة من القرص الصلب إلى ال CPU وحدة التشغيل المركزية. و يقوم ال Class Loader بالتأكد في الوقت ذاته من عدم وجود أخطاء برمجية.

Bytecode verifier:كثيرة هي البرامج التي تبدو بريئة في ظاهرها، بينما تحوي ما يكفي من الأمور المدمّرة مخبأة فيها. و لعل البرامج المكتوبة بلغة السي من أبرز الأمثلة على ذلك. فبكتابة برنامج صغير يجمع بكل براءة رقمين و يخزّن الناتج في مكان معين في الذاكرة، يقوم الملف فعلياً بمسح محتويات القرص الصلب! فبعض الأماكن في ذكرة الكومبيوتر حساسة للقيم التي توضع فيها.
لذل فقد أخذت الجافا احتياطها لمثل هذه التجاوزات غير المرغوبة. ففي ال Byte Code Verifier يتم التأكد من عدم تجاوز البرنامج بأي شكل من الأشكال. فلا يقوم بالكتابة في أماكن لا يجب أن يكتب فيها، كما يتم التأكد من عدم احتواء الفئة (ال class) من أي أمر يكسر قواعد اللغة و حواجزها، حتى و لو كان مقبولاً من ناحية ال Syntax أو السياق البرمجي.


Interpeter:يقوم المفسّر بقراءة الأوامر أمراً أمراً. مهمته تتلخّص في أنه يجهّز الأوامر بالتتابع كي يتم تشغيلهم في المرحلة الرابعة.

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

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

 

MaZeN غير متواجد حالياً   رد مع اقتباس
قديم 10-11-2007   #14 (permalink)

مشرف سابق

 
الصورة الرمزية MaZeN

 



 
مرشح مرة واحده في موضوع واحد
عدد مرات الفوز : 0
MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.
إرسال رسالة عبر مراسل MSN إلى MaZeN إرسال رسالة عبر مراسل Yahoo إلى MaZeN
افتراضي رد: الجافا (متجدد)


المتغيّرات:

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

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

 

MaZeN غير متواجد حالياً   رد مع اقتباس
قديم 11-11-2007   #15 (permalink)

مشرف سابق

 
الصورة الرمزية MaZeN

 



 
مرشح مرة واحده في موضوع واحد
عدد مرات الفوز : 0
MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.
إرسال رسالة عبر مراسل MSN إلى MaZeN إرسال رسالة عبر مراسل Yahoo إلى MaZeN
افتراضي رد: الجافا (متجدد)


التعليقات:

ماهي التعليقات؟:
انها الأسطر التي يتجاهلها مترجم الجافا، و لكنها تجعل الكود أسهل قراءة للمبرمج نفسه. بعبارة اخرى انها مجموعة الملاحظات التي يضعها المبرمج في كوده لتسهيل قراءته.

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


كما هو موضح في الشكل، فإن هذا النوع من التعليق يتم بوضع علامتي (//) قبل السطر المراد تعليقه. و هذا يعني أن يتجاهله المترجم تماماً. و لكنه بالطبع يقوم بتوضيح بعض الأمور للمبرمج. فأنت مثلاً و انت تنظر للصورة تعرف ان الرقم 100 الموجود في الأسفل يمثل ال total الذي يتحدث عنه المبرمج. و هذا بالطبع يعني شيئاً ما للبرنامج


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

التعليق بعدة أسطر:


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

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


كما ترى في الصورة فقد تم حصر التعليق بين (**/) و (/*) و هذا يعني ان هذه العبارة ستكون خاصة بالتعليق الذي سيظهر في ملفات المساعدة.
نلاحظ في هذا النوع من التعليقات انه يجب ان تسبق بعض المكونات المحددة في البرنامج، و انها توضح بعض الامكانات لها.

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

 

MaZeN غير متواجد حالياً   رد مع اقتباس
قديم 12-11-2007   #16 (permalink)

مشرف سابق

 
الصورة الرمزية MaZeN

 



 
مرشح مرة واحده في موضوع واحد
عدد مرات الفوز : 0
MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.
إرسال رسالة عبر مراسل MSN إلى MaZeN إرسال رسالة عبر مراسل Yahoo إلى MaZeN
افتراضي رد: الجافا (متجدد)


استخدام المتغيرات

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

اشهار المتغيرات:
ان اشهار المتغيرات يتم في الجافا على هذه الصيغة:
type identifier;
لنفرض مثلاً اننا نريد اشهار متغير من نوع متغير صحيح int
int x;
في السطر السابق يمثّل (x) اسم لمتغير من نوع رقم صحيح يتم تخزينه في 4 بايت. و يمكن اعطاؤه أي قيمة مثلاُ:
x=10;
و هكذا نكون أعطينا المتغير (x) القيمة 10. و بالمثل نستطيع اشهار متغيرات من أي نوع آخر.
و توفر الجافا اعطاء المتغيرات قيم مبدئية عند اشهارها، مثلاً.. نستطيع أن نكتب في برنامجنا:
double x=14.3;
char ch='m';

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

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

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


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


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


نلاحظ في هذه الصورة أننا قمنا باعطاء قيماً للمتغيرات التي اشهرناها عن طريق المساواة في حالة المتغير b و عن طريق وضع ناتج الطرح في المتغير number. و هكذا حللنا المشكلة.
يمكننا أيضاً ترتيب الطباعة في الأسطر من 28 إلى 35.
لنأخذ السطر الـ 30 مثلاُ
System.out.println("number = " + number);
سبق و شرحنا طريقة الطباعة في الجافا. في هذا السطر نقوم في الواقع بطباعة هذه الجملة:
"number = "
ثم قمنا بعلامة زائد التي تعني اننا سنطبع شيئاً آخر إلى جانبها. ثم وضعنا اسم المتغير number و هذا يعني انه سيقوم بطباعة قيمة المتغير number.
و هنا أحب أن أضع ما نفعله في الدوس:


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

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


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


أرجو أن يكون الدرس واضحاً.

 

MaZeN غير متواجد حالياً   رد مع اقتباس
قديم 13-11-2007   #17 (permalink)

مشرف سابق

 
الصورة الرمزية MaZeN

 



 
مرشح مرة واحده في موضوع واحد
عدد مرات الفوز : 0
MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.
إرسال رسالة عبر مراسل MSN إلى MaZeN إرسال رسالة عبر مراسل Yahoo إلى MaZeN
افتراضي رد: الجافا (متجدد)


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


لقد اخترت لكم فئة تعتبر المثال المفضّل عند معظم المصممين لوضوحها و سهولة استخدامها. لنضع التصميم المبدئي لهذه الفئة مع بعض

Date
الصفات
رقم يمثل اليوم
رقم يمثل الشهر
رقم يمثل السنة
لنقم بكتابة ذلك بالجافا. لنتوقف و نفكّر قليلاً. ما الذي نقوم بتعريفه؟ اننا نقوم بتعريف فئة اسمها Date، اذاً سنكتب التالي:

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


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


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



سنتوقف هنا قليلاً، لننظر للكود الذي تركته في المساحة البيضاء. فقد قمنا فيه بتعريف الوظيفة. في السطر الأول من الوظيفة نرى التالي:
public String getDate(){
اننا في هذا السطر نقوم بتعريف وظيفة. الكلمة الأولى public لو تذكرون اننا تحدثنا عنها عندما كتبنا أول برنامج بالجافا. فهذه الكلمة هي مغيّر الدخول أو (Access Modifier). و قد وضعناه لهذه الوظيفة (Method) عام، لأننا نريد لأي فئة أو برنامج آخر يقومون باستخدام هذه الفئة أو اعضاءها أن يتمكنوا من الاستعلام عن التاريخ.
ان أي وظيفة في أي فئة لابد أن يكون لها نوع اعادة (Return type). و في مثالنا، ما الذي نريده ان يود الينا.... التاريخ أليس كذلك؟ حسناً التاريخ الذي نريده سيكون في صيغة نصية (String)
الكلمة التالية هي اسم الوظيفة و يقوم المبرمج بتحديدها. و هذه الكلمة تكون عادة في صيغة فعل يدل على الوظيفة التي تؤديها هذه الوظيفة. في حالتنا هذه سمّيناها:
getDate()
لأننا في الواقع نريدها أن تعيد لنا قيمة تخبرنا عن التاريخ. لابد ان ينتهي تعريف أي وظيف بقوسين دائريين، و هما في هذه الوظيفة لا يحتويان على أي شيء. ثم قوس المجموعة، ننتقل للسطر التالي و هو في داخل الوظيفة:
String str=day + "/" + month + "/" + year;
في السطر السابق نلاحظ اننا قمنا بتعريف (اعلان او اشهار) متغيّر من نوع نصي كلمي: String و أسميناه str، و أعطيناه قيمة مبدئية عبارة عن شكل التاريخ بحيث وضعنا اليوم ثم علامة "/" و الشهر، ثم علامة "/" ثم السنة. و هكذا أصبح المتغير str فيه التاريخ المخصص لأي عضو في الفئة (والذي قد يختلف من عضو إلى آخر)
في السطر التالي:
return str;
نلاحظ استخدام الكلمة return وهي في اللغة الانجليزية تعني (اعادة) و هكذا كلمة return في السطر السابقة تقوم بارجاع القيمة التي تعيدها الوظيفة. و لابد أن يكون ما يلي هذه الكلمة من نفس نوع return type للوظيفة.
في مثالنا كان الـ return type هو String، و هكذا وضعنا بعد كلمة return المتغير من نوع النص الكلمي String و كان في حالتنا المتغير str.

ملخص الوظيفة السابقة

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


في الصورة السابقة نلاحظ اننا في تعريفنا لوظيفة تحديد التاريخ، قد قمنا بتعريفها بطريقة تختلف قليلاً عن وظيفة الاستعلام. ولكن المبدأ هو نفسه في الحالتين.
لنتابع معاً، السطر التالي:
public void setDate(int d, int m, int y){
هذه الوظيفة هي أيضاً public مثل سابقتها. و لكن انظروا إلى النوع الذي تعيده: void و هو نوع متغيرات لم نتعرّض له أبداً. لأنه ببساطة ليس نوعاً لمتغير. هو نوع ليخبرنا ان هذه الوظيفة لا تقوم باعادة أي قيمة. انها تؤدي وظيفة محددة فقط لا غير.
نلاحظ أننا اسمينا الوظيفة: setDate و لكن ما تلاها ليس قوسين دائريين فارغين، بل فيهما السطر التالي:
int d, int m, int y
نطلق على ما سبق parameter list أو قائمة المتغيرات المدخلة للوظيفة. في مثالنا هنا نريد ان نعطي التاريخ ثلاث قيم، قيمة لليوم، و قيمة للشهر و قيمة للسنة. و هكذا قمنا بادخال ثلاث متغيرات هم d و m و y بحيث يمثل كل منهم على الترتيب: day, month, year.
فنلق نظرة على ما هو داخل الوظيفة:
day = d;
month = m;
year = y;

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

 

MaZeN غير متواجد حالياً   رد مع اقتباس
قديم 14-11-2007   #18 (permalink)

مشرف سابق

 
الصورة الرمزية MaZeN

 



 
مرشح مرة واحده في موضوع واحد
عدد مرات الفوز : 0
MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.
إرسال رسالة عبر مراسل MSN إلى MaZeN إرسال رسالة عبر مراسل Yahoo إلى MaZeN
افتراضي رد: الجافا (متجدد)


استخراج عضو من فئة

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



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


كما هو موضّح في الصورة ان قيمة المتغير في الذاكرة تمثلها علامات استفهام. ذلك ان المتغير birthDate ليس كائن في حد ذاته. بل هو متغير لعنوان الكائن.
كي تتم ترجمة الجملة السابقة بدون مشاكل يجب أن يكون ملف Date.class موجوداً في نفس الحافظة. (في المستقبل سنتعلم انشاء الله كيف نحدد أماكن الفئات). و لكن في الوضع الحالي سنكتفي بوضع هذا الملف مع الملف السابق في نفس الحافظة.
الآن لكي ننشئ الكائن نفسه علينا أن نستخدم الطريقة التالية:



نلاحظ في السطر السابع من البرنامج الموضح في الصورة السابقة هذه الجملة:
birthDate=new Date();
هممم أعتقد أن لديك الآن العديد من الأسئلة، أليس كذلك؟
اذاً دعنا نكمل الشرح اليوم بطريقة الأسئلة و الأجوبة
مالفرق بين المتغير من نوع Date و المتغير من أي نوع آخر ممن ألقينا عليه الضوء في درس المتغيرات؟
ان المتغير من نوع Date هو من فئة قام المبرمج بتعريفها. أي انه متغير يمثّل عضواً من فئة. اما المتغيرات سابقة الذكر مثل int و char و boolean فهم متغيرون لا ينتمون فعلياً لفئة محددة، و لكنهم يمثلون أنواع المتغيرات البسيطة. ان المتغير Date يعتبر أكثر تعقيداً نوعاً ما.
لم قمنا باستخدام الكلمة new؟ و ما الفائدة من السطر السابع؟
سبق و ضمن شرحنا للسطر الخامس من نفس البرنامج أن اوضحنا ان اعلان المتغيرات من نوع الفئات أو ما نطلق عليهم Aggregate Data Types هي في الواقع اعلان النيّة عن اعلان المتغير. و لكن ما حدث في السطر السابع، ان المترجم قام بتهيئة جميع أجزاء التاريخ الفعلي، و أنشأ كائناً من نوع Date ثم وضع عنوان الذاكرة لهذا الكائن في المتغير birthDate.
لم أفهم، أرجو التوضيح أكثر في السؤال السابق؟
دعونا نستخدم الرسوم التوضيحية، لمعرفة ما تم في هذه الجملة:
Date birthDate=new Date();
ان القسم الأول من الجملة (أو في برنامجنا ما هو موجود في السطر الخامس) يمكن تمثيله بالصورة التالية:


ان القسم المظلل من الصورة يصور لنا ما يعنيه الجزء الأول من الجملة. انه يعني اننا قمنا بانشاء متغير (علبة) تحفظ في داخلها عنوان كائن شيئي من نوع Date. و لكن لاحظ أن القيمة المبدئية في المتغير غير معرّفة حتى هذه اللحظة (قبل ان ننتقل لبقية الجملة). أي اننا نمهد لانشاء كائن من نوع Date و لكننا لم ننشئه حتى الآن، لذا وضعنا في داخل المتغير birthDate علامات استفهام.
أما الصورة التالية:


فهي تظلل القسم الأخير من الجملة الذي يعني اننا سنقوم بانشاء كائن من نوع Date في ذاكرة الكومبيوتر. و لنفرض مجرد فرض ان عنوان هذا المكان الذي وضعنا فيه الكائن هو العنوان الموضح في اسفل المنطقة المظللة.
ملاحظة: ان المتغيرات day و month و year سيتم اعطاؤهم القيمة المبدئية (0) بشكل اوتوماتيكي. لأنهم ينتمون لكائن، و ليس لوظيفة محددة.
اننا حتى الآن أنشأنا على أحد طرفي الجملة متغيراً لا توجد فيه أي قيمة. و في الطرف الآخر أنشأنا في الذاكرة كائناً شيئيّاً من نوع Date. لاحظ ما سيحدث الآن:



ان علامة المساواة في هذه الجملة تعني ان عنوان الكائن الذي انشأناه في الذاكرة سيتم وضعه في المتغير birthDate. و هذه هي طريقة اعطاء المتغير من نوع Aggregate Data Type القيمة المبدئية. هل المقصود ان عدم وضع القيمة المبدئية لأي متغير من هذا النوع يعني عدم القدرة على استخدام هذا المتغير؟
بالضبط! ان المتغير الشيئي أو الكائني أو الذي نريد أن ننشيء عن طريقه عضواً من فئة محددة لابد من اعطائه قيمة مبدئية باستخدام الكلمة new. لأنه كما لاحظنا من السيناريو السابق، ان الاكتفاء بتعريف المتغير، يقوم بوضع علامات استفهام في المتغير.

 

MaZeN غير متواجد حالياً   رد مع اقتباس
قديم 15-11-2007   #19 (permalink)

مشرف سابق

 
الصورة الرمزية MaZeN

 



 
مرشح مرة واحده في موضوع واحد
عدد مرات الفوز : 0
MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.
إرسال رسالة عبر مراسل MSN إلى MaZeN إرسال رسالة عبر مراسل Yahoo إلى MaZeN
افتراضي رد: الجافا (متجدد)


استخدام عضو من فئة:

في الدرس السابق قمنا بانشاء متغير من نوع Date في هذا البرنامج:


و اليوم سنقوم باجراء التغييرات التالية:


لنتابع الخطوات التي قمنا بها في الكود السابق:
Date birthDate = new Date();
هذه الخطوة سبق و شرحنا الهدف منها في الدرس السابق. و هي باختصار تعني انشاء متغير يحفظ في داخلة قيم خاصة بكائن من نوع Date.
والآن، بما أن birthDate هو كائن من نوع Date فانه يملك كل ما يملكه أي كائن (عضو-object) ينتمي لهذه الفئة. و للتذكير سأضع برنامج فئة الـ Date هنا:


و الآن لنتابع الأسطر:
System.out.println(birthDate.getDate());
هذا السطر يقوم في الواقع بعدة أمور، انه يقوم باستدعاء الوظيفة: getDate الخاصة بالكائن birthDate. و كما نعرف ان هذه الوظيفة ستعطينا التعبير النصّي للتاريخ أي انها سترجع لنا قيمة نصة كلمية (String) لذا وضعناها مباشرة في داخل وظيفة الظباعة التي نستخدمها.
و هذا مشابه تماماً لأن نقول التالي:
String str = birthDate.getDate();
System.out.println(str);

ذلك اننا قمنا بوضع القيمة التي ترجعها لنا الوظيفة الخاصة بالكائن المسمّى birthDate في متغير نصي من نوع String ثم قمنا بطباعة هذا المتغير. سنلاحظ ان هذه الجملة ستطبع لنا القيمة: 0/0/0
أما في السطر التالي:
birthDate.setDate(10,8,2001);
فقد قمنا باستدعاء الوظيفة الخاصة بتحديد التاريخ، و أعطيناها القيم المناسبة لذلك و هي 10 للـ day، و 8 للـ month، و 2001 للـ year.
نلاحظ هنا أننا لم نقم بمساواة هذه الوظيفة بأي متغير، كذلك لم نقم باستدعائها ضمن وظائف أخرى، و السبب ان هذه الوظيفة لا ترجع لنا أي قيمة، أي انها تقوم بتنفيذ مجموعة من الأوامر فقط لا غير.
في السطر التالي قمنا بتكرار أمر الطباعة حتى نرى التغيرات التي حدثت على الكائن الخاص بنا:
System.out.println(birthDate.getDate());
بالرغم من أن الأمر هو نفسه، إلا ان الناتج الذي ستتم طباعته سيختلف، ذلك اننا في السطر الذي سبق هذا السطر (السطر السابع في البرنامج) قمنا باعطاء الـ day و month و year قيماً أخرى، و هي التي ستظهر عند تشغيل البرنامج، هكذا:


ملاحظة:
اننا في هذا الدرس قمنا بانشاء كائن باسم birthDate من نوع Date و استخدمنا وظائفه المختلفة. و لأننا كتبنا فئة (class) الـ Date بشكل بسيط، فإن هذا يجعلنا نستطيع في أي لحظة أن نطبع أو نظهر القيم المختلفة للفئة، بمعنى. اننا نستطيع في أي لحظة في برنامجنا اليوم ان نضع هذه الجملة:
birthDate.day=20;
و سترى ان البرنامج سيعمل بشكل طبيعي. اذا قمت بطباعة الوظيفة التي تستعلم عن قيمة التاريخ للكائن birthDate ستجد انه يطبع لك القيمة 20 في خانة الـ day. لم لا تجرب بنفسك، لترى النتيجة؟

 

MaZeN غير متواجد حالياً   رد مع اقتباس
قديم 18-11-2007   #20 (permalink)

مشرف سابق

 
الصورة الرمزية MaZeN

 



 
مرشح مرة واحده في موضوع واحد
عدد مرات الفوز : 0
MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.
إرسال رسالة عبر مراسل MSN إلى MaZeN إرسال رسالة عبر مراسل Yahoo إلى MaZeN
افتراضي رد: الجافا (متجدد)


صفة في فئة عبارة عن عضو من فئة أخرى:

درسنا اليوم فيه شيء من الطول، و شيء من التفصيل. من فضلك لا تقرأه إلا و أنت في حالة ذهنية صافية غير مشوشة.. لأفضل النتائج.. والله الموفّق :-) على فكرة.. فيه بعض الرياضيات أرجو أن يسعدكم هذا لعلمي بولع المبرمجين بالرياضيات
تمهيد
لنجرب أن نضع فئة الإنسان. ماهي صفاته و قدراته؟ عين، لسان، قلب، انه يفكر، يبدع.
ممتاز.
لنتصوّر أننا نرغب في كتابة فئة القلب. و نضع فيها صفات أي قلب: يضخ الدم، ينبض.
رائع جداً..
الآن تصوّر أن عضواً من فئة القلب سيكون صفة لعضو فئة الانسان..
لغز؟ لنحلّه معاً عبر درس اليوم
مقدّمة المثال:
لنفترض أننا نرغب في بناء فئة للخط المستقيم. و حتى نبدأ فعلياً في ذلك. لابد من أن نعرف المزيد عن خصائص و مميزات الخط المستقيم أليس كذلك.
لنسأل أنفسنا:ماهو الخط المستقيم؟حتى نجيب على هذا التساؤل لابد أن نعرف القليل عن خصائص الخط المستقيم. لنتأمّل الشكل التالي:
كما ترى في الشكل. لدينا نقطتان النقطة الأولى: P1 والثانية P2. و يربط بينهما الخط المستقيم. إذا الخط المستقيم هو كل ما يربط بين نقطتين، أليس كذلك؟ حسناً إذا احداثيات النقطة الأولى P1 و احداثيات النقطة الثانية P2 يحددان معاً كيف نرسم الخط المستقيم


نقطة توقف..قد يقول قائل منكم أن للخط لوناً وهو في الشكل اللون الأسود. فأقول صحيح. اللون صفة من صفات الخط. و قد يقول آخر أن لون النقاط أحمر فأقول خطأ. لأن لون النقاط من صفات النقاط و ليس من صفات الخط ;-) فلا تخلط الأمور. فمثلاً يمكن أن نكتب فئة مختصّة بالنقاط نسمّيها Point مثلاً. و نضع فيها صفات النقطة و هي ستكون الاحداثي السيني، و الاحداثي الصادي، و اللون. و لكن حين نعرّف الخط المستقيم ما يهمّنا من النقطة هو احداثياتها. أم لونها فستأخذه بشكل طبيعي من لون الخط نفسه. نحن نتحدّث عن الخط فقط. و استخدمنا النقاط لتوضيح أن الخط يربط بينهما. لم تستوعب النقطة؟ لا تخف أبداً.. تابع الدرس و ان شاء الله تتوضح الأمور


إذاً لدينا الآن فئة الخط المستقيم Line. و لكن في حالتنا اليوم نحن مضطرون إلى بناء فئة أخرى.. ما هي؟
صحيح.. فئة النقطة و لنطلق عليها Point و أي نقطة في العالم تتكون من احداثيين (س، ص) أليس كذلك؟ و باللغة الانجليزية: (x,y). لننظر إلى الشكل التالي:


فنلاحظ الشكل المجاور قليلاً.. ستجدون النقطة الحمراء و الممثلة بالنقطة P1 تعكس اثنين من الاحداثيات. أحدهما ينعكس على المحور (س) والآخر ينعكس على المحور (ص).
و نلاحظ أيضا في الأرقام التي تجاور النقطة ان الاحداثي السيني تم تعريف أولاً. ثم تم تعريف الاحداثي الصادي.
و لكي نكتب الفئة في اللغة الانجليزية أرجو ملاحظة أن س= x، و أن ص=y. كما ارجو ملاحظة اتجاه اللغة. حيث ان الاتجاه بالانجليزي سيكون من اليسار لليمين هكذا: (x,y).

كتابة البرامج:
الآن و بعد هذه الدراسة المتعمّقة في الهندسة الاحداثية. (أرجو أنها كانت خفيفة على قلوبكم) نستطيع ببساطة أن نبني معاً فئة النقطة أو Point. لنتأمّل الكود التالي:


لقد قمنا هنا بتعريف أبسط فئة للنقطة Point و هي فئة لها اثنتين من الخصائص. احداثي السينات، و احداثي الصادات
الآن سنقوم بكتابة ملف فئة الخط المستقيم. لنتأمّل الكود التالي:


تجدون أن الخط المستقيم له صفتان تميزانه (أو بمعنى أصح تميّزان أي عضو نقوم باستخراجه من هذه الفئة) و هما النقطة الأولى p1 و النقطة الثانية p2.
والآن لنلخّص ما فعلناه. لقد كتبنا فئة و هي فئة النقطة Point و هي فئة قائمة بذاتها. ثم كتبنا فئة الخط المستقيم Line و استخدمنا في تعريفها عضوين من الفئة الأولى. فالنقطة p1 في فئة الخط المستقيم عبارة عن صفة لعضو. و هي بحد ذاتها عضو من فئة النقطة Point. أتمنى أن تكون هذه النقطة واضحة :-)
والآن سنكتب برنامج ثالث مثلاً ليكون هو البرنامج الذي نستخدم فيه أعضاء من فئة الخط المستقيم مثلاً. و سأسمّيه Painter لأننا ان شاء الله سنكتب في نهاية هذه الدورة برنامج رسم بسيط

بالطبع الهيكل العام للبرنامج مفهوم وواضح من دروس سابقة.
شرح كود برنامج Painter
لننظر إلى الشكل:


نلاحظ عرض السطرين 5 و 6 فيهما استخراج عضوين هما line1 و line2 من فئة الخط المستقيم. ثم قمنا بعد ذلك بحجز الذاكرة لهما لكونها من فئة قمنا بتعريفها (Aggregate Data Type) كما شرحنا في الدرس التالث عشر. هنا الطريق تمام و مفتوح

لننظر للشكل التالي:


في الشكل الأعلى نجد الأسطر من 8 و حتى السطر 13. في السطر الثامن نجد تعليقاً يخبرنا أننا سنقوم الآن بإعداد النقاط في السطرين اللذين قمنا بتعريفهما للاستخدام. لأننا لو تذكر في تعريفنا للخط المستقيم لم نقم باستخدام new لحجز المساحة لكلتا النقطتين. و هكذا وجب علينا في هذا البرنامج أن نقوم بذلك.

نقطة توقف..إن هذه الخطو ضرورية جداً جداً جداً جداً جداً. ستسأل لماذا.. تذكّر معي أننا قمنا بتعريف الخط المستقيم في البرنامج بأن فيه عضوين من فئة النقطة Point. و لم نقم بعد بحجز أي مساحة لهذين العضوين. و هكذا لابد أن نقوم بحجز المساحة للنقطتين الخاصتين بالخط الأول و كذلك النقطيتن الخاصتين بالخط الثاني. و إذا لم نقم بهذا العمل. فنحن في الواقع لن نتمكّن من تشغيل البرنامج لأن النقاط ليست جاهزة للاستخدام و لن نتمكّن في الواقع من استخدام x و y لأي نقطة. لأنه بكل بساطة النقاط ليست موجودة و لم يتم حجز الذاكرة المناسبة لها بعد. راجع الدرس الثالث عشر لمزيد من المعلومات حول هذه النقطة.
هل تعتقد أن هذه مشكلة يجب أن نجد لها حلاً. تفكير رائع وهذا ما سنفعله في الدرس القادم من هذا الموضوع.

لننظر للشكل التالي


هنا نجد الأسطر من 15 إلى 19. و في السطر 15 نجد تعليقاً يخبرنا أننا سنقوم بإعطاء قيماً للخط المستقيم line1 . و هذا يعني أننا سنحدد النقاط التي يصل بينهما. و بتفسير أكثر سنقوم بتحديد الاحداثيات السينية و الصادية لكلتا النقطتين. نلاحظ أننا استخدمنا الـ dot notation هنا و هذا يعني انني سأقوم باستخدام صفة (في حالتنا) خاصة بالعضو الذي ينتمي للفئة Line. لننظر لدفتر الرسم البياني و نحاول رسم هذا الخط الذي يربط بين النقطتين (10,10) و (20،20).


والآن لننظر للشكل التالي:


كما في القسم السابق، و لكن هذه المرة في الأسطر من 21 إلى 25 سنقوم بتحديد الاحداثيات لنقطتي الخط المستقيم الثاني. لننظر للشكل التالي الذي يمثل الخط المستقيم على الرسم البياني:


والآن لنتابع الجزء الأخير:

الأسطر من 27 إلى 37 تقوم بطباعة السطر بشكل متب كما في أي سطر طباعة آخر. تطبعه على الشاشة.
كل ما في الأمر أننا قمنا بترتيب المخرجات.

نقطة توقف..استخدام اشارة (+) في داخل جملة الطباعة لا تعني أننا سنقوم بالجمع. إلا في حالو واحدة وهي أنه وُجد على طرفي هذه الإشارة داخل أمر الطباعة عددين قابلين للجمع. و حتى هذا ليس الحال دائماً. لأنه يعتمد في بعض الأحيان على ترتيب المتغيرات و موقعها في جملة الطباعة نفسها. علامة الجمع بين المتغيرات من نوع String و هي التي تمثلها العبارات المحصورة بين علامتي التنصيص " و "، يعني أنه سيتم جمع هذه العبارات. و هذا ما تفعله جملة أو أمر الطباعة System.out.println.

التشغيل
إنّك إذا قمت بكتابة جميع البرامج بشكل صحيح، فإنّك بعد عمل الترجمة Compile للملفات الثلاثة، و تشغيل الملف الأخير Painter، فإنه سيظهر لك هذا الناتج:



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

 

MaZeN غير متواجد حالياً   رد مع اقتباس
قديم 19-11-2007   #21 (permalink)

مشرف سابق

 
الصورة الرمزية MaZeN

 



 
مرشح مرة واحده في موضوع واحد
عدد مرات الفوز : 0
MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.
إرسال رسالة عبر مراسل MSN إلى MaZeN إرسال رسالة عبر مراسل Yahoo إلى MaZeN
افتراضي رد: الجافا (متجدد)


Constructors

في الدرس السابق قمنا بعمل مهم جداً. و سنقوم اليوم بنفس العمل و لكن بطريقة أسهل. باستخدام مفهوم الـ Constructor.
أرجو أن تقوم بقراءة المقدّمة على الأقل من الدرس السابق (إن لم تكن فعلت) و الأفضل أن تطلع عليه بأكمله حتى تكون على علم بما نفعله هنا.

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



ان تعريف لفئة النقطة بهذا الشكل يجعلها تواجه مشكلة. و هي أننا نضطر لإعطاء قيماً لمتغيراتها x و y بشكل يدوي في الفئات الأخرى التي تستخدمها و تستدعيها. كما فعلنا في هذه الخطوات من فئة Painter:


إذا نحن بحاجة لوسيلة تجعلنا أثناء تكوين أي عضو من فئة النقطة Point أن نعطي قيماً لمتغيراته. ما أقصده بالتكوين هو هذه الجملة:

إن عبارة تعني أننا سنقوم باستخدام بتكوين عضو فعلي من فئة النقطة Point. هممو لكن ألا تلاحظون شيئاً؟.. لاحظو معي أن اسم الفئة نفسه يليه قوسان. و هذا ما يعرف بالـ Constructor. وهو عبارة عن طريقة التكوين التي يتم بها انشاء العضو من الفئة.
كيف نقوم بإعادة تعريف الConstructor؟
إن يعرف باسم: Default Constructor. و هي الذي توفره أي فئة موجودة في الآلة التخيلية. و لا يحتاج المبرمج لتعريفه و لا للإشارة إليه.
و يمكن للمبرمج إذا أراد أن يقوم بتعريف الـ Constructor الذي يريده. لنفرض مثلاً في فئة النقطة. أننا أردنا يقوم المبرمج بتمرير قيماً صحيحة للمتغيرين x و y أثناء تكوين العضو من فئة النقطة Point. أي لنفرض أنه أراد أن يكتب هذه الجملة:

بدلاً من هذه الطريقة:

الطريقة الأولى طريقة لطيفة أليس كذلك؟ أفضل و اسهل عند استخراج الأعضاء من فئة النقطة.
لنتأمّل الكود التالي الجديد لفئة النقطة نفسها:


لاحظ السطر 6. ستجد أننا كتبنا كوداً قد يبدو عجيباً للوهلة الأولى:

نلاحظ أننا كتبنا اسم الفئة، و هي في حالتنا Point، ثم فتحنا أقواساً. و في داخل الأقواس قمنا بتعريف سلسلة من المتغيرات تفصل بينهما الفاصلة (,).
من الضروري جداً جداً أن نكتب سلسلة المتغيرات بترتيب محدد. أي أننا نقوم بتوقع الاحداثي السيني، ثم الاحداثي الصادي و ليس العكس.


لاحظ في نهاية السطر السادس يوجد قوس مجموعة. مما يعني أننا سنقوم بكتابة بعض الكود و لا تنس أن تغلق قوس المجموعة بعد الانتهاء من كتابة ما تريد.
والآن لننظر إلى داخل الـ Constructor. ما الذي قمنا بتعريفه. في السطر 7 و 8. نلاحظ أننا أخذنا القيم من المتغيرات التي مررت لنا عبر تكوين العضو، و وضعناها في المتغيرات الخاصة بالعضو.
المتغيرات الممررة xx و yy هي متغيرات مؤقتة. تنتهي بمجرد الانتهاء من تكوين العضو (و الوصول لقوس المجموعة الموجود في السطر التاسع. و لعلنا نفصّل في هذا أكثر في درس الوظائف ان شاء الله.

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


البرامج مرة أخرى

آن و قد تعلمنا الـ constructors. نستطيع كتابة البرامج الموجودة في الدرس السابق بشكل أفضل مما سبق. فبرنامج النقطة سيكون بهذا الشكل كما كتبناه معاً قبل قليل:

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


نلاحظ أننا استخدمنا نفس المفهوم. قمنا بتعريف constructor له متغيرين في سلسلة التمرير parameter list من نوع Point.
والآن لنلق نظرة على الفئة Painter:

لندرس معاً الأسطر من 5 إلى 8:


قليل من التركيز من فضلك. فالآن المرحة الحرجة التي نقوم فيها بتطبيق ما قمنا بالتجهيز له مع بداية الدرس.
السطر 5، نقوم فيه بتعريف أو اشهار اثنين من المتغيّرات من نوع Line. اسم الاول line1 و الثاني line2.
في السطر 7 نقوم بعدة خطوات. انظر الشكل:


لنذهب إلى الخطوة رقم 1 و التي تجدون بجانبها رقمين 10 و 10, هما الاحداثيين السيني و الصادي للخط الأول. الآن نريد أن نكوّن منهما نقطة.
لننتقل للمرحلة رقم 2. و التي تجدون بجانبها هذه الجملة و هي تعني أننا سنقوم بتكون عضو في الذاكرة من نوع Point. و لأن فئة النقطة Point توفر constructor يأخذ رقمين صحيحن من نوع int أثناء تكوين العضو. فأصبح بإمكاننا الآن وضع الرقمين 10 و 10 في الأماكن المشار لها بالأسهم.
حسناً رائع جداً. والآن لننزل إلى السطر نفسه (سبب البلاوي اللي نحن فيها من الصبح هاهاهاهاها).


حسب تعريف الـ constructor الموجود في الفئة Line ما نوع المتغير المتوقّع هنا؟ Point. فعلاً. و هذا بالضبط ما فعلناه. قمنا بوضع العضو الذي استخرجناه في
الخطوة 2 في المكان الذي يفترض أن يكون فيه متغير من نوع نقطة.

نقطة توقفسيتساءل بعضكم هنا. لماذا لم نقم بتعريف متغير من نوع نقطة Point هكذا:


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

وطبعاً في نهاية البرنامج و في الأسطر من 10 إلى 20 نفس أوامر الطباعة التي ذكرناها في الدرس السابق

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

 

MaZeN غير متواجد حالياً   رد مع اقتباس
قديم 20-11-2007   #22 (permalink)

مشرف سابق

 
الصورة الرمزية MaZeN

 



 
مرشح مرة واحده في موضوع واحد
عدد مرات الفوز : 0
MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.MaZeN سمعته مابعدها سمعة.
إرسال رسالة عبر مراسل MSN إلى MaZeN إرسال رسالة عبر مراسل Yahoo إلى MaZeN
افتراضي رد: الجافا (متجدد)


أوامر التحكّم - الجمل الشرطية

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


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


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

حيث نبدأ بالكلمة (if) و بعدها نفتح قوسين دائريين نضع في داخلها شرطاً تكون قيمته إما true أو false. بعدها نفتح قوس مجموعة نضع في داخله ما نريد تنفيذه في حال كانت الجملة الشرطية صحيحة (true). و هذا ما نسميه (جملة إذا) أو (If Statement). و هي أول نوع من الجمل الشرطية.
و الآن لنتأمّل معاً الكود التالي:



لقد قمنا باشهار المتغيّر number و أعطيناه القيمة 5 كما في السطر 4.
و الآن لننظر إلى الكود من السطر 8 إلى 12:

إننا في هذه الأسطر نقوم بتطبيق جملة إذا. بحيث نلاحظ في السطر الثامن أننا وضعنا الجملة المنطقية (الرقم أكبر من 10).فإذا كانت العبارة صحيحة فسنقوم بتنفيذ الكود في الجزء المحصور بين قوسي المجموعة الذي يلي الجملة المنطقية مباشرة. أما إذا كانت العبارة خاطئة، فسنقوم بتنفيذ الجزء الذي يلي كلمة else و المحصور أيضاً بين قوسي مجموعة.

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

Switch Statement
لنفرض أننا نريد أن نكتب برنامجاً يقوم بعدة عمليات مختلفة حسب قيمة متغير. و لنفترض أن لدينا متغيراً اسمه grade نخزّن فيه درجة
الطالب. فإذا كانت الدرجة (A) نطبع كلمة (Excellent) أما إذا كانت (B) نطبع كلمة (Very Good)، أما إذا كانت (C) نطبع كلمة (Good)، أما إذا كانت (D) نطبع كلمة (Poor) و لو كانت أي شيء آخر نطبع كلمة (You Failed).
طبعاً يمكننا القيام بذلك بسلسلة من جمل if الشرطية هكذا:

نقطة توقف
عند المقارنة بين المتغير grade و الحرف 'A' استخدمنا بينهما علامتي يساوي لا علامة واحدة. فعلامة = الواحدة تعني أننا نريد أن نضع قيمة في هذا المتغير. و العلامتين (==) تعني أننا نقارن ما بين الموجود على طرفي العلامتين. و لنا حديث مفصّل عن الجمل المنطقية و أدواتها في ملحق منفصل ان شاء الله.
نسمي هذا النوع من If الشرطية: nested If أي وجود if داخل if و هكذا. و تقدّم لنا معظم لغات البرمجة و منها لغة الجافا جملة switch الشرطية. التي تسهّل كتابة البرنامج إذا كنت تعتمد فيه على عمل بعض الخطوات بحسب قيمة متغير محدد. والآن لنتعرّف على الهيكل العام لجملة switch، أثناء حل البرنامج الذي تحدّثنا عنه في المثال:



أول ذي بدء. نلاحظ أننا قمنا بتعريف متغير من نوع char اسمه grade. ثم بدأنا جملة switch و التي تكتب هكذا: switch ثم نفتح قوسين دائريين يتضمنان مفتاح. و مفتاح جملة switch هو المتغير الذي على اساس قيمته سنعرّف الحالات cases المختلفة. المفتاح في حالتنا هو grade وقد تم تعليمه بدائرة خضراء في الشكل السابق.
ثم نفتح قوس مجموعة. و نلاحظ أن القومس محدد بالخط الأصفر. و لابد أن يتضمن هيكل switch في داخله كل ما يتعلّق بهذه الجملة.
داخل جملة switch سنقوم بتحديد القيم. و نكتبها هكذا case ثم نضع القيمة تليها نقطتان رأسيتان (:) بعدها نفتح قوس مجموعة نضع في داخله الجمل و الأوامر التي نريد تنفيذها إذا كانت قيمة المفتاح تساوي القيمة التي تلي case.
و هكذا حتى تنتهي كل الحالات. و يمكن (اختيارياً) استخدام الحالة default في حالة لم تتساوى قيمة المفتاح مع أي من القيم المذكورة.
إن جملة switch تختلف في طريقة تسلسل الأوامر. فبمجرّد أن يتم الدخول في أي حالة من الحالات، يتم في الواقع تنفيذ جميع الحالات التي تليها. لننظر للشكل التالي:


نلاحظ أنه لدينا المفتاح key وأننا قمنا بتحديد القيم value1 و value2 و.. هكذا.
والآن لنتابع السيناريو. لنفترض أن قيمة key كانت تساوي فعلياً value2. في الواقع سيتم تنفيذ statement2. ومن ثم statement3 ومن ثم statement4.
أما إذا ساوت قيمة Key الـ value1 فسيتم تنفيذ statement1. و من ثم نجد كلمة break و هي تعني الخروج نهائياً من جملة switch كاملة. و هكذا لن يتم تنفيذ أي شيء آخر.
إذا ساوت قيمة key الـ value3، فسيتم تنفيذ الجملة statement3 و من بعدها statement4.
و هكذا فإن ترتيب الاختيارات مهم للغاية اذ يعتمد تنفيذها على هذا الترتيب. و لهذا وضعنا في المثال السابقة كلمة break في نهاية كل اختيار، حتى نضمن عدم تنفيذ أي جملة أخرى في داخل اقواس switch.

نقطة توقف

  • يمكن أن يكون مفتاح الـ switch من نوع int أو char و لا يمكن عمل switch على نوع من الـ aggregate data types التي يقوم المبرمج بتعريفها.
  • استخدام كلمة break بعد كل اختيار ليس اجبارياً و لا ضرورياً و يتحكّم في ذلك طبيعة الاوامر التي تريد تنفيذها و البرنامج الذي تريده.

 

MaZeN غير متواجد حالياً   رد مع اقتباس
رد

مواقع النشر

الكلمات الدلالية (Tags)
متجدد, الجافا

LinkBacks (?)
LinkBack to this Thread: http://www.lifenet-sy.com/vb/t7889.html
أرسلت بواسطة For Type التاريخ
Untitled document This thread Refback 23-12-2008 03:52 PM


الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1)
 
أدوات الموضوع
طرق مشاهدة الموضوع


المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
J2EE Developer's Handbook كتاب لمساعدتك في لغة الجافا يا غير مسجل slim shady الكتب الالكترونية التعليمية 14 11-01-2010 11:05 AM
أحدث نسخة من برنامج الجافا Java v6 Update 1 Hock69 برامج الإنترنت - Internet 11 26-11-2009 04:04 PM
احدث اصدار الجافا Java Runtime Environment بريق الشوق البرامج الكاملة و شروحها 4 10-12-2008 07:39 PM
تعلم البرمجة بلغة الجافا 1 MaZeN لغات البرمجة 2 18-07-2007 06:07 PM
تعلم البرمجة بلغة الجافا 2 MaZeN لغات البرمجة 3 13-07-2007 08:01 PM

   
Preview on Feedage: %D9%84%D8%A7%D9%8A%D9%81-%D9%86%D8%AA Add to My Yahoo! لايف نت Add to Google! لايف نت Add to AOL! لايف نت Add to MSN لايف نت  

Blog

لايف نت

lifenet-sy.org خريطة لايف نت lifenetextra.com أعضاء
LifeNet English أكواد ألوان SiteMap أعلن هنا Pagerank تصميم ثيمات