6.7 لغة البرمجة جافا كتاب لينكس الشامل >>

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

مقدمة

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

tipتلميح

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

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

قبل الحصول على جافا أولا عليك اختيار أيها تريد هناك جافا من واضعي جافا أي شركة sun وتسمى j2sdk يمكنك تنزيلها من موقعهم http://java.sun.com/linux أو من الأقراص المرفقة مع الكتب ، وهناك جافا من منظمة جنو المعروفة gnu-java (اسم الحزمة هو gcc-java) وتأتي هذه مع معظم التوزيعات تقوم بتركيبها كما تفعل مع أي حزمة أخرى، وفي ماندريك هناك واحدة أخرى هي kaffe وهي ليست coffe الأخيرة من شركة symantec. هناك الكثير من الحزم ذات الصلة مثل j2re (للمتصفحات حتى تتمكن من عرض applets) ant و jaf و tomcat (من أجل apache) و servletapi و struts و ejb وغيرها الكثير

إذا كنت ستستعمل j2sdk قم بتركيبها في مجلد معين مثلاً في مجلد 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

من بين برامج جنو العظيمة هناك واحد آخر يهمك هو 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)

لغة جافا قريبة من لغة سي++ لدرجة كبيرة حيث تشترك معها في أغلب الكلمات المفتاحية والصيغة 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;
		float 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(1..10)=",j);
	}
}
في جافا نسمي المكتبات حزم وهذه الحزم تكون متصلة في ما بينها بشجرة هرمية نعبر عنها بوضع نقطة X.Y أي الفرع Y من الأصل X نستطيع تحميل هذه الحزم ب import ثم اسم الحزمة ويمكنك تحميل كل الحزم المتفرعة بوضع * مكان الفروع مثلاً import java.applet.*;

import java.awt.*;
import java.applet.*;
public class WindowTestApplet {
	public void init() {
		int a; float f; char c;
		Frame Win1=new Frame("MyWinTitle");
		Win1.setSize(255,255);
		Win1.add(new TextArea(10,10),"Center");
		Buttton b=new Button("MyButtonLabel");
		Win1.add(b);
		Chioce c=new Choice();
			c.addItem("Item Number One");
			c.addItem("Item Number Two");
		Win1.add(c);
		Win1.show(true);
	}
}

<< السابق كتاب لينكس الشامل التالي >>