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

منتديات برامج نت

برامج كمبيوتر و انترنت لغات برمجه و تطوير مواقع قسم خاص بالتصميم و الجرافيك
 
الرئيسيةPortalأحدث الصورالتسجيلدوره فى لغه الجافا I_icon_mini_registerدخول
اهلاوسهلا بكم في منتديات برامج نت ارجو من جميع الزوار التسجيل مع تحيات $الادارة$

 

 دوره فى لغه الجافا

اذهب الى الأسفل 
كاتب الموضوعرسالة
ملك الظلام

المشرف العام...}


ملك الظلام



دوره فى لغه الجافا Empty
مُساهمةموضوع: دوره فى لغه الجافا   دوره فى لغه الجافا Icon_minitimeالسبت أبريل 18, 2009 5:57 am

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


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

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

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

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

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

المشرف العام...}


ملك الظلام



دوره فى لغه الجافا Empty
مُساهمةموضوع: رد: دوره فى لغه الجافا   دوره فى لغه الجافا Icon_minitimeالسبت أبريل 18, 2009 6:07 am

السلام عليكم ورحمة الله وبركاته..


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

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

البرنامج --------> المفسّر/المترجم --------> الآلة التخيلية --------> لغة الآلة
نلاحظ الآن أن المترجم ابتعد عن لغة الآلة، و أصبح يترجم بناءً على آلة تخيلية.
ما الذي نستفيده؟ البرنامج سيعمل على أي جهاز عليه الآلة التخيلية مهما اختلف نظام التشغيل دون الحاجة لإعادة الترجمة :-)
من لغات الجيل الرابع: C++ and Java و Oracle و Visual Basic و غيرها، وهذه اللغات تعرف بأنها لغات تعتمد على البرمجة الشيئية.
فما هي البرمجة الشيئية؟
هذا هو موضوع الدرس القادم ان شاء الله
وفوق كل ذي علم عليم
الرجوع الى أعلى الصفحة اذهب الى الأسفل
ملك الظلام

المشرف العام...}


ملك الظلام



دوره فى لغه الجافا Empty
مُساهمةموضوع: رد: دوره فى لغه الجافا   دوره فى لغه الجافا Icon_minitimeالسبت أبريل 18, 2009 6:08 am

السلام عليكم ورحمة الله وبركاته..

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

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

البرنامج --------> المفسّر/المترجم --------> الآلة التخيلية --------> لغة الآلة
نلاحظ الآن أن المترجم ابتعد عن لغة الآلة، و أصبح يترجم بناءً على آلة تخيلية.
ما الذي نستفيده؟ البرنامج سيعمل على أي جهاز عليه الآلة التخيلية مهما اختلف نظام التشغيل دون الحاجة لإعادة الترجمة :-)
من لغات الجيل الرابع: C++ and Java و Oracle و Visual Basic و غيرها، وهذه اللغات تعرف بأنها لغات تعتمد على البرمجة الشيئية.
فما هي البرمجة الشيئية؟
هذا هو موضوع الدرس القادم ان شاء الله
وفوق كل ذي علم عليم
الرجوع الى أعلى الصفحة اذهب الى الأسفل
ملك الظلام

المشرف العام...}


ملك الظلام



دوره فى لغه الجافا Empty
مُساهمةموضوع: رد: دوره فى لغه الجافا   دوره فى لغه الجافا Icon_minitimeالسبت أبريل 18, 2009 6:10 am

?????? ????? ????? ???? ???????..

?? ??? ????? ??????? ??????? ???? ?? ??????? ????????? ??????? ?? ???? ?????? ??? ??????? ????????? ??????? ???????? ?????????
????? ???? ?? ?????? ???????? :-)
????? ?? ????? ????? ???? ?? ??? ???????? ? ???????????. ? ???? ?? ??? ?????? ???? ??????? ??? ??????????. ? ?????? ?? ???? ????? ??? ??? ?? C? ? ?? ??? ???????? ??? ?????? ???????? ???????? ?????????? ??????: (???? ??????)
????? ????? ?? ????????:
- ???? ???????. - ???? ?????????? ???? ?????? ?? ????? - ?????? ?????? ?????? ??????? - ???? ?????? - ???? ?????????? - ????? ??????
????? ???? ??? ???? ?????? ???????? ???? ???????? ??? ???? ????? ??????? ??????. ? ???? ???? ???? ????? ?? ?? ??? ?? ??? ???? ? ???? ???????? ? ????? ?????? ?? ???? ????? ?????? ??? ????? ????? ???????? ?????? ???? ???? (Recompiling).

