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

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

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

 

 تابع دوره فى لغه الجافا

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

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


ملك الظلام



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

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

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

و في الشكل التالي تشرح السطر الأول من الشكل السابق، و الذي يطلق عليه method signature:
تابع دوره فى لغه الجافا L19_explainHead
فأول كلمة هي public هذه عبارة عن Access modifier و يمكن أن يحل محلها أي من الكلمات باللون البنفسجي، أو كما هو موجود في البداية [none] أي أنه من الممكن ألا تكون موجودة أبداً.
الكلمة الثانية هي void و هي تعني نوع القيمة التي ترجعها الوظيفة. فإذا كانت void فهذا يعني أن الوظيفة لا تعيد قيمة، و إنما تقوم بعمل محدد فقط، أما إذا كانت غير ذلك، فإن هذا يعني أن الوظيفة تعيد قيمة محددة، و لابد من استخدام كلمة return داخل الوظيفة في هذه الحالة. و من الممكن أن يكون نوع القيمة التي ترجعها الوظيفة أي واحدة من الكلمات باللون الأخضر. و نلاحظ أنها قد تكون أيضاً عبارة عن فئة من الفئات.
نصل بعدها لكلمة methodName و هي هنا الاسم الذي نعطيه للوظيفة، و يفضّل أن يكون فعلاً، يبدأ بحرف صغير.بعد ذلك نجد أننا فتحنا قوساً دائرياً، و في داخله وضعنا سلسلة المتغيرات المدخلة للوظيفة (parameters list). و التي يتم تحديد نوعها، و اعطائها اسماً لاستخدامه داخل الوظيفة، و يفصل بينها باستخدام الفاصلة. و من الممكن أن لا تكون هناك أي متغيرات مدخلة للوظيفة، و يكون القوس فارغاً.


نقطة توقف..
المتغيرات الموجودة في سلسلة المتغيرات المدخلة (parameters list) تكون صالحة للاستخدام داخل الوظيفة فقط، و لا يمكن استخدامها خارج الوظيفة أبداً.
تابع دوره فى لغه الجافا Title_rightتابع دوره فى لغه الجافا SpaceMethod Overloading:تابع دوره فى لغه الجافا Title_left
يمكن في الجافا كتابة وظيفة بنفس الاسم مرتين (!!!!) نعم تستطيع ذلك. ولكن يجب أن يكون توقيع الوظيفة مختلفاً في كل مرة. أي أن نوع الإرجاع، أو قائمة المتغيرات المدخلة تكون مختلفة إما في النوع أو في العدد. و هذا يسمّى في الجافا Method Overloading. لنأخذ مثالاً على ذلك.
لنفرض أننا نريد كتابة وظيفة تقوم بجمع رقمين، وإعادة الناتج. و لكن الأرقام موجودة بأنواع عدة. منها الـ int ومنها float و منها double. و كلها مختلفة عن بعضها البعض. يمكننا في هذه الحالة كتابة عدة وظائف كلها بنفس الإسم، و لكن نوعية المتغيرات في سلسلة المتغيرات المدخلة تختلف في كل مرة، و معها يختلف نوع القيمة المرجعة.
سنكتب وظائف الجمع في فئة اسمها AddTwo هكذا:
تابع دوره فى لغه الجافا L19_AddTwo

نلاحظ أننا كتبنا فئتين بنفس الاسم، و لكن بنوع المدخلات مختلف، و نوع إرجاع مختلف، فمرة تاخذ متغيرين من نوع int و تعيد جمعهما في صورة int، و مرة تأخذ متغيرين من نوع float و تعيد ناتج جمعهما في صورة float أيضاً.
الآن سنكتب فئة رئيسية، نقوم من خلالها إستخراج عضو من فئة AddTwo و نستخدم الوظيفتين sum مرة لجمع متغيرين من نوع int و مرة متغيرين من نوع float، هكذا:
تابع دوره فى لغه الجافا L19_AddMain

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

تابع دوره فى لغه الجافا L19_voidتابع دوره فى لغه الجافا L19_return

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

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

