Home Previous Up Next6.7 لغة البرمجة جافا
حول
المحتويات
مشاريع
ثواب
مقالات
تنزيل
English

6.7 لغة البرمجة جافا

مقدمة

جافا هي لغة قياسية (يوجد معايير صارمة تحكمها) وكأي مقاييس يوجد عدة إصدارات من عدة شركات ومنظمات شأنها في ذلك شأن سي ما يكتب في أحدها يعمل في كل الباقية، وضعت تلك المعايير شركة Sun Microsystems على شكل برامج مفتوحة المصدر ووثائق المحددات specifications متوفرة على موقعهم وفق رخصة SCSL (بالنسبة لجافا 2 وليس 1 فالقديمة بقية على الرخصة القديمة) ولكنها ليست حرة بل وتضر بالبرامج الحرة لذا فكر أكثر من مرة قبل أن توافق عليها أو تنزل تلك البرمجيات راجع البند الثامن من فصل 1.1 الملكية الفكرية وصناعة الإبداع أو الفصل 2.3 من الأسئلة الأكثر تكراراً في ديبيان عن جافا Debian Java FAQ لمؤلفه Javier Fernandez-Sanguino Pena.

وكأي لغة تفسيرية الهدف منها هو أن تكتب البرنامج مرة واحدة وتنفذه أينما شئت "write once run every where" ولكنها تختلف عن اللغات التفسيرية السابقة أنها لا تسمى script أي لا تنفذ كما هي مباشرة وهي على شكل نص بل يجب القيام بعملية تصنيف أولية لعمل ملف ثنائي byte code يوفر المزيد من السرعة مقارنة بالملفات النصية في اللغات الأخرى. وكأي لغة تفسيرية أخرى يعيبها انخفاض الأداء(السرعة) إلى حد كبير لأن هذا الملف المصنف ليس بلغة الآلة (الحقيقية) بل بلغة الآلة الافتراضية التي يحاكيها مفسر اللغة.

 تلميح

توفر gnu أداة gcj لتصنيف ملفات جافا وتحويلها لملف تنفيذي حقيقي بلغة الآلة وليس byte code مما يجعلها تقترب من أداء لغة السي إلى حد جيد.

تأتي جافا مع مكتبة لعمل برامج ذات واجهة رسومية مبيتة فيها وملازمة لها ،لا فكاك منها على عكس اللغات التفسيرية الأخرى (perl و python) التي تضاف هذه على شكل وحدات خارجية تضاف وقت اللزوم دون إلزامك بمكتبة دون اخرى، مما يجعل لغة جافا متفوقة في هذا المجال حيث تكون هذه المكتبة نفسها متوفرة(كجزء من جافا) في كافة الأنظمة دون أن تكترث لخطوات إضافية، ولكن من جهة أخرى فهي تقلل من المرونة حيث تلزمك بها دون غيرها. ومن مزايا لغة جافا التي ربما تنفرد بها هي كونها موجهة للكائنات object orieneted صرفة وليست هجينة مثل سي++ أي أنه لكتابة البرنامج الرسالة الترحيبية الشهير "hello world" سيكون هناك كائنات!

هناك إصداران من محددات جافا، الأولى Java 1 يقابله حزمة أدوات تطوير جافا من Sun وتسمى تلك الحزمة JDK 1.1، والثانية Java 2 وتسمى حزمة تطويرها JDK 1.2 أو أكثر، لتشغيل ملفات Byte code المصنفة(الجاهزة وتكون .class أو .jar) الخاصة ببرامج جافا يلزمك آلة افتراضية java virtual machine وهي مفسر لتلك الملفات المصنفة، ويمكن عرض بريمجات جافا داخل متصفحات الويب java applet viewer التي توفره java runtime enironment، أما من أجل التطوير فيلزمك تحويل ملفات .java النصية المصدرية إلى ملفات .class المصنفة بواسطة مصنّف java compiler، وهناك بعض المصنفات الخاصة التي تستطيع التصنيف إلى لغة الآلة الحقيقية وليس الافتراضية (أي تنتج ملف تنفيذي خاص بتلك المنصة - نظام التشغيل والمعالج) تسمى JIT أي Just in time compilers. ديبيان يسمي تلك الحزم على الترتيب java-virtual-machine و java1-runtime (أو java2-runtime للإصدار الثاني) و java-compiler (أو java2-compiler للإصدار الثاني) وهذه مجرد حزم تشير لحزم أخرى من مصادر مختلفة بناءً على رغبة المستخدم.