???? ?????? ?? ????
?????? ?? ??????? ????????? ????? ??? ????? ???????? ? ?????? ??????? ?? ??? ??????? ????? ???????? ? ???? ?????? ???? ????.
??????? ????????? ???? ????????? ? ???? ????? ??????? ?? ????????.
????? ???? ????? ?? ???? ???????? ???? ?? ???? ???????? ??????? (??? ?????? ?????)
????? ?????? ??? ???? ? ??? ??? ????? ????? ??????: (?? ??????? ?? ??? ???????)
????? ?????:
??????
? ????? ???:
??????????
????? ?????: ??? ?????? ??? ?????? ?? ????? ?? ???????? ?? ?????? ?? ????? ?????. ?????? ????: ??? ????? ???????? ?????
????? ??? :-)
1) ??? ?? ???? ?????? ??????? ?? ???????? ????? ???? ????????? ??? ?? ????? ??? ??????. ???? ?? ???? ?? ???? ??? ?? ????? ????!
????? ?????? ?? ??? (??????)? ?? ?????? ?????? ?? ?????
??????
??????:
?? ???
?? ??? ????
?? ???? (???? ?? ? ??? ????)
???????:
???? ?? ?? ??? ???? ???? ????? ???? ????
?????? ?? ?????
???? ?? ???? ???? ?? ???? (?? ??????)
???? ??????????? ? ???? ?????
??????????
??????:
?? ???
?? ??? ????
?? ???? (???? ?? ? ??? ????)
???????:
???? ????? ?????
????? ?? ??? ????
???? ?? ???? ???? ?? ????
???? ? ??? ?? ????? ?????? ???? ????? ??? ???????? ? ????????????? ?????? ?????? ???????:
????? ???? ??? ???? ?????? ???????? ??? ???? (? ????? ???? ???????? ???? ?????? ?? ???????) ? ???? ?????? ???????? ??? ????????. ? ??? ????? ??????? ???????.
???? ???? ?? ???? ???????! ??? ???? ?????.. ????? ????? ??? ???????? ?? ?????? ????? ??????? ??? ???? ?? ????? ??????? ? ?? ??? ???? ?? ????? ??????????? ???? ?????? ??? ??? ??? ???? ???? ??? ??????? ? ??:
???????
? ?? ??????? ?????? ?? ???? ??? ?? ??? ???????? ? ????? ???? ? ??? ?? ??? ??????????? ? ?????? ?????!
???? ??????? ????? ????? ?? ?? ???? ????????
???? ???? ????? ??? ??? ??????? ? ??? ??? ??????? ? ??? ?????!
????? ?? ?? ???? ???? ??????? ???? ????? ???? ???? ? ?? (???????) ??? ??????? ?? ?????? ?? ??? ?????? ?????? ???? ???? ????? ?? ?? ???? ????. ???? ??????? ????? ??? ?????:
???????
??????:
????????: ??? ????
??? ????????
???????:
???? ?? ??? ????
????? ?? ??? ????
??? ????? ??????? ??? ???????
???? ?? ??? ?? ??? ??????? ? ????? ????? ???????? ???? ???? ???? ???? ? ???????? ???? ?????? ? ??? ????????? ? ????? ??????? ???? ?? ????? ??? ????!
???? ?????? ?? ????
?????? ?? ??????? ???????? ???????? ??????? ????? ?? ????? ? ?????. ? ?? ????? ???????? ??? ??? ???? ????? ??? ????? ???? ???????? ??? ??????? ?? ????? ?????? ?? ???????? ???? ?? ????.
?????:
?? ???? ????? ???? ??????? ?? ???? ?????? ??????? ?????? ? ?? ???? ?????????? ??????? ?? ???? ?? ???? ?? ?? ?????? ????? ?????? ??? ??? ??????? ?????? ??????? ? ??????? ???? ????? ?? ????? ??????.
???? ???????? ?????? ???????? ??????? ?????? ?? ???? ?? ???? ? ?? ??? ????? ?????? ?? ??????? ??????. ? ??? ???? ?? ????? ?? ?? ?????? ??? ????? ??????? (Recompiling) ??? ??? ??? ????? ??? ????.
??? ??? ????? ??? ???????? ??? ??????? ??? ?? ????? ????? ?????? ?? ??? ????
??????
?/ ?? ?? ??????? ????????
????? ??? ??????
pramjnet@hotmail.com
? ??? ?? ?? ??? ????
الرجوع الى أعلى الصفحة اذهب الى الأسفل
ملك الظلام

المشرف العام...}


ملك الظلام



دوره فى لغه الجافا Empty
مُساهمةموضوع: رد: دوره فى لغه الجافا   دوره فى لغه الجافا Icon_minitimeالسبت أبريل 18, 2009 6:10 am

السلام عليكم ورحمة الله وبركاته..

دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceأولاً:دوره فى لغه الجافا Title_left
قبل أن نبدا فعلياً في كتابة برنامج جافا يجب تجهيز بيئة العمل :-) المطلوب منكم الذهاب إلى هذا الموقع:
http://java.sun.com/
في هذه الصفحة و من القائمة يرجى اختيار Java 2 SDK, Standered Edition
وقم بتنزيل آخر إصدار، قد يكون الملف ذا حجم كبير نسبياً، فإذا كانت الإنترنت عندك كثيرة الانقطاع يستحسن أن تقوموا بتنزيل البرنامج على مراحل كما هو موضّح إذا تتبعت الإرشادات في موقع التنزيل :-)
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceثانياً:دوره فى لغه الجافا Title_left
بعد تنزيل البرنامج يجب أن يتم تحميله، هذا الملف سيخلق حسب الDefault أن الآلة التخيّلة قد أخذت موضعها في:
c:jdk1.3
و يمكنك التأكّد من المكان المضبوط بعرض محتويات القرص الصلب.
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceثالثاً:دوره فى لغه الجافا Title_left
يجب كتابة هذين الأمرين في الدوس كلّما أردت تشغيل أو ترجمة برنامج جافا، لذا أنصح بكتابتها في ملف ال Autoexec.bat في الوندوزxx أو في ال system parameters في الوندوز NT و 2000 هذين السطرين مهمّين للغايةو المفروض أن يتم كتابة السطرين كما هما في الدوس و بدون أي فراغات spaces. و لا تنسوا أن تضعوا (;.) في بداية تعريف ال classpath هكذا:
دوره فى لغه الجافا L05_00
الآن البيئة صارت للتشغيل. و للتأكّد من ذلك: اذهب إلى الدوس و اكتب الأمر التالي:
java -version
المفروض ان كان التثبيت و ما تلاه تم بطريقة صحيحة أن تظهر هذه النتيجة:
دوره فى لغه الجافا L05_01
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceرابعاً:دوره فى لغه الجافا Title_left
هذه الخطوة ليست اجبارية. و لكنها لتسهيل التعليم. فعادة يستخدم مبرمجو الجافا ال Notepad الموجودة في نظام الوندوز. و لكن توجد بعض المحررات الخاصة بالمبرمجين والتي تقوم بتلوين أوامر اللغات المختلفة.
من المحررات الشهيرة TextPad الذي يمكن تنزيله من موقع: http://www.textpad.com
و من مميزات هذا المحرر أنه يحتوي على قائمة قابلة للتعديل، يمكن من خلالها تشغيل المترجم و المشغّل دون الحاجة للذهاب إلى محرّك الدوس.
بهذا نكون قد استكملنا مكوّنات بيئة التشغيل التي سنحتاج لها للبدء بكتابة برامج الجافا الخطيرة التي سنعملها سوياً :-)
إلى اللقاء مع الدرس القادم.
وفوق كل ذي علم عليم
الرجوع الى أعلى الصفحة اذهب الى الأسفل
ملك الظلام

المشرف العام...}


ملك الظلام



دوره فى لغه الجافا Empty
مُساهمةموضوع: رد: دوره فى لغه الجافا   دوره فى لغه الجافا Icon_minitimeالسبت أبريل 18, 2009 6:13 am

السلام عليكم ورحمة الله وبركاته..

في هذا الدرس سنكتب البرنامج و نشغله ونشرحه

دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceالبرنامج الأوّلدوره فى لغه الجافا Title_left
جرت العادة أن يقوم المبرمجون عند دراسة أي لغة فإنّهم يكتبون برنامج يقوم بعرض كلمتي (Hello World) و سنقوم بالمثل:
نفتح ال notepad أو ال textpad و نكتب التالي:
دوره فى لغه الجافا L06_01
أقترح بعد أن نكتب البرنامج أن تحفظه في حافظة تقوم بتسميتها myjava تحت المشغّل C مباشرة.
و يجب أن تحفظه بهذا الاسم: HelloWorld.java و لاحظ الأحرف يجب أن تكون بنفس الصفة يعني هذا الاسم: Helloworld لن يقوم بالمطلوب.
و لأننا نكتب بلغة الجافا، فلابد أن يكون ملحق. الآن جاء وقت الاختبار الصعب (فهل سننجح في تشغيل البرنامج؟)
عبر ال Dos prompt أو ال Command نذهب إلى الحافظة myjava من ال :C
و للتأكّد نقوم بعرض محتويات الحافظة هكذا:
دوره فى لغه الجافا L06_02
الآن سنقوم بعمل الترجمة لهذا الملف. و للتذكير فالترجمة هنا تعني أننا سنحوّل الملف من لغة نفهمها نحن إلى لغة تفهمها لغة الآلة التخيليّة، تابع الخطوات على الصورة التالية:
دوره فى لغه الجافا L06_03
يقوم أمر javac باستدعاء المترجم الذي يقوم بترجمة الملف الذي اسمه يلي أمر javac.
المفروض إذا قمت بعمل كل شي تمام فإن النتيجة ستكون ظهور علامة الدوس مرّة أخرى كما في الشكل السابق :-)
أتعرف الآن ماذا ستجد لو قمت بعرض محتويات الحافظة؟ فلنجرّب:
دوره فى لغه الجافا L06_04
هل رأيت؟ لا تخف. فهذا ليس سحراً، نعم لقد ظهر ملف جديد في الحافظة و هو HelloWorld.class نفس اسم الملف السابق و لكن بملحق (extension) جديد :-) و هو class. لقد قانت الآلة التخيلية بانشاء هذا الملف القابل للتشغيل.
الآن جاء دور التشغيل:
دوره فى لغه الجافا L06_05
تلاحظ أننا حين كتبنا اسم الملف كتبناه بدون ملحق ذلك أنّه لاداعي له. لأن الآلة التخيلية لا تقوم بتشغيل أي ملف من نوع آخر. هي مخصصة لتشخيل الملفات من نوع class فقط لا غير. لذا لا داعى (و لا يجب) أن يتضمن اسم الملف المشغّل الملحق class معه.
و هكذا تشاهد في الشكل السابق كلمة Hello World الرائعة و هي تزيّن الشاشة دليل عمل البرنامج بنجاح.
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceأخطاء شائعةدوره فى لغه الجافا Title_left
بعد أن قمت بنسخ البرنامج المكتوب كما هو (و الذي تعمدت أن يكون كصورة حتى تكتبه بنفسك :-))
و قمت بمحاولة ترجمته، قد تظهر لك هذه الأخطاء:
1)
دوره فى لغه الجافا L06_06

هذا الخطأ يعني أنك أخطأت في اسم الملف الذي تحاول عمل ترجمه له أي أنك تترجم ملفاً غير موجود.
2)
دوره فى لغه الجافا L06_07

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

قد يحدث هذا الخطأ. و هو خطأ شائع و محيّر :-)
فكما ترون عند الرقم (1) الclass الذي أحاول تشغيله موجود، و قمت بكتابة اسمه بالشكل الصحيح كما في الرقم (2) و مع ذلك يقول انه لا يجد الكلاس كما واضح في الرقم (3).
و هذا يعني أنّك نسيت اضافة (;.) في ال classpath. المسألة بسيطة قم بعمل التالي و تشغيل الملف مرة أخرى:
دوره فى لغه الجافا L06_09
الشرح
دوره فى لغه الجافا Spaceالسطر الأوّل:دوره فى لغه الجافا Title_left
دوره فى لغه الجافا L07_line1
السطر الأول يحتوي على تعريف الفئة (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) سيبدأ عند هذه النقطة. و بما أن لكل شيء بداية و نهاية، فإننا نتوقّع أن يتوقّف تعريف البرنامج عند العلامة المقابلة ({) و هذا يعني أن تعريف الفئات يكون دائماً محصوراً بين رمزي المجموعة :-)
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceالسطر الثاني:دوره فى لغه الجافا Title_left
دوره فى لغه الجافا L07_line2
السطر الثاني يأتي لتعريف وظيفة(method) من الوظائف. سنتعرّف على الوظائف بشكل مفصّل في درس قادم ان شاء الله. لكن ما يهمّنا الآن هو الوظيفة الموجودة بين أيدينا.
هذه الوظيفة هي ذات نوعية خاصة، انها ال main method و هي نقطة البداية لأي برنامج يتم تشغيله من مشغّل الدوس (Dos prompt).
لنعد بذاكرتنا قليلاً إلى الوراء، هل تذكرون ما قلناه حين تحدّثنا في مقارنة بين البرمجة بالطريقة التقليدية (Proccess Oriented) و البرمجة بالطريقة بالكائنات الشيئية؟ لقد ذكرنا شيئاً عن نقطة البداية. ففي البرمجة بالكائنات الشيئية نضع نقطة البداية، ثم يقوم أعضاء الفئات المختلفة بتقاذف الأحداث فيما بينها.
و لكن لابد من نقطة بداية. و في حالتنا نقطة البداية هي هذا السطر و ما يعقبه من أوامر محصورة بين قوسي المجموعة :-)
إن أي برنامج جافا، قد يتكون من عدة ملفات (بحيث يكون كل ملف محتوياً لى تعريف فئة)، و يجب أن تحتوي فئة واحدة عاى نقطة البداية، التي تتمثّل في وظيفة main.
وظيفة ال main method هي في الحقيقة نقطة البداية التي تتحدّث عنها الآلة التخيلية للجافا، في حالة قمنا بتشغيل أي ملف جافا من محرك الدوس. و هي في الواقع فئة تتبع للفئة بشكل عام و لا تخص الأعضاء المنتمين لهذه الفئة.
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceالسطر الثالث:دوره فى لغه الجافا Title_left
دوره فى لغه الجافا L07_line3
إن هذا السطر في الواقع يقوم باستدعاء و ظيفة println التي تقوم بكتابة ما يمرر لها في الأقواس (و في حالتنا هو Hello World). ما سبق هذه الوظيفة هو عنوان العضو و الفئة التي توجد فيها هذه الوظيفة، حتى تقوم الآلة التخيلية بتشغيلها بشكل صحيح.
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceالسطر الرابع والخامس:دوره فى لغه الجافا Title_left
دوره فى لغه الجافا L07_braces
نقوم هنا بغلق الأقواس، و نلاحظ أن تعريف الفئة قد تضمّن تعريف الوظيفة main و نلاحظ أننا نغلق القوس الداخلي أولاً ثم الخارجي و هكذا.
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceملاحظات:دوره فى لغه الجافا Title_left

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

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

