تعلم الجافا : ما هي الجافا

الـ جافا هي لغة برمجة من الجيل الثالث (المستوى الثالث) تم اصدارها لأول مرة عام 1995 عن طريق شركة صن ميكروسيستمس. و تتميز هذه اللغة بأنها كائنية التوجه كليا مما يجعلها مناسبة جدا لتطوير النظم المعقدة جدا و في نفس الوقت فهي بسيطة و سهلة الاستخدام فيمكن استعمالها بسهولة لتطوير برمجيات بسيطة كذالك.

من مميزات الجافا ان جميع البرمجيات التي تكتب بالجافا لا يتم ترجمتها للغة الآلة مثل باقي لغات البرمجة بل يتم ترجمتها إلى ما يسمى بالـ ByteCode (تحفظ كملف بإمتداد “.class”) وهذه الأخيرة عبارة عن لغة وسيطة بين لغة البرمجة و لغة الآلة بالتالي فإن برمجيات الجافا تعمل على جهاز جافا الإفتراضي” (Java Virtual Machine)و هو عبارة عن برنامج مشغل لبرمجيات الجافا، مما يجعل برمجيات الجافا غير قابلة للتشغيل في حالة عدم وجود هذا البرنامج و لكن في نفس الوقت فإن هذه الخاصية تجعل لغة الجافا أقوى بكثير من نظيراتها حيث أنه بفضل هذه الخاصية يمكننا تشغيل اي برنامج جافا كتب على أي نظام تشغيل على أي نظام تشغيل آخر دون الحاجة لإعادة عملية البرمجة والترجمة.

صنعت لغة جافا حتى تقدم بعض الخدمات المتميزة عن لغات الأخرى و هي :

  • الإنتقالية (portability) : و هي امكانية تشغيل برمجيات الجافا على أي نظام تشغيل كما ذكرنا بالأعلى

  • الأمان (security) : كون برمجيات الجافا لا تعمل إلا عن طريق جهاز جافا الإفتراضي فبالتالي فإن هذا الجهاز يضع حدودا لإمكانيات بعض البرمجيات مما يعيق إمكانية صنع برمجيات مخربة عن طريق هذه اللغة

  • كائنية التوجه (Object Oriented): أن ابسط برنامج يمكن عمله بالجافا لا بد ان يتبع توجه البرمجة الكائنية التي تسهل الكثير و الكثير من المشاكل بالنسبة لمتطور البرمجيات كما سترون في تدوينات قادمة

  • —- (Distributed): يمكن صنع برامج جافا تعمل على الشبكة و تتخاطب مع بعضها البعض بكل سهولة.

مع أن لغة الجافا تختلف كثيرا عن قريناتها في طريقة عملها و في خصائصها إلا أنها تتشابه كثيرا في قواعد تركيب و كتابة شفرتها بلغة الـ C++ المشهورة ، مما يسهل عملية تعلم الجافا لمبرمجي هذه اللغة ، أما إذا كنت جديدا في عالم البرمجة فلا عليك فإننا سنأخذك خطوة بخطوة إلى داخل عالم البرمجة بالجافا ثم سيكون الأمر بين يديك لتطوير نفسك بالتدريب المتواصل.

تاريخ الجافا

بدأ ظهور الجافا في العالم كمشروع لشركة صن يسمى اواك” (OAK) في عام 1991 و تحد قيادة أب الجافا جيمس غوسلينغ“. كان هدف المشروع صنع لغة برمجمة تعمل على اي جهاز صغير، خلال فترة صغيرة تغيرت أهداف المشروع و تغير المشروع نفسه إلى جافا وقد اصدر الإصدار الأول منها عام 1995. كان الإصدار الأول من جافا يهتم بتوفير امكانية صنع بريمجات الويب ( التي تعمل في متصفح الانترنت) و خلال و قت وجيز اصبحت معظم متصفحات الإنترنت تدعم الجافا بسبب امكانيات العالية و الثبات والأمان التي وفرتهم الجافا في تلك الفترة.

في عام 1998 تم تطوير الجافا بشكل جذري و اصبحت تسمى جافا2 و من اهم التطويرات التي وضعت في هذه الإصدارة هي امكانيات الجافا في الواجهة الرسومية للمستخدم.من ثم كان هنالك العديد من تطويرات للجافا هنا نوجزها