قبل الحصول على جافا أولا عليك اختيار أيها تريد توجد قوائم بهذا على مواقع مختلفة منها: www.lists.deus.net/mailman/listinfo/free-java و www.gnu.org/software/java تسرد فقط تلك الحرة، هناك جافا من واضعي جافا أي شركة sun وتسمى j2sdk للإصدار الثاني من محددات جافا يمكنك تنزيلها من موقعهم http://java.sun.com/linux أو من الأقراص المرفقة مع الكتب ولك هذا سيمنعك من المساهمة في تطوير مشاريع جافا المنافسة (حسب الرخصة بتنزيل الملفات أنت تحصل على وثائق محمية قد تسربها للمنافسين على الرغم من أنها مفتوحة المصدر)، أو تكتفِ بالإصدار الأول منها jdk1.1 من Sun كما نقلتها إلى لينكس Blackdown (انظر www.blackdown.org) أقوى البدائل الحرة هو Kaffe (وليس coffe هذه الأخيرة من شركة symantec) المتوفر على أقراص ماندريك وديبيان، حيث توفر java virtual machine kaffe java compiler (للاختصار kjc) و appletviewer وهو للإصدار الأول فقط من معايير جافا (قرروا عدم المضي في الثاني لأسباب قانونية وعدم رضاهم عن الرخصة الجديدة) كاملة المزايا وأجزاء كبيرة من مكتبات Java2 foundation libraries ومتعددة الصنوف بما في ذلك RMI، ولدينا Japhar (انظر www.japhar.org و www.hungry.com/products/japhar) كمتج حر آخر لا مانع لديهم من تحدي Sun في الاصدار الثاني من حيث المبدأ، لا ننسى JDK من IBM. حزم أدوات التطوير تحتوي على كافة الأدوات ويوجد مصنفات متفرقة مثل مصنف جافا من منظمة غنو المعروفة gnu-java (قد يكون اسم الحزمة gcc-java أو gcj) www.gnu.org/software/java وتأتي هذه مع معظم التوزيعات تقوم بتركيبها كما تفعل مع أي حزمة أخرى، وهو مصنف يحول ملفات .java إلى .class أو حتى ملفات تفيذية حقيقية. لدينا مصنفات أخرى مثل jikes السريع جداً ومصنف Kopi الأقل سرعة لأنه مكتوب بلغة جافا (يجب أن تملك VM لتتمكن من تشغيله) أما tya فهو مصنف بطريقة JIT. إذا كنت بحاجة مكتبة صنوف قياسية حرة أكبر من تلك الموجودة مع ما لديك هناك مشروع classpath ( انظر www.classpath.org و www.gnu.org/software/classpath) الذي يتحدى رخصة SCSL بتطبيق أجزاء من الإصدار الثاي لمحددات جافا 2 حيث تحتوي كل شيء باستثناء Swing و RMI، مشروع ninjarmi (انظر www.cs.berkeley.edu/~mdw/proj/ninja/ninjarmi.html) يوفر صنوف RMI. هناك الكثير من الحزم ذات الصلة مثل j2re (للمتصفحات حتى تتمكن من عرض applets). باختصار إذا كت تريد بيئة حرة صرفة استعمل kaffe و gcj جنباً إلى جنب.

من بين الحزم التي تساعدك على تطوير برامج جافا jde وهو إضافة في emacs تدمج به كواجهة مصغرة بها خيارات مثل تلون النص وقائمة لتنفيذ البرنامج الذي تحرره. في المقابل هناك الكثير من البرامج التي لا تكون حرة (ولكن ربما مجانية) مثل أدوات التطوير jdk-1.2 SE Standard Edition من Sun (انظر www.javasoft.com/products/jdk/1.2/download-linux.html) و jbuilder3 وهو بيئة تطوير متكاملة (واجهة) من Inprise كتب بلغة Java نفسها (أي تحتاج VM لتشغيله) تجده في ftp://ftp.inprise.com/pub/jbuilder/jb3foundation/sol_linux/ وبرنامج netbeans وهو الآخر مكتوب بلغة جافا يتميز بسهولة تصميم برمجيات جافا الرسومية www.netbeans.com أو حتى vajava (انظر http://software.ibm.com/ah/vajava) من IBM. يمكن أن تعمل java كما لغات CGI على خادم الويب تسمى خادمات جافا الصغيرة java servlets تأتي على حزم مثل tomcat (انظر http://jakarta.apache.org/tomcat) أو apache jserv (http://java.apache.org/jserv) أو servletapi أو حتى GNUJSP. حزمة ant توفر طريقة مستقلة لكل المنصات لتطوير جافا (مثل makefile)، الأداة FastJar تعمل أرشيفات JAR المضغوطة. توفر biss-awt و swing واجهات رسومية لبرامج جافا ولكن الأخيرة غير حرة. وهناك حزم لا أعرف ماذا تفعل مثل ejb مثل Jonas من Bull الفرنسية، و struts و bcel و jaf وغيرها الكثير

