الخميس، 12 نوفمبر 2015

الدرس 5: خطوات تنفيذ برنامج مكتوب بلغة Java

1- المصدر (Source)
2- المترجم(Compiler)
3- نتيجة الترجمة (Output"code")
4-الآلة الافتراضية (Virtual Mashines)
محرر النصوص هو عبارة عن برنامج لتحرير ملفات النصوص. حتماً قد استخدمت أو قابلت واحداً في حياتك، وأبسط هذه المحررات هو الذي يأتي مع الويندوز وإسمه :
المحرر : Editor، بهذا المحرر يمكنك مثلاً أن تصمم موقعا بأكمله من الصفر! كما يمكنك كتابة أكواد الجافا مباشرةً فيه.
أما أنظمة التشغيل الاخرى فهي أيضاً تحتوي على محرراتها فعلى سبيل المثال هناك vi على Unix، وكذلك على linux، هناك أيضاً Text edit على الماكنتوش...
بواسطة هذا البرنامج الصغير ( المحرر ) يمكنك كتابة برنامج جافا بأكمله بجميع أكواده، بعد ذلك يجب عليك حفظ هذا الكود في ملف بإمتداد : File.java. لكن هناك مشكلتين اساسيتين سوف لن يحلهما هذا المحرر البسيط؛ المشكلة الأولى هي أنك إن أردت كتابة برنامج كبير، فلن يتحقق لك ذلك إلا بمشقة الأنفس ! لماذا ؟ .. ببساطة لأن المحرر الذي يأتي مثلاً مدمجاً في الويندوز لا يحتوي على ألوان تفرق لك كلمات الكود لتسهيل قراءته وكذلك لتسهيل كتابته، ولا يحتوي على نوافذ متعددة تمكنك من كتابة أكواد عديدة في نفس النافذة مما يجعل كتابة برنامج كبير أمر شبه مستحيل!
المشكلة الثانية وهي أن كل ماكتبته لن يفيدك بشيء !.. ببساطة لأن كل ما كتبته هو عبارة عن نص لا يفهمه الحاسوب، وانما تفهمه أنت.
إذاً ماهو الحل؟؟ الحل ببساطة هو اننا نحتاج لأداة أخرى تقوم بترجمة ما قمنا بكتابته من أكواد للغة يفهمها الحاسوب، هذه الأداة هي المترجم.

ملاحظة : لا ننسى أن هناك محررات نصوص تدعم لغات البرمجة المختلفة، ويمكنك بمساعدتها كتابة أكواد مفهومة وواضحة كما تساعدك كذلك على التحرير،
نذكر منها : notpad++، Jedit، UltraEdit ..

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

الكود المكتوب :source code
يكون على شكل :example.java
وهو الشكل النصي الذي يصف البرنامج ويساعد المبرمج على فهم أوامره (البرنامج).
يتكون من سلسلة للأوامر التي يجب على المترجم تنفيذها . هذه البرامج تكون مكتوبة بلغة برمجة معينة وهي الجافا يعني لهجة للكتابة
لا يمكن أن يتم تنفيذ الكود المكتوب مباشرة من الحاسوب بل يجب ترجمته
الكود المكتوب يمكن أن يترجم إلى شيء اسمه الكود الناتج :bytecode .

الكود الناتج : Bytecode
يكون على شكل : example.class
هو ناتج ترجمة الكود المكتوب .
يمثل البرنامج الحقيقي
خفي ويعني هذا أنه لا يمكن قرائته كنص مثلا
لا يمكن إعادة ترجمته للكود المكتوب, ربما حفاظا على حق صاحب البرنامج .
يمكن تنفيذه على أي نظام تشغيل يتوفر على java virtual machine

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

الشرط الأساسي الذي يجب أن يحققه الحاسوب الذي نقوم بالبرمجة عليه هو أن يتوفر على بيئة الجافا ( مثال على ذلك بسيط فأنت محتاج لمنزل ومدينة ودولة! لكي تعيش!، وكذلك جافا فهي تحتاج لمكان أو بيئة لكي تعيش هي الأخرى )

بيئة التطوير
 
كما قلنا فإن بيئة جافا هي أين تعيش جافا، فلابد لها من مكان لكي تبرمج أكوادها.. ولا يكفي وجود حاسوب "مع الأسف!" لكن يجب وجود بيئة معينة،هذه البيئة تم تطويرها من طرف Sun Microsystems وقامت هذه الشركة المطورة بتسميتها JDK Development Kit سنرى إذاً مما يتكون أساساً ال-JDK
java Development Kit أو أدوات تطوير جافا هي البيئة الكاملة لتطوير البرامج بلغة الجافا، من دون هذه البيئة لن يتمكن أي حاسوب من تطوير وتنفيذ أي برنامج مكتوب بلغة جافا.
وهو يحتوي على المكونات التالية :
JRE : Java Runtime Envirement ويعتبر المكان الذي تعيش فيه جافا! ففي هذه المنصة ( platform ) تنفذ البرامج التي قمنا بترجمتها. لكنه لا يعتبر مكان لتطوير البرامج وذلك لأنه لا يحتوي على المكتبات الخاصة لتطوير الجافا، وكذلك فإنه لا يعتبر أداة تدخل في تطوير الجافا كالمترجم مثلاً..
مترجم جافا : compiler : مترجم الجافا المدمج في JDK هو javac، وله دور ترجمة مصدر البرنامج للبايتكود Bytecode، مصدر البرنامج يكون بإمتداد .java، وهو عبارة عن أكواد java نقوم نحن بتحريرها في المحرر.
Java Archiver : يأتي برنامج jar مدمج مع أدوات تطوير جافا ( معنى jar بالانجليزية هو قلة أو جرة )، و هو الذي يقوم بإنتاج ملفات jar. ملف jar هو عبارة عن ملف zip يمكن أن يحتوي على بيانات وصفية Metadata، هذه الملفات تستعمل في المقام الأول لتوزيع واحتواء مكتبة جافا.
Javadoc : هي عبارة عن تعليقات بال إتش تي م ل تقوم بوصف ما تقوم به الكلاس والوظائف ( سوف نتعمق في هذا كله في فقرة خاصة )

من هنا نستنتج أن الجزء المسؤول عن تنفيذ الأكواد في بيئة التطوير هو 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