شعار الجافا
الجافا (الإنجليزية: Java) هي لغة برمجة كائنية التوجه طورها أساساً جيمس جوسلينج وجامعيون في شركة صن ميكروسيستيمز.
الهدف الأساسي لنشأة جافا هو إيجاد لغة مشابهة للغة سي من حيث التركيب النحوي ، كائنية التوجه، و مصممة للعمل علي اّلة إفتراضية بحيث لا تحتاج إلي الترجمة من جديد عند إستخدام برامجها على منصة تشغيل أو نظام تشغيل جديد، حيث قامت شركة صن بإنشاء الاّت افتراضية لتشغيل جافا على معظم منصات و نظم التشغيل الموجودة حاليا، فاصبح من الممكن ترجمة البرنامج مرة واحدة ثم تشغيله على نظم مختلفة أو ما أسمته صن ب إكتب مرة واحدة ، شغل في أى مكان (الإنجليزية: Write Once, run anywhere).
تم فتح المصدر لهذه اللغة مؤخرا واصبحت Open Source Code.
سميت لغة الجافا من قهوة الجافا (الجاوة) التي تزرع في جزيرة جاوا، قد تطورت من مشروع كان يسمى أوك (بلوط) (من شجر البلوط الذي كان موجودً خارج نافذة جوسلينج).
ملاحظة: يجب عدم الخلط بين الجافا والجافا سكريبت فرغم تشابة اللغتين في السياق والتراكيب الا أنهما لغتان مختلفتان ولهما أهداف مختلفة.
بيئة جافا البرمجية
ليست جافا لغة برمجة فقط، وإنما هي ثلاثة أشياء في وقت واحد:
- جافا هي لغة برمجة بالتأكيد، وتشبه كثيراً في مفرداتها وقواعدها لغةَ C المشهورة بين أغلب المبرمجين. إذ تُرى العبارات البرمجية نفسها في C وjava، عندما يتعلق الأمر بوظائف برمجية متكافئة. ولكن لغة جافا، في أساس تصميمها هي أيضاً لغة غرضية التوجه تشبه لغة Smalltalk.
- الوجه الأكثر خصوصية لجافا هو محيط التنفيذ الخاص بها والمسمى آلة جافا الافتراضية JVM: Java Virtual Machine. وهي مجموعة البرمجيات التي تقلِّد آلةً تسمح بتنفيذ برامج جافا. وهي تحوي وظائف عدة تميز جافا من باقي اللغات، كجمع بقايا الذاكرة garbage collection، وتعدد المسالك البرمجية multithreading، وإدارة الموارد resource management. هذه «الآلة» هي ما يميز جافا من باقي لغات البرمجة ويسمح لها بتقديم وظائف مهمة لا تدخل عادة على مستوى لغة البرمجة، التي يضطر المبرمج إلى البحث عن طريقة للقيام بها بحسب نظام التشغيل الذي يتعامل معه.
- الوجه الثالث لجافا هو تلك المكتبة الكبيرة من الصفوف classes الملحقة بها والتي تسمح للمبرمج بكتابة برامج متعددة الوظائف بسهولة. فهناك على سبيل المثال مكتبات تتعامل مع عنوانات مورد نظامية Uniform Resource Locator (ULR)، ومكتبات لبرمجة واجهات التطبيقات، ومكتبات لبرمجة الأغراض الموزعة. تُجمّع الصفوف في حزم برمجية package، وفي محيط تطوير جافا، عدد كبير من هذه الحزم القياسية تقدم وظائف كثيرة ومتنوعة.
ويظهر جلياً من كل ما سبق أن مصممي جافا قد بذلوا جهدهم ليزودوا المبرمج بكل ما يحتاجه للعمل تقريبا، وهذا ما يجعل من جافا لغة مميزة بجدارة.
الخصائص الأساسية للغة جافا
تتميز لغة جافا عن باقي اللغات بالخصائص الأساسية الآتية:
1- عدم الارتباط ببيئة التنفيذ
تنطبق على جافا مقولة: «اكتب مرة ونفذ أينما شئت»، إذ يولد مترجم اللغة ملفاً من نوع الصف class يحتوي على ترميز بلغة خاصة، هي لغة الآلة الافتراضية. يُدعى هذا الترميز bytecode، ولا يرتبط بالآلة أو بنظام التشغيل اللذين ولِّد عنهما طالما جرى التوليد باستخدام أدوات متوافقة مع مواصفات الآلة الافتراضية التي وضعتها شركة SUN. ولأن الترميز المولد لا يحوي أي تعليمات تتعلق بالنظام أو بالمعالج فهو قابل للنقل والتنفيذ في أي بيئة تتوافر فيها نسخة نظامية من آلة جافا الافتراضية. ولأن وحدة الترميز هي بايت bytecode، صار بالإمكان شحن برامج جافا الجاهزة للتنفيذ عبر الشبكة. إذ تقوم هذه الآلة الافتراضية بالتعامل مع الآلة ونظام التشغيل. فبالإمكان كتابة برنامج بلغة جافا يعمل على نظام Solaris من SUN وتنفيذه فوراً على حاسب يعمل ضمن بيئة Windows من دون الحاجة إلى إعادة الترجمة أو تعديل البرنامج الأصلي. هذه الخاصة مهمة جداً بالنسبة لمطوري البرامج والشركات التي كانت تتكبد مبالغ طائلة لنقل البرمجيات من بيئة إلى أخرى.
2- سهولة التعلم
بذل مصممو لغة جافا قصارى جهدهم، بهدف سهولة التعلم، للمحافظة على صيغة تشبه لغة C الشائعة جداً بين المبرمجين. ولكنهم حاولوا في الوقت ذاته أن يحدّوا من المشكلات المرتبطة بلغات C/C++. وقد وفّقوا في ذلك إلى حد كبير، فقد أصبح من المعروف لدى المبرمجين ذوي الخبرة أن لغات C/C++ تحوي مصادر كثيرة للأخطاء، ولاسيما تلك المتعلقة بحجز وتحرير الذاكرة الديناميكية. إذ أن الحرية المطلقة في استخدام المؤشرات pointers والتي تعدّ من أكبر ميزات تلك اللغات على الإطلاق، تؤدي إلى ظهور أخطاء في أثناء تنفيذ runtime errors من الصعوبة بمكان اكتشاف مصدرها.
كما ألغت جافا الوراثة المتعددة، لصعوبة فهمها واستخدامها بالشكل المناسب.
وارتأى مصممو اللغة توحيد تمثيل الأنماط الأساسية في اللغة متخلصين بذلك من إحدى أكبر المشكلات التي يعانيها المبرمج. فعلى سبيل المثال، يحدد حجم العدد الصحيح بأربع بايتات وترتب الخانات بحسب ترتيب المتناهي الكبير big endian. مما يعني أن ليس هناك أي مشكلة في نقل وتبادل المعطيات بين برامج جافا أو ظهور أعطال بسبب تغير حجم المتحولات.
أما فيما يتعلق بتمرير المحددات parameters بين البرامج الجزئية، فهو يقتصر على تمريرها قيماً by value حصراً، ولا يمكن تغيير قيم المحددات، مما يسمح للمبرمجين باستخدام مكتبات جاهزة دون أي خوف من احتمال ظهور أخطاء سببها تعديل هذه الإجراءات للمحددات.
3- لغة غرضية التوجه
صُممت جافا منذ البدء لتكون لغة برمجة غرضية التوجه OOPL. وبالتالي فهي تعتمد على الصفوف وأمثال من هذه الصفوف تُدعى أغراض object. ويمكن إعادة استخدام الصفوف وتوسيعها لتعريف صفوف جديدة (مبدأ الوراثة). أرادت جافا أن تكون غرضية التوجه خالصة، مثل لغة Smalltalk المعروفة، فكل نص برمجي في جافا يجب أن ينتمي بالضرورة إلى صف. وبمعنى دقيق حاولت أن تجعل جميع أنواع المعطيات أغراضاً من صفوف. ولكن هذا قد يشكل طريقةَ تعامل صعبة أو غير مألوفة مع أنماط المعطيات البسيطة وخصوصاً العددية. وهنا يأتي الخيار الموفق لجافا بترك مجموعة أنماط المعطيات البسيطة كما هي الحال في اللغات التقليدية، وجعل كل ماعدا ذلك هو نمط معطيات صف class type.
4- معرفة الشبكة
زودت جافا بعدد كبير من الصفوف، ولاسيما تلك المحتواة ضمن الحزمة java.net، لتسمح بالتعامل مع الشبكة بما فيها الصفوف: sockets وserver sockets التي تسمح ببرمجة الاتصالات الشبكية مباشرة، وصفوف URL التي تسمح بالتعامل مع مواقع ومخدمات الوب. وتوفر هذه الصفوف جهداً كبيراً على المبرمج الذي كان سيضطر لكتابة آلاف الأسطر بلغة C لكتابة الإجراءات التي توفر له هذه الخدمات. وتخفي جافا الكثير من التفاصيل المعقدة عن المبرمج في تلك الصفوف التي تحوي أغلب المهام المعقدة.
طقم مطوِّر جافا
يتضمن طقم مطوِّر جافا Java Developer’s Kit (JDK) الصفوف اللازمة لتطوير جميع برامج جافا، موزعةً في حزم برمجية قياسية، وهذه الصفوف مخزنة على شكل ملفات من نوع class. مع ملفات الترميز الأصلي source code لعدد لا بأس به من الصفوف.
ويتضمن JDK أيضاً مجموعةَ الأدوات الضرورية لترجمة هذه البرامج وتنفيذها واختبارها، إضافة إلى بيئة تنفيذ جافا التي تقوم بتشغيل البرامج ضمن الآلة الافتراضية.
البرنامج javac هو مترجم لغة جافا الذي يترجم ملفات البرامج النصية من نوع java، ويولد بالمقابل ملفات من نوع class تحوي ترميز جافا bytecode لغة الآلة الافتراضية، الذي سيتم تنفيذه لاحقاً. هذه هي مهمة البرنامج java الذي يقوم بتنفيذ الملفات التي ولدها المترجم. هناك أيضا أداة مهمة جداً تستخدم للأرشفة وهي jar، وتستخدم لأرشفة ملفات الصفوف. الأداة الأخرى المهمة هي javadoc وتسمح بتوليد ملف التوصيف والتوثيق الخاص بواجهة برمجة جافا java API (Application Programming Interface).
==النسخ المختلفة من جافا
تطورت جافا عبر ثلاث نسخ أساسية من طقم التطوير:
- عام 1995، النسخة 1.0 وتحتوي حزم الصفوف الأساسية الستة الآتية: lang, io, applet, awt, net, util
- عام 1997، النسخة 1.1 وفيها تضاعفت مكتبة الصفوف، وأضيفت تحسينات، بل وإعادة صياغة في بعض الأمور وخاصة واجهات التفاعل مع المستخدم ومعالجة أحداثها (الحزمة: awt.event).
- عام 1998، النسخة 1.2 وتعرف النسخة 1.2 أيضاً باسم جافا 2 java 2. وعدد الصفوف فيها يتجاوز ثلاثة أضعاف النسخة 1.1 (فيها ما يزيد على 1600 صف).
المراجع
موسوعه المعرفة
التصانيف
ابحاث