إذا كنت ستستعمل j2sdk من Sun قم بتركيبها في مجلد معين مثلاً في مجلد j2sdk داخل الدليل البيت ولكن إذا أردت أن يستعملها كل المستخدمين اختر المجلد /opt/j2sdk وأنت جذر ثم أضف المجلدbin في حالتنا الأخيرة /opt/j2sdk/bin إلى متغير المسارات PATH وذلك بكتابة وأنت جذر

bash# PATH=$PATH:/opt/j2sdk/bin
bash# echo "PATH=$PATH:/opt/j2sdk/bin" >> /etc/profile
لتتمكن من تنفيذ برامجها دون كتابة المسار. وبنفس الطريقة CLASSPATH ليشير إلى ملفات zip أو jar التي تحتوي الصنوف classes. أحياناً تحتاج JAVA_HOME وهو المسار دون bin. أما إذا كنت ستستمل kaffe فنظام حزم rpm أو apt سيتكفل بكل شيء.

من بين برامج غنو العظيمة هناك واحد آخر يهمك هو gcj فهو يتجاوز عيب جافا الأكبر وهو قلة السرعة وذلك بأنه يصنف برنامج java إلى لغة الآلة الحقيقية!! فتحصل على أداء حقيقي. نعم ستحصل على برنامج تنفيذي يقترب من قوة سي (ولا يصل إليها). فتستفيد جافا من مزايا اللغات التصنيفية والتفسيرية. العيب الوحيد له هو أنه لم يكتمل ولكنه يعمل. تجده غالباً مع أقراص توزيعتك.

أساسيات اللغة

في أي محرر نصي اكتب اكتب البرنامج التالي وخزنه باسم hello.java

/*
 * Hello.java: traditional "Hello, world!" console program
 *
 */
class Hello {
	public static void main(String[] args) {
		System.out.println("Hello, world!");
	}
}
الآن ومن المجلد الموجود به اكتب الأمران التاليان في سطر الأوامر
bash$ javac hello.java
bash$ java hello
Hello, World.
السطر الأول قمنا باستدعاء مصنف لغة جافا java compiler ليحول الملف النصي hello.java لملف ثنائي byte code اسمه hello.class السطر الثاني قمنا بتنفيذ البرنامج الذي كتبنها باستدعاء الآلة الافتراضية على ملف hello.class لاحظ أنك لا تكتب .class عند استدعاء الآلة الافتراضية. (وفي لينكس يمكنك أن تكتفي بتنفيذ البرنامج ./hello.class إذا قمت بحيلة معينة) يمكنك تحويل ملف .java المصدري أو المنصف .class إلى ملف تفيذي بواسطة gcj كما يلي
bash$ gcj --main=hello -o hello hello.java
bash$ ./hello
Hello, World.

لغة جافا قريبة من لغة سي++ لدرجة كبيرة حيث تشترك معها في أغلب الكلمات المفتاحية والصيغة syntax وتختلف في الوظائف المكتبية اختلافاً جذرياً. لاحظ في المثال السابق استعمال /* */ للإحاطة بالتعليقات كما ويجوز استعمال // لتسبق التعليقات إلى نهاية السطر، والحاصرة { } للإحاطة بوحدة من الكود الخاص بالوظائف واستعمال الأقواس المربعة [ ] للتحديد عنصر من منظومة .والفاصلة المنقوطة بعد كل تعليمة تنفيذية وكما قلنا لغة جافا لغة كينونية صرفة لذا لن نجد وظيفة main بل نعرفة صنف class يحتوي هذه الوظيفة ويجب أن تكون عامة لأنها ستستدعى عند تنفيذ البرنامج من خارج الصنف في الغالب يكون اسم الصنف على اسم الملف كما تلاحظ لا يوجد وظائف دون كائنات حتى تلك التي تطبع سطر println أي print line فهي عضو من الكائن out الذي هو عضو من System

