1- المصدر (Source)
2- المترجم(Compiler)
3- نتيجة الترجمة (Output"code")
4-الآلة الافتراضية (Virtual Mashines)
ملاحظة
: لا ننسى أن هناك محررات نصوص تدعم لغات البرمجة المختلفة، ويمكنك
بمساعدتها كتابة أكواد مفهومة وواضحة كما تساعدك كذلك على التحرير،
يكون على شكل :example.java
وهو الشكل النصي الذي يصف البرنامج ويساعد المبرمج على فهم أوامره (البرنامج).
يتكون من سلسلة للأوامر التي يجب على المترجم تنفيذها . هذه البرامج تكون مكتوبة بلغة برمجة معينة وهي الجافا يعني لهجة للكتابة
لا يمكن أن يتم تنفيذ الكود المكتوب مباشرة من الحاسوب بل يجب ترجمته
الكود المكتوب يمكن أن يترجم إلى شيء اسمه الكود الناتج :bytecode .
يكون على شكل : example.class
هو ناتج ترجمة الكود المكتوب .
يمثل البرنامج الحقيقي
خفي ويعني هذا أنه لا يمكن قرائته كنص مثلا
لا يمكن إعادة ترجمته للكود المكتوب, ربما حفاظا على حق صاحب البرنامج .
يمكن تنفيذه على أي نظام تشغيل يتوفر على java virtual machine
JRE : Java Runtime Envirement
ويعتبر المكان الذي تعيش فيه جافا! ففي هذه المنصة ( platform ) تنفذ
البرامج التي قمنا بترجمتها. لكنه لا يعتبر مكان لتطوير البرامج وذلك لأنه
لا يحتوي على المكتبات الخاصة لتطوير الجافا، وكذلك فإنه لا يعتبر أداة
تدخل في تطوير الجافا كالمترجم مثلاً..
مترجم جافا : compiler
: مترجم الجافا المدمج في JDK هو javac، وله دور ترجمة مصدر البرنامج
للبايتكود Bytecode، مصدر البرنامج يكون بإمتداد .java، وهو عبارة عن أكواد
java نقوم نحن بتحريرها في المحرر.
Java Archiver :
يأتي برنامج jar مدمج مع أدوات تطوير جافا ( معنى jar بالانجليزية هو قلة
أو جرة )، و هو الذي يقوم بإنتاج ملفات jar. ملف jar هو عبارة عن ملف zip
يمكن أن يحتوي على بيانات وصفية Metadata، هذه الملفات تستعمل في المقام
الأول لتوزيع واحتواء مكتبة جافا.
Javadoc : هي عبارة عن تعليقات بال إتش تي م ل تقوم بوصف ما تقوم به الكلاس والوظائف ( سوف نتعمق في هذا كله في فقرة خاصة )
2- المترجم(Compiler)
3- نتيجة الترجمة (Output"code")
4-الآلة الافتراضية (Virtual Mashines)
محرر النصوص هو عبارة عن برنامج لتحرير ملفات النصوص. حتماً
قد استخدمت أو قابلت واحداً في حياتك، وأبسط هذه المحررات هو الذي يأتي مع
الويندوز وإسمه :
المحرر : Editor، بهذا المحرر يمكنك مثلاً أن تصمم موقعا بأكمله من الصفر! كما يمكنك كتابة أكواد الجافا مباشرةً فيه.
أما أنظمة التشغيل الاخرى فهي أيضاً تحتوي على محرراتها فعلى
سبيل المثال هناك vi على Unix، وكذلك على linux، هناك أيضاً Text edit على
الماكنتوش...
بواسطة هذا البرنامج الصغير ( المحرر ) يمكنك كتابة برنامج
جافا بأكمله بجميع أكواده، بعد ذلك يجب عليك حفظ هذا الكود في ملف بإمتداد :
File.java. لكن هناك مشكلتين اساسيتين سوف لن يحلهما هذا المحرر البسيط؛
المشكلة الأولى هي أنك إن أردت كتابة برنامج كبير، فلن يتحقق لك ذلك إلا
بمشقة الأنفس ! لماذا ؟ .. ببساطة لأن المحرر الذي يأتي مثلاً مدمجاً في
الويندوز لا يحتوي على ألوان تفرق لك كلمات الكود لتسهيل قراءته وكذلك
لتسهيل كتابته، ولا يحتوي على نوافذ متعددة تمكنك من كتابة أكواد عديدة في
نفس النافذة مما يجعل كتابة برنامج كبير أمر شبه مستحيل!
المشكلة الثانية وهي أن كل ماكتبته لن يفيدك بشيء !.. ببساطة لأن كل ما كتبته هو عبارة عن نص لا يفهمه الحاسوب، وانما تفهمه أنت.
إذاً ماهو الحل؟؟ الحل ببساطة هو اننا نحتاج لأداة أخرى تقوم
بترجمة ما قمنا بكتابته من أكواد للغة يفهمها الحاسوب، هذه الأداة هي
المترجم.