المشرف العام...}


ملك الظلام



دوره فى لغه الجافا Empty
مُساهمةموضوع: رد: دوره فى لغه الجافا   دوره فى لغه الجافا Icon_minitimeالسبت أبريل 18, 2009 3:01 pm

السلام عليكم ورحمة الله وبركاته..

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

إنك في هذه الحالة ستكتب اسمك بجانب "الاسم"، و ستكتب عنوانك بجانب "العنوان". و لو أراد الله سبحانه و تعالى أن يفوز شخص غيرك فإن الاسم الذي سيكتب في خانة "الاسم" سيكون مختلفاً بالتأكيد. و هذا بالضبط هو المتغيّر. فخانة الاسم تعتبر متغيّر، قد يأخذ قيمة اسمك أو اسمي أو اسم أي شخص آخر.
و لكن لنكن واقعيين، هل من الممكن أن يأتي شخص و يكتب في خانة الاسم:"1234567"؟ لا أظن، فهمها كان أبوه عاشقاً للارقام، فلن يسمي ابنه بالأرقام Wink من جهة أخرى فلن يكتب شخص مهما بلغت غرابة أطواره كلمة "الشمس المشرقة" في خانة رقم الهاتف.
إذا المتغير قد يأخذ قيماً مختلفة ذات نوع محدد. فهناك متغيرات تأخذ قيماً حرفية مكونة من أحرف فقط مثل خنة الاسم. و هاك متغيرات رقمية مكونة من أرقام فقط مثل خانة رقم الهاتف.
في لغة الجافا توجد أنواع من المتغيرات، وفي هذا الدرس سنلقي الضوء على بعضها:
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceالمتغيرات الرقمية (Numaric Data Types):دوره فى لغه الجافا Title_left
في لغة الجافا تود لدينا 6 أنواع للمتغيرات الرقمية، نستطيع تقسيمها إلى قسمين كبيرين:
المتغيرات الصحيحة(Integral Variables): و تتكون من 4 أنواع:

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


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

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


دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceالمتغيرات النصية (Textual Data Types):دوره فى لغه الجافا Title_left
تضم نوع واحد فقط:
char: و يخزّن في حجم من الذاكرة مقداره 2 بايت. و هذا المتغيّر يخزّن حرفاً واحداً فقط. و يجدر بي أن أوضح هنا أن أي زر يمكن أن تضغط عليه في الكيبورد هو في الواقع char. و بالمناسبة فإن الرقم 1 يختلف كثيراً عن الحرف '1' و يكتب هكذا محصوراً بين علامتي تنصيص مفردتين. و الثاني '1' لا يمكن اجراء عمليات حسابية عليه لأنه مخزّن على أساس انه متغير نصّي. و لكن 1 لو تم تخزينه في متغير رقمي فيمكن بالطبع اجراء عمليات حسابية عليه.
من أمثلة الأرقام التي يمكن تخزينها في سلسلة من ال char : رقم الهاتف، لأنه لا فائدة من اجراء عملية حسابية على رقم تيلفون.
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceالمتغيرات المنطقية دوره فى لغه الجافا Title_left
و تضم نوع واحد فقط:
boolean: و هذا النوع يخزّن نوعاً مميزاً من القيم. انه يخزّن قيمة من اثنتين فقط هما: true, false. و هذا النوع من المتغيرات يستخدم في المقارنات المنطقية التي سيأتي تفصيلها فيما بعد ان شاء الله.
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceالمتغيرات التي يعرفها المبرمج(Aggregate Data Types): دوره فى لغه الجافا Title_left
و هي المتغيرات التي يقوم المبرمج بتعريف نوعها. مثل ال classes لتي نقوم بكتابتها في ملفات و برامج الجافا. ملخص:

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

أرجو أن يكون الدرس واضحاً.
وفوق كل ذي علم عليم
الرجوع الى أعلى الصفحة اذهب الى الأسفل
ملك الظلام

المشرف العام...}


ملك الظلام



دوره فى لغه الجافا Empty
مُساهمةموضوع: رد: دوره فى لغه الجافا   دوره فى لغه الجافا Icon_minitimeالسبت أبريل 18, 2009 3:03 pm

السلام عليكم ورحمة الله وبركاته..