/*
 * CLike.java: Java is a C/C++ like language
 *
 */
class CLike{
	public static void main(String[] args) {
		int i,j;
		double a=0.0;
		System.out.println("Welcome to Java");
		for (i=0,j=0;i<10;++i) {
			j+=i;
			System.out.println(i);
		}
		System.out.println("Sum from 0 to 9");
		System.out.println(j);
	}
}
في جافا نسمي المكتبات حزم وهذه الحزم تكون متصلة في ما بينها بشجرة هرمية نعبر عنها بوضع نقطة X.Y أي الفرع Y من الأصل X نستطيع تحميل هذه الحزم ب import ثم اسم الحزمة ويمكنك تحميل كل الحزم المتفرعة بوضع * مكان الفروع مثلاً import java.applet.*;
import java.awt.*;
import java.applet.*;
public class WindowTestApplet {
	public void init() {
		Frame Win1=new Frame("MyWinTitle");
		Win1.setSize(255,255);
		Win1.add(new TextArea(10,10),"Center");
		Button b=new Button("MyButtonLabel");
		Win1.add(b);
		Choice c=new Choice();
			c.addItem("Item Number One");
			c.addItem("Item Number Two");
		Win1.add(c);
		Win1.show(true);
	}
}

مواقع ذات صلة

java sites:
	http://java.sun.com/
  java blackdown pages
	http://www.blackdown.org/
  Linux Journal Magazine
	http://www.linuxjournal.com/lj-issues/issue66/3119.html
	http://www.linuxjournal.com/lj-issues/issue66/3224.html
	http://www.linuxdoc.org/LDP/LG/issue45/gibbs/Linux_java.html
	http://www.linuxdoc.org/LDP/LG/issue33/burtch.html
	http://www.linuxdoc.org/LDP/LG/issue32/rojansky.html
	http://www.linuxdoc.org/LDP/LG/issue29/hamilton.html
  Tutorials
	http://metalab.unc.edu/javafaq/javatutorial.html
	http://javaboutique.internet.com/javasource.html
	http://members.tripod.com/~mpTOOLS/ring.html
  Others
	http://www.linuxdoc.org/HOWTO/Java-CGI-HOWTO.html
	http://linuxusers.webprovider.com/
	http://www.javalobby.org/
	http://www.geocities.com/SiliconValley/Platform/8187/java/Linux_java.html
المحتويات
حقوق النسخ والملكية الفكرة
ما هو لينكس؟
كيف تركب نظام لينكس؟
حقوق النسخ المرفوعة
وثائق التخويف

عرب-آيز
مجتمع لينكس العربي
موسوعة ثواب
موسوعة ويكيبيديا
تعريف البرمجيات الحرة
تعريف مفتوحة المصدر
LinuxToday
Linux.org
Linux.com
SlashDot
FreshMeat
LWN.net
توزيعات لينكس
النسخة الإسلامية لأوبنتو
عَرَبيان
جواثا (أول مسجد في أوروبا)
المزيد من التوزيعات هنا

إسلاميات
    برامج:
بريمج أوقات الصلاة
بريمج التقويم الهجري
    صوتيات:
محاضرات: قصص الأنبياء (نبيل العوضي)
أناشيد
اطلب نسختك مجاناً
لكي تصلك أقراص لينكس أوبونتو Ubuntu أصلية مجاناً والتوصيل مجاناً لن تدفع فلساً واحداً ولن تجبر على رؤية دعايات. كل ما عليك هو أن تنقر هنا.
مقالات
    تقنية:
تسجيل وتحويل الصوتيات
تعريف الماسح الضوئي في لينكس
    ساخرة:
من أجل ذلك لا تقرأ
الفيلة والصراع العربي الإسرائيلي
بلاغات
التبليغ عن إعلانات غير مرغوبة
عثرات وأخطاء إملائية
وصلات لا تعمل:

 

ننصح باستخدام متصفحات الوب الحرة، جرب ثعلب النار الآن

يمكنك الحصول على الكثير من البرامج الحرة عالية الجودة من هنا مجاناً
proud to be 100% Microsoft FREE GNU FDL
التدخين حرام

كن كحامل المسك ولا تكن كنافخ الكير

Generously Hosted by www.JadMadi.net

Previous Up 6.7 لغة البرمجة جافا Next
Copyright © 2007, Muayyad Saleh AlSadi