JDK 1.1.4 (Sparkler) September 12, 1997

JDK 1.1.5 (Pumpkin) December 3, 1997

JDK 1.1.6 (Abigail) April 24, 1998

JDK 1.1.7 (Brutus) September 28, 1998

JDK 1.1.8 (Chelsea) April 8, 1999

J2SE 1.2 (Playground) December 4, 1998

J2SE 1.2.1 (none) March 30, 1999

J2SE 1.2.2 (Cricket) July 8, 1999

J2SE 1.3 (Kestrel) May 8, 2000

J2SE 1.3.1 (Ladybird) May 17, 2001

J2SE 1.4.0 (Merlin) February 13, 2002

J2SE 1.4.1 (Hopper) September 16, 2002

J2SE 1.4.2 (Mantis) June 26, 2003

J2SE 5.0 (1.5.0) (Tiger) September 29, 2004

Java SE 6 (1.6.0) (Mustang) December 11, 2006

Java SE 7 (1.7.0) (Dolphin) قريبا


العديد من التطويرات الجافا التي لا يزال تطويرها مستمرا وخلال السنين تطورت الجافا و اصبحت تستعمل لصنع برامج مكتبية ، بريمجات الإنترنت، صفحات انترنت ، بريمجات اجهزة الجوال و غيرها الكثير.

منصات الجافا

تقدم لغة برمجة الجافا اكثر من منصة عمل للمبرمجين و مطوري النظم. كل من هذه المنصات لها خصائص و تقنيات تختلف عن بعضها البعض مما يجعل كل من هذه المنصات متخصصة في تطوير انواع معينة من برمجيات الجافا دون غيرها.

فلنرى كل من هذه المنصات و ما تقدمه لنا كمبرمجين و مطوري نظم:

  • Java 2 Standard Edition (J2SE) :
    تعتبر هذه المنصة الأكثر استخداما في الجافا لتطوير برمجيات المكتبية و (Appletes).
    عموما توفر هذه المنصة وحدات البناء الأساسية لأي برنامج جافا مثلا:

    • الأمور الأساسية بالجافا : توفر اساسيات الكائنات و وحدات تعريف المتغيرات و النصوص و غيرها من الأمور الأساسية في لغة الجافا في رزمة مثل Java.lang

    • إمكانيات القراءة و الكتابة : التي توفر وسيلة الكتابة و القراءة للبرمجيات إما من و في الملفات، قواعد البيانات ، الشبكات و غيرها متوفرة في رزمة Java.io

    • المكتبات المرئية : هي مكتبات تساعد في تكوين الواجهة الرسومية للمستخدم و أشهر رزمتين لتكوين الواجهات الرسومية هم : Java.awt, and Javax.swing

    • التعامل مع قواعد البيانات : توفير امكانية إدخال البيانات و البحث عنها، أغلبها في رزمة java.sql
      و هنالك غير هذه الكثير من الرزم المفيدة المتوفرة مع هذه المنصة

  • Java 2 Micro Edition (J2ME) :
    مجموعة من مكتبات الجافا التي توفر امكانية صنع بريمجيات تعمل في بيئة تفتقر لقوة الحوسبة الكاملة مثل الأجهزة الصغيرة و اجهزة الهاتف النقال. اشتهرت الـ J2ME بسبب توفيرها بيئة سهلة لتصميم برمجيات اجهزة الهاتف النقال و ايضا امكانية ان يعمل البريمج على اكثر من نوع من انواع الهواتف.

  • Java 2 Enterprise Edition (J2EE) :
    هذه المنصة تستعمل لتطوير بريمجات الجافا التي تعمل على جهة الخادم مثل صفحات الـ (JSP) و السيرفرليتس و غيرها من الأدوات و البريمجات المستعملة في تطوير المواقع و البرامج الشبكية.

كما ان هنالك منصات للجافا لا تأتي مع الجافا نفسها ولا هي من صنع صن ميكروسيستمس على سبيل المثال (وليس الحصر) الـ GWT والـ android و هاتين المنصتين هما من صنع جوجل الأولى لبرمجة تطبيقات الويب و الثانية لتطوير برامج تعمل على نظام تشغيل جوجل للجوالات الأندرويد.