تحدثنا في الدرس السابق عن المتغيرات و انواعها في لغة الجافا. و في درس اليوم سنتعلم كيف نشهرها (نعرفها) أو نقوم بمساواتها و إعطائها قيماً.
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceاشهار المتغيرات:دوره فى لغه الجافا Title_left
ان اشهار المتغيرات يتم في الجافا على هذه الصيغة:
type identifier;
لنفرض مثلاً اننا نريد اشهار متغير من نوع متغير صحيح int
int x;
في السطر السابق يمثّل (x) اسم لمتغير من نوع رقم صحيح يتم تخزينه في 4 بايت. و يمكن اعطاؤه أي قيمة مثلاُ:
x=10;
و هكذا نكون أعطينا المتغير (x) القيمة 10. و بالمثل نستطيع اشهار متغيرات من أي نوع آخر.
و توفر الجافا اعطاء المتغيرات قيم مبدئية عند اشهارها، مثلاً.. نستطيع أن نكتب في برنامجنا:
double x=14.3;
char ch='m';
اننا في ما سبق، قد قمنا باشهار متغيرين الأول من نوع double و قد أعطيناه قيمة مبدئية هي: 14.3، اما المتغير الثاني فهو متغير نصي من نوع char و أعطيناه قيمة مبدئية هي الحرف 'm'.
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceمثال تطبيقي على اشهار واعطاء قيم للمتغيرات في الجافا:دوره فى لغه الجافا Title_left
في الصورة التالية نرى برنامج مكتوب بلغة الجافا. و قد قمنا فيه بانشاء بعض المتغيرات و من ثم طباعتها.
دوره فى لغه الجافا L11_firstWithError
في السطر السابع (و يقع في المنطقة الوردية) مثلاُ قمنا بانشاء متغير من نوع short و أعطيناه قيمة مبدئية هي 200. و نلاحظ ان جميع جمل الجافا تنتهي بـ (Wink.
بينما في السطر السادس قمنا بانشاء متغير من نوع byte و لم نعطه اي قيمة مبدئية.
عند تشغيل البرنامج السابق ستواجه المشكلة التالية:
دوره فى لغه الجافا L11_noInitial
ان هذه المشكلة ظهرت تحديداً عندما حاولنا طباعة المتغيرين b وnumber. لاحظ انها لم تظهر عندما قمنا باشهارهما. و لكنها ظهرت عند محاولتنا لاستخدامهما. هل تستطيع ان تعطي سبباً لذلك؟
في الواقع ان السبب هو اننا لم نعطهما قيمة مبدئية! ثم حاولنا كباعتهما. الآن ما الذي نحاول فعله؟ نطبع قيمة لا نعرفها! لذا سيتوقف مترجم الجافا و يعطيك الخطأ السابق.
كيف نعالج المشكلة؟ نعطيهما قيماً قبل أن نحاول طباعتهما.
دوره فى لغه الجافا L11_firstCorrect
نلاحظ في هذه الصورة أننا قمنا باعطاء قيماً للمتغيرات التي اشهرناها عن طريق المساواة في حالة المتغير b و عن طريق وضع ناتج الطرح في المتغير number. و هكذا حللنا المشكلة.
يمكننا أيضاً ترتيب الطباعة في الأسطر من 28 إلى 35.
لنأخذ السطر الـ 30 مثلاُ
System.out.println("number = " + number);
سبق و شرحنا طريقة الطباعة في الجافا. في هذا السطر نقوم في الواقع بطباعة هذه الجملة:
"number = "
ثم قمنا بعلامة زائد التي تعني اننا سنطبع شيئاً آخر إلى جانبها. ثم وضعنا اسم المتغير number و هذا يعني انه سيقوم بطباعة قيمة المتغير number.
و هنا أحب أن أضع ما نفعله في الدوس:
دوره فى لغه الجافا L11_dos1
لاحظ أنني عندما حاولت تشغيل البرنامج لأول مرة لم يقبل ان يقوم بترجمة البرنامج، و قد تصادقك هذه المشكلة، لذا وضعت حلها في السطرين الأصفرين في الصورة السابقة.
و في آخر الصورة ترى ان جمل الطباعة في البرنامج قد قامت بعملها الجيّد.
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceمثال تطبيقي على استخدام المتغيرات في الجافا:دوره فى لغه الجافا Title_left
هنا لدينا برنامج يقوم بانشاء ثلاثة متغيرات من نوع عدد صحيح int. و البرنامج يقوم باعطاء المتغيرين الأولين x , y قيم أولية. ثم يضع ناتج الجمع في المتغير الثالث z.
دوره فى لغه الجافا L11_second
لاحظ جملة الطباعة في آخر البرنامج.. مرتبة جداً، أليس كذلك؟
انظروا الى النتيجة:
دوره فى لغه الجافا L11_dos2
أرجو أن يكون الدرس واضحاً.
وفوق كل ذي علم عليم
الرجوع الى أعلى الصفحة اذهب الى الأسفل
ملك الظلام

المشرف العام...}


ملك الظلام



دوره فى لغه الجافا Empty
مُساهمةموضوع: رد: دوره فى لغه الجافا   دوره فى لغه الجافا Icon_minitimeالسبت أبريل 18, 2009 3:04 pm

السلام عليكم ورحمة الله وبركاته..

درسنا اليوم سيكون تعريف فئة التاريخ، و سنلقي فيه بعض الضوء على الوظائف في الجافا، ان الدرس سيكون طويلاً نوعاً ما، و لكنه يضع الأسس المهمة لكل ما سيلي من برامج ان شاء الله.
لقد اخترت لكم فئة تعتبر المثال المفضّل عند معظم المصممين لوضوحها و سهولة استخدامها. لنضع التصميم المبدئي لهذه الفئة مع بعض :-)
Date
الصفات
رقم يمثل اليوم
رقم يمثل الشهر
رقم يمثل السنة
لنقم بكتابة ذلك بالجافا. لنتوقف و نفكّر قليلاً. ما الذي نقوم بتعريفه؟ اننا نقوم بتعريف فئة اسمها Date، اذاً سنكتب التالي:
دوره فى لغه الجافا L12_Date_0
الخطوة التالية هي تعريف مميزات أو صفات هذه الفئة. نلاحظ ف يالجدول السابق، أننا وضعنا ثلاثة أرقام بحيث يمثّل أحدها اليوم و الثاني الشهر و الثالث السنة.
لذا سنضع ثلاثة متغيرات رقمية (في الوقت الحاضر، و قد نغيرها فيما بعد) لكل صفة من الصفات، هكذا:
دوره فى لغه الجافا L12_Date_1
ان الأعضاء من هذه الفئة لا يمكنهم التصرف أبداً. اننا حتى لا نستطيع ان نستعلم عن التاريخ، لذا سنقوم بتعريف بعض القدرات لهذه الفئة. و القدرات بلغة البرمجة هي الوظائف (Method) التي نعرفها في أي فئة. ما رأيكم لو نتوقف هنا قليلاً، و لنضع الوظائف التي نريدها في فئة التاريخ (Date) موضع درسنا.
Date
الصفاتالوظائف
رقم يمثل اليوم
رقم يمثل الشهر
رقم يمثل السنة
امكانية الاستعلام عن التاريخ
امكانية وضع التاريخ
الوظيفة هي مجموعة من الأوامر المكتوبة بلغة الجافا، تقوم بمهمة محددة. لنقم بوضع الامكانية الأولى و هي الاستعلام عن التاريخ، سيظهر البرنامج كما يلي:
دوره فى لغه الجافا L12_Date_2
سنتوقف هنا قليلاً، لننظر للكود الذي تركته في المساحة البيضاء. فقد قمنا فيه بتعريف الوظيفة. في السطر الأول من الوظيفة نرى التالي:
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.
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceملخص الوظيفة السابقةدوره فى لغه الجافا Title_left
اننا في الوظيفة السابقة قمنا بتعريف امكانية من امكانيات أي عضو من فئة التاريخ، و هي اعطاء قيمة التاريخ. و هو يعطيها في شكل نص كلمي String.
ما رأيكم لو قمنا بتعريف الوظيفة الثانية معاً أيضاً و هي تحديد التاريخ.
سنكتبها في الجافا بهذا الشكل:
دوره فى لغه الجافا L12_Date_3
في الصورة السابقة نلاحظ اننا في تعريفنا لوظيفة تحديد التاريخ، قد قمنا بتعريفها بطريقة تختلف قليلاً عن وظيفة الاستعلام. ولكن المبدأ هو نفسه في الحالتين.
لنتابع معاً، السطر التالي:
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.
عليك ان تقوم بتجهيز كود هذه الفئة كما هو، و تقوم بكتابته و عمل ترجمة له حيث اننا سنقوم في الدرس القادم باستخدام هذه الفئة ان شاء الله، و أتصور أن الأمور غير الواضحة ستتضح.
وفوق كل ذي علم عليم
الرجوع الى أعلى الصفحة اذهب الى الأسفل
ملك الظلام