المترجم هو عبارة عن برنامج يعمل على تحويل وترجمة شيفرات
مكتوبة بلغة معينة أو source code إلى لغة يفهمها الحاسوب و نظام التشغيل.
عادةً ما تتم هذه الترجمة إلى لغات كAssembler أو Bytecode أو لغة الألة،
كما يرمز للبرنامج قبل التحويل بإسم مصدر البرنامج وبعد التحويل يطلق عليه
الناتج. تسمى هذه العملية بعملية الترجمة.
في حالة لغة جافا يقوم المترجم بترجمة النص المكتوب إلى ما يسمى بالبايتكود bytecode.
الكود المكتوب :source code





الكود الناتج : Bytecode






bytecode : هو عبارة عن مجموعة من الأوامر للجهاز الوهمي. عند
ترجمة التعليمات البرمجية المصدر من بعض لغات البرمجة أو البيئات -- مثل
جافا -- لا يتم إنشاء لغة الحاسوب مباشرة، وإنما رمز وسيط ( Bytecode ).
هذا الرمز هو عادة مستقل عن الهاردوير وبالمقارنة مع شفرة المصدر -في كثير
من الأحيان- يكون موجز ومتراص ( compact ).
إذاً مترجم الجافا ينتج ما يسمى كود ناتج محايد التركيبة :
bytecode وهو يترجم فقط عند تنفيذه إما في اللحظة التي يلاحظ فيها أو في
اللحظة التي ينفذ فيها, هذه العملية اسمها JIT : Just In Time Compiler.
عملية الترجمة تتم كالتالي : قمنا بكتابة برنامج بلغة الجافا
في المحرر، بعد ذلك قمنا بحفظه كملف file.java،
الأن تأتي عملية الترجمة، وتتم بمساعدة مترجمات عديدة متوفرة لأنظمة تشغيل
مختلفة منها Javac، الذي يأتي مدمجاً مع JDK كما في الصورة التالية :

الشرط الأساسي الذي يجب أن يحققه الحاسوب الذي نقوم
بالبرمجة عليه هو أن يتوفر على بيئة الجافا ( مثال على ذلك بسيط فأنت محتاج
لمنزل ومدينة ودولة! لكي تعيش!، وكذلك جافا فهي تحتاج لمكان أو بيئة لكي
تعيش هي الأخرى )
كما قلنا فإن بيئة جافا هي أين تعيش جافا، فلابد لها من
مكان لكي تبرمج أكوادها.. ولا يكفي وجود حاسوب "مع الأسف!" لكن يجب وجود
بيئة معينة،هذه البيئة تم تطويرها من طرف Sun Microsystems وقامت هذه
الشركة المطورة بتسميتها JDK Development Kit سنرى إذاً مما يتكون أساساً
ال-JDK
java Development Kit أو أدوات تطوير جافا هي البيئة الكاملة
لتطوير البرامج بلغة الجافا، من دون هذه البيئة لن يتمكن أي حاسوب من تطوير
وتنفيذ أي برنامج مكتوب بلغة جافا.
وهو يحتوي على المكونات التالية :




من هنا نستنتج أن الجزء المسؤول عن تنفيذ الأكواد في بيئة
التطوير هو JRE ولكي نكون أكثر دقة فإن جزء من ال-JRE بدوره هو المسؤول عن
تنفيذ الأكواد، هذا الجزء يسمى Java Virtual Machine
java virtual machine
آلة جافا الافتراضية أو java virtual machine هي آلة
افتراضية تستخدمها تكنولوجيا جافا لتمكن الحواسيب المختلفة من تشغيل
البرامج المكتوبة بلغة جافا (من ويكيبيديا - إنتهى)
هي جزء من java runtime environment مسؤول عن تنفيذ الكود
الناتج في الجافا أي bytecode، وأي برنامج بالجافا يتم تنفيذه في آلة
افتراضية خاصة بة في الحالة العادية. الجزء الآخر من JRE هو مكتبة تحتوي
على الكلاسات الأساسية . وهي مبرمجة بلغة السي والسي بلس بلس .
وهي موجودة لأغلب أنظمة التشغيل ومن أجزائها نجد :
- - classloader وهي لتحميل الكلاسات .
- - إدارة التخزين و garbage collection حيث أن الجافا تحتوي على إدارة لتنظيف الذاكرة والتخزين أوتوماتيكيا .
- - excution engine ومعناها وحدة التنفيذ .
لمحة بسيطة عن garbage collection :
في لغات البرمجة كالسي بلس بلس نصف الأخطاء تقريباً تكون
بسبب توزيع أو تخصيص التخزين، وكما نعلم فإن لغة السي بلس بلس هي كذلك لغة
برمجة غرضية التوجه والعمل بالكائنات أو objects يعني دائما خلق و مسح. لكن
الجافا عندها الحل! وهو Java Runtime Environment فهو الذي يقوم بإدارة
هذه الكائنات ومعناه أنها لا يجب أن تحرر ف garbage collector يقوم بمسحها .
في الدرس القادم سوف نشرح ما الفرق بين JRE and JVM و الغرض من مترجم JIT
اما الآن تابع الدرس من هنا
الدرس 5: خطوات تنفيذ برنامج مكتوب بلغة Java
4/
5
Oleh
Moayad Almalat