إضافة لهذه المنصات هنالك العديد من اصناف او لغات مستخلصة من الجافا مثل الجـ روبي والـ جايثون و هما شبيهتان بالروبي و البايثون ولكنهما تعملان على جهاز جافا الإفتراضي مما يعني أن هذه اللغة تترجم إلى الجافا أولا ثم إلى البايت كود (طبعا هذا النوع من اللغات المعتمدة على الجافا لا تتلخص على هاتين اللغتين بل هنالك مجموعة كبيرة من لغات البرمجة تعمل بهذه الطريقة)

Read More

نظم التحكم بالإصدارات

انظمة التحكم بالإصدارات أو انظمة التحكم بالشفرة المصدرية تعتبر اداة مهمة جدا ﻷي مبرمج و ان كان يعمل على المشروع لوحده ، طبعا لو كان يعمل مع فريق من المبرمجين تصبح الحاجة لهذه الأنظمه مهما جدا

إنه من المحزن ان أغلب مطوري الويبو البرمجيات في منطقتنا لا يستعملون انظمة تحكم بالإصدارات و ان كانوا يستعملونها فبإجبار من المدير أو رئيس القسم دون الفهم بمدى أهمية هذه الأداة . فأغلب المبرمجين سيقولون لك ” إنني اعمل لوحدي على المشروع فلماذا استعمل هذه الأداة التي في نهاية ستزيد على أعمالي عملا اضافيا دون منفعة تذكر ” !!!! و الأسوأ من ذلك أن تسمع بعضهم يقولون ” إننا نعمل في فريق مبرمجين صغير جدا (إثنان أو ثلاث مبرمجين ) و يمكننا استعمال الـ شيرد فولدر ” نعم نعم !!!! أرجوكم !!!

لا أقول انني من معتنقي استخدام هذه الإداة من فترة طويلة بل بدأت في استخدامها خلال السنة الماضية فقط و لكن لمدى فائدتها قررت كتابة هذه المدونة عنها مع العلم بوجود تدوينات عربية جميلة جدا تتكلم عن هذا النوع من الأدوات مثل مدونة الويب 2.0
فالنذكر بعض اهم فوائدها


آلة الزمن هل ترغب في الحصول على آلة الزمن (بس مو بتاعة رحلة عنابة ) لكي ترجع إلى الوراء عدة أيام و تمنع نفسك من كتابة بعض الدوال او الفنكشنس التي كتبتها، او انك حاولت تطبيق فكرة جديدة قبل شهر والآن ترى آثارها الجانبية تدمر النظام الذي تبرمجه كليا !! بسيطة باستخدامك لأي من نظم التحكم بالإصدارات يمكنك الرجوع بالزمن و منع نفسك من تطبيق تلك الفكرة.!! فنظام تحكم الاصدارات يسمح لك برؤية الشفرة المصدرية ﻷي نقطة في زمن المشروع و التعديل عليها


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


التزامن بهذا ستنتقل الشفرة المصدرية بينك و بين أعضاء الفريق تلقائيا و كل جديد تكتبه و يكتبونه سيتوفر عند الجميع بطريقة افضل من الشيرد فولدر


تتبع العمل نعم كل ما تقوم به انت و فريقك متتبع على النظام التحكم بالمصادر (كل سطر تكتبه في الشفرة المصدري) او تغيره او تلغيه سيسجل ان فلان الفلاني كتب هذا السطر او غير في هذا السطر بهذا لا احد يستطيع ان يلقي لوم اخطائه على اي فرد آخر من الفريق


التفرع هل عملت على مشروع ضخم والآن هذا المشروع في طور الإستخدام و ان في حاجة ان تصنع مشروع شبيه جدا به مع بعض التغييرات (ربما الشكل أو بعض الأمور المتعلقة ببيئة العمل، او دالة او دالتين مختلفات ) يمكنك في نظام التحكم بالمصادر ان تصنع تفرع لمشروعك حيث تكون لديك مشاريع متفرعة من بعضها البعض و بهذا يمكنك ايضا الحصول على جميع الخصائص السابقة ولكن على كلا المشروعين فيمكنك معرفة ما غيرته في المشروع الأول مما أدى إلى مشاكل في المشاريع المتفرعة من هذا المشروع و ما شابه ذلك

