ماكينة الجافا الإفتراضية
ولكي تعمل بريمجات الجافا يجب ان تحمل الى حاسب المستخدم
عفوا أستاذي الكريم استوقفك لسؤال ـــ ـــ ـــ هل عمل بريمجات الجافا من خلال حاسوب المستخدم ميزة أم عيب ؟
هذه من مميزات الجافا حيث تعمل بريمجات الجافا من خلال حاسوب المستخدم وليس من خلال السيرفر الذي تخزن به صفحات الموقع وهذا يستلزم أن يكون حجم ملفات البريمجات صغيرا
ولكن يا استاذ اليست هذه النقطة بالذات مثيرة للقلق ؟
قلق من أية ناحية ؟ اتقصد ناحية الأمان ؟ ان كان هذا ما تقصد اقول لك ان بريمجات الجافا تخضع لتدقيقات كثيرة تجعلها اكثر امانا
كيف نبدأ اذا يا استاذي العزيز ؟
اود ان اذكرك بأننا قد قدمنا في البداية نموذجا لبريمج وكان هذا لإيضاح الفرق بين التطبيق والبريمج ولكننا الان سوف نتكلم بالتفصيل عن البريمجات من جميع النواحي وبعون الله تعالى سوف نتدرب على مواضيع متقدمة من حيث ربط بريمجات الجافا بالتطبيقات المعدة بلغة الفيجوال بيسك ذائعة الصيت وهذا الموضوع يهم الكثيرين ممن يبرمجون بلغة الفيجوال بيسك وبعبارة أخرى سوف نتدرب على وضع بريمج جافا في برنامج تمت برمجته بلغة الفيجوال بيسك
هيا يا صديقي نبدأ
JApplet لكي ننشأ بريمج جافا نركز على الخطوة الأولى وهي جعل البريمج فئة فرعية لجافا أبلت
.com.sun.java.swing واذكر هنا بأن هذه الفئة تشكل جزءا من حزمة
SWING تسمى هذه الحزمة
التي توفر مجموعة من الفئات لإنشاء واجهة مستخدم رسومية وما يلزم من العناصر المرئية للبريمج حيث يعامل البريمج كإطار مرئي داخل صفحة الانترنت اذا جافا ابلت جزء من سوينج
وسوف نتكلم بالتفصيل ان شاء الله عن موضوع السوينج
والان سوف نناقش بعض الأمور النظرية في بناء البريمج
main() أولا في التطبيقات عرفنا سابقا أن البرامج تبدأ بالاشتغال عند الجملة الأولى في الكتلة
وتنتهي بالحاصرة الأخيرة التي تغلق الكتلة وبما أن هذا النهج لا يوجد في بريمجات الجافا كما قلنا سابقا أذا لا يوجد موقع محدد للبدء في البريمج ولكن يستعاض عن ذلك بمجموعة من الطرق القياسية ـ النهج ـ التي تنفذ استجابة للاحداث التي يمكن أن تحدث عند تشغيل البريمج
عفوا استاذي هذه المسألة تحتاج الى توضيح لوسمحت
لا عليك صديق العزيز اعطيك مثلا عند تحميل البريمج لأول مرة هذا الحدث يؤدي الى طلب تنفيذ أحد طرق البريمج ونفس الشيء عند إعادة عرض اطار الربيمج
وللتوضيح أكثر اذا كان المستخدم في صفحة من موقع بها بريمج جافا ثم قرر المستخدم ان يترك هذه الصفحة الى أخرى هذا الحدث يجب ان يكون مخطط له بوضع نهج معين يزيل تحميل البريمج عند انهاء تشغيله وهكذا أظن الآن ان الفكرة وصلت اليس كذلك
بلى استاذي العزيز ولكي تزداد ثقتك في اليك هذا المثال للتأكيد هب ان مستخدما اوقف البريمج أو ان المتصفح أوقف البريمج هذا الحدث يستدعي نهجا معينا ينفذ استجابة لهذا الحدث واذا اعاد المستخدم تشغيل البريمج فهذا يستوجب تنفيذ نهجا معينا استجابة لهذا الحدث
ارجو يا استاذي امثلة لهذه النهج ؟
اليك هذه الأمثلة
paint( ) :: int( ) :: stop( ) & start( ) ::: destroy( ) :::
paint( ) اولا النهج
يا صديقي يجب ان يكون هذا النهج جزءا من كل بريمج تكتبه لأنك بدونه لا يمكنك عرض أي شيء في البريمج وفائدة هذا النهج انه يتولى عرض أو اعادة عرض ما تريد عرضه في اطار البريمج
عفوا استاذي العزيز تحتاج هذه النقطة الى مزيد من التوضيح
اليك هذا المثال للتوضيح اذا قام مستخدم مثلا بتصغير صفحة من صفحات موقع انترنت بها بريمج جافا الى الحد الأدنى لهذه الصفحة ثم عاد مرة اخرى الى تكبير هذه الصفحة هنا يتم استدعاء الجندي الذي يقوم باعادة عرض كل ما كان موجودا على الشاشة ضمن البريمج في حجمه الطبيعي وهذا الجندي هو النهج بينت اذا هذا النهج يتم التعامل معه بصفة رئيسية عندما يتغير شيء ما في المتصفح أو في نظام التشغيل الذي يشغل هذا المتصفح وهنا يحضرني حكاية من حكايات الف ليلة وليلة وهي حكاية مصباح علاء الدين ومنها اوضح ان للجافا جنودا أو خادميين يقولون لك ـ شبيك لبيك ـ عندما تستدعيهم وكل ـ جني ـ له عمل ووظيغة يؤديها باتقان وله صيفة يستدعى بها واليك هذا المثال البسيط للنهج بينت
public class paint(graphics screen) {
// display statements go here
}وهنا نلاحظ أن هذا النهج يأخذ وسيطة هي الكائن جرافيك الذي يستعمل للتعامل مع كل السمات والتصرفات المطلوبة لعرض النص والرسوم وغيرها من المعلومات على الشاشة
واستمرارا للتشبيه السابق فبدلا من مسح مصباح علاء الدين لاستدعاء الجني ليقول لك ـ شبيك لبيك ـ فانك هنا تضيف الجملة الاتية عندما تستعمل الكائن جرافيك
import java.awt.Graphics;
import java.awt.graphics2D; واذا كانت لديك النية لاستعمال عدة فئات ـ كلاسس ـ من الحزمة
java.awt
استعمل الجملة التالية التي تجعل كل هذه الفئات متوفرة في بريمجك
java.awt.*
شكرا جزيلا لك على هذا التوضيح المسهب وماذا عن باقي النهج أو كما تشبهم عفاريت الجافا ؟
النهج الثاني هو النهج int( )
وهذا النهج نهج تجهيزي بمعنى انه يعمل مرة واحدة فقط عند اشتغال البرنامج ومن هنا يتضح انه موقع جيد لإعداد الخطوط والألوان ولون الخلفية في البريمج ويتم فيه إعداد قيم الكائنات والمتغيرات المطلوبة لعمل البريمج بنجاح وانبه هنا انه لا يجب انشاء الكائنات والمتغيرات داخل هذا النهج لانها لن توجد الا داخله فقط ولهذا يجب انشاء كل المتغيرات التي تحتاج اليها على شكل متغيرات كائنية مباشرة بعد الجملة كلاسس وقبل اي نهج
stop( ) & start( ) النهجان
init عندما يبدأ البرنامج في العمل أول مرة ينفذ النهج
start( ) هذا النهج هو الذي يلي النهج التجهيزي بمعنى انه كلما نفذ البريمج يتم التعامل مع هذا النهج
لكي يتم اعادة تنفيذ النهج استارت يجب ان يتوقف البرنامج عن العمل في نقطة معينة وهذا يحدث نتيجة لسببين إما بسبب استدعاء النهج استوب مباشرة من فبل البرنامج او بسبب ترك المستخدم صفحة الموقع التي تحتوي البريمج والانتقال الى صفحة اخرى
destroy( ) النهج
هذا النهج عكس النهج التجهيزي انت ويتم استدعاؤه مباشرة قبيل اغلاق البريمج والانتهاء من العمل واضا هناك حالة اخرى يستدعى فيها وهي حالة اعادة البريمج الى وضعه الإبتدائي