جاڤا (لغة برمجة)

لغة برمجة جاڤا
Java Programming Language
Java programming language logo.svg
ParadigmMulti-paradigm: generic, object-oriented (class-based), imperative, reflective
Designed byجيمس گوسلينگ
Developerصح ميكروسيستمز
First appeared23 مايو 1995; منذ 29 سنة (1995-05-23[1]
الإصدار المستقر
Java SE 13 / 17 سبتمبر 2019; منذ 5 سنين (2019-09-17
Typing disciplineStatic, strong, safe, nominative, manifest
Filename extensions.java, .class, .jar
Websiteoracle.com/java/
Major implementations
Compilers: OpenJDK (javac, sjavac), GNU Compiler for Java (GCJ), Eclipse Compiler for Java (ECJ)
Virtual machines: OpenJDK JRE, Oracle JRockit, Azul Zing, IBM J9, Excelsior JET, Gluon VM, Microsoft JVM, Apache Harmony
JIT compilers: HotSpot, GraalVM, Azul Falcon (LLVM)
Influenced by
أدا 83، C++،[2] C#،[3] Eiffel,[4] Mesa,[5] Modula-3,[6] Oberon,[7] Objective-C,[8] UCSD Pascal,[9][10] Object Pascal[11]
Influenced
Ada 2005, BeanShell, C#, Chapel,[12] Clojure, ECMAScript, Fantom, Gambas,[13] Groovy, Hack,[14] Haxe, J#, Kotlin, PHP, Python, Scala, Seed7, Vala

جاڤا، هي لغة برمجة ذات غرض عام وهي لغة كائنية التوجه طورها أساساً جيمس گوسلينگ وجامعيون في شركة صن ميكروسيستيمز.

الهدف الأساسي لنشأة جاڤا هو إيجاد لغة مشابهة للغة سي من حيث التركيب النحوي، كائنية التوجه، ومصممة للعمل علي اّلة إفتراضية بحيث لا تحتاج إلي الترجمة من جديد عند إستخدام برامجها على منصة تشغيل أو نظام تشغيل جديد، حيث قامت شركة صن بإنشاء الاّت افتراضية لتشغيل جاڤا على معظم منصات و نظم التشغيل الموجودة حاليا، فاصبح من الممكن ترجمة البرنامج مرة واحدة ثم تشغيله على نظم مختلفة أو ما أسمته صن ب إكتب مرة واحدة ، شغل في أى مكان (الإنجليزية: Write Once, run anywhere).

تم فتح المصدر لهذه اللغة مؤخرا واصبحت Open Source Code.

سميت لغة الجاڤا من قهوة الجاڤا (الجاوة) التي تزرع في جزيرة جاوا، قد تطورت من مشروع كان يسمى أوك (بلوط) (من شجر البلوط الذي كان موجودً خارج نافذة گوسلينگ).

ملاحظة: يجب عدم الخلط بين الجاڤا والجاڤاسكريپت فرغم تشابة اللغتين في السياق والتراكيب الا أنهما لغتان مختلفتان ولهما أهداف مختلفة.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

التاريخ

Duke, the Java mascot
James Gosling, the creator of Java, in 2008
The TIOBE programming language popularity index graph from 2002 to 2018. Java is steadily on the top since mid-2015.

يتضمن طقم مطوِّر جاڤا Java Developer’s Kit (JDK) الصفوف اللازمة لتطوير جميع برامج جاڤا، موزعةً في حزم برمجية قياسية، وهذه الصفوف مخزنة على شكل ملفات من نوع class. مع ملفات الترميز الأصلي source code لعدد لا بأس به من الصفوف.

ويتضمن JDK أيضاً مجموعةَ الأدوات الضرورية لترجمة هذه البرامج وتنفيذها واختبارها، إضافة إلى بيئة تنفيذ جاڤا التي تقوم بتشغيل البرامج ضمن الآلة الافتراضية.

البرنامج javac هو مترجم لغة جاڤا الذي يترجم ملفات البرامج النصية من نوع java، ويولد بالمقابل ملفات من نوع class تحوي ترميز جاڤا bytecode لغة الآلة الافتراضية، الذي سيتم تنفيذه لاحقاً. هذه هي مهمة البرنامج java الذي يقوم بتنفيذ الملفات التي ولدها المترجم. هناك أيضا أداة مهمة جداً تستخدم للأرشفة وهي jar، وتستخدم لأرشفة ملفات الصفوف. الأداة الأخرى المهمة هي javadoc وتسمح بتوليد ملف التوصيف والتوثيق الخاص بواجهة برمجة جاڤا java API (Application Programming Interface).



المباديء

الأهداف الأساسية

  • كائنية التوجه.
  • الاستقلال عن نظام التشغيل.
  • توفر إمكانيات ومكتبات للتشبيك.
  • توفر إمكانية تشغيل البرامج المكتوبة بها من حواسيب بعيدة وبشكل آمن.
  • توفير إمكانية إضافة برامج إلى صفحات الويب (أبلت).
  • كوت بو 6.

البيئة البرمجية

ليست جاڤا لغة برمجة فقط، وإنما هي ثلاثة أشياء في وقت واحد:

- جاڤا هي لغة برمجة بالتأكيد، وتشبه كثيراً في مفرداتها وقواعدها لغةَ 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 لكتابة الإجراءات التي توفر له هذه الخدمات. وتخفي جاڤا الكثير من التفاصيل المعقدة عن المبرمج في تلك الصفوف التي تحوي أغلب المهام المعقدة.


النسخ


  • JDK 1.0 (23 يناير 1996)[15]
  • JDK 1.1 (19 فبراير 1996)
  • J2SE 1.2 (8 ديسمبر 1998)
  • J2SE 1.3 (8 مايو 2000)
  • J2SE 1.4 (6 فبراير 2002)
  • J2SE 5.0 (30 سبتمبر 2004)
  • Java SE 6 (11 ديسمبر 2006)
  • Java SE 7 (28 يوليو 2011)
  • Java SE 8 (18 مارس 2014)
  • Java SE 9 (21 سبتمبر 2017)
  • Java SE 10 (20 مارس 2018)
  • Java SE 11 (25 مارس 2018)[16]
  • Java SE 12 (19 مارس 2019)
  • Java SE 13 (17 سبتمبر 2019)

الإصدارات


نظام التنفيذ

Java JVM وBytecode

الأداء


Non-JVM

ادارة الذاكرة الآلية

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

البنية

Dependency graph of the Java Core classes (created with jdeps and Gephi)



مثال مرحباً العالمي

أمثلة

// This is an example of a single line comment using two slashes

/* This is an example of a multiple line comment using the slash and asterisk.
 This type of comment can be used to hold a lot of information or deactivate
 code, but it is very important to remember to close the comment. */

package fibsandlies;
import java.util.HashMap;

/**
 * This is an example of a Javadoc comment; Javadoc can compile documentation
 * from this text. Javadoc comments must immediately precede the class, method, or field being documented.
 */
public class FibCalculator extends Fibonacci implements Calculator {

    private static Map<Integer, Integer> memoized = new HashMap<Integer, Integer>();

    /*
     * The main method written as follows is used by the JVM as a starting point for the program.
     */
    public static void main(String[] args) {
        memoized.put(1, 1);
        memoized.put(2, 1);
        System.out.println(fibonacci(12)); //Get the 12th Fibonacci number and print to console
    }

    /**
     * An example of a method written in Java, wrapped in a class.
     * Given a non-negative number FIBINDEX, returns
     * the Nth Fibonacci number, where N equals FIBINDEX.
     * @param fibIndex The index of the Fibonacci number
     * @return The Fibonacci number
     */
    public static int fibonacci(int fibIndex) {
        if (memoized.containsKey(fibIndex)) {
            return memoized.get(fibIndex);
        } else {
            int answer = fibonacci(fibIndex - 1) + fibonacci(fibIndex - 2);
            memoized.put(fibIndex, answer);
            return answer;
        }
    }
}

تصنيفات خاصة

البريمجات


السرڤلت


صفحات خادم جاڤا


تطبيق سوينگ


تطبيق جاڤا إف إكس

التعميمات


الترجمة للغات أخرى

سكرين شوت للنسخة التجريبية لترجمة گوگل.

في 23 يناير 2020، أعلنت ترجمة گوگل أنها قيد التطوير لتصبح قادرة على ترجمة برامج الحاسوب من لغة برمجة إلى أخرى، بل وربما من لغة طبيعية (كالإنگليزية أو العربية) إلى پايثون أو جاڤا.

نقد

المكتبات


التوثيق


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

التطبيقات



الاستخدام خارج منصة جاڤا

أندرويد

The Android operating system makes extensive use of Java-related technology


جدل


انظر أيضاً

مقارنة جاڤا بلغات برمجة أخرى

الهوامش

  1. ^ Binstock, Andrew (مايو 20, 2015). "Java's 20 Years of Innovation". Forbes. Archived from the original on مارس 14, 2016. Retrieved مارس 18, 2016.
  2. ^ Chaudhary, Harry H. (2014-07-28). "Cracking The Java Programming Interview :: 2000+ Java Interview Que/Ans". Retrieved 2016-05-29.
  3. ^ Java 5.0 added several new language features (the enhanced for loop, autoboxing, varargs and annotations), after they were introduced in the similar (and competing) C# language. [1] Archived مارس 19, 2011 at the Wayback Machine [2] Archived يناير 7, 2006 at the Wayback Machine
  4. ^ Gosling, James; McGilton, Henry (مايو 1996). "The Java Language Environment". Archived from the original on مايو 6, 2014. Retrieved مايو 6, 2014.
  5. ^ Gosling, James; Joy, Bill; Steele, Guy; Bracha, Gilad. "The Java Language Specification, 2nd Edition". Archived from the original on أغسطس 5, 2011. Retrieved فبراير 8, 2008.
  6. ^ "The A-Z of Programming Languages: Modula-3". Computerworld.com.au. Archived from the original on يناير 5, 2009. Retrieved يونيو 9, 2010.
  7. ^ Niklaus Wirth stated on a number of public occasions, e.g. in a lecture at the Polytechnic Museum, Moscow in September 2005 (several independent first-hand accounts in Russian exist, e.g. one with an audio recording: Filippova, Elena (September 22, 2005). "Niklaus Wirth's lecture at the Polytechnic Museum in Moscow".), that the Sun Java design team licensed the Oberon compiler sources a number of years prior to the release of Java and examined it: a (relative) compactness, type safety, garbage collection, no multiple inheritance for classes – all these key overall design features are shared by Java and Oberon.
  8. ^ Patrick Naughton cites Objective-C as a strong influence on the design of the Java programming language, stating that notable direct derivatives include Java interfaces (derived from Objective-C's protocol) and primitive wrapper classes. [3] Archived يوليو 13, 2011 at the Wayback Machine
  9. ^ TechMetrix Research (1999). "History of Java" (PDF). Java Application Servers Report. Archived from the original (PDF) on ديسمبر 29, 2010. The project went ahead under the name green and the language was based on an old model of UCSD Pascal, which makes it possible to generate interpretive code.
  10. ^ "A Conversation with James Gosling – ACM Queue". Queue.acm.org. أغسطس 31, 2004. Archived from the original on يوليو 16, 2015. Retrieved يونيو 9, 2010.
  11. ^ In the summer of 1996, Sun was designing the precursor to what is now the event model of the AWT and the JavaBeans component architecture. Borland contributed greatly to this process. We looked very carefully at Delphi Object Pascal and built a working prototype of bound method references in order to understand their interaction with the Java programming language and its APIs.White Paper About Microsoft's Delegates
  12. ^ "Chapel spec (Acknowledgements)" (PDF). Cray Inc. أكتوبر 1, 2015. Archived (PDF) from the original on فبراير 5, 2016. Retrieved يناير 14, 2016.
  13. ^ "Gambas Documentation Introduction". Gambas Website. Archived from the original on أكتوبر 9, 2017. Retrieved أكتوبر 9, 2017.
  14. ^ "Facebook Q&A: Hack brings static typing to PHP world". InfoWorld. مارس 26, 2014. Archived from the original on فبراير 13, 2015. Retrieved يناير 11, 2015.
  15. ^ "JAVASOFT SHIPS JAVA 1.0". Archived from the original on March 10, 2007. Retrieved 2008-02-05.
  16. ^ Chander, Sharat. "Introducing Java SE 11". oracle.com. Archived from the original on سبتمبر 26, 2018. Retrieved سبتمبر 26, 2018.

المصادر

وصلات خارجية

الكلمات الدالة: