مدخل الفهرس

بسم الله الرحمن الرحيم و الصلاة و السلام على أشرف الأنبياء و المرسلين سيدنا محمد صلّى الله عليه و على آله الطيبين الطاهرين و بعد.

كثيرة هي الكتب الإلكترونية العربية التي تتحدث عن مبادئ لغة جافا و هي متنوعة بكافة أشكالها و أساليبها، لكنها قليلة تلك الكتب أو المقالات التي تتناول و تتوسع في دراسة التقنيات الحديثة التي يتم إستعمالها في العديد من البرامج الأجنبية الضخمة منها أو البسيطة.

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

بالرغم من ضيق وقتي بين العمل و الدراسة إخترت هذا الطريق آملاً بأن اكون السبّاق في تنوير أخوتنا بهذه التنقنية. لقد بحثت كثيراً في المواقع و المنتديات و المدونات العربية لكنني و للأسف لم أجد أحداً على الإطلاق تحدّث و لو بقليل عن تطبيقات RCP بالرغم من أهميتها البالغة.

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

لذلك أدعو الجميع بالمساهمة معي، و أنا مستعدّ لتقديم المساعدة و الدعم المناسب أملاً بأن أحظى بدعوة صالحة فد تفيدني في دنياي و/أو آخرتي. و في حال وجود أي خطأ أو سؤال عن أي شيء لا تتردّد أختي/ أخي القارئ بمراسلتي على موقعي أو بواسطة البريد الإلكتروني mhdbnoimi<@>gmail.com لتصويب ما ترونه خطأً أو للتنسيق معي في هذا المضمار.

هممم لأقد أسهبت بالمقدّمة، لنبدأ بلبّ الموضوععلى بركة الله

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

لقد تم توسيع أفق التقانات التي تستعملها هذه اللغة حتى أصبحت لا تختلف عن اللغات التقليدية ذات الشيفرات الأصيلة Native Languages (مثل: C++ , Delphi , Visual Basic)، فأصبح بالإمكان إنشاء تطبيقات ذات المستوى المنخض المتخصصة بالتحكم المباشر بعتاد الحاسب (Low Level Hardware Programming)، أي أن التطبيقات الصناعية لهذه اللغة أصبح متاحة بكل حرّية.

لكن تطبيقات سطح المكتب لا تزال تعاني من قصور بالأداء لدى إستعمال حزم التطوير المرئية المدعومة من قبل شركة SUN و أقصد بذلك حزم التطوير SWING , AWT المتخصصة بإدارة تطبيقات واجهة المستخدم GUI.

لدى مقارنة تطبيقات سطح المكتب التي تستعمل حزمة SWING في بناء واجهة المستخدم GUI مع لغات الشيفرات الأصيلة كلغة C++ سنجد مقداراً كبيراً من البطئ بالأداء، إستهلاكاً كبيراً للذاكرة، غرابة المكونات المرئية إلخ من مساوئ.

بشكل طبيعي هذه المساوئ لا تظهر في التطبيقات الصغيرة أو المتوسطة الحجم، إنما تظهر بشكل جلي في التطبيقات الكبيرة (كـبرنامج لإدارة عدّة قواعد بيانات لعدد من فروع الشركة بآن واحد) ، لذلك أي مبرمج يفكّر بإنتاج أي نوع من البريمجات أو البرامج المتوسطة الحجم لن يجد أي عائق تقني يمنعه من تنفيذ مراده، لكن حجم هذه التطبيقات غالباً ما يستعمل في المراحل الجامعية أو بالمجال التجاري ذي الإمكانيات المحدودة و السؤال الهام هنا

ماذا عن التطبيقات التجارية الإحترافية؟

هل من المعقول أن يتم بناء التطبيقات بوجود هذه السلبيات!

الحل موجود لكن لم يتم إبتكاره بواسطة شركة SUN، إنما تم ذلك بواسطة عدد كبير من المبرمجين المؤمنين بمبدء المصادر المفتوحة، و ذلك بمباركة من شركة SUN و بإدارة شركة IBM، ليولد مشروع eclipse.

لمن هذا المقال؟ الفهرس

يستهدف هذا المقال شريحة المبرمجين المتوسطي المعرفة بلغة جافا، فيكفي فقط أن تعرف أساسيات اللغة لتحلّق معنا في جنّة مبرمجي جافا، و في حال لم يكن عندك أي إطلاع على لغة جافا، بإمكانك الإطلاع على قسم الملحقات في هذا المقال للحصول على مرجع جافا السريع، بعدها تابع معنا بكل حرّية .

ما هو eclipse ؟ الفهرس

هو مشروع منصة تطوير مفتوحة المصدر، ظهر المشروع للعلن عام 2001م بدعم من شركة IBM، اول إصدارة منه و التي كانت تحمل الرقم 1٫0 لم تكن مجانية، لكن بتاريخ 1/11/2001 تم الإعلان عن تحويل eclipse لمشروع مجاني مفتوح المصدر و بدعم من عدّة منظمات كـ: Borland , Oracle , Redhat , Suse .

تتألف منصّة النطوير eclipse من عدد كبير من البرامج الإضافية المكتوبة بلغة جافا و التي تعمل مجتمعة لتشغيل منصّة التطوير الرئيسية للغة جافا أو للغات برمجية أخرى.

يصنّف حالياً eclipse على أنه أكثر منصات التطوير مرونة و ذلك بسبب إعتماد هندسة بنائه على البرامج الإضافية التي تتيح للمبرمجين (عل مختلف خبراتهم) تطوير البرامج الإضافية بشكل مستقل، حيث يؤدي كل برنامج إضافي عمل محدّد مفصول عن البرنامج الإضافي الآخر، لذلك إستطاع المبرمجون تطوير eclipse لإنتاج التطبيقات بعدّة لغات برمجية و بوقت قياسي. ويشتمل eclipse حتى تاريخ كتابة هذه المقالة على العديد من لغات البرمجة و التي أذكر أهمّها(طبعاً دون نسيان جافا): Prolog , Ada , C/C++ , PHP , Python , Ruby , Perl, Java Script , Scala

ما الذي يجعل eclipse فريداً من نوعه؟ الفهرس

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

يوفّر eclipse على مطوّري جافا الكثير من العناء، إذ أنه بالإمكان إنشاء تطبيق يعمل بشكل مستقل عن eclipse أو يعمل ضمن eclipse بشكل برنامج إضافي، وذلك دون تغيير أي سطر برمجي. و هذا يذكّرنا بمكونات Active X/COM في Windows التي كانت تحتاج لكم هائل من التعديلات في الشيفرة البرمجية من أجل تحويل مكوّن Active X الى تطبيق عادي (أو بالعكس).

يستعمل eclipse حزمة تطوير مرئية خاصة به (بالإمكان إستعمالها بأي منصة تطوير أخرى) تدعى SWT و التي سنتحدّث عنها لاحقاً

الإنطباع الأول الفهرس

أول شيء يتم ملاحظته لدى تشغيل eclipse هو الواجهة المرئية التي لا تختلف كثيراً عن الواجهة المرئية لنظام التشغيل الذي تستعمله، و ذلك بسبب إعتماد eclipse على حزمة SWT/JFace (سنتحدّث عنها لاحقاً)

لماذا SWT ؟ الفهرس

تعتمد منصة التطوير eclipse على حزمة SWT (حزمة أدوات النوافذ القياسية Standard Widget Toolkit) في إظهار الواجهة المرئية. هذه الحزمة يمكن إستعمالها في التطبيقات العادية مثلها مثل SWING لكنها تتميّز بالعديد من الخصائص و التي أهمّها:

  1. الأداء: سرعة عرض الواجهة المرئية التي تستعمل SWT أكبر بكثير من SWING، لأن SWT تُظهر المكونات بشكل شيفرة أصيلة (Native Code) أي عملية الإظهار تتم مباشرة من نظام التشغيل في حين أن SWING تستعمل آلة جافا الإفتراضية (Java Virtual Machine) تم تقوم آلة جافا الإفتراضية بمحاكاة إستدعاء النظام.

  2. التطوير السريع: طريقة تغليف الشيفرة في SWT توفر على المبرمج الكثير من أسطر الشيفرة البرمجية التي قد تحتاجها SWING.

  3. الحرّية: SWT حزمة مجانية مفتوحة المصدر 100% (لذلك عملية تصحيح الأخطاء Bugs متوفرة بشكل سريع بسبب ضخامة مجتمع المصادر المفتوحة) في حين أن SWING مجانبة لكنها مغلقة المصدر

  4. قابلية النقل: تطبيقات SWING مثلها مثل تطبيقات جافا العادية تحتاج لآلة جافا الإفتراضية لتعمل على النظام، في حين أن SWT تحتاج لآلة جافا الإفتراضية إضافة لبعض الملفات الخاصة لكل نظام تشغيل معين. و تعتبر هذه النقطة النقطة الوحيدة السوداء في SWT، لكن مع ذلك يمكن تخطّي هذه المشكلة بطرق عدّة تم إبتكارها مؤخراً و التي سأتناولها بشكل مفصّل بعد عدّة فقرات.

لماذا Jface؟الفهرس

حزمة Jface عبارة عن مجموعة من المعالجات و الواجهات المرئية المعقّدة التي يمكن تخصيصها من قبل المستخدم.

ترتبط هذه الحزمة إرتباطاً وثيقاً بحزمة SWT لأنها بالأساس مشتقّة منها، لذلك أي مكوّن متوفر في Jface بالإمكان إنجازه بواسطة SWT بشكل كامل دون الحاجة لـJface.

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

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

لماذا RCP؟الفهرس

منصة العميل الغنية Rich Client Platform عبارة عن أسلوب لإنشاء تطبيقات جافا لتعمل بشكل شيفرة أصيلة متكاملة بإستخدام الحزم SWT/Jface. و لفهم ماهية RCP سنقوم بإجراء تجربة صغيرة تفيدنا على إستيعاب RCP بشكل سريع و بسيط. التجربة:

القائمة التالية تحتوي على مجموعة برامج كُتبت بواسطة Java/RCP

http://www.eclipse.org/community/rcpos.php

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

  1. في حال كان نظامك التشغيل Linux: سيجيبك بأن لغة البرمجة هي C++/GTK

  2. في حال كان نظامك التشغيل Windows: سيجيبك بأن لغة البرمجة هي C++/MFC أو C# أو VB.NET

سبب هذه الإجابات هو الواجهة المرئية المتطوّرة التي يملكها برنامج ر Azureus (من النادر جداً رؤية أي برنامج جافا عادي يملك مثل هذا النمط من الواجهات المتطوّرة) و بالتالي لن يخطر على بال هذا الشخص على الإطلاق أن هذا البرنامج بُني بواسطة Java لأن الواجهة المرئية لم تختلف كثيراً عن الواجهة المرئية لنظام التشغيل + الأداء السريع.

يتبع الجزء الثاني


الفهرس

  1. مدخل

  2. لمن هذا المقال؟

  3. ما هو eclipse ؟

  4. ما الذي يجعل eclipse فريداً من نوعه؟

  5. الإنطباع الأول

  6. لماذا SWT ؟

  7. لماذا Jface؟

  8. لماذا RCP؟