المشرف العام...}


ملك الظلام



دوره فى لغه الجافا Empty
مُساهمةموضوع: رد: دوره فى لغه الجافا   دوره فى لغه الجافا Icon_minitimeالأحد أبريل 19, 2009 3:39 am

لسلام عليكم ورحمة الله وبركاته..

في الدرس السابق قمنا بتصميم فئة Date ووضعنا فيها ثلاث صفات تمثل اليوم و الشهر و السنة. و قمنا بتصميم وظيفتين احداهما تعطينا قيمة التاريخ و الأخرى لوضع و تحديد التاريخ.
في درس اليوم سنقوم بتصميم فئة تستخدم الـ Date هكذا:
دوره فى لغه الجافا L13_useDate_1
في البرنامج السابق في السطر الخامس قمنا باعلان متغير من نوع Date و أسميناه birthday، اذاً نحن نحتاج الآن إلى عضو من فئة Date التي كتبناها في الدرس السابق.
كي نعرف المتغير من نوع Date نكتب التالي:
Date birthDate;
لكي نفهم الجملة السابقة، علينا أن ننظر إلى الصورة التالية. و هي تمثّل جزء من الذاكرة. نريد ان نحجزه للمتغير birthDate من نوع Date.
دوره فى لغه الجافا L13_mem_0
كما هو موضّح في الصورة ان قيمة المتغير في الذاكرة تمثلها علامات استفهام. ذلك ان المتغير birthDate ليس كائن في حد ذاته. بل هو متغير لعنوان الكائن.
كي تتم ترجمة الجملة السابقة بدون مشاكل يجب أن يكون ملف Date.class موجوداً في نفس الحافظة. (في المستقبل سنتعلم انشاء الله كيف نحدد أماكن الفئات). و لكن في الوضع الحالي سنكتفي بوضع هذا الملف مع الملف السابق في نفس الحافظة.
الآن لكي ننشئ الكائن نفسه علينا أن نستخدم الطريقة التالية:
دوره فى لغه الجافا L13_useDate_2
نلاحظ في السطر السابع من البرنامج الموضح في الصورة السابقة هذه الجملة:
birthDate=new Date();
هممم أعتقد أن لديك الآن العديد من الأسئلة، أليس كذلك؟
اذاً دعنا نكمل الشرح اليوم بطريقة الأسئلة و الأجوبة Smile

مالفرق بين المتغير من نوع Date و المتغير من أي نوع آخر ممن ألقينا عليه الضوء في درس المتغيرات؟
ان المتغير من نوع Date هو من فئة قام المبرمج بتعريفها. أي انه متغير يمثّل عضواً من فئة. اما المتغيرات سابقة الذكر مثل int و char و boolean فهم متغيرون لا ينتمون فعلياً لفئة محددة، و لكنهم يمثلون أنواع المتغيرات البسيطة. ان المتغير Date يعتبر أكثر تعقيداً نوعاً ما.

لم قمنا باستخدام الكلمة new؟ و ما الفائدة من السطر السابع؟
سبق و ضمن شرحنا للسطر الخامس من نفس البرنامج أن اوضحنا ان اعلان المتغيرات من نوع الفئات أو ما نطلق عليهم Aggregate Data Types هي في الواقع اعلان النيّة عن اعلان المتغير. و لكن ما حدث في السطر السابع، ان المترجم قام بتهيئة جميع أجزاء التاريخ الفعلي، و أنشأ كائناً من نوع Date ثم وضع عنوان الذاكرة لهذا الكائن في المتغير birthDate.

لم أفهم، أرجو التوضيح أكثر في السؤال السابق؟
دعونا نستخدم الرسوم التوضيحية، لمعرفة ما تم في هذه الجملة:
Date birthDate=new Date();
ان القسم الأول من الجملة (أو في برنامجنا ما هو موجود في السطر الخامس) يمكن تمثيله بالصورة التالية:
دوره فى لغه الجافا L13_mem_1

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

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

ان علامة المساواة في هذه الجملة تعني ان عنوان الكائن الذي انشأناه في الذاكرة سيتم وضعه في المتغير birthDate. و هذه هي طريقة اعطاء المتغير من نوع Aggregate Data Type القيمة المبدئية.

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

المشرف العام...}


ملك الظلام



دوره فى لغه الجافا Empty
مُساهمةموضوع: رد: دوره فى لغه الجافا   دوره فى لغه الجافا Icon_minitimeالأحد أبريل 19, 2009 3:40 am

السلام عليكم ورحمة الله وبركاته..

في الدرس السابق قمنا بانشاء متغير من نوع Date في هذا البرنامج:
دوره فى لغه الجافا L13_useDate_2
و اليوم سنقوم باجراء التغييرات التالية:
دوره فى لغه الجافا L14_useDate_3
لنتابع الخطوات التي قمنا بها في الكود السابق:
Date birthDate = new Date();
هذه الخطوة سبق و شرحنا الهدف منها في الدرس السابق. و هي باختصار تعني انشاء متغير يحفظ في داخلة قيم خاصة بكائن من نوع Date.
والآن، بما أن birthDate هو كائن من نوع Date فانه يملك كل ما يملكه أي كائن (عضو-object) ينتمي لهذه الفئة. و للتذكير سأضع برنامج فئة الـ Date هنا:
دوره فى لغه الجافا L14_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 قيماً أخرى، و هي التي ستظهر عند تشغيل البرنامج، هكذا:
دوره فى لغه الجافا L14_final
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceملاحظة:دوره فى لغه الجافا Title_left
اننا في هذا الدرس قمنا بانشاء كائن باسم birthDate من نوع Date و استخدمنا وظائفه المختلفة. و لأننا كتبنا فئة (class) الـ Date بشكل بسيط، فإن هذا يجعلنا نستطيع في أي لحظة أن نطبع أو نظهر القيم المختلفة للفئة، بمعنى. اننا نستطيع في أي لحظة في برنامجنا اليوم ان نضع هذه الجملة:
birthDate.day=20;
و سترى ان البرنامج سيعمل بشكل طبيعي. اذا قمت بطباعة الوظيفة التي تستعلم عن قيمة التاريخ للكائن birthDate ستجد انه يطبع لك القيمة 20 في خانة الـ day. لم لا تجرب بنفسك، لترى النتيجة؟
أرجو ان يكون الدرس واضحاً
وفوق كل ذي علم عليم
الرجوع الى أعلى الصفحة اذهب الى الأسفل
ملك الظلام

