نبذة عن تاريخ الجافا:
الجافا هى من أحد مشاريع شركة صن ميكروسيستمز "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 " وهذا موجود فى الجافا و الدوت نت والسى بلس بلس
تحدّثنا في الدرس السابق عن لغات البرمجة التي سبقت لغات الجيل الرابع، و قلنا أيضاً أنها جميعاً تشترك في صفة انها تقوم على مبدأ التحدّث بالطريقة التي يفهمها الكومبيوتر.
و يجدر بالذكر أن جميع لغات الأجيال الثلاثة السابقة إذا تمّت ترجمتها على نظام تشغيل، لإانها لا تعمل إلا على هذا النظام.
مثلا إذا قمنا بكتابة برنامج بلغة السي و قمنا بعمل ترجمة له (Compilation) على نظام التشغيل ويندوز، فان هذا البرنامج من المستحيل بأي حال من الأحوال أن يعمل على نظام الماكنتوش. ما نفعله في هذا الحالة أننا نأخذ البرنامج و نضعه على جهاز ماكنتوش و نقوم بترجمة مرة أخرى.
إذاً أي برنامج يتصرّف هكذا:
البرنامج --------> المفسّر/المترجم --------> لغة الآلة
ولأن المترجم متصل مباشرة كما ترون بلغة الآلة فإنه يعتمد عليها. و يختلف من نظام تشغيل إلى آخر.
لذا قال المبرمجون أنهم سيتخيّلون وجود آلة! تكون هذه الآلة محددة و أطلقوا عليها اسم (Virtual machine) أو الآلة التخيّلية. و هم يكتبون برامجهم حسب هذه الآلة و ليس حسب نظام تشغيل محدد هكذا:
البرنامج --------> المفسّر/المترجم --------> الآلة التخيلية --------> لغة الآلة
نلاحظ الآن أن المترجم ابتعد عن لغة الآلة، و أصبح يترجم بناءً على آلة تخيلية.
ما الذي نستفيده؟ البرنامج سيعمل على أي جهاز عليه الآلة التخيلية مهما اختلف نظام التشغيل دون الحاجة لإعادة الترجمة :-)
من لغات الجيل الرابع: C++ and Java و Oracle و Visual Basic و غيرها، وهذه اللغات تعرف بأنها لغات تعتمد على البرمجة الشيئية.
في البداية، أحب أطرح سؤال؟
عندما أقول: (أكل) ما الذي يتوارد إلى أذهانكم؟
يمكن تخطر في بالكم الجملة المشهورة (أكل الولد التفّاحة) أو تتخيلون أي نوع من أنواع الأكل صح. من المستحيل فعلاً أن تفكروا في عملية الأكل دون أن تتخيلوا شخصاً (أو كائناً) يأكل.. أو شيئاً يتم أكله، صح والا أنا غلطانة؟
بالفعل! العقل البشري لا يعترف بوجود الأفعال بدون فاعل لذا فجملة 1+1=2 ليس لها إلا معناها الرياضي المجرّد فقط. ولكن جملة واحد جلس بجانب آخر = شخصين جالسين مع بعض لها معنى، أليس كذلك؟
خلينا من هذا. فلنتصوّر أنني قلت ونحن نتكلّم بشكل عادي (أقصد لم نكن في محاضرة رياضيات) قلت لكم فجأة (24) وسكتٌّ، طبيعي أنّكم جميعاً ستنظرون إلى منتظرين أن أكمل كلامي.. 24.. ماذا؟ 24 ساعة؟ 24 يوم؟ 24 طالب؟ 24 سطر؟ 24 تفاحة.. لكن الرقم 24 المجرّد لا يعني شيء أبداً أبداً خارج مواضيع الرياضيات :-)
مفهوم العضو أو الشي (Object)
ملاحظة: عندما أقول كلمة (شيء) أو كلمة (عضو) أرجو أن يكون مفهوماً أنني أقصد بها نفس االمفهوم Object.
والآن حان الوقت لننظر إلى العالم من حولنا. نأخذ مثال بسيط (جهاز الكومبيوتر الخاص بك) سنفترض بعض صفاته وسنكتبها في ورقة:
الصفات
النوع: IBM
السرعة: 500MHz
الذاكرة: 128MB
إذاً اتفقنا أن جهازك له هذه الصفات، فلنفترض معاً بعض الوظائف التي يستطيع جهازك أن يقوم بها
الوظائف
الجمع
الحفظ
الإتصال بطابعة
ماذا نستنتج من ذلك؟
أن جهازك له صفات وقدرات. الصفات هي ما يتصف به، والقدرات هي ما يتطيع أن يقوم به. وهذا هو حال أي شيء (عضو أو Object) له صفات، ويستطيع القيام بأعمال بما له من قدرات.
هل يشترك كومبيوتر آخر مع جهازك في هذه الصفات؟ نعم جهازي يشترك مع جهازك.
له نفس القدرات، وويشترك في وجود نفس الصفات مع اختلاف في الأرقام، أليس كذلك؟ فجهازينا لهما سرعة، وذاكرة ونوع، وكلاهما يستطيعان الحفظ والاتصال بطابعة. همم.. إذا هناك صفات يشترك فيها أي جهاز كومبيوتر مع غيره من الأجهزة، وقدرات أساسية أيضاً، موجودة عند الجميع.
هذا يجعلنا نصنّف الأشياء إلى فئات تشترك في نفس الصفات ولها نفس القدرات
مفهوم الفئة أو (Class)
الفئة هي الموديل أو التصميم الذي على أساسه أستطيع استخراج أعضاء وأشياء.
مثلاً نأتي بورقة، ونكتب عليها الآتي:
كومبيوتر
الوظائف الصفات
الجمع
الحفظ
الطباعة النوع
السرعة
الذاكرة
أصبح لدينا الآن موديل نستطيع أن نستخرج منه الكومبيوتر الذي تستطيع لمسه وهو جهازك وذلك بأن نعطي للصفات التي ذكرتها في الموديل القيم المناسبة.
مثال آخر:
لو أخذنا فئة (الإنسان) هذا موديل أو شكل عام نعرف أن أي انسان له عينان، وأنه يفكّر، وأنه يبدع. ولكن حين أقول أحمد يبدأ الموديل في أخذ الصفات المناسبة مثل لون العينين عند أحمد أسود مثلاً وأنه يفكّر، وأنه مبدع وابداعه في الشعر أكثر من غيره.
ماذا نستنتج من ذلك؟
نستنتج أن الفئة أو ال Class هي الموديل الذي أصنع بحسبه الأشياء التي تشترك في الصفات. أو أنه الجامع الذي يجمع الأشياء الفعلية التي تندرج تحته. ولابد هنا من التنويه على نقطة محددة وهي أنّ الفئة ليست شيئاً محسوساً بينما العضو أو الشيء هو التمثيل المحسوس لهذه الفئة.
كيف يمكن تطبيق هذا الكلام باستخدام لغة الجافا..
هذا ما سنعرفه في الدرس القادم.
سنتعلّم اليوم معلومات أكثر عن البرمجة بالكائنات الشيئية من خلال مقارنة بين البرمجة بالكائنات الشيئية والبرمجة التقليدية
لنأخذ مثال حي لتوضوح المقارنة
لنفرض أن لدينا معركة بشكل ما بين المسلمين و الإسرائيلين. و أرغب في عمل محاكاة لهذه المعركة على الكومبيوتر. و لنفترض أن رأيي استقر على لغة ال C، و هي لغة تقليدية، لذا سأحضّر للبرنامج بالطريقة التقليدية، سأفكّر: (ماذا سيحدث؟)
سأكتب خطوات حل البرنامج:
- تبدأ المعركة. - يجري الإسرائيلي تجاه المسلم من الخلف - يتفادى المسلم الضربة الغادرة - يهجم المسلم - يموت الإسرائيلي - تنتهي اللعبة
نلاحظ فيما سبق أننا رتّبنا البرنامج بحسب الأحداث، لذا بدأت الجمل السابقة بأفعال. و أغلب الظن أننا سنكتب كل ما سبق في ملف واحد و نقوم بتخزينه، و كلّما غيّرنا في مكان نحتاج دائماً إلى إعادة ترجمة البرنامج كاملاً مرّة أخرى (Recompiling).
ماذا نستنتج من ذلك؟
نستنتج أن البرمجة التقليدية تحافظ على ترتيب الأحداث، و يتطلّب التغيير في هذا الترتيب برمجة البرنامج و جميع حلقاته مرّة أخرى.
البرمجة التقليدية تهتم بالأحداث، و تربط بينها الأشياء أو البيانات.
لنفرض أننا أردنا أن نكتب البرنامج بلغة من لغات الكائنات الشيئية (مثل الجافا مثلاً)
سنقرأ السؤال مرة أخرى و لكن هذه المرة سنسأل أنفسنا: (من الأعضاء في هذا المثال؟)
سيقول أحدكم: المسلم
و سيقول آخر: الاسرائيلي
سأعود لأسأل: فيم فكّرنا هذه المرة؟ لم نفكّر في الأحداث، بل فكّرنا في أبطال القصة. السؤال الآن: كيف سنكتب البرنامج الآن؟
سأقول لكم
1) بعد أن قمنا بتحديد الأشياء أو الأعضاء، سنقوم بعمل الموديلات لهم أو بمعنى أصح الفئات. لأنه لا يمكن أن يوجد عضو لا ينتمي لفئة!
الفئة الأولى هي فئة (المسلم)، بم يتميّز المسلم من صفات؟
المسلم
الصفات:
له اسم
له روح وجسد
له حالة (امّا حي و إما ميّت)
القدرات:
يشهد أن لا إله إالا الله ويقول الله أكبر
يستطيع أن يقاتل
يمكن أن يجرح يمكن أن يموت (أو يستشهد)
نأتي للاسرائيلي، و نكتب صفاته
الاسرائيلي
الصفات:
له اسم
له روح وجسد
له حالة (امّا حي و إما ميّت)
القدرات:
يغدر وينقض العهد
يقاتل من خلف جدار
يمكن أن يجرح يمكن أن يموت
الآن و بعد أن حددنا الفئات التي ينتمي لها المسلمون و الاسرائيليون، فلنجلس قليلاً لنتأمّل:
لدينا الآن فئة تجمع الصفات المشتركة لأي مسلم (و نلاحظ أننا استخدمنا صيغة المفرد في التسمية) و كذلك الصفات المشتركة لأي اسرائيلي. و نفس الشيء بالنسبة للقدرات.
نريد الآن أن نبدأ المعركة! همم ماذا هناك؟.. فعلاً صحيح، أين المعركة؟ لا يمكننا غدراج المعركة ضمن صفات أو قدرات المسلم، و لا ضمن صفات أو قدرات الإسرائيلي، إذاً سنحتاج إلى عضو آخر جديد يجمع بين الاثنين و هو:
المعركة
و في المعركة نستطيع أن ننشئ عضو من فئة المسلمين و لنسمه محمد و عضو من فئة الإسرائيلين و لنسمّه شارون!
الأن المسألة أصبحت أسهل، ما هي صفات المعركة؟
فيها طرفا نزاع، لها وقت للبداية و لها وقت للنهاية و لها نتيجة!
بدلاً من أن نقول صفات سأستعيض عنها بكلمة أخرى أوضح و هي (مكوّنات) لأن المعركة في الواقع هي فئة موجودة للتكون مكان يجمع أعضاء من عد فئات أخرى. إذاً المعركة ستأخذ هذا الشكل:
المعركة
الصفات:
المكونات: عضو مسلم
عضو اسرائيلي
القدرات:
تبدأ في وقت محدد
تنتهي في وقت محدد
يتم تحديد النتيجة بعد نهايتها
الآن في عضو من فئة المعركة و لنسمه معركة الإنتصار يوجد مسلم اسمه محمد و اسرائيلي اسمه شارون، و هما سيتقاتلان و تنتهي المعركة بشكل لا يعلمه إلا الله!
ماذا نستنتج من ذلك؟
نستنتج أن البرمجة باستخدام الكائنات الشيئية تتكون من فئات، و أعضاء. و أن بداية البرنامج تتم عبر نقطة بدايو دون تحديد لسير البرنامج لأن الأعضاء من مختلف الفئات قد يتصرّفون بشكل أو بآخر.
توضيح:
أي أنني عندما أبدأ المعركة قد يقوم المسلم بالهجوم أولاً، و قد يقوم الإسرائيلي بالغدر، لا يوجد ما يضمن لي أن أحدهما سيسبق الآخر، لأن كلا الفئتين احتفظت بصفاتها و قدراتها بشكل منفصل عن الفئة الأخرى.
إذاً البرنامج بطريقة الكائنات الشيئية يتكوّن من أكثر من ملف، و كل ملف منفصل فعلياً عن الملفات الأخرى. و حين حدوث أي تغيير في أي برنامج فإن أعادة الترجمة (Recompiling) يتم على هذا الملف دون غيره.
قبل أن نبدا فعلياً في كتابة برنامج جافا يجب تجهيز بيئة العمل المطلوب منكم الذهاب إلى هذا الموقع: [عزيزي الزائر يتوجب عليك التسجيل للمشاهدة الرابطللتسجيل اضغط هنا]
في هذه الصفحة و من القائمة يرجى اختيار Java 2 SDK, Standered Edition
وقم بتنزيل آخر إصدار، قد يكون الملف ذا حجم كبير نسبياً، فإذا كانت الإنترنت عندك كثيرة الانقطاع يستحسن أن تقوموا بتنزيل البرنامج على مراحل كما هو موضّح إذا تتبعت الإرشادات في موقع التنزيل
ثانياً:بعد تنزيل البرنامج يجب أن يتم تحميله، هذا الملف سيخلق حسب الDefault أن الآلة التخيّلة قد أخذت موضعها في:
c:jdk1.3
ثالثاً:يجب كتابة هذين الأمرين في الدوس كلّما أردت تشغيل أو ترجمة ب