نلاحظ أننا في السطرين الثامن و التاسع استخدمنا وظيفة sum مسبوقة باسم الفئة AddTwo مباشرة، دون الحاجة لاستخراج عضو من الفئة AddTwo، لأنه تم تعريف الوظيفة على أنها static.
سيتم التفصيل عن الـ access modifiers في الدرس القادم إن شاء الله.
أرجو أن يكون الدرس واضحاً :-)
وفوق كل ذي علم عليم
الرجوع الى أعلى الصفحة اذهب الى الأسفل
ملك الظلام

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


ملك الظلام



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

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

تابع دوره فى لغه الجافا Title_rightتابع دوره فى لغه الجافا Spaceالمقدّمة:تابع دوره فى لغه الجافا Title_left
في رأيي المتواضع ان أفضل وسيلة لفهم أوامر الـ try والـ catch هي أن نحاول قبلاً أن نستوعب الـ Exceptions بشكل تام.
إعلان حالة الطوارئ (throws) هي الوسيلة التي تستخدمها الآلة التخيلية في الجافا للإعلان عن وجود مشكلة أو خطأ في تشغيل البرنامج
فمثلاً حين تحدث مشكلة ما لا تستطيع الآلة التخيلية التعامل معها لذا توقف عمل البرنامج تماماً (بشكل غير لائق بالنسبة للمبرمج طبعاً) وتعلن المشكلة التي واجهتها بأن تقوم بعملية throw (بالعربي قذف أو إلقاء) لهذه المشكلة.
في الحقيقة الآلة التخيلية تقوم بالإعلان عن نوعين من الأخطاء أو المشاكل، Errors وهي الأخطاء التي لا حيلة للمبرمج في التعامل معها (مثلاً أن ينقطع التيار الكهربائي) والنوع الثاني هو الـ Exceptions وهي الأخطاء التي يمكن أن يتوقعها المبرمج ولديه الوسيلة للتعامل معها.
إذاً لننسَ الـ Errors ونحاول التركيز على الـ Exceptions.
حتى نفهم خطورة الexceptions وفائدتها في الوقت ذاته.. دعوني أستخدم مثالي المفضل.. الكرة
لنتخيل أن الآلة التخيلية حين تواجه مشكلة تضعها في كرة زجاجية وتقذف الكرة في الهواء..
ماذا سيحدث؟.. سترتفع الكرة في الهواء.. ثم سترتد إلى الأرض يفعل الجاذبية.. حتى.. هممم حتى ترتطم بالأرض وتتفتت إلى قطع صغيرة وهذا يعني أن البرنامج سيتوقف تماماً عن العمل!
ما الحل في رأيكم؟ أليس لطيفاً لو كان لدينا في البرنامج وسيلة لالتقاط الكرة بالسلامة قبل أن تتكسر على الأرض؟
تابع دوره فى لغه الجافا Title_rightتابع دوره فى لغه الجافا Spaceالمشكلة:تابع دوره فى لغه الجافا Title_left
لنأخذ هذا المثال البسيط.
تابع دوره فى لغه الجافا L20_tryexample
في السطر الأول أنشأت متغير من نوع نصي ووضعت فيه القيمة x
في السطر الثاني أنشأت متغير من نوع رقم صحيح وقرأت القيمة الرقمية من المتغير النصي. طبعاً في الحالات العادية من المفترض أن تكون القيمة الموجودة في النص رقم.. مثلاً "123" ولكن في حالتنا كانت حرف وليس رقماً.. لذا عملية القراءة ستسبب حدوث exception كما يلي:
تابع دوره فى لغه الجافا L20_tryexampleRun
ما حدث في هذه الحالة نسميه Exception. وما ترونه في الصورة الأخيرة هي وسيلة الآلة التخيلية لإخبارنا أنها واجهت مشكلة، ولا تعرف كيف يمكن أن تحلها. وفي الحقيقة في الصورة ستجدون اسم الـ Exception وهو: NumberFormatException.
وهذا هو في الواقع اسم كرتنا الزجاجية التي سيلقيها البرنامج في حال فشل في قراءة رقم من النص.
تابع دوره فى لغه الجافا Title_rightتابع دوره فى لغه الجافا Spaceخطة العمل.. فكر معي تابع دوره فى لغه الجافا Title_left
طبعاً في مثالنا البسيط، تعمّدتُ وضع قيمة نصية في المتغير النصي.. وهذا يعني أن هناك دائماً مجال لأن يقوم شخص ما بإدخال قيم خاطئة، وهذا يعني أننا يجب أن نكون حذرين نوعاً في التعامل مع أنواع المدخلات.
كيف نحل ذلك؟ ما رأيكم في هذا السيناريو:
سنحاول قراءة قيمة رقمية صحيحة عن طريقة Integer.parseInt من المتغير النصي str..
إذا فشلنا وألقت الآلة التخيلية بالاستثناء NumberFormatException سنكون مستعدين وسنلتقطه، ثم نتعامل معه.
تابع دوره فى لغه الجافا Title_rightتابع دوره فى لغه الجافا Spacetry & catchتابع دوره فى لغه الجافا Title_left
ها قد وصلنا أخيراً إلى سؤال الأخ الفاضل فتى الذهب.. كيف أستخدم التراي والكاتش.. Smile ؟؟
try & catch نستخدمهم في حالة كانت لدينا وظيفة method من المحتمل أن تقذف exception.
هكذا:
تابع دوره فى لغه الجافا L20_tryexampleSol
الآن القسم الأول (try) نحاول أن نجرب فيه شيئاً ما.. في حالتنا نحاول قراءة رقم من متغير نصي.. لنفترض أن المحاولة فشلت.. وألقى البرنامج exception في هذه الحالة سيتحول الموضوع إلى ال catch..
ونلاحظ أننا بين قوسين بعد كلمة catch مباشرة حددنا نوع الاكسبشن الذي سنلتقطه.. إذا وضعنا Exception فقط.. فإنه سيلتقط أي نوع من الاستثناءات بدون تحديدها (فجميع الاستثناءات تكون فئة مستمدة من فئة Excetption).
في داخل الكاتش نستطيع أن نحدد ماذا سنفعل في حالة حدوث الخطأ أو المشكلة..
ويمكننا أن يكون في جزء الـ try أكثر من statement تسبب كل منها exception مختلف، وهكذا يمكن أن يكون لدينا أكثر من catch بحيث يتكفّل كل منها بـ exception مختلف، ومن الممكن أيضاً استخدام جزء أخير finally بحيث يلتقط أي exception آخر، هكذا:
تابع دوره فى لغه الجافا L20_tryCatchFinally
تابع دوره فى لغه الجافا Title_rightتابع دوره فى لغه الجافا Spaceسيكون جميلاً..تابع دوره فى لغه الجافا Title_left
لو أنني غطيتُ الـ throw و الـ throws أيضاً.. سأحاول تغطيتهما في وقت لاحق.. ولكن أتصور أنه يمكنك أن تفتح الباب لفهمهما الآن..
تابع دوره فى لغه الجافا Title_rightتابع دوره فى لغه الجافا Spaceأفكارتابع دوره فى لغه الجافا Title_left
يمكنك دائماً أن تقوم بتعريف الاستثناءات الخاصة بك بحيث تكون extends Exception لتتعامل مع الاستثناءات الخاصة ببرامجك (فإذا كان لديك مثلاً كلاس للخط المرسوم على الشاشة، فأتصور سيكون مفيداً لو وضعت في اعتبارك أنه يمكن أن يحاول المستخدم رسم الخط خارج حدود الرسم وعملت الاستثناء المناسب)
بالمناسبة Exception كلاس موجود في java.lang ولا تحتاج لعمل أي import
سأبذل جهدي للإجابة عن أي سؤال من واقع الخبرة أو من المراجع إن شاء الله، فلا تتردد في طرح أي استفسار..
تحياتي
وفوق كل ذي علم عليم
الرجوع الى أعلى الصفحة اذهب الى الأسفل
 
تابع دوره فى لغه الجافا
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1
 مواضيع مماثلة
-
» دوره فى لغه الجافا
» دوره ممتازه فى لغه الجافا
» مقدمه عامه عن لغه الجافا
» سؤال و جواب لكل مبتدء فى لغه الجافا
» تاريخ الجافا

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