هذه بعض فوائد انظمة التحكم بالمصادر التي خطرت في بالي و احببت ذكرها و ان شاء الله ستكون هنالك تدوينات أخرى في هذا الموضوع ربما المرة القادمة سأضع تدوينة للمقارنة بين هذه الأنظمة

النسخة الإنجليزية من المقالة

Read More

version controling

Version Control Systems or Source Control Systems are very important tool for any developer even if s/he is working alone !!

it is sad that many developers around here do not understand the importance of source controling , mostly they will say ” I am working alone so why i need to add another overhead activity in my work” , or even worse some small teams will say “well we are working on different parts of the project and having a shared folder and that is more than enough for us” !!!!!!!! common !.
May be getting used to develop (during college and school days) without source controling makes it an alien concept which every one around here (oman) is trying to avoid , but the truth is once any one knows the reall benifits of source controling they will never do even the smallest script without using it.
  • for a starter how about having a time machine for your code that will allow you to go back in time to any place in the history of your project coding if you are using version controlling you will be able to go to any previews versions (comits) you have made in the system. so that is a greate backup /restore functionality.
  • Easily Compare any two points in the history, or history with the current version , this is better than the time machine you can very easily know what have changed in any two versions of your code

  • Synchronization : the code will be automatically shared between you and other team members with much better & easier control and access than shared folders
  • Tracking : the code share and synchronization is done with full tracking of who did what (no one can blame you on their mistakes). and that is a million time better than shared folders cause every thing is tracked and protected (to the code lines level )
  • Branching : do you have created a big project which is in production, and need to do small changes to make it usable on different environment , or on slightly different requirements? If yes most probably without version controlling you will do copy the whole project and create a new project and treat them as two different projects. But the fact is you will Need in some point of time to know what changes you have done in the first project two create the second one, or you will need change the new one back to the first one, or change the real system to have the extra features you have added in the second project, all these are possible in version controlling systems using branching feature.

these were some of the features of version controlling maybe in some of the coming posts i will do a comparision between different version controlling tools.

Read More

البطاقة الذكية وتوحيد البيانات

البطاقة الذكية هي البطاقة التي تحوي على شريحة إلكترونية يتم فيها حفظ للبيانات، ومن أمثلتها بطاقة الهواتف النقالة SIM وبعض البطاقات البنكية، هذا بالإضافة إلى بطاقة الأحوال المدنية عندنا في سلطنة عٌمان.

لقد سمعت من فترة ليست بالبعيدة من أحد أصدقائي عن أن بنك مسقط قد طرح خدمة جديدة وهي إمكانية إيداع مبالغ نقدية بالبطاقة الشخصية (الأحوال المدنية) وبذلك لا تلزم بحمل بطاقة الحساب البنكي لدفع مبالغ ورسوم في الجهات الحكومية والخاصة، وسميت هذه الخدمة بـ e-Purse . وليس بالجديد على العٌمانين أن هذه البطاقة أيضاً منذ أن أتت قد ألغت رخصة القيادة، أي أنها هي بحد ذاتها تحوي على رخصة القيادة.

وبالإستمرار على هذا النهج ونحو حكومة إلكترونية، فأتوقع أيضاً أن توحد هذه البطاقة كافة السجلات الخاصة بالفرد (البطاقة الشخصية، ورخصة القيادة، والحساب البنكي، والبطاقة الصحية في المستشفيات، وبطاقة القوى العاملة، و… إلخ)

أرى أن هذا شيء جيد لكن ماذا عن الآمان إذا أن بإستطاعة الشخص الذي يأخذ بطاقتك أن يولج إلى العديد من حساباتك في البنوك والمستشفيات وغيرها (center-point of failure) أي أن إخترق شيء واحد يؤدي إلى ضياع الكثير.

على العموم هذا هو مصير التقنية، دائماً التقدم فها (الإعتماد عليها) يؤدي إلى زيادة مخطارها في حالة الفشل.

Read More