| الجافا متجدد | |
|
|
كاتب الموضوع | رسالة |
---|
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: الجافا متجدد الجمعة سبتمبر 17, 2010 11:41 am | |
| الجافا متجدد
نبذة عن تاريخ الجافا: الجافا هى من أحد مشاريع شركة صن ميكروسيستمز "SUN MICROSYSTEMS" وكان الإسم البدائى للغة هو "Oak" ولكن إكتشف الفريق البحثى الذى أنشأ اللغه بقيادة جيمس جوسلينج"James Gosling" وجود لغه بهذا الإسم فقرروا إستخدام java نظرا للقهوة التى كانوا يرتترددوا عليها و فى الحقيقة لم يكن الغرض من لغة الجافا هو ما تستخدم فيه الأن من تطبيقات الويب ولكن كان للأجهزة المنزلية الذكية "intelligent consumer-electronic devices" حيث كانت صن تتوقع أن مع تطور الأجهزة المنزلية ستصبح يمكن برمجتها وتنزيل برامج لها من على النت وتحديثها و لكن هذا لم يحدث لذا فقد قررت صن إيقاف العمل فى هذا البحث ولكن جيمس جوسلينج تحدث مع رئيس الشركة عم إمكانية إستخدامها فى مجال الويب وبالفعل لم تغلق صن ملف الجافا و أصبحت الأن من أهم لغات الويب حيث تستخدم فى عمل صفحات الويب المتحركة " Dynamic Web Pages" والمقصود بالحركة هنا هو أن المعلومات التى تعرض بالصفحة متغيرة أو تعتمد على المستخدم "Interactive" أى تفاعلى وكذلك فى عمل المواقع الكبيرة "large Scale Applications" وكذلك الويب سيرفير وكذلك بعض الأجهزة مثل الموبايل والبيجر و ما إلى ذلك
• الفرق بين الجافا والجافا سكريبت: تحدثنا عن الجافا وهى لغة برمجية وأغراض البرمجة بواسطة الجافا وهى الويب مثل السيرفليت"Servlet " و الجى إس بى "JSP " و الأبليت " Applets" أما الجافا سكريبت فهى كأى لغة سكريبت "****** Language" ما هى إلا دوال تكتب داخل صفحات الويب لعمل مهام معينة فى ال"Client Side" أى على جهاز المستخدم مثل التأكد من إدخال المستخدم حقول معينة فى الصفحة ويمكن إيقاف عملها من خصائص المتصفح الذى تستحدمة
• الفرق بين الجافا و اللغات البرمجية الأخرى: هناك نوعان من البرمجة وهما 1. البرمجة الدالية " بصراحة مش عارف أترجمها كويس" "Functionally Oriented " ويكون البرنامج له هدف معين من خلال تنفيذ بعض خطوات متتالية فقط وهذا يظهر فى الفيجوال بيسك حتى الإصدار السادس
2. البرمجة الكائنية "Object Oriented " ويكون البرنامج له هدف معين يصل له من خلال الكائنات حيث لكل كائن خصائصة و دوالة و قد تعرف البرمجين لهذة الطريقة عندما نظروا للحياة العامة فالإنسان له خصائصة ووظائفة وكذلك كل شئ و تعريف الكائن هو ال " Class " موجود فى الجافا و الدوت نت والسى بلس بلس
عدل سابقا من قبل مدير الموقع في الجمعة سبتمبر 17, 2010 12:34 pm عدل 1 مرات | |
|
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: رد: الجافا متجدد الجمعة سبتمبر 17, 2010 11:44 am | |
| رد: الجافا (متجدد) لغات الجيل الرابع
تحدّثنا في الدرس السابق عن لغات البرمجة التي سبقت لغات الجيل الرابع، و قلنا أيضاً أنها جميعاً تشترك في صفة انها تقوم على مبدأ التحدّث بالطريقة التي يفهمها الكومبيوتر.
و يجدر بالذكر أن جميع لغات الأجيال الثلاثة السابقة إذا تمّت ترجمتها على نظام تشغيل، لإانها لا تعمل إلا على هذا النظام.
مثلا إذا قمنا بكتابة برنامج بلغة السي و قمنا بعمل ترجمة له (Compilation) على نظام التشغيل ويندوز، فان هذا البرنامج من المستحيل بأي حال من الأحوال أن يعمل على نظام الماكنتوش. ما نفعله في هذا الحالة أننا نأخذ البرنامج و نضعه على جهاز ماكنتوش و نقوم بترجمة مرة أخرى.
إذاً أي برنامج يتصرّف هكذا:
البرنامج --------> المفسّر/المترجم --------> لغة الآلة
ولأن المترجم متصل مباشرة كما ترون بلغة الآلة فإنه يعتمد عليها. و يختلف من نظام تشغيل إلى آخر.
لذا قال المبرمجون أنهم سيتخيّلون وجود آلة! تكون هذه الآلة محددة و أطلقوا عليها اسم (Virtual machine) أو الآلة التخيّلية. و هم يكتبون برامجهم حسب هذه الآلة و ليس حسب نظام تشغيل محدد هكذا:
البرنامج --------> المفسّر/المترجم --------> الآلة التخيلية --------> لغة الآلة
نلاحظ الآن أن المترجم ابتعد عن لغة الآلة، و أصبح يترجم بناءً على آلة تخيلية.
ما الذي نستفيده؟ البرنامج سيعمل على أي جهاز عليه الآلة التخيلية مهما اختلف نظام التشغيل دون الحاجة لإعادة الترجمة :-)
من لغات الجيل الرابع: C++ and Java و Oracle و Visual Basic و غيرها، وهذه اللغات تعرف بأنها لغات تعتمد على البرمجة الشيئية.
فما هي البرمجة الشيئية؟
هذا هو موضوع الدرس القادم ان شاء الله | |
|
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: رد: الجافا متجدد الجمعة سبتمبر 17, 2010 11:45 am | |
| رد: الجافا (متجدد) البرمجة بالكائنات الشيئية:
تمهيد
في البداية، أحب أطرح سؤال؟ عندما أقول: (أكل) ما الذي يتوارد إلى أذهانكم؟ يمكن تخطر في بالكم الجملة المشهورة (أكل الولد التفّاحة) أو تتخيلون أي نوع من أنواع الأكل صح. من المستحيل فعلاً أن تفكروا في عملية الأكل دون أن تتخيلوا شخصاً (أو كائناً) يأكل.. أو شيئاً يتم أكله، صح والا أنا غلطانة؟ بالفعل! العقل البشري لا يعترف بوجود الأفعال بدون فاعل لذا فجملة 1+1=2 ليس لها إلا معناها الرياضي المجرّد فقط. ولكن جملة واحد جلس بجانب آخر = شخصين جالسين مع بعض لها معنى، أليس كذلك؟ خلينا من هذا. فلنتصوّر أنني قلت ونحن نتكلّم بشكل عادي (أقصد لم نكن في محاضرة رياضيات) قلت لكم فجأة (24) وسكتٌّ، طبيعي أنّكم جميعاً ستنظرون إلى منتظرين أن أكمل كلامي.. 24.. ماذا؟ 24 ساعة؟ 24 يوم؟ 24 طالب؟ 24 سطر؟ 24 تفاحة.. لكن الرقم 24 المجرّد لا يعني شيء أبداً أبداً خارج مواضيع الرياضيات :-)
مفهوم العضو أو الشي (Object) ملاحظة: عندما أقول كلمة (شيء) أو كلمة (عضو) أرجو أن يكون مفهوماً أنني أقصد بها نفس االمفهوم Object. والآن حان الوقت لننظر إلى العالم من حولنا. نأخذ مثال بسيط (جهاز الكومبيوتر الخاص بك) سنفترض بعض صفاته وسنكتبها في ورقة:
الصفات النوع: IBM السرعة: 500MHz الذاكرة: 128MB
إذاً اتفقنا أن جهازك له هذه الصفات، فلنفترض معاً بعض الوظائف التي يستطيع جهازك أن يقوم بها الوظائف الجمع الحفظ الإتصال بطابعة
ماذا نستنتج من ذلك؟ أن جهازك له صفات وقدرات. الصفات هي ما يتصف به، والقدرات هي ما يتطيع أن يقوم به. وهذا هو حال أي شيء (عضو أو Object) له صفات، ويستطيع القيام بأعمال بما له من قدرات.
هل يشترك كومبيوتر آخر مع جهازك في هذه الصفات؟ نعم جهازي يشترك مع جهازك. له نفس القدرات، وويشترك في وجود نفس الصفات مع اختلاف في الأرقام، أليس كذلك؟ فجهازينا لهما سرعة، وذاكرة ونوع، وكلاهما يستطيعان الحفظ والاتصال بطابعة. همم.. إذا هناك صفات يشترك فيها أي جهاز كومبيوتر مع غيره من الأجهزة، وقدرات أساسية أيضاً، موجودة عند الجميع. هذا يجعلنا نصنّف الأشياء إلى فئات تشترك في نفس الصفات ولها نفس القدرات
مفهوم الفئة أو (Class) الفئة هي الموديل أو التصميم الذي على أساسه أستطيع استخراج أعضاء وأشياء. مثلاً نأتي بورقة، ونكتب عليها الآتي: كومبيوتر الوظائف الصفات الجمع الحفظ الطباعة النوع السرعة الذاكرة أصبح لدينا الآن موديل نستطيع أن نستخرج منه الكومبيوتر الذي تستطيع لمسه وهو جهازك وذلك بأن نعطي للصفات التي ذكرتها في الموديل القيم المناسبة. مثال آخر: لو أخذنا فئة (الإنسان) هذا موديل أو شكل عام نعرف أن أي انسان له عينان، وأنه يفكّر، وأنه يبدع. ولكن حين أقول أحمد يبدأ الموديل في أخذ الصفات المناسبة مثل لون العينين عند أحمد أسود مثلاً وأنه يفكّر، وأنه مبدع وابداعه في الشعر أكثر من غيره.
ماذا نستنتج من ذلك؟ نستنتج أن الفئة أو ال Class هي الموديل الذي أصنع بحسبه الأشياء التي تشترك في الصفات. أو أنه الجامع الذي يجمع الأشياء الفعلية التي تندرج تحته. ولابد هنا من التنويه على نقطة محددة وهي أنّ الفئة ليست شيئاً محسوساً بينما العضو أو الشيء هو التمثيل المحسوس لهذه الفئة. كيف يمكن تطبيق هذا الكلام باستخدام لغة الجافا.. هذا ما سنعرفه في الدرس القادم. | |
|
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: رد: الجافا متجدد الجمعة سبتمبر 17, 2010 11:46 am | |
| رد: الجافا (متجدد) البرمجة بالكائنات الشيئية 2
سنتعلّم اليوم معلومات أكثر عن البرمجة بالكائنات الشيئية من خلال مقارنة بين البرمجة بالكائنات الشيئية والبرمجة التقليدية لنأخذ مثال حي لتوضوح المقارنة
لنفرض أن لدينا معركة بشكل ما بين المسلمين و الإسرائيلين. و أرغب في عمل محاكاة لهذه المعركة على الكومبيوتر. و لنفترض أن رأيي استقر على لغة ال C، و هي لغة تقليدية، لذا سأحضّر للبرنامج بالطريقة التقليدية، سأفكّر: (ماذا سيحدث؟)
سأكتب خطوات حل البرنامج: - تبدأ المعركة. - يجري الإسرائيلي تجاه المسلم من الخلف - يتفادى المسلم الضربة الغادرة - يهجم المسلم - يموت الإسرائيلي - تنتهي اللعبة نلاحظ فيما سبق أننا رتّبنا البرنامج بحسب الأحداث، لذا بدأت الجمل السابقة بأفعال. و أغلب الظن أننا سنكتب كل ما سبق في ملف واحد و نقوم بتخزينه، و كلّما غيّرنا في مكان نحتاج دائماً إلى إعادة ترجمة البرنامج كاملاً مرّة أخرى (Recompiling).
ماذا نستنتج من ذلك؟ نستنتج أن البرمجة التقليدية تحافظ على ترتيب الأحداث، و يتطلّب التغيير في هذا الترتيب برمجة البرنامج و جميع حلقاته مرّة أخرى. البرمجة التقليدية تهتم بالأحداث، و تربط بينها الأشياء أو البيانات. لنفرض أننا أردنا أن نكتب البرنامج بلغة من لغات الكائنات الشيئية (مثل الجافا مثلاً) سنقرأ السؤال مرة أخرى و لكن هذه المرة سنسأل أنفسنا: (من الأعضاء في هذا المثال؟) سيقول أحدكم: المسلم و سيقول آخر: الاسرائيلي سأعود لأسأل: فيم فكّرنا هذه المرة؟ لم نفكّر في الأحداث، بل فكّرنا في أبطال القصة. السؤال الآن: كيف سنكتب البرنامج الآن؟ سأقول لكم 1) بعد أن قمنا بتحديد الأشياء أو الأعضاء، سنقوم بعمل الموديلات لهم أو بمعنى أصح الفئات. لأنه لا يمكن أن يوجد عضو لا ينتمي لفئة! الفئة الأولى هي فئة (المسلم)، بم يتميّز المسلم من صفات؟ المسلم الصفات: له اسم له روح وجسد له حالة (امّا حي و إما ميّت) القدرات: يشهد أن لا إله إالا الله ويقول الله أكبر يستطيع أن يقاتل يمكن أن يجرح يمكن أن يموت (أو يستشهد)
نأتي للاسرائيلي، و نكتب صفاته الاسرائيلي الصفات: له اسم له روح وجسد له حالة (امّا حي و إما ميّت) القدرات: يغدر وينقض العهد يقاتل من خلف جدار يمكن أن يجرح يمكن أن يموت
الآن و بعد أن حددنا الفئات التي ينتمي لها المسلمون و الاسرائيليون، فلنجلس قليلاً لنتأمّل: لدينا الآن فئة تجمع الصفات المشتركة لأي مسلم (و نلاحظ أننا استخدمنا صيغة المفرد في التسمية) و كذلك الصفات المشتركة لأي اسرائيلي. و نفس الشيء بالنسبة للقدرات. نريد الآن أن نبدأ المعركة! همم ماذا هناك؟.. فعلاً صحيح، أين المعركة؟ لا يمكننا غدراج المعركة ضمن صفات أو قدرات المسلم، و لا ضمن صفات أو قدرات الإسرائيلي، إذاً سنحتاج إلى عضو آخر جديد يجمع بين الاثنين و هو:
المعركة و في المعركة نستطيع أن ننشئ عضو من فئة المسلمين و لنسمه محمد و عضو من فئة الإسرائيلين و لنسمّه شارون! الأن المسألة أصبحت أسهل، ما هي صفات المعركة؟ فيها طرفا نزاع، لها وقت للبداية و لها وقت للنهاية و لها نتيجة!
بدلاً من أن نقول صفات سأستعيض عنها بكلمة أخرى أوضح و هي (مكوّنات) لأن المعركة في الواقع هي فئة موجودة للتكون مكان يجمع أعضاء من عد فئات أخرى. إذاً المعركة ستأخذ هذا الشكل: المعركة الصفات: المكونات: عضو مسلم عضو اسرائيلي القدرات: تبدأ في وقت محدد تنتهي في وقت محدد يتم تحديد النتيجة بعد نهايتها
الآن في عضو من فئة المعركة و لنسمه معركة الإنتصار يوجد مسلم اسمه محمد و اسرائيلي اسمه شارون، و هما سيتقاتلان و تنتهي المعركة بشكل لا يعلمه إلا الله!
ماذا نستنتج من ذلك؟ نستنتج أن البرمجة باستخدام الكائنات الشيئية تتكون من فئات، و أعضاء. و أن بداية البرنامج تتم عبر نقطة بدايو دون تحديد لسير البرنامج لأن الأعضاء من مختلف الفئات قد يتصرّفون بشكل أو بآخر.
توضيح: أي أنني عندما أبدأ المعركة قد يقوم المسلم بالهجوم أولاً، و قد يقوم الإسرائيلي بالغدر، لا يوجد ما يضمن لي أن أحدهما سيسبق الآخر، لأن كلا الفئتين احتفظت بصفاتها و قدراتها بشكل منفصل عن الفئة الأخرى. إذاً البرنامج بطريقة الكائنات الشيئية يتكوّن من أكثر من ملف، و كل ملف منفصل فعلياً عن الملفات الأخرى. و حين حدوث أي تغيير في أي برنامج فإن أعادة الترجمة (Recompiling) يتم على هذا الملف دون غيره. | |
|
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: رد: الجافا متجدد الجمعة سبتمبر 17, 2010 11:47 am | |
| رد: الجافا (متجدد) إعداد بيئة التشغيل: أولاً: قبل أن نبدا فعلياً في كتابة برنامج جافا يجب تجهيز بيئة العمل المطلوب منكم الذهاب إلى هذا الموقع: Java Technology في هذه الصفحة و من القائمة يرجى اختيار Java 2 SDK, Standered Edition وقم بتنزيل آخر إصدار، قد يكون الملف ذا حجم كبير نسبياً، فإذا كانت الإنترنت عندك كثيرة الانقطاع يستحسن أن تقوموا بتنزيل البرنامج على مراحل كما هو موضّح إذا تتبعت الإرشادات في موقع التنزيل ثانياً:بعد تنزيل البرنامج يجب أن يتم تحميله، هذا الملف سيخلق حسب الDefault أن الآلة التخيّلة قد أخذت موضعها في: c:jdk1.3 ثالثاً:يجب كتابة هذين الأمرين في الدوس كلّما أردت تشغيل أو ترجمة برنامج جافا، لذا أنصح بكتابتها في ملف ال Autoexec.bat في الوندوزxx أو في ال system parameters في الوندوز NT و 2000 هذين السطرين مهمّين للغايةو المفروض أن يتم كتابة السطرين كما هما في الدوس و بدون أي فراغات spaces. و لا تنسوا أن تضعوا (;.) في بداية تعريف ال classpath هكذا: و يمكنك التأكّد من المكان المضبوط بعرض محتويات القرص الصلب. الآن البيئة صارت للتشغيل. و للتأكّد من ذلك: اذهب إلى الدوس و اكتب الأمر التالي: java -version المفروض ان كان التثبيت و ما تلاه تم بطريقة صحيحة أن تظهر هذه النتيجة: رابعاً: هذه الخطوة ليست اجبارية. و لكنها لتسهيل التعليم. فعادة يستخدم مبرمجو الجافا ال Notepad الموجودة في نظام الوندوز. و لكن توجد بعض المحررات الخاصة بالمبرمجين والتي تقوم بتلوين أوامر اللغات المختلفة. من المحررات الشهيرة TextPad الذي يمكن تنزيله من موقع http://www.textpad.com و من مميزات هذا المحرر أنه يحتوي على قائمة قابلة للتعديل، يمكن من خلالها تشغيل المترجم و المشغّل دون الحاجة للذهاب إلى محرّك الدوس. بهذا نكون قد استكملنا مكوّنات بيئة التشغيل التي سنحتاج لها للبدء بكتابة برامج الجافا الخطيرة التي سنعملها سوياً | |
|
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: رد: الجافا متجدد الجمعة سبتمبر 17, 2010 11:49 am | |
|
عدل سابقا من قبل مدير الموقع في الجمعة سبتمبر 17, 2010 11:58 am عدل 1 مرات | |
|
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: رد: الجافا متجدد الجمعة سبتمبر 17, 2010 11:50 am | |
| | |
|
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| |
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| |
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: رد: الجافا متجدد الجمعة سبتمبر 17, 2010 12:07 pm | |
| | |
|
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: رد: الجافا متجدد الجمعة سبتمبر 17, 2010 12:08 pm | |
| | |
|
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: رد: الجافا متجدد الجمعة سبتمبر 17, 2010 12:10 pm | |
| رد: الجافا (متجدد)
<blockquote class="postcontent restore " style="margin: 0px; padding: 0px; word-wrap: break-word;"></blockquote>
| |
|
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: رد: الجافا متجدد الجمعة سبتمبر 17, 2010 12:11 pm | |
| | |
|
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: رد: الجافا متجدد الجمعة سبتمبر 17, 2010 12:12 pm | |
| | |
|
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: رد: الجافا متجدد الجمعة سبتمبر 17, 2010 12:14 pm | |
| | |
|
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: رد: الجافا متجدد الجمعة سبتمبر 17, 2010 12:15 pm | |
| رد: الجافا (متجدد)
<blockquote class="postcontent restore " style="margin: 0px; padding: 0px; word-wrap: break-word;">Constructorsفي الدرس السابق قمنا بعمل مهم جداً. و سنقوم اليوم بنفس العمل و لكن بطريقة أسهل. باستخدام مفهوم الـ Constructor. أرجو أن تقوم بقراءة المقدّمة على الأقل من الدرس السابق (إن لم تكن فعلت) و الأفضل أن تطلع عليه بأكمله حتى تكون على علم بما نفعله هنا. تمهيدلننظر إلى هذه البرامج الثلاثة سابقة الذكر و الشرح في الدرس السابق لقد قمنا بتعريف فئة النقطة في الدرس السابق بهذا الشكل:<blockquote style="margin: 1em; padding: 0px;"> </blockquote> ان تعريف لفئة النقطة بهذا الشكل يجعلها تواجه مشكلة. و هي أننا نضطر لإعطاء قيماً لمتغيراتها x و y بشكل يدوي في الفئات الأخرى التي تستخدمها و تستدعيها. كما فعلنا في هذه الخطوات من فئة Painter:<blockquote style="margin: 1em; padding: 0px;"> </blockquote> إذا نحن بحاجة لوسيلة تجعلنا أثناء تكوين أي عضو من فئة النقطة Point أن نعطي قيماً لمتغيراته. ما أقصده بالتكوين هو هذه الجملة:<blockquote style="margin: 1em; padding: 0px;"> </blockquote> إن عبارة تعني أننا سنقوم باستخدام بتكوين عضو فعلي من فئة النقطة Point. هممو لكن ألا تلاحظون شيئاً؟.. لاحظو معي أن اسم الفئة نفسه يليه قوسان. و هذا ما يعرف بالـ Constructor. وهو عبارة عن طريقة التكوين التي يتم بها انشاء العضو من الفئة. كيف نقوم بإعادة تعريف الConstructor؟إن يعرف باسم: Default Constructor. و هي الذي توفره أي فئة موجودة في الآلة التخيلية. و لا يحتاج المبرمج لتعريفه و لا للإشارة إليه.و يمكن للمبرمج إذا أراد أن يقوم بتعريف الـ Constructor الذي يريده. لنفرض مثلاً في فئة النقطة. أننا أردنا يقوم المبرمج بتمرير قيماً صحيحة للمتغيرين x و y أثناء تكوين العضو من فئة النقطة Point. أي لنفرض أنه أراد أن يكتب هذه الجملة: بدلاً من هذه الطريقة: الطريقة الأولى طريقة لطيفة أليس كذلك؟ أفضل و اسهل عند استخراج الأعضاء من فئة النقطة. لنتأمّل الكود التالي الجديد لفئة النقطة نفسها:<blockquote style="margin: 1em; padding: 0px;"> </blockquote> لاحظ السطر 6. ستجد أننا كتبنا كوداً قد يبدو عجيباً للوهلة الأولى:<blockquote style="margin: 1em; padding: 0px;"> </blockquote> نلاحظ أننا كتبنا اسم الفئة، و هي في حالتنا Point، ثم فتحنا أقواساً. و في داخل الأقواس قمنا بتعريف سلسلة من المتغيرات تفصل بينهما الفاصلة (,). من الضروري جداً جداً أن نكتب سلسلة المتغيرات بترتيب محدد. أي أننا نقوم بتوقع الاحداثي السيني، ثم الاحداثي الصادي و ليس العكس.<blockquote style="margin: 1em; padding: 0px;"> </blockquote> لاحظ في نهاية السطر السادس يوجد قوس مجموعة. مما يعني أننا سنقوم بكتابة بعض الكود و لا تنس أن تغلق قوس المجموعة بعد الانتهاء من كتابة ما تريد. والآن لننظر إلى داخل الـ Constructor. ما الذي قمنا بتعريفه. في السطر 7 و 8. نلاحظ أننا أخذنا القيم من المتغيرات التي مررت لنا عبر تكوين العضو، و وضعناها في المتغيرات الخاصة بالعضو. المتغيرات الممررة xx و yy هي متغيرات مؤقتة. تنتهي بمجرد الانتهاء من تكوين العضو (و الوصول لقوس المجموعة الموجود في السطر التاسع. و لعلنا نفصّل في هذا أكثر في درس الوظائف ان شاء الله. نقطة توقفعندما تحدثنا عن الـ Constructor الافتراضي. و قلنا أنه يتوفّر بشكل افتراضي لأي فئة. فإن ذلك يتم إذا كانت الفئة لا تحتوي على Constructor أما اذا قام المبرمج بتعريف Constructor خاص به، فإن الـ Constructor الافتراضي أو default constructor ذو القوسين الفارغين لا يتم ايجاده. أي أن عبارة ستنتج خطأً في الترجمة. ذلك أن الconstructor الموجود يختلف في عدد المتغيرات الممررة عن . إذا رغب المبرمج في constructor ذو سلسلة متغيرات ممررة فارغة مثل: ، فعليه أن يكتبه بنفسه. يمكن للفئة أن يكون لها أكثر من constructor. كل منهم يختلف عن الآخر في عدد أو نوع المتغيرات في السلسلة الممررة لكل منهم، أو كلاهما. البرامج مرة أخرىآن و قد تعلمنا الـ constructors. نستطيع كتابة البرامج الموجودة في الدرس السابق بشكل أفضل مما سبق. فبرنامج النقطة سيكون بهذا الشكل كما كتبناه معاً قبل قليل: <blockquote style="margin: 1em; padding: 0px;"> </blockquote> لنحاول أن نكتب برنامج الخط المستقيم بنفس الطريقة. بأن نقوم بتجهيز constructor خاص به، هكذا: <blockquote style="margin: 1em; padding: 0px;"> </blockquote> نلاحظ أننا استخدمنا نفس المفهوم. قمنا بتعريف constructor له متغيرين في سلسلة التمرير parameter list من نوع Point. والآن لنلق نظرة على الفئة Painter: لندرس معاً الأسطر من 5 إلى 8: <blockquote style="margin: 1em; padding: 0px;"> </blockquote> قليل من التركيز من فضلك. فالآن المرحة الحرجة التي نقوم فيها بتطبيق ما قمنا بالتجهيز له مع بداية الدرس. السطر 5، نقوم فيه بتعريف أو اشهار اثنين من المتغيّرات من نوع Line. اسم الاول line1 و الثاني line2. في السطر 7 نقوم بعدة خطوات. انظر الشكل: <blockquote style="margin: 1em; padding: 0px;"> </blockquote> لنذهب إلى الخطوة رقم 1 و التي تجدون بجانبها رقمين 10 و 10, هما الاحداثيين السيني و الصادي للخط الأول. الآن نريد أن نكوّن منهما نقطة. لننتقل للمرحلة رقم 2. و التي تجدون بجانبها هذه الجملة و هي تعني أننا سنقوم بتكون عضو في الذاكرة من نوع Point. و لأن فئة النقطة Point توفر constructor يأخذ رقمين صحيحن من نوع int أثناء تكوين العضو. فأصبح بإمكاننا الآن وضع الرقمين 10 و 10 في الأماكن المشار لها بالأسهم. حسناً رائع جداً. والآن لننزل إلى السطر نفسه (سبب البلاوي اللي نحن فيها من الصبح هاهاهاهاها). <blockquote style="margin: 1em; padding: 0px;"> </blockquote> حسب تعريف الـ constructor الموجود في الفئة Line ما نوع المتغير المتوقّع هنا؟ Point. فعلاً. و هذا بالضبط ما فعلناه. قمنا بوضع العضو الذي استخرجناه فيالخطوة 2 في المكان الذي يفترض أن يكون فيه متغير من نوع نقطة. نقطة توقفسيتساءل بعضكم هنا. لماذا لم نقم بتعريف متغير من نوع نقطة Point هكذا:<blockquote style="margin: 1em; padding: 0px;"> </blockquote> لنسأل أنفسنا. ما الاستخدام الذي سنستخدم فيه المتغير في هذه الحالة؟ اننا نريد أن نمرره عبر constructor الخط المستقيم. و لن نقوم باستخدامه بعد ذلك أبداً. إذا في المسألة حجز لموارد النظام. لأننا نريد تمرير القيمة التي سيتم تخزينها في عضو آخر (وهو العضو الفعلي الموجود في فئة الخط المستقيم Line.حتى تتوضح المسائل أكثر. سنقلب المسألة. تخيل أن لدي خطاً مستقيماً فيه عضوين من فئة النقطة Point. و لكن لم يتم تحديد قيمهما بعد.فهل الأفضل أن أقوم بإنشاء عضوين حقيقين ثابتين، و أمرر قيمهما إلى الأعضاء في الخط المستقيم. أم أنشئ عضوين مؤقتين، ينتهي دورهما بمجرّد تمرير القيم؟أتصور أن الحل الثاني هو الأنسب. و هذا ما فعلناه فعلاً. قمنا بانشاء الأعضاء داخل استدعاء constructor الـ Line، و بمجرّد أن تمرر قيمتهما، لن يبقى لهما وجود. و هكذا نحافظ على مصادر النظام في الذاكرة. من الممكن طبعاً استخدام الطريقة الأولى، و لكن الطريقة الثانية عادة برمجية محمودة. وطبعاً في نهاية البرنامج و في الأسطر من 10 إلى 20 نفس أوامر الطباعة التي ذكرناها في الدرس السابقملاحظات مهمةيمكن تعريف الكونستراكتور بحيث يكون فارغاً من الكود. بل قد تكون لديك أسباب لذلك. إذا قمت بتعريف constructor خاص بك، فأنك تفقد الـ constructor الافتراضي، فإذا أردت أن تحتفظ به، عليك أن تقوم بكتابته يدوياً. يمكن أن يكون لنفس الفئة أكثر من Constructor يختلفون في أعداد أو أنواع المتغيرات في سلسلة المتغيرات الممررة لهم، أو كلاهما. شكل الـ Constructor قد يشبه شكل الوظيفة، و لكن تذكّر دائماً. اسم الـ Constructor هو نفس اسم الفئة، و لا يوجد له نوع بعكس الوظيفة. إن عمل new هو انشاء العضو من الـ constructor المناسب. فإذا لم يوجد constructor في الفئة. تقوم new باستخدام الـ constructor الافتراضي </blockquote>
| |
|
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: رد: الجافا متجدد الجمعة سبتمبر 17, 2010 12:16 pm | |
| | |
|
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| |
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: رد: الجافا متجدد الجمعة سبتمبر 17, 2010 12:20 pm | |
| رد: الجافا (متجدد)
<blockquote class="postcontent restore " style="margin: 0px; padding: 0px; word-wrap: break-word;">الوظائف درسنا اليوم من الدروس المهمّة جداً. و أظن أنّه من المناسب الحديث عنه الآن بعد أن تحدثنا في الدروس السابقة عن عدد من المواضيع التي تمهّد له. فقد تحدّثنا كثيراً عن الوظائف حين تحدّثنا عن الفئات (classes) و الكائنات (objects) خاصة في الدرس التاني عشر و اليوم سنتحدّث عن الوظائف بشكل مفصّل إن شاء الله. إنشاء الوظائفلكتابة أي فئة نحتاج أن نقوم بالتالي:<blockquote style="margin: 1em; padding: 0px;"> </blockquote> و في الشكل التالي تشرح السطر الأول من الشكل السابق، و الذي يطلق عليه method signature:<blockquote style="margin: 1em; padding: 0px;"> </blockquote> فأول كلمة هي public هذه عبارة عن Access modifier و يمكن أن يحل محلها أي من الكلمات باللون البنفسجي، أو كما هو موجود في البداية [none] أي أنه من الممكن ألا تكون موجودة أبداً.الكلمة الثانية هي void و هي تعني نوع القيمة التي ترجعها الوظيفة. فإذا كانت void فهذا يعني أن الوظيفة لا تعيد قيمة، و إنما تقوم بعمل محدد فقط، أما إذا كانت غير ذلك، فإن هذا يعني أن الوظيفة تعيد قيمة محددة، و لابد من استخدام كلمة return داخل الوظيفة في هذه الحالة. و من الممكن أن يكون نوع القيمة التي ترجعها الوظيفة أي واحدة من الكلمات باللون الأخضر. و نلاحظ أنها قد تكون أيضاً عبارة عن فئة من الفئات.نصل بعدها لكلمة methodName و هي هنا الاسم الذي نعطيه للوظيفة، و يفضّل أن يكون فعلاً، يبدأ بحرف صغير.بعد ذلك نجد أننا فتحنا قوساً دائرياً، و في داخله وضعنا سلسلة المتغيرات المدخلة للوظيفة (parameters list). و التي يتم تحديد نوعها، و اعطائها اسماً لاستخدامه داخل الوظيفة، و يفصل بينها باستخدام الفاصلة. و من الممكن أن لا تكون هناك أي متغيرات مدخلة للوظيفة، و يكون القوس فارغاً.نقطة توقفالمتغيرات الموجودة في سلسلة المتغيرات المدخلة (parameters list) تكون صالحة للاستخدام داخل الوظيفة فقط، و لا يمكن استخدامها خارج الوظيفة أبداًMethod Overloadingيمكن في الجافا كتابة وظيفة بنفس الاسم مرتين (!!!!) نعم تستطيع ذلك. ولكن يجب أن يكون توقيع الوظيفة مختلفاً في كل مرة. أي أن نوع الإرجاع، أو قائمة المتغيرات المدخلة تكون مختلفة إما في النوع أو في العدد. و هذا يسمّى في الجافا Method Overloading. لنأخذ مثالاً على ذلك. لنفرض أننا نريد كتابة وظيفة تقوم بجمع رقمين، وإعادة الناتج. و لكن الأرقام موجودة بأنواع عدة. منها الـ int ومنها float و منها double. و كلها مختلفة عن بعضها البعض. يمكننا في هذه الحالة كتابة عدة وظائف كلها بنفس الإسم، و لكن نوعية المتغيرات في سلسلة المتغيرات المدخلة تختلف في كل مرة، و معها يختلف نوع القيمة المرجعة. سنكتب وظائف الجمع في فئة اسمها AddTwo هكذا: <blockquote style="margin: 1em; padding: 0px;"> </blockquote> نلاحظ أننا كتبنا فئتين بنفس الاسم، و لكن بنوع المدخلات مختلف، و نوع إرجاع مختلف، فمرة تاخذ متغيرين من نوع int و تعيد جمعهما في صورة int، و مرة تأخذ متغيرين من نوع float و تعيد ناتج جمعهما في صورة float أيضاً. الآن سنكتب فئة رئيسية، نقوم من خلالها إستخراج عضو من فئة AddTwo و نستخدم الوظيفتين sum مرة لجمع متغيرين من نوع int و مرة متغيرين من نوع float، هكذا: <blockquote style="margin: 1em; padding: 0px;"> </blockquote> لاحظ معي لقد استخدمنا نفس الاسم في كل مرة للوظيفة في السطرين 10 و 11. و هذا يسهّل استخدام الوظيفة كثيراً.و أبسط مثال على method overloading هي وظيفة الطباعة التي استخدمناها منذ اليوم الأول. فنحن نستخدمها أحياناً لطباعة نصوص، و أحياناً لطباعة أرقام. و أحياناً لطباعة أرقام كسرية. و هذا يدل على أنه تم تعريف الوظيفة بأكثر من تعريف في داخل الفئة، و كل تعريف يختص بطباعة نوع من أنواع المتغيرات. و نحن لم نشغل بالنا كثيراً، فنحن نكتب نفس اسم الوظيفة في كل مرة، و لا ندري أنه يتم استدعاء وظائف مختلفة حسب نوع المدخلات.أنواع الوظائفنستطيع تقسيم الوظائف إلى نوعين حسب الإعادة. فبعض الوظائف التي يتم تحديد نوع القيمة المرجعة، تقوم بإرجاع قيمة عن طريق استخدام الكلمة return. بينما لا ترجع الوظائف من نوع void شيئاً. كما يمكننا تقسيم الوظائف حسب وضعية الوظيفة في الفئة إلى نوعين، وظائف خاصة بالفئة، ووظائف خاصة بالعضو. و يتم في النوع الأول كتابة كلمة (static) في توقيع الوظيفة (method signature). و هكذا نكون قد جعلنا هذه الوظيفة هي خاصة بالفئة بشكل عام و ليست خاصة لعضو من الأعضاء. و بإمكان أي عضو استخدامها من الفئة مباشرة دون الحاجة لانشاء عضو من الفئة. و كمثال على ذلك وظيفة random في فئة Math. فنحن نستطيع استخدامها بالإشارة لاسم الفئة مباشرة دون الحاجة لإنشاء عضو في الفئة، و استخدامها عبره.تماماً كما في المثال السابق، يمكننا أن نجعل وظائف الجمع static و نستخدمها مباشرة دون الحاجة لإنشاء عضو من فئة AddTwo، هكذا: <blockquote style="margin: 1em; padding: 0px;"> </blockquote> نلاحظ أننا عرفنا الفئات لتكون static في السطر الثالث و الثامن، و هكذا نكون قد جعلناها خاصة بالفئة بشكل عام لا بعضو من الأعضاء. و الآن فقط نستطيع أن نستخجمها بهذا الشكل: <blockquote style="margin: 1em; padding: 0px;"> </blockquote> نلاحظ أننا في السطرين الثامن و التاسع استخدمنا وظيفة sum مسبوقة باسم الفئة AddTwo مباشرة، دون الحاجة لاستخراج عضو من الفئة AddTwo، لأنه تم تعريف الوظيفة على أنها static. سيتم التفصيل عن الـ access modifiers في الدرس القادم إن شاء الله. </blockquote>
| |
|
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: رد: الجافا متجدد الجمعة سبتمبر 17, 2010 12:21 pm | |
| | |
|
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: رد: الجافا متجدد الجمعة سبتمبر 17, 2010 12:24 pm | |
| | |
|
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| |
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: رد: الجافا متجدد الجمعة سبتمبر 17, 2010 12:28 pm | |
| رد: الجافا (متجدد)<blockquote class="postcontent restore " style="margin: 0px; padding: 0px; word-wrap: break-word;"> </blockquote> رد: الجافا (متجدد)
<blockquote class="postcontent restore " style="margin: 0px; padding: 0px; word-wrap: break-word;">مقارنة بين برمجيات الجافا والأبليت الجافا: لغة برمجة أنتجتها شركة صن ميكروسيستمز، تعتمد على البرمجة بالكائنات الشيئية و يمكن كتابة نوعين من البرامج بها: البرمجيات المستقلّة: (Stand-alone applications)
- برامج تكتب بلغة الجافا و تعمل على أي جهاز توجد عليه آلة تخيلية.
- تعمل بشكل منفصل عن الانترنت
- تعمل بنفسها مباشرة على الآلة التخيلية (Java Virtual Machine)
- لها الحق في أن تكتب في و تمسح و تضيف ملفات جديدة على الخادم (Server) الموجودة عليه.
- تستخدم بشكل رئيسي في تصميم نظم كبيرة.
الأبليت: (Java Applets)
- برامج صغيرة تكتب بلغة الجافا
- توجد على خادم، و لكن يتم تحميلها ضمن ملف هتمل (html)
- تحتاج إلى متصفّح لتعمل، و يجب أن يدعم المتصفح الجافا.
- ليس لها الحق في الاتصال مع أي خادم الا الخادم الذي جاءت منه، و مع المتصفّح الذي تعمل عليه. (وبالتالي فهي أأمن من غيرها من plug-ins الذين تدعمهم المتصفحات)
- تستخدم بشكل رئيسي لإضافة رونق شكلي على صفحات الويب، أو للقيام بعمليات بسيطة، و أحياناً كوسيط بين المستخدم والخادم.
</blockquote>
| |
|
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| |
| |
الـــ♥ـــــوافـــ♥ــــي مدير الموقع
عدد المساهمات : 1861 نقاط : 4239 السٌّمعَة : 1 تاريخ التسجيل : 02/09/2010 الموقع : المملكة العربية السعودية
| موضوع: رد: الجافا متجدد الجمعة سبتمبر 17, 2010 12:32 pm | |
| د: الجافا (متجدد)
<blockquote class="postcontent restore " style="margin: 0px; padding: 0px; word-wrap: break-word;">الجافا الجافاسيكريبت انتجتها شركة صن مايكروسيستمز أنتجتها شركة نتسكيبObject Oriented Language يعني تدعم مفهوم الكائنات و الوراثةObject ****d Language تدعم مفهوم الكائنات و لا تدعم مفهوم الوراثةتستطيع الجافا أن تكتب على الملفات في السيرفر كما تستطيع استخدام خدمات السيرفر الأخرىلاتستطيع الجافا سيكريبت أن تكتب على الملفات في السيرفر ولا تستطيع استخدام خدمات السيرفر الأخرىبرامج الجافا تخزّن كملف منفصل و يوضع لها أمر لقراءتها مثل أمر الصورة في ال HTML أوامر الجافا سيكريبت تكون مضمّنة في الهتمل HTMLلا يمكن الحصول على البرنامج لأنه يكون في صورة Class الا اذا استخدم برنامج خاص هاها يمكن نقل البرنامج حتى و لو كان في ملف آخر و لا يمكن حفظ الحقوق بأي صورة أول أربع حروف جافاأول أربع حروف جافاتكتب بها برامج منفصلة تعمل على الكومبيوتر بانفصال عن المتصفّح لابد من وجود متصفّح لتعمل </blockquote>
| |
|
| |
| الجافا متجدد | |
|