المشرف العام...}


ملك الظلام



دوره فى لغه الجافا Empty
مُساهمةموضوع: رد: دوره فى لغه الجافا   دوره فى لغه الجافا Icon_minitimeالأحد أبريل 19, 2009 3:42 am

السلام عليكم ورحمة الله وبركاته..


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

دوره فى لغه الجافا L15_img01

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

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

دوره فى لغه الجافا L15_img02

فنلاحظ الشكل المجاور قليلاً.. ستجدون النقطة الحمراء و الممثلة بالنقطة P1 تعكس اثنين من الاحداثيات. أحدهما ينعكس على المحور (س) والآخر ينعكس على المحور (ص).
و نلاحظ أيضا في الأرقام التي تجاور النقطة ان الاحداثي السيني تم تعريف أولاً. ثم تم تعريف الاحداثي الصادي.
و لكي نكتب الفئة في اللغة الانجليزية أرجو ملاحظة أن س= x، و أن ص=y. كما ارجو ملاحظة اتجاه اللغة. حيث ان الاتجاه بالانجليزي سيكون من اليسار لليمين هكذا: (x,y).
ملاحظة: سامحوني على رداءة خطي ههههههه :-)
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceكتابة البرامج:دوره فى لغه الجافا Title_left
الآن و بعد هذه الدراسة المتعمّقة في الهندسة الاحداثية. (أرجو أنها كانت خفيفة على قلوبكم) نستطيع ببساطة أن نبني معاً فئة النقطة أو Point. لنتأمّل الكود التالي:
دوره فى لغه الجافا L15_point01
لقد قمنا هنا بتعريف أبسط فئة للنقطة Point و هي فئة لها اثنتين من الخصائص. احداثي السينات، و احداثي الصادات Smile
الآن سنقوم بكتابة ملف فئة الخط المستقيم. لنتأمّل الكود التالي:
دوره فى لغه الجافا L15_line01
تجدون أن الخط المستقيم له صفتان تميزانه (أو بمعنى أصح تميّزان أي عضو نقوم باستخراجه من هذه الفئة) و هما النقطة الأولى p1 و النقطة الثانية p2.
والآن لنلخّص ما فعلناه. لقد كتبنا فئة و هي فئة النقطة Point و هي فئة قائمة بذاتها. ثم كتبنا فئة الخط المستقيم Line و استخدمنا في تعريفها عضوين من الفئة الأولى. فالنقطة p1 في فئة الخط المستقيم عبارة عن صفة لعضو. و هي بحد ذاتها عضو من فئة النقطة Point. أتمنى أن تكون هذه النقطة واضحة :-)
والآن سنكتب برنامج ثالث مثلاً ليكون هو البرنامج الذي نستخدم فيه أعضاء من فئة الخط المستقيم مثلاً. و سأسمّيه Painter لأننا ان شاء الله سنكتب في نهاية هذه الدورة برنامج رسم بسيط :-) حسناً لنتأمّل هذا الكود:
دوره فى لغه الجافا L15_Painter01

لا تخف لا تخف :-) سنشرحه جزءاً جزءاً. بالطبع الهيكل العام للبرنامج مفهوم وواضح من دروس سابقة.
الرجوع الى أعلى الصفحة اذهب الى الأسفل
ملك الظلام

المشرف العام...}


ملك الظلام



دوره فى لغه الجافا Empty
مُساهمةموضوع: رد: دوره فى لغه الجافا   دوره فى لغه الجافا Icon_minitimeالأحد أبريل 19, 2009 3:43 am

دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceشرح كود برنامج Painter:دوره فى لغه الجافا Title_left
لننظر إلى الشكل:
دوره فى لغه الجافا L15_painter01p1

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

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

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

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

دوره فى لغه الجافا L15_line10102020
هل الخط المستقيم الأول واضح الآن؟ أرجو ذلك :-)
والآن لننظر للشكل التالي:

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

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

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

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

دوره فى لغه الجافا L15_painterResult01
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceالخاتمةدوره فى لغه الجافا Title_left
هذا ما لدي في هذا الجزء. و لكن دعوني أسأل، هل ما فعلناه كان الأفضل؟ أم أن هناك طريقة أفضل لعمل نفس الناتج. الجواب ستجدونه في الدرس القادم إن شاء الله
ملاحظة برنامجنا حتى الآن لا يقوم بالرسم.. و لكنه سيفعل ان شاء الله :-) كل ما هنالك أننا نبنيه جزءاً جزءاً. فالصبر يا إخوان.
وفوق كل ذي علم عليم
الرجوع الى أعلى الصفحة اذهب الى الأسفل
ملك الظلام

المشرف العام...}


ملك الظلام



دوره فى لغه الجافا Empty
مُساهمةموضوع: رد: دوره فى لغه الجافا   دوره فى لغه الجافا Icon_minitimeالأحد أبريل 19, 2009 3:44 am

السلام عليكم ورحمة الله وبركاته..

في الدرس السابق قمنا بعمل مهم جداً. و سنقوم اليوم بنفس العمل و لكن بطريقة أسهل. باستخدام مفهوم الـ Constructor.
أرجو أن تقوم بقراءة المقدّمة على الأقل من الدرس السابق (إن لم تكن فعلت) و الأفضل أن تطلع عليه بأكمله حتى تكون على علم بما نفعله هنا.
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا Spaceتمهيددوره فى لغه الجافا Title_left
لننظر إلى هذه البرامج الثلاثة سابقة الذكر و الشرح في الدرس السابق :
لقد قمنا بتعريف فئة النقطة في الدرس السابق بهذا الشكل:

دوره فى لغه الجافا L15_point01

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

دوره فى لغه الجافا L15_painter01p4

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

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

دوره فى لغه الجافا L16_point02

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

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

دوره فى لغه الجافا L16_cons

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

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

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

نلاحظ أننا استخدمنا نفس المفهوم. قمنا بتعريف constructor له متغيرين في سلسلة التمرير parameter list من نوع Point.
والآن لنلق نظرة على الفئة Painter:
دوره فى لغه الجافا L16_painter
لندرس معاً الأسطر من 5 إلى 8:
دوره فى لغه الجافا L16_line12

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

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

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

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

دوره فى لغه الجافا L16_pointag

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

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


أرجو أن يكون الدرس واضحاً :-)
وفوق كل ذي علم عليم
الرجوع الى أعلى الصفحة اذهب الى الأسفل
ملك الظلام

المشرف العام...}


ملك الظلام



دوره فى لغه الجافا Empty
مُساهمةموضوع: رد: دوره فى لغه الجافا   دوره فى لغه الجافا Icon_minitimeالأحد أبريل 19, 2009 3:45 am

السلام عليكم ورحمة الله وبركاته..

درسنا اليوم من الدروس المهمّة جداً. ليس في الجافا فقط بل في البرمجة بشكل عام. فنحن سنتحدّث اليوم عن بعض الأساليب البرمجية باستخدام الجمل الشرطية، و كيفية تطبيقها في الجافا. و هذا الدرس مهم جدًا. لأنه يمهّد الأرض لك كمبرمج، و يفتح المجال أمامنا في كتابة الوظائف في الدروس القادمة إن شاء الله.
دوره فى لغه الجافا Title_rightدوره فى لغه الجافا SpaceIf Statement:دوره فى لغه الجافا Title_left
لنتصوّر أننا نكتب برنامجاً صغيراً جداً. يخزّن رقماً في متغير، ثم يقارن هذا المتغير بالرقم عشرة، فإذا كان المتغير أصغر نعرض على الشاشة جملة معينة. و إذا كان أقل من عشرة، سنعرض على الشاشة جملة أخرى. لننظر لل
شكل التالي:
دوره فى لغه الجافا L17_decision
إن هذا الشكل يمثل حالة اتخاذ قرار. لو نظرت للشكل المعيّن في وسط الصورة ستجد أن لدينا فيه سؤالاً له جواباً من اثنين إما أن يكون نعم (صح)، أو لا (خطأ). و في الشكل السابق، كان السؤال عن قيمة رقم محدد (هل قيمة الرقم أكبر من 10؟) و هذا هو السؤال. فإذا كانت الإجابة نعم فإننا سنفعل شيئاً. و ننفذ ما في الدائرة الخضراء على اليمين، أما إذا كانت الإجابة لا، فسنقوم بفعل شيء آخر و تنفيذ ما في الدائرة الوردية على اليسار.
و لتطبيق ذلك في البرمجة، لننظر للشكل التالي:
دوره فى لغه الجافا L17_if_struct
حيث نبدأ بالكلمة (if) و بعدها نفتح قوسين دائريين نضع في داخلها شرطاً تكون قيمته إما true أو false. بعدها نفتح قوس مجموعة نضع في داخله ما نريد تنفيذه في حال كانت الجملة الشرطية صحيحة (true). و هذا ما نسميه (جملة إذا) أو (If Statement). و هي أول نوع من الجمل الشرطية.
و الآن لنتأمّل معاً الكود التالي:
دوره فى لغه الجافا L17_Test10_1
لقد قمنا باشهار المتغيّر number و أعطيناه القيمة 5 كما في السطر 4.
و الآن لننظر إلى الكود من السطر 8 إلى 12:
دوره فى لغه الجافا L17_if
إننا في هذه الأسطر نقوم بتطبيق جملة إذا. بحيث نلاحظ في السطر الثامن أننا وضعنا الجملة المنطقية (الرقم أكبر من 10).فإذا كانت العبارة صحيحة فسنقوم بتنفيذ الكود في الجزء المحصور بين قوسي المجموعة الذي يلي الجملة المنطقية مباشرة. أما إذا كانت العبارة خاطئة، فسنقوم بتنفيذ الجزء الذي يلي كلمة else و المحصور أيضاً بين قوسي مجموعة.

نقطة توقف..


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

نقطة توقف..
عند المقارنة بين المتغير grade و الحرف 'A' استخدمنا بينهما علامتي يساوي لا علامة واحدة. فعلامة = الواحدة تعني أننا نريد أن نضع قيمة في هذا المتغير. و العلامتين (==) تعني أننا نقارن ما بين الموجود على طرفي العلامتين. و لنا حديث مفصّل عن الجمل المنطقية و أدواتها في ملحق منفصل ان شاء الله.
نسمي هذا النوع من If الشرطية: nested If أي وجود if داخل if و هكذا. و تقدّم لنا معظم لغات البرمجة و منها لغة الجافا جملة switch الشرطية. التي تسهّل كتابة البرنامج إذا كنت تعتمد فيه على عمل بعض الخطوات بحسب قيمة متغير محدد. والآن لنتعرّف على الهيكل العام لجملة switch، أثناء حل البرنامج الذي تحدّثنا عنه في المثال:
دوره فى لغه الجافا L17_TestGradeSwitch
أول ذي بدء. نلاحظ أننا قمنا بتعريف متغير من نوع char اسمه grade. ثم بدأنا جملة switch و التي تكتب هكذا: switch ثم نفتح قوسين دائريين يتضمنان مفتاح. و مفتاح جملة switch هو المتغير الذي على اساس قيمته سنعرّف الحالات cases المختلفة. المفتاح في حالتنا هو grade وقد تم تعليمه بدائرة خضراء في الشكل السابق.
ثم نفتح قوس مجموعة. و نلاحظ أن القومس محدد بالخط الأصفر. و لابد أن يتضمن هيكل switch في داخله كل ما يتعلّق بهذه الجملة.
داخل جملة switch سنقوم بتحديد القيم. و نكتبها هكذا case ثم نضع القيمة تليها نقطتان رأسيتان (Smile بعدها نفتح قوس مجموعة نضع في داخله الجمل و الأوامر التي نريد تنفيذها إذا كانت قيمة المفتاح تساوي القيمة التي تلي case.
و هكذا حتى تنتهي كل الحالات. و يمكن (اختيارياً) استخدام الحالة default في حالة لم تتساوى قيمة المفتاح مع أي من القيم المذكورة.
إن جملة switch تختلف في طريقة تسلسل الأوامر. فبمجرّد أن يتم الدخول في أي حالة من الحالات، يتم في الواقع تنفيذ جميع الحالات التي تليها. لننظر للشكل التالي:
دوره فى لغه الجافا L17_switch_struct
نلاحظ أنه لدينا المفتاح 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 بعد كل اختيار ليس اجبارياً و لا ضرورياً و يتحكّم في ذلك طبيعة الاوامر التي تريد تنفيذها و البرنامج الذي تريده.
أرجو أن يكون الدرس واضحاً.
وفوق كل ذي علم عليم
الرجوع الى أعلى الصفحة اذهب الى الأسفل
 
دوره فى لغه الجافا
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1
 مواضيع مماثلة
-
» تابع دوره فى لغه الجافا
» دوره ممتازه فى لغه الجافا
» تاريخ الجافا
» xp java الجافا لل ويندوز
» مقدمه عامه عن لغه الجافا

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
منتديات برامج نت :: :::: المنتديات التقنيـــــه :::: :: لغات البرمجه :: لغه الجافا-
انتقل الى: