ارجـع لــورا   مزيكا فور ايفر حتقطع نفسوياتك من الداونلود > خليك اونلاين > برمجة دعم مواقع ومنتديات

رد
 
أدوات الموضوع ابحث في الموضوع أنماط عرض الموضوع
قديم 07-16-2006, 07:00 AM   رقم المشاركة : 1
معلومات العضو
فتى من حوارى نيويورك
¤®§( Love You 4EveR )§®¤
 
الصورة الرمزية فتى من حوارى نيويورك
 

 

 
إحصائية العضو






 

فتى من حوارى نيويورك غير موجود حالياً إرسال رسالة عن طريق ICQ إلى فتى من حوارى نيويورك إرسال رسالة عن طريق AIM إلى فتى من حوارى نيويورك إرسال رسالة عن طريق MSN إلى فتى من حوارى نيويورك إرسال رسالة عن طريق Yahoo إلى فتى من حوارى نيويورك

 
إحصائية الترشيح

عدد النقاط : 24
فتى من حوارى نيويورك تم تعطيل التقييم

 

 

Red face


 

بسم الله الرحمن الرحيم

~~~ ~~~

لغة الجافا java Language:
هي لغة حديثة أنتجتها عام 1995م شركة SUN Micro System لتناسب التطبيقات الحديثة .
وهي تناسب تطبيقات الإنترنت حيث أصبحت هي قلب برمجة الإنترنت بما توفره من إمكانيات .
وتتصف لغة الجافا بالصفات التالية :
1- لغة برمجية تعمل بواسطة الأهدافOOP .
2- لها بيئة تشغيل خاصة بها JVM .
3- لها مكتبة فصائل Class Libraries .
4- تقوم على لغة C / C++ .
5- تعمل على معظم نظم التشغيل .

وفيما يلي شرح هذه النقاط :
1- لغة تلتزم بقواعد البرمجة بواسطة الأهداف Object Oriented Programming (OOP) : حيث وفرت كثير من الجهد الذي كان يبذل باستخدام البرمجة التقليدية ، حيث كانت البرمجة التقليدية توفر للمبرمج مكتبة من الدوالي إضافة إلى تركيب تقليدي للبرنامج وعلى المبرمج أن يستعمل الدوالي مع تركيب البرنامج لإنشاء التطبيقات مما يضطره لكتابة السطور الكثيرة أكثر من مرة ؛ لقد كانت وحدة بناء البرنامج هي الدالة .. في حين أتت البرمجة بواسطة الأهداف بفكرة جديدة هي إنشاء عناصر متكاملة تحتوي على بيانات ودوالي هي أساس إنشاء البرنامج .. وبالتالي أصبحت وحدة بناء البرنامج وحدة كبيرة هي الفصيلة أو العنصر Object مما سهل واختصر الكثير .

2- لغة لها بيئة تنفيذ خاصة JVM : للغة الجافا بيئة تشغيل للبرنامج هي JVM التي تقوم بترجمة البرنامج للغة الآلة وبالتالي فإن لغة الجافا غير مرتبطة بنظام التشغيل .

3- لها مكتبة فصائل قوية Class Libraries :نظراً لأن لغة جافا تعتمد على مفهومOOP فهي تحتوي على مكتبة فصائل قوية توفر معظم أو كل الفصائل المطلوبة للإعمال مثل التعامل مع الملفات وقواعد البيانات والشبكات و الرسومات المجسمة والحركة وكذلك التعامل مع الإنترنت .

4- لغة مبنية على لغة الـC,C++ : فعندما تم إنشاء لغة الجافا كان أساس بنائها لغة من أشهر وأقوى اللغات وهي C,C++ وبالتالي فهي لم تبدأ من حيث بدأ الآخرون بل من حيث انتهى الآخرون وهي لغة C++ و ثم إضافة الجديد في لغة الجافا .

~~~ ~~~

تعريفات هامة :
1- بيئة تشغيل الـJVM جافا .
2- مترجم برنامج JIT .
3- java Applet .
4- java Application تطبيق جافا .
5- مكتبة SDK , JDK .
تعريفات هامة :
1- بيئة تشغيل الجافا JVM .
2- مترجم برنامج JIT .
3- java Applet .
4- java .Application تطبيق جافا .
5- مكتبة SDK , JDK .

وفي مايلي شرح هذه التعريفات :
1- بيئة التشغيل “JVM” :
الحروف JVM اختصار للعبارة java Virtual Machine , وهي فكرة قامت جافا بإمشائها لتجعل لغة جافا تعمل على جميع أو معظم أنظمة التشغيل . وتقوم الفكرة على إنشاء طبقة وسيطة Software كأنها برنامج تشغيل للبرامج RunTime لكل نظام تشغيل يتم إنزاله أولاً على الأجهزة بحيث تفهم هي برامج جافا وتفسرها لنظام التشغيل ثم الجهاز ولهذا كان من مزايا لغة جافا أنها تعمل على كثير من نظم التشغيل الموجودة بعد إعداد JVM الخاصة بمعظم أنظمة التشغيل .. فلا يهم إذا كان البرنامج مكتوب لنظام التشغيل WINDOWS أو UNIX , المهم أن البرنامج يكتب ثم يحمل إلى الجهاز وعلى الجهاز يوجد JVM للنظام الموجود وبالتالي يعمل البرنامج .
2- java Applet :
نوع من أنواع التطبيقات الذي صمم خصيصاً للإنترنت حيث يقوم المطوّر بإعداد هذا البرنامج Applet ثم يستدعيه من خلال إستخدام ملف HTML بشرط تحميل برنامج Applet على الخادم server الموجود عليه ملف الـHTML . أما طريقة إنشاء Applet وطريقة إستدعائها من داخل ملف HTML فهذا ما سنتعلمه إن شاء الله خلال الدروس القادمة .
3- java Application تطبيق الجافا :
هو تطبيق يشبه التطبيقات المنشأة بجميع لغات البرمجة الأخرى يعمل مع نظام التشغيل بعيداً عن شبكة الإنترنت والمشهور عن لغة جافا أنها تعدّ برامج للإنترنت ولكن غير المشهور أيضاً أنها توفر كثير من نقاط القوة في إعداد أي تطبيق سواء مكتبي DISKTOP أو خاص بالشبكات CLIENTSERVER .


~~~ ~~~


طرق كتابة برامج الجافا :
توجد أكثر من طريقة لكتابة برامج الجافا وترجمتها منها :
(1) استعمال المكتبة JDK مباشرة مع استعمال أي محرر سطور :
تعتبر هذه الطريقة التقليدية هي استعمال أدوات JDK التي أنتجتها شركة SUN مع أي محرر سطور لإعداد البرنامج وهي الطريقة المتبعة عند شرح أجزاء لغة جافا ونبدأ كما يلي :
الأدوات المطلوبة لإستعمال هذه الطريقة :
1/ محرر سطور وليكن NoteBad " المفكرة " الموجود مع ويندوز .
2/ مجموعة JDK : ويمكنك الحصول على مكتبة JDK من موقع SUN .من هنا :J2SE download .
3/ أدوات المجموعة JDK :
- الملف Javac : وهو الملف التنفيذي المستعمل في ترجمة الملف المصدر إلى الصورة التنفيذية .
- الملفJava : هو البرنامج النسئول عن تنفيذ برامج java التنفيذية بعد تحويلها .
- الملف Applet Viewer : لعرض برنامج Applet للإختبار .

(2) استعمال برامج وسيطة مثل KAWA أو JCreator : يمكنك إنزالها من هنا : Download JCreator .

(3) استعمال البرامج المعدّة للغة الجافا مثل : Forte , JBuilder : يمكنك إنزالها من هنا : Download Borland JBuilder , Download Forte .



وفيما يلي توضيح بسيط لهذه الطرق :
(1) استعمال المكتبة JDK مباشرة وهي الطريقة التقليدية وذلك بإعداد مكتبة جافا أو مترجم لغة جافا على جهازك وهي JDK : java Developmenet Kit والتي توفرة شركة SUN مجاناً على موقعها هنا : java Development Kit .

(2) استعمال برامج وسيطة : وهي برامج معدّة لتسهيل كتابة برنامج لغة الجافا ولكنها ليست بيئة متكاملة . حيث توفر كتابة البرنامج وتنفيذه من خلال بيئة رسومية بشرط وجود مكتبة ومترجم جافا مسبقاً على الجهاز JDK يوجد برامج كثيرة لهذا الغرض مثل : برنامج Creator وكذلك Kawa .

(3) البرامج المعدّة للغة جافا : وهي أفضل وأقوى الطرق وذلك بإستعمال أحد البرامج التي تطلق عليها برامج visual حيث تتوفر جميع متطلبات إعداد تطبيق جافا مثل : البيئة السهلة للإعداد والمكتبة والمترجم ، ومن هذه البرامج الشهيرة Forte وهو من إنتاج شركة SUN وكذلك برنامج visual café وبرنامج الـ JBuilder وبرنامج الـ java Developer .


~~~ ~~~


مكونات Swing GUI ( Javax.swing ) :
إن المكونات swing هي مجموعة غنية من تحكمات واجهة تداخل المستخدم الرسومية ؛ كتبت من أجل أن تبدو وتتصرف بشكل نظام التشغيل نفسه على جهاز المستخدم . على العكس من مكونات AWT فالأخيرة لا تعتمد على مكونات GUI الأصلية ؛ إن زر AWT سيبدو مثل زر ويندوز على جهاز ويندوز ، زر ماكنتوش على كمبيوتر ماكنتوش ، وهكذا ..
تستخدم مكونات SWING نموذج الحدث نفسه مثل مكونات AWT و JavaBeans مع أن هذه المكونات تعرّف بعض الأحداث الجديدة .
تستطيع إنزالها من هنا : Javax.swing .



ما الفرق بين java و JavaScript


الفرق بينهما شاسع .... فهما لغتان مختلفتان تماما او لنقل لغة و سكريبت ...

لكن قبل ان نقوم بالتفصيل هذه بعض الفروق الاساسية بينهما:

1 - لغة الـ java يكون النص البرمجي لها "code" محفوضا في ملفات متعددة بينما في JavaScript فان نصها البرمجي مضمن ضمن صفحات الـ HTML التي تحتويها.

2 - لغة الـ JavaScript تستخدم لتعزيز قدرة الـ HTML على التحكم بطريقة عرض المعلومات على الشاشة بينما باستخدام java يمكن عمل "برامج" منفصلة كطبيقات سطح المكتب او حتى الـ applets .... او عمل الربط بين العميل و الخادم Client/Server مثل PHP او ASP

3 - يمكن دائما رؤية و تعديل نص الـ JavaScript من خلال اي برنامج تحرير نصوص ومن ثم حفظ الملف بصيغة html و عرضه على اي متصفح انترنت .... بينما برامج الـ java تحتاج الى عمل compile ومن ثم interpret لها قبل "تنفيذها".



البعد التاريخي:

الـ java بدأت كمشروع صغير عام 1995 في معامل شركة SUN Micro System الضخمة باسم green project وكان الهدف منها لتحكم بالاجهزة مبدئيا الى ان تطورت واصبحت كما نرى الآن .... اما الـ JavaScript فهي لغة منتجة من قبل شركة Netscape و هي تعتبر scripting language و قد قامت NetScape بشراء الاسم java من sun لكي يساعد في تسويق لغتهم الجديدة .....



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

- يمكن لاي برنامج معمول بلغة الجافا ان يعمل بشكل مباشر على اي framework بمعنى ان البرنامج يمكن ان يعمل على Windows Xp او Linux او Mac على عكس امكانيات لغات البرمجة الاخرى مثل ++C او حتى #C.

- هي الرائدة في تقنية الـ OO او برمجة المتجهات و تعتبر اكثر لغة تطبق الفكرة كاحد مميزاتها الجبارة.



البرامج المعمولة بالجافا تنقسم الى 3 انواع رئيسية

1- Applets وهي كائنات تعرض في صفحات الانترنت "ويمكن ان تنفصل عنها لتظهر في نافذة مستقلة" و توفر تفاعل على مستوى عالى مع المستخدم و اشهر امثلة عليها برامج المحادثة الشهيرة في Yahoo او Digichat المشهورة في المواقع العربية

2- Applications

يمكن ان تنتج الجافا برامج تعمل على سطح المكتب مستقلة تماما مثل برامج تحرير النصوص (عملت واحدا بنفسي !!) شبيهه جدا بالنوتباد مثلا او حتى متصفحات الانترنت

او مثل هذا البرنامج الذي يستخمد كعارض للصور

http://www.cs.umd.edu/hcil/photomesa/

3- تطبيقات الانترنت web applications

هنا نجد البرامج تعمل بوصل العميل مع الخادم تماما مثل لغة PHP و ASP و تدعم قواعد البيانات و غيرها الكثير

وافضل مثال هو موقع sun نفسه ....

اتمنى ان اكون الغيت بعض الخلط بين اللغتين java و JavaScript ..... طبعا لم افصل كثيرا في الـ JavaScript لانها تعتبر معروفة بالنسبة للكثيرين ....


أسئلة و اجوبة عامة لكل مبتدئ في الجافا

: ماهي بدايات لغة الجافا ؟؟
لغة الجافا هي من تطوير شركة صن المعروفة وكانت في البداية جزء منها مكتوب ب سي ++ وسي اما الان فهي مكتوبة من اولها الى اخرها بلغة الجافا.
طبعا اهم ما يميز الجافا انها لا تعتمد على(platform ) معين لانها تعمل على آلة الجافا الافتراضية JVM لذلك هي مستقلة عن طبيعة platform وهذا هو السبب الرئيسي لإنتشارها الواسع جدا.

س2ل الجافا هي الجافا سكريبت ؟
لا
يخلط كثير من المبتدئين بين هاتين اللغتين ولكن دعوني اوضح ماهي الجافا سكريبت في البداية التي هي من انتاج شركة نتسكيب وكانت في البداية تسمىlive code و اخذت تسمية الجافا سكريبت لسبب تجاري فقط لان الجافا كانت في اشد انتشارها.
الجافا سكريبت هي لغة بسيطة جدا مقارنة بالجافا فهي لغة Client Side أي انه يتم تنفيذها على متصفح الويب فالكود يرسل من السيرفر بدون معالجة ,حيث انه يعالج على جهاز الزبون ( client).

س3: ماهي الجافا ؟
توجد ثلاث نسخ للجافا وهي :
J2EE و J2SE و J2ME .لن ندخل في تفاصيلها ولكن سوف اتكلم على J2EE لانها هي الي عليها الكلام اما J2ME فهي تخص ال (wireless devices) بشكل عام يعني على اجهزة الجوال وغيرها .

س4اهي J2EE ؟
هي إختصار ل java 2 Enterprise Edition وهي تزودنا بالتطبيقات الكبيرة على مستوى الشركات الكبيرة وهي تحتوي على تقنيات كثيرة ( حول 12 تقنية ) أنظر الصورة الي اسفل سوف توضح لك أكثر.




س5اهي مترجمات ( IDE OR Compilers ) للجافا ؟
يوجد هناك العديد منها ولكنني شخصيا أفضل Jbuilder من شركة بورلاند المرموقة والان يوجد النسخة التاسعة منة فهو افضل ماجربت في الحقيقة, ولكنه يحتاج الى ذاكرة رام كبيرة لكي يعمل بصورة جيدة (طبعا عيبة البطء لانة مكتوب كامل بلغة الجافا والجافا عيبها انها بطيئة نوعاً ما ولكن مع تطور الاجهزة ربما يندثر هذا العيب).
طبعا هناك ايضا forte من صن وغيرها كثير.

س6اهو مدى انتشار الجافا خصوصا في الوطن العربي ؟
جواب:
في الحقيقة الجافا منتشرة في الدول المتقدمة بصورة كبيرة جدا وخصوصا في ( امريكا وبريطانيا ) ولكن مع الاسف فهي عالمنا العربي قليلة الانتشار وان كانت الجامعات أدخلتها ولكن منذ مدة بسيطة نسبياً.

س7اذا عن دعم الشركات العملاقة للجافا ؟
في الحقيقة أن ميكروسفت تحارب الجافا وهذة حقيقة مع الاسف فيمكن تلاحظون كثيرا ان الي مركبين ويندوز اكس بي يعانون من مشكلة عدم توفر JVM على الويندوز الذي كان في نسخة السابقة توجد فيه.
طبعا صن رفعت قضية على مايكروسفت وفازت بها في المحاكم الامريكية ووعدت مايكروسفت انها في النسخ القادمة سوف توفرها في الويندوز لكي لايضطر المستخدمين الى تحميلها من الانترنت.
ولكن هناك شركات عملاقة تدعم الجافا بكل تفاني مثلا عندك الاوراكل وكلكم يعلم ان Form 9i مبني على تقنية الجافا ابليت وايضا اي بي ام ( أم الشركات) ومايكروميديا وغيرها كثير.

س8اذا عن تقنيات الويب في الجافا ؟
في الحقيقة تكمن قوة الجافا الحقيقة في الشبكات بشكل عام وتراسل البيانات التي مع الاسف لاارى له حضور حتى على مستوى الجامعات اللهم القليل فقط.
الجافا تقدم عدد من التقنيات اهمها(طبعا في مجال الويب) :
JSP

APPLET

SERVLET

EJB

JAVABEAN

طبعا ابليت كما هو معروف هو كلاينت سايد فهو يرسل الكود من السيرفر ويعالج لدى الكلاينت اما البقية فهم سيرفر سايد حيث تتم معالجة الكود في السيرفر وترسل النتائج الى العميل.

س9: ماهي ال JSP ؟
هي لغة تمكنك من بناء صفحات انترنت ديناميكية وهي تشبة asp حقت مايكروسفت في المفهوم فقط .
طبعا JSP لغة بسيطة جدا تمكنك من دمج رموز ال HTML مع رموز JSP بحيث يمكنك من دمج كود جافا .

0: ماهو Servlet ؟
جواب:
باختصار ال جي اس بي هي امتداد لل سيرفلت يعني فقط تسهيلا لكتابة JSP وضعوا ال جي اس بي بالطبع هناك بعض الفروقات التي لا مجال لذكرها هنا ولكن افضل شي هو تكاملهما مع بعض .

1: ماهو javaBeans ؟
جواب:
هي كلاسات جافا لها بعض الشروط البسيطة تخدم مع الويب وفائتها الاساسية تقليل كتابة الكود بحيث يمكن استخدامها في اكثر من صفحة.
EJP هي بالمناسبة مكونات تكون موزعة بحيث تستطيع الشركة من خلالها تكامل الانظمة والتحكم في مستوى الامن والانسيابية.

2اهي سيرفرات الجافا على الويب؟
جواب:
اهمها و الكبار منها ( غير مجانية)
1- IBM WbSphere وهو بالطبع بيئة إحترافية بحد ذاتها وغنية بالمزايا والان يوجد النسخة 5.1
2- Oracle9iAs وهو من اسرع السيرفرات وهو من تطوير اوراكل .
3- Bea WebLogic وهو من السيرفرات المرموقة وحاليا توجد النسخة 8.1 أخرى(مجانية)
1-Tomcat وهو مجاني ومفتوح المصدر من شركة اباتشي المعروفة وهو المفضل لدى الكثيرين و النسخة الحالية هي 5.1
وغيرهم كثير .

3اهي الصعوبات الي تواجة مطوري الجافا في العالم العربي ؟
جواب:
في الحقيقة دعوني أجيب على هذا السؤال من خلال تجربتي الشخصية:
كنت قد نويت أن أعمل مشروع عبارة عن شركة للسيارات من خلال الانترنت وكنت حينها لا أعلم عن الويب شي (فقط القليل من asp) قررت أن أستخدم الجافا وخصوصا ان خبرتي في الجافا ابليكيشن والحمد لله جيدة. المهم نزلت أجوب مكتبات الرياض ومع الاسف لم أجد حتى الكتب التي أريدها لتعلم لغة JSP في حين ان رفوف الكتبة مليئة بكتب ASP.NET . دبرهتا بطريقة خاصة ومن بعض المواقع على النت الحمدلله استطعت اني انهي مشروعي ولكن السلبيات التي مريت بهاالامور :
1-حصولي على الكتب في منتهى الصعوبة .
2- مشاريع كبيرة تمت كتابتها بتقنيات مايكروسفت, حصلوا على دعم كبير بحيث ان الشركة توفر لهم الكتب المطلوبة والنصائح من المختصين لدى الشركة وهذا لم احصل علية لانني كتبت مشروعي بالجافا.
3-عدم انتشار اللغة بصورة كبيرة بحيث كل زملائي الذين اعرفهم كتبوا بلغات دوت نت لذلك لم استطع الاستفادة منهم.
4-عندما حاولت إستضافة موقعي مع الاسف لم أجد المناسب وذلك لقلة شركات استضافة الجافا(العربية).

ولكن هذا لايعني ان الجافا لغة ليست جيدة بل هي منتشرة جدا جدا في الدول المتطورة ولكن هي قليلة الانتشار في الوطن العربي , مع انني سعيد جدا لكتابة مشروعي بها فهي لغة رائعة حقا وقوية جدا.

4: هل اتعلم الجافا او .NET ؟جواب:
إجابة هذا السؤال تعتمد عليك أنت فإذا كنت تحب البرمجة وتعشق التحدي والمغامرة والجافا تناسب إحتياجك فعليك بها( لاتريد أن تعتمد على platform معين ).
إما إذا كنت خلاف ذلك فمن رأيي أن تتوجة الى الدوت نت فهي توفر لك كامل الدعم وهي بكل تاكيد أسهل من الجافا لانني كما ذكرت هناك الكثير من الكتب والكثير من الدعم والكثير من المحررات العملاقة و.. يكفي أنها من مايكروسفت.
وعموما الخلاصة ماذا تريده أنت من اللغة هو الذي يحدد إختيارك لها!

5:أريد أن أتعلم الجافا ولكن لا أردري أي الكتب أفضل ؟؟

بالنسبة للمبتدئين والمتوسطين أنصحهم بكتاب java How To Program من شركة Deitel™ فهو بحق كتاب رائع جدا ومناسب وسهل الاسلوب جدا (طبعا الكتب باللغة الانجليزية).متوفر في جرير الان(الطبعة الخامسة).
بالنسبة لل java database فهناك كتاب لم أرى قط مثلة حتى الان وهو كتاب رائع جدا جدا ولكن لازم تكون عندك خبرة بالجافا قبل ماتقراه وهو java Database Programming من Bible ورقم ال ISBN هو 0-7645-4924-3.
بالنسبة للويب :
Web Development with java Server Pages الطبعة الثانية
Core Servlets & java Server Pages من كتب شركة صن وهو كتاب رائع.

6ل الجافا صعبة ؟؟
هذا سؤال في الحقيقة أيضا يعتمد عليك فأصعب مافي الجافا بدايتها فقط ,فأذا تجاوزت البداية وأحببت اللغة فيكون الباقي سهل باذن الله.


7: ودي اتعلم جافا بس وين المواقع الجيدة ؟؟؟
جواب:
المواقع الي سوف أذكرها كلها باللغة الانجليزية.

www.java.sun.com هذا هو أهم المواقع فهذا هو الموقع الرسمي للغة الجافا وفية الكثير والكثير من الدروس وأنصحك بالمنتديات( Forums ) ستجد فيها ثروة بما تعنيه هذة الكلمة.

www.javaworld.com هذا مجلة عالم الجافا المشهورة وفي ارشيف هذة المجلة العديد من الدوس والمقالات المميزة وهي تعنى بآخر أخبار مايستجد للجافا من أخبار ومنتجات جديدة.

يمكنك البحث في (Google ) أكتب كلمة جافا وستجد الكثير من المواقع .


مدخل إلى البرمجة الشيئية أو الكائنية التوجّه Object Oriented Programming

خلال الأسطر القليلة التالية، سنلقي الضوء على مفهوم البرمجة الكائنية أو الشيئة Object Oriented Programming وهي ما يطلق عليه اختصاراً OOP، ماهيتها ومميزاتها.

فكّر بالكائنات Think about Objects:

ستتعرف في هذا الجزء على أهم المصطلحات المستخدمة في الـOOP كما ستفهم فكرة الـOOP إن شاء الله!
لو نظرنا حولنا في عالمنا الحقيقي لوجدنا جميع ما يحيط بنا عبارة عن "كائنات Objects": الناس، الحيوانات، النباتات، السيارات، الطائرات، البنايات، وحتى الكمبيوترات وغيرها. هذا هو معنى كلمة "كائن Object"، ومن الممكن أن نطلق نفس المصطلح على أي ممثل لأي فئة، فنطلقه على الفراولة لأنها تمثل أحد الفواكة، أو نطلقه مثلاً على الطاووس لأنه يمثل أحد الطيور... وهكذا.
ويمكننا تصنيف الكائنات إلى صنفين:

كائنات نشطة (حية) Animate Objects: وهي التي نحس فيها فنجد لها حركة ونشاط.
كائنات غير نشطة (غير حية) Inanimate Objects: هي التي لا نلاحظ لها نشاط أو حركة أو وقع أينما وجدت.
وجميع الكائنات بصنفيها لها:

خصائص Attribute مثل: الحجم، اللون، الوزن، الشكل...ألخ.
سلوك Behavior فمثلاً: الطفل (كائن) يبكي، وينام، ويمشي، ويأكل (سلوكيات).
الإنسان وخصوصاً المبرمج يتعلم عن الكائنات بمعرفة خصائصها، وملاحظة (تجربة) سلوكها، فمن الممكن أن يكون لكائنات مختلفة نفس الخصائص وسلوك متقارب.

البرمجة الشيئية Object Oriented Programming تقوم بنمذجة Modeling كائنات العالم الحقيقي في برنامج نظير software counterpart. هذا البرنامج يحمل إيجابيات العلاقات بين الفئات classes relationships حيث أن أي كائن من أي فئة يحمل جيمع مميزات وصفات characteristics هذه الفئة أو بالأحرى يرثها لأنه ممثل لفئته. كما أن الفئات الجديدة -تسمى فئة فرعية subclass- ترث صفات الفئات التي أُنتجت وتكونت منها -تسمى الفئة الأم superclass- كما يرث الطفل جينات أبويه. وهذه الفئة الجديدة والتي تعتبر subclass، من الممكن أن تكون superclass لفئات جديدة أخرى ينشئها المبرمج.

الـOOP كذلك تقوم باحتواء البيانات (Data (attributes والطرق (Methods (behavior في حزمة package هي ما نطلق عليه "كائنات Objects"؛ حيث أن بيانات وطرق أي كائن ترتبط ببعضها ارتباط وثيق. هذا الكائن يتميّز بخاصية التخفي Information Hiding نعني بالتخفي هنا أنه بإمكان الكائنات الاتصال والتعامل مع بعضها البعض مع عدم معرفة أحدها كيف تكوّن الآخر! أي أن تفاصيل التكوين هي المخفيّة حتى عن الكائنات نفسها؛ فمن المؤكد أننا نعرف كيف نقود السيارة بكفاءة عالية دون معرفة تفاصيل هندستها. تسمى هذه الخاصية في البرمجة بـAbstraction أي تجريد البيانات.

برامج الجافا جميعها قائمة على برمجة المبرمج لمجموعة فئات خاصة به تسمى user-defined classes باستخدام الفئات والمميزات التي توفرها اللغة ومن ثم استخدام هذه الفئات جميعها أو بعضها في برامجه
حيث أن كل فئة تحتوي على بيانات data ومجموعة دوال functions تقوم بتشكيل هذه البيانات، تسمى البيانات في فئات الجافا بـ: instance variable أو data member. ويطلق على الدوال اسم الطرق methods. فأي طلب لأي فئة معرّفة في اللغة كأنواع البيانات مثل int يسمى "متغير variable"، بينما طلب أي فئة من الفئات التي عرّفها المبرمج user-defined يسمى "كائن object".

البرمجة الشيئية أو الكائنية Object Oriented Programming:

عند حديثنا عن البرمجة الشيئية، نجمل الحديث في كلمتين: الوراثة وتعدد الأشكال Inheritance & Polymorphism، وهما من التقنيات الفعّالة للتعامل مع البرمجيات المعقدّة:

فالوراثة inheritance هي شكل للبرامج software المعدّة للاستعمال مع الفئات classes الحديثة والتي أنشئت من فئات موجودة مسبقاً وأخذت عنها خصائصها وسلوكها وأضافت إليها القدرات التي نحتاج إليها في هذه الفئة الجديدة. الوراثة ماذا تعني عملياً؟! تعني بالضبط ما الذي تم وراثته و كيف يمكن التعديل عليه وما الذي لا يمكن وراثته -يتضح ذلك بالأمثلة-. هذه الخاصية توفر الكثير من الوقت للمبرمج وتقطع عنه أشواطاً في تطوير برنامجه.
وتعدد الأشكال polymorphism يسمح لنا بكتابة برنامجنا في صورة قابلة لتغيير واسع النطاق؛ سواء كان التغيير لفئات موجودة مسبقاً أو تغيير مستقبلي لإنتاج برامج جديدة. هذه الخاصية تسهل علينا توسيع قدرات نظامنا.
وكما ذكرنا في الأعلى أن الفئات الجديدة -تسمى فئة فرعية subclass- ترث صفات الفئات التي أُنتجت وتكونت منها -تسمى الفئة الأم superclass- كما يرث الطفل جينات أبويه. وهذه الفئة الجديدة والتي تعتبر subclass، من الممكن أن تكون superclass لفئات جديدة أخرى ينشئها المبرمج. وهكذا تمتد لدينا سلسلة من الوراثة بين الفئات extends، يحكمها قانون "الوراثة المفردة Single Inheritance" حيث ينص هذا القانون على:
تنشأ أي فئة فرعية من فئة أم واحدة، فالجافا لا تدعم التوارث المتعدد multiple inheritance كالسي++ ولكنها تدعم مفهوم الواجهات Interfaces، فنظام الواجهات يساعد الجافا على تحقيق فائدة التوارث المتعدد مع عدم وجود الأخطاء المترابطة الناتجة عن هذا التوارث المتعدد!

تذكر أن أي كائن ينتمي إلى فئة فرعية فهو ينتمي إلى الفئة الأم لهذه الفئة الفرعية ويحمل خصائصهما وسلوكهما.

وبعد هذه المقدمة وهذا التوصيف لعالم الـOOP نلاحظ أن جُلّ التركيز في هذا النوع من البرمجة يقع على الـفئات Classes، فالمبرمج يستخدم الفئات المبنية مسبقاً في اللغة مع الفئات التي يبنيها هو كي ينتج برنامجاً بالجافا، ربما يفسر هذا الاسم.


حزم الجافا (Java Packages)

ماهي حزم الجافا؟
لماذا نحتاج حزم الجافا؟
كيف نستطيع انشاء حزم الجافا؟
ماهي حزم الجافا؟

التعريف: حزم الجافا هي مجموعة من الفئات المترابطة، و كل مجموعة من الفئات تنظم تحت حزمة معينة لأجل تحديد الهوية. و الحزمة تتكون من:

حزم فرعية تحت الحزمة الأم.
مجموعة من الفئات المتعلقة بالحزمة الأم.
بعض الأمثلة: الحزمة java تحتوي على حزم فرعية منها applet, io, alng, net, awt & util و لو أخذنا الحزمة الفرعية Java.awt لحصلنا على حزمة فرعية من awt مثل image و يكون الامتداد لها Java.awt.image



لماذا نحتاج حزم الجافا؟

مبرمجي الجافا يعتمدون على الحزم لتكوين فئات مترابطة داخل هذه الحزم و الأسباب هي:

العثور على الفئات بشكل سريع و استخدامها بالبرامج.
تنحدر الفئات تحت الحزم لكي لا تتعارض اسماء الفئات مع بعضها البعض.
للتحكم بالفئات بشكل كامل.
مسميات الحزم و الحزم الفرعية و الفئات: الحزمة تتكون من حزم فرعية و فئات متفرعة، لكن لا نستطيع تسمة الحزمة أو الحزم الفرعية أو احدى الفئات باسم واحد. و مثال على ذلك: الحزمة java.awt لديها حزمة فرعية بالاسم image. لكن لا نستطيع تسمية احدى الفئات بالاسم image، لأن الاسم محجوز للحزمة الفرعية و العكس صحيح.


المصفوفة المتناثرة Sparse Matrix

سنتعلم أخي الكريم في هذا الدرس كيفية انشاء class واستخدامه في برنامجنا، كما ستتعرف على المصفوفة المتناثرة وكيفية معالجتها.

المصفوفة المتناثرة أو مصفوفة الأصفار ( Sparse Matrix ) :


لو ألقينا نظرة على المصفوفة التالية التي تحوي 6 صفوف و6 أعمدة وتتكون من : 6x 6 = 36 عنصر :





سيتضح لنا من الوهلة الأولى أن أكثر عناصر هذه المصفوفة عبارة عن " أصفار " ؛ تسمى المصفوفة التي أكثر عناصرها أصفار بـمصفوفة الأصفار أو المصفوفة المتناثرة " Sparse Matrix " . ومن الصعب علينا تحديد ما إذا كانت المصفوفة عبارة عن Sparse Matrix أو لا .. ولكن يتضح لنا ذلك عن طريق النظر؛ ففي المصفوفة السابقة يوجد فقط 8 عناصر لا تساوي الصفر من أصل 36 عنصر، بينما البقية كلها أصفار .
نعالج الـ Sparse Matrix بالتكنيك الذي سنشرحه في درسنا لتوفير المساحة في الذاكرة حيث نستطيع تخزين العناصر الغير مساوية للصفر فيها فقط ؛ وذلك من خلال استخدام مصفوفة وحيدة لكل عنصر من عناصرها يوجد 3 صفات هي : الصف والعمود والقيمة الخاصة به؛ ويتم ذلك عن طريق استخدامنا لـClass كالتالي :


package Sparse_Matrix;

public class SM extends Object {
private int row , col , val ;

//-----------<< SM constructor >>------------------------
public SM (int row1 ,int col1 ,int val1 ) {
setrow(row1) ;
setcol(col1) ;
setval(val1) ;
}

//-----------<< Method to perform row >>-----------------
public int setrow( int row1 ){
return row = row1 ;
}
//-----------<< Method to perform column >>--------------
public int setcol( int col1 ){
return col = col1 ;
}
//-----------<< Method to perform value >>---------------
public int setval( int val1 ){
return val = val1 ;
}
//-----------<< Method to Print >>-----------------------
public String Print() {
return ( row +" "+ col +" "+ val +"
") ;
}
}


ولكن يجب أن نراعي هنا أن ترتيب العناصر في هذه المصفوفة الوحيدة سيكون تابع لأحد هذه الصفات وهو الصف " row " و لابد من أن يكون تصاعدياً ..

إذن .. يتضح لدينا أن تعريف الـ Sparse Matrix كما هو موجود في قاموسنا كالتالي :
مصفوفة ذات بعد واحد تحوي الكثير من العناصر المتشابهة ، والتي غالباً ما تساوي صفر، لكل عنصر فيها ثلاث صفات : الصف ، العمود ، والقيمة التي تسند إليه .

* Sparse_Matrix : a set of triples < row , col , value > , where row & column are integers & from a unique combination , & value comes from the set item .
* Sparse_Matrix Create(max_row , max_col) ::= return a Sparse_Matrix that can hold up to max_item = max_row X max_col ,& whose maximum row size is max_row , & whose maximum column size is max_col.

ومن هنا نستطيع إعادة رسم الـ Sparse Matrix كما في الشكل التالي :








حيث أن a[0].row تحتوي عدد الأسطر الكلي للمصفوفة الأصلية ( في هذا المثال = 6 ) , كذلك a[0].col فهي تحوي عدد الأعمدة الكلي للمصفوفة الأصلية ( في هذا المثال = 6 ) , وأيضاً a[0].value عدد العناصر الغير مساوية للصفر فقط ( في هذا المثال = 8 ) .
ولكي نعرف رقم الصف لأي عنصر ننظر لـ Field row , وبالمثل إذا أردنا أن نعرف رقم العمود فننظر لـ Field col وستكون قيمة هذا العنصر مخزنة في Field value . والثلاثي < row , col , value > سيكون مرتب في المصفوفة على حسب الصفوف " تصاعدياً " كما ذكرنا سابقاً ..
ولكن كيف نستطيع كتابة شيفرة لإنشاء هذه المصفوفة بلغة الجافا ؟ هذا ما سنعرفه ان شاء الله خلال الأسطر التالية :





1) في البداية نقوم بعمل ملف ونسمّيه: Sparse_Matrix مثلاً كما اعتمدنا في هذا المثال.
2) ثم نقوم بعمل كلاس نسميّه SM ونخزّنه في الملف السابق الذكر بعد أن نعمل فيه package Sparse_Matrix ونكتب في هذا الكلاس الكود السابق.
3) ثم نقوم بعمل Application ونضع فيه إستدعاء للكلاس السابق أي : import Sparse_Matrix.SM .. ونكتب فيه شيفرة لمعالجة المصفوفة المتناثرة بالتسلسل التالي:

سنفترض في مثالنا الحالي أن المصفوفة مكوّنة من 3 صفوف و3 أعمدة ..

وبعد ذلك نسمح للمستخدم بإدخال العناصر كمصفوفة عادية شريطة أن تكون أكثرها مساوية للصفر ونطبع المصفوفة بالطريقة التقليدية العادية.

ثم نقوم بإنشاء الـ Sparse Matrix ؛ نخزّن في البداية عدد الصفوف الكلي وعدد الأعمدة الكلي في كل من a[0].row و a[0].col .. ثم نضع عداداً = 1 كفهرس لكي نبدأ التخزين ..

نقوم بعمل Loop يمّر على كل عناصر المصفوفة العادية ويسأل ما إذا كان هذا العنصر مساوياً للصفر أما لا ؟
إذا اتضح أن العنصر لا يساوي الصفر .. نقوم بتخزين رقم الصف الموجود فيه هذا العنصر وكذلك رقم العمود ثم نخزّن قيمة العنصر باستخدام العداد الذي جعلنا قيمته =1 كفهرس لأول عنصر يقابلنا غير مساوي للصفر .. ثم نزيد قيمة العداد بواحد لكي يفهرس العنصر المخزن الجديد .. وهكذا إلى أن ننتهي من جميع عناصر المصفوفة الأصلية .

الآن قمنا بتخزين جميع القيم الغير مساوية للصفر في الـ Sparse Matrix ولكن يتبقى Field واحد لم نخزّن به شئ .. أتعلمون ما هو ؟
إنه الـ Field الخاص بعدد العناصر الغير مساوية للصفر في المصفوفة الأصلية (a[0].val ) .. ونستطيع معرفة عدد العناصر الغير مساوية للصفر من خلال العداد الذي فهرس العناصر ..
ولكن نلاحظ هنا أن هذا العداد داخل Loop عندما انتهى التخزين قد زادت قيمته بواحد على عدد العناصر الغير مساوية للصفر؛ فيجب علينا أن نقوم بانقاص قيمته بمقدار واحد ثم نخزنها في a[0].val ...

الآن نستطيع نقوم بطباعة المصفوفة المتناثرة الناتجة لدينا.

وأليك الشيفرة كاملة:









import Sparse_Matrix.SM;
import javax.swing.*;

public class Sparse_MatrixO {
public static void main (String args[])
{
int Matrix [][] ;
int i , j , q ,count = 1 ;
SM SparseMatrix ;
SparseMatrix= new SM(0,0,0);
String x,output="";
output+="The Normal Matrix :
";
JTextArea outputarea = new JTextArea(10,20);
Matrix = new int[3][3];
//-----------<< To Read & Print Normal Matrix >>-------------------
for(i=0 ; i<3 ; i++){
for(j=0 ; j<3 ; j++){
x=JOptionPane.showInputDialog("plz. Enter the value of element
");
q = Integer.parseInt(x) ;
Matrix[i][j] = q ;
output += Matrix[i][j] +" " ;
if ( Matrix[i][j] != 0 ) count++ ;
} // end of j Loop
output += "
" ;
} // end of i Loop
//-----------<< To Make & Print Sparse_Matrix >>-------------------
output +="
The Sparce_Matrix :
row col value
--------------------------------------------------
" ;
SparseMatrix.setcol(3);
SparseMatrix.setrow(3);
SparseMatrix.setval(count-1);
output += SparseMatrix.Print() ;
for(i=0 ; i<3 ; i++){
for(j=0 ; j<3 ; j++){
if ( Matrix[i][j] != 0 ) {
SparseMatrix.setcol(j);
SparseMatrix.setrow(i);
SparseMatrix.setval(Matrix[i][j]);
output += SparseMatrix.Print() ;
} // end of if
} // end of j Loop
} // end of i Loop

outputarea.setText(output);
JOptionPane.showMessageDialog(null,outputarea,"Spa rse_Matrix", JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
}




طبعاً، في برنامجنا المتواضع أدخلنا العناصر عنصراً عنصراً، وهي طريقة غير عملية بتاتاً مع التطبيقات الكبيرة، حيث أننا في التطبيقات الكبيرة نخزن المصفوفة في ملف ونقوم بقراءة عناصرها منه.


البحث الثنائي (1) Binary Search

طريقة البحث الثنائي Binary Search:

يصادف المبرمج دوماً العمل مع كمية بيانات كبيرة مخزنة في مصفوفة، ومن الضروري أن يستخدم تكنيك معين يحدد له ما إذا كان العنصر الذي يبحث عنه key ينتمي إلى هذه المصفوفة أم لا! هذا التكنيك يطلق عليه "البحث" وله عدة أنواع، من أشهرها وأكثرها فاعلية طريقة البحث الثنائي.

ولكي نطبق أحد خوارزميات الـBinary Search على مصفوفة ما نتبع الخطوات البسيطة التالية:

الخطوة الأولى والأهم والتي لا يمكن تطبيق الـBinary Search لولاها هي:
ترتيب المصفوفة تصاعدياً أو تنازلياً أو أبجدياً على حسب نوع البيانات المخزنة فيها!
تحديد أول عنصر في المصفوفة ولنسمه i، وآخر عنصر فيها ولنسمه مثلاً j.
تحديد العنصر الذي يقع في منتصف هذه المصفوفة ولنسمه k.
بعد ذلك يمكننا تطبيق تكنيك البحث الثنائي على مصفوفتنا، وهناك عدة خوارزميات للبحث الثنائي، سأشرح أحدها في هذا الدرس على مصفوفة ذات بيانات رقمية إن شاء الله. وفي الدرس الثاني سنتعرف على المكتبة الجاهزة والتي توفرها الجافا لتطبيق الـBinary Search على مصفوفة ذات بيانات حرفية strings بإذن الله.

خوارزم البحث الثنائي Binary Search Algorithm:

تقوم فكرة البحث الثنائي على تقسيم المصفوفة إلى نصفين واستبعاد النصف الذي لا ينتمي إليه المفتاح key الذي نبحث عنه، كيف ذلك؟
عن طريق تحديد العنصر الذي يقع في منتصف هذه المصفوفة، ثم نقارن هذا العنصر مع المقتاح الذي نبحث عنه كالتالي (تذكر أن مصفوفتنا مرتبة تصاعدياً أو تنازلياً):

إذا كان يساويه نكون قد وجدنا العنصر الذي نبحث عنه.

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

وفيما عدا ذلك: إذا كانت قيمة المفتاح أكبر من قيمة العنصر الأوسط في المصفوفة، إذن نحتاج أن نبحث فقط في نصف المصفوفة الثاني ونستبعد البحث في نصفها الأول.

بعد ذلك: نطبق نفس الخطوات من 1 إلى 3 في النصف الجديد الذي نبحث فيه، فنقوم بتقسيمه إلى قسمين، ونقارن المفتاح مع العنصر الأوسط الجديد، بنفس الترتيب الذي ذكر في الخطوات 1 إلى3 السابقة.

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

Array[]={0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28}

والسؤال الآن: كيف نكتب code يمثل هذا الخوارزم بالجافا أو السي؟!
وللإجابة على هذا السؤال سيصادفنا تساؤل آخر: كيف نرتب المصفوفة تصاعدياً او تنازلياً؟!
والإجابة:
لترتيب المصفوفة فهناك عدة خوارزميات للترتيب منها على سبيل المثال: (Bubble sort, sorting by Selection, sorting by Insertion, Shell sort, & Quick sort).
ولا مجال لذكرها الآن، حيث سنعتمد في الـcode على ترتيبنا نحن للمصفوفة بشكل صحيح.

والآن، لنستعرض معاً code يطبق تكنيك binary search على مصفوفة ذات عناصر رقمية بلغة الجافا، حيث أن j=high، i=low, & k=middle :

// Binary search of an array
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;

public class BinarySearch extends JApplet
implements ActionListener {
JLabel enterLabel, resultLabel;
JTextField enter, result;
JTextArea output;

int a[];
String display = "";

public void init()
{
Container c = getContentPane();
c.setLayout( new FlowLayout() );

enterLabel = new JLabel( "Enter key" );
c.add( enterLabel );

enter = new JTextField( 5 );
enter.addActionListener( this );
c.add( enter );

resultLabel = new JLabel( "Result" );
c.add( resultLabel );

result = new JTextField( 22 );
result.setEditable( false );
c.add( result );

output = new JTextArea( 6, 60 );
output.setFont(
new Font( "Courier", Font.PLAIN, 12 ) );
c.add( output );

// create array and fill with even integers 0 to 28
a = new int[ 15 ];

for ( int i = 0; i < a.length; i++ )
a[ i ] = 2 * i;
}

public void actionPerformed( ActionEvent e )
{
String searchKey = e.getActionCommand();

// initialize display string for the new search
display = "Portions of array searched
";

// perform the binary search
int element = binarySearch( a, Integer.parseInt( searchKey ) );

output.setText( display );

if ( element != -1 )
result.setText("Found value in element " + element );
else
result.setText( "Value not found" );
}

// Binary search
public int binarySearch( int array[], int key )
{
int low = 0; // low subscript
int high = array.length - 1; // high subscript
int middle; // middle subscript

while ( low <= high ) {
middle = ( low + high ) / 2;

// The following line is used to display the part
// of the array currently being manipulated during
// each iteration of the binary search loop.
buildOutput( low, middle, high );

if ( key == array[ middle ] ) // match
return middle;
else if ( key < array[ middle ] )
high = middle - 1; // search low end of array
else
low = middle + 1; // search high end of array
}

return -1; // searchKey not found
}

// Build one row of output showing the current
// part of the array being processed.
void buildOutput( int low, int mid, int high )
{
DecimalFormat twoDigits = new DecimalFormat( "00" );

for ( int i = 0; i < a.length; i++ ) {
if ( i < low || i > high )
display += " ";
else if ( i == mid ) // mark middle element in output
display += twoDigits.format( a[ i ] ) + "* ";
else
display += twoDigits.format( a[ i ] ) + " ";
}

display += "
";
}
}


وإذا أحببت أن تطلع على الكود بلغة السي، تفضل بزيارة الوصلة التالية:http://www.c4arab.com/showlesson.php?lesid=1496

أما إذا أحببت أن تطلع على خوارزم آخر للـBinary search، تفضل بزيارة هذه الوصلة:http://www.c4arab.com/showlesson.php?lesid=1498

عدد مرات البحث في أي مصفوفة عن عنصر محدد باستخدام الـBinary Search:

لو تسائلنا عن أقصى عدد من مرات البحث باستخدام الـBinary Search في أي مصفوفة، لوجدنا أنه يُعطى من إيجاد القوة التي يرفع إليها رقم 2 كي يطعينا العدد الذي يزيد عن عناصر المصفوفة بواحد. أي أنه أول قوة لـ2 والتي تُعطي رقم أكبر من عدد عناصر المصفوفة بواحد.

ففي مثالنا: استخدمنا مصفوفة من 15 عنصر، نلاحظ ان العدد الذي يزيد على عدد عناصر المصفوفة بواحد، أي العدد 16 ينتج من القوة الرابعة لرقم2 (2^4=16) وذلك يعني اننا نحتاج على الأكثر لأربع مرات مقارنة في الـBinary Search حتى نجد العنصر الذي نبحث عنه! فمن الممكن أن نجده من أول مرة في المقارنة، ومن الممكن أن نجده في ثاني مرة، أو ثالث مرة أو رابع مرة.. أو أن يكون غير موجود في المصفوفة!

وفي مثال آخر: لو بحثنا في مصفوفة تحوي 1024 عنصر، سنحتاج إلى 10 مرات للمقارنة كحد أقصى، ونعرف ذلك بتكرار قسمة عدد العناصر على رقم 2 إلى أن نصل إلى العدد واحد في خارج القسمة (وسبب ذلك هو أننا بعد كل مقارنة نقوم بإلغاء نصف عناصر المصفوفة من الاعتبار)، فبتكرار قسمة 1024 على رقم 2 نحصل على القيم التالية على الترتيب: 512، 256، 128، 64، 32، 16، 8، 4، 2، ورقم 1. نلاحظ أن العدد 1024 (2^10) قسم على رقم 2 عشر مرات حتى حصلنا على العدد 1.
نستنتج من ذلك، أن القسمة على اثنين تقابل مرة واحدة من المقارنة في الـBinary Search Algorithm. فمصفوفة بـ 1048576 (2^20) عنصر تستلزم على الأكثر 20 مرة من المقارنة حتى نجد العنصر الذي نبحث عنه، ومصفوفة تحوي بليون عنصر، تستلزم على الأكثر إلى 30 مرة من المقارنة حتى نجد العنصر المطلوب فيها!


البحث الثنائي (2) Binary Search

بعد أن تعرفنا على خوارزم الـBinary Search وطبقناه على مصفوفة ذات عناصر رقمية، نتعرف في هذا الدرس على المكتبة الجاهزة والتي توفرها الجافا كي نطبق الـBinary Search على مصفوفة ذات عناصر حرفية strings..

جميع المكتبات التي سنستخدمها هنا وفرتها الـJava Collections Framework، وسنستخدم مكتبتين:

Collections.binarySearch: والتي تأخذ list كـ argument أول لها، وتأخذ Object كـ argument ثاني. فتقوم بالبحث عن الـObject داخل الـList باستخدام تكنيك الـbinary search والذي شرحناه في الدرس الأول.

Collections.sort: والتي تأخذ List كـ argument وحيد لها، وتقوم بترتيبها أبجدياً.

ولكي نستطيع استخدام هذه المكتبات، لابد لنا من أن نضع جميع العناصر الحرفية في list (سواء اخترنا ArrayList, LinkedList or Vector) وسنختار هنا الـArrayList. ويوضح الـcode التالي كيفية تعريف هذا النوع من الـlist وكيفية تطبيق هذه المكتبات عليه، حيث أن الـbinarySearch Method التي سنستخدمها ستعطينا في المخرجات:

موضع المفتاح (العنصر الذي نبحث عنه) في المصفوفة إذا وجد فيها. أي أننا سنحصل هنا على قيمة مساوية للصفر أو أكبرمنه.

قيمة سالبة إذا لم يكن المفتاح (العنصر الذي نبحث عنه) ينتمي إلى المصفوفة.

وإليك الشيفرة كاملة:

// Using algorithm binarySearch
import java.util.*;

public class BinarySearchTest {
private String colors[] = { "red", "white", "blue","black", "yellow", "purple", "tan", "pink" };
private ArrayList aList; // ArrayList reference

public BinarySearchTest()
{
aList = new ArrayList( Arrays.asList( colors ) );
Collections.sort( aList ); // sort the ArrayList
System.out.println( "Sorted ArrayList: " + aList );
}

public void printSearchResults()
{
printSearchResultsHelper( colors[ 3 ] ); // first item
printSearchResultsHelper( colors[ 0 ] ); // middle item
printSearchResultsHelper( colors[ 7 ] ); // last item
printSearchResultsHelper( "aardvark" ); // below lowest
printSearchResultsHelper( "goat" ); // doesnt exist
printSearchResultsHelper( "zebra" ); // doesnt exist
}

private void printSearchResultsHelper( String key )
{
int result = 0;

System.out.println( "
Searching for: " + key );
result = Collections.binarySearch( aList, key );
System.out.println( ( result >= 0 ? "Found at index " + result : "Not Found (" + result + ")" ) );
}

public static void main( String args[] )
{
new BinarySearchTest().printSearchResults();
}
}



والصورة التالية تريك شاشة المخرجات:



ربط قاعدة بيانات اوراكل بالجافا

سوف نقوم بعملية ربط الجافا بقاعدة البيانات اوراكل..
سوف نستخدم Windows XP و Oracle9i database بالدرس،

اولاً: نقوم بفتح ODBC Data Source Administrator من لوحة التحكم







ثانياً: نقوم بإضافة User Data Sources عن طريق الزر Add، سوف تجد لائحة و بنهايتها سوف تجد Oracle in OraHome92 و هو الدرايفر المطلوب. قم بالضغط على
Finish.





ثالثاً: سوف تظهر نافذة الـ Oracle ODBC Driver Configuration و منها نقوم بكتابة الـ Data Source Name و اسم المستخدم User ID، و قم بعمل Test Connection للتأكد من الاعدادات المطلوبة. و اخيراً قم بالضغط على OK للموافقة على الدرايفر.





و هذا مثال تطبيقي


import java.sql.*;
public class Oracle{
public static void main(String[] args){
Connection connection;
Statement statement;
ResultSet result;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(Exception e){}
try{
connection = DriverManager.getConnection("jdbcdbc:ORC_Library ","scott","tiger");
statement = connection.createStatement();
result = statement*****cuteQuery("select * from members");
while(result.next()){
System.out.println(result.getString("firstname") + " " + result.getString("lastname"));
}
result.close();
statement.close();
connection.close();
}
catch(SQLException e){
System.out.println(e.toString());
}
}
}


بالسطر التالي:

connection = DriverManager.getConnection("jdbcdbc:ORC_Library ","scott","tiger");


ORC_Library: يجب يكون الاسم المكتوب في Data Source Name.
scott,tiger هم اسم و كلمة مرور المستخدم لقاعدة البيانات.

بالسطر التالي:


result = statement*****cuteQuery("select * from members");


هنا تكتب استعلام الـ SQL

بالسطر التالي:


System.out.println(result.getString("firstname") + " " + result.getString("lastname"));


اظهار الجداول من الجهه اليمنى (JArabicTable)

لعمل ذلك نقوم بوراثة الكائن JTable ثم ننشأ الرسام الخاص بنا الذي يطبق دوال TableCellRenderer

الفئة JArabicTable تقوم بتحديد الرسام الخاص بها وهو في هذه الحالة ArabicCellRenderer:

public class JArabicTable extends JTable {
public TableCellRenderer getCellRenderer(int row, int column) {
return new ArabicCellRenderer();
}
}

الان نقوم بتطبيق الرسام وما يهمنا هنا هو ان نحدد اتجاه الخانات:

class ArabicCellRenderer implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table,Objectvalue,boolean isSelected,boolean hasFocus,int row,int column) {
final JLabel l = new JLabel();
l.setText(value.toString());
if(isSelected) {
l.setBackground(new Color(68,134,250));
}
else {
l.setBackground(Color.white);
}
l.setComponentOrientation(ComponentOrientation.RIG HT_TO_LEFT);
return l;
}
}

الان قم باستعمال JArabicTable بدل JTable بالبرامج.


كيفية استخدام UndoManager بالبرامج

اي شخص يحتاج الى Undo و Redo لاحد برامجه،، يستطيع من خلال هذا الدرس تطبيق الطريقه و استخدامها.

بالبداية: اضف الباكيج للبرنامج:


import javax.swing.undo.*;

ثانياً: نقوم بنسخ الكود التالي للبرنامج:

//UNDO AND REDOACTION CLASSES
//THIS PASRT OF CODE WAS TAKEN FROM THE NOTEPAD DEMO FOUND IN THE JDK1.4.1 DEMO DIRECTORY
class UndoAction extends AbstractAction{
public UndoAction(){
super("Undo", new ImageIcon("images/undo.gif"));
setEnabled(false);
}
public void actionPerformed(ActionEvent e){
try{
undo.undo();
}
catch (CannotUndoException ex){
System.out.println("Unable to undo: " + ex);
ex.printStackTrace();
}
update();
redoAction.update();
}
protected void update(){
if(undo.canUndo()){
setEnabled(true);
putValue("Undo", undo.getUndoPresentationName());
}
else{
setEnabled(false);
putValue(Action.NAME, "Undo");
}
}
}
class RedoAction extends AbstractAction{
public RedoAction(){
super("Redo", new ImageIcon("images/redo.gif"));
setEnabled(false);
}
public void actionPerformed(ActionEvent e){
try{
undo.redo();
}
catch (CannotRedoException ex){
System.out.println("Unable to redo: " + ex);
ex.printStackTrace();
}
update();
undoAction.update();
}
protected void update(){
if(undo.canRedo()){
setEnabled(true);
putValue("Redo", undo.getRedoPresentationName());
}
else{
setEnabled(false);
putValue(Action.NAME, "Redo");
}
}
}

ثالثاً: نقوم بانشاء الاوبجكت للبرنامج:

//for using undo & redo
UndoManager undo = new UndoManager();
UndoAction undoAction = new UndoAction();
RedoAction redoAction = new RedoAction();

اخيراً: نقوم اضافة الـ UndoAction و الـ redoAction للـ Menu كأنه MenuItem و سوف تستطيع استخدامها بشكل تلقائي:

MenuName.add(undoAction);
ManuName.add(redoAction);

** للتوضيح .. اذا كان المنيو مافي اي صور .. نستبدل هذا الكود:

super("Undo", new ImageIcon("images/undo.gif"));

بهذا الكود:

super("Undo");

و نفس الطريقه مع كلاس RedoAction ..


استخدام الهتمل (HTML) بمكونات الـ Swing

تستطيع استخدام و عرض الهتمل (HTML) في معظم أدوات الـ Swing، سوف نقوم بعرض الطريقة عن كيفية عرض الهتمل (HTML) في بعض الأدوات مثل الـ JLabel و الـ JButton.

لنبدأ بمثال بسيط بدون استخدام الهتمل (HTML):

الكود:



هنا تستطيع رؤية نتيجة البرنامج




سوف تلاحظ أن البرنامج سليم و قام بالمطلوب لكن هل تريد عرض الـ st, nd, rd & th على أعلى الرقم مثل 1st. تستطيع عمل ذلك من خلال وسم الهتمل (HTML).

الكود



و هذه هي النتيجة:




تستطيع عمل المزيد من خلال الهتمل (HTML)، ككتابة النصوص الطويلة بعدة سطور و اضافة الخطوط و الخ.

بالمثال التالي سوف نقوم بعرض مثال عن أهمية استخدام الهتمل (HTML) مع مكونات الـ Swing.

سوف نستخدم النصوص الطويلة لإظهار النتائج بالشكل المطلوب:

الزر الأول بنص طويل.
الزر الثاني بنص طويل و تقسيم النص على عدة سطور باستخدام n.
منطقة لكتابة النصوص الطويلة و باستخدام n.
الزر الثالث و سوف نقوم باستخدام الهتمل (HTML).
الكود:




و هنا تستطيع مشاهدة النتيجة، فإذا قمت بتكبير الاطار (Frame) ستلاحظ الفرق بين استخدام الهتمل او بدونه.





تستطيع عمل المزيد و المزيد باستخدام الهتمل (HTML). سوف تشاهد كيفية كتابة النصوص بجميع التأثيرات عليها



هذه هي النتيجة:




سوف تصبح الأمور أسهل اذا قمت باستخدام لوحات الأسلوب الساقط (Cascading Style Sheets) مع الهتمل (HTML). مثال ذلك: تستطيع انشاء style sheet باسم jbutton.css.



و بعد ذلك نقوم بكتابة كود الجافا -يجب عليك تحديد اسم و مكان الملف باستخدام getResource()- :

الكود



النتيجة:



بعض الصور مأخوذة من موقع الجافا الرسمي

بنهاية الدرس، تستطيع الاستفادة من الهتمل (HTML) بعمل بعض الأمور التي تصعب عليك أحياناً أو باختصار الوقت


كلمات البحث

mazika 4ever اغانى عربى Mazika اغانى اجنبى افلام عربى افلام اجنبى عروض مصارعة مزيكا برامج مزيكا العاب مزيكا كليبات مزيكا mazika





gym hg[hth java language




gym hg[hth java language gym hg[hth java language

 

التوقيع

لا تكسر ابداً كل الجسور مع من تحب فربما شاءت الأقدار لكما يوماً لقاء آخر يعيد ما مضى ويصل ما انقطع... فإذا كان العمر
الجميل قد رحل فمن يدري ربما انتظرك عمر أجمل

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

1/5/2015


   

رد مع اقتباس
قديم 07-16-2006, 02:28 PM   رقم المشاركة : 2
معلومات العضو
Esoft
مزيكاوى مستجد
 
إحصائية العضو





 

Esoft غير موجود حالياً

 
إحصائية الترشيح

عدد النقاط : 10
Esoft is on a distinguished road

 

 

إفتراضي


 

No Comment

فتى من نيويورك

استاذ ورئيس قسم والله

اشته على المعلومات الجامده دى

وانشاء الله نشوف كل الجديد منك

 

   

رد مع اقتباس
قديم 07-16-2006, 08:44 PM   رقم المشاركة : 3
معلومات العضو
فتى من حوارى نيويورك
¤®§( Love You 4EveR )§®¤
 
الصورة الرمزية فتى من حوارى نيويورك
 

 

 
إحصائية العضو






 

فتى من حوارى نيويورك غير موجود حالياً إرسال رسالة عن طريق ICQ إلى فتى من حوارى نيويورك إرسال رسالة عن طريق AIM إلى فتى من حوارى نيويورك إرسال رسالة عن طريق MSN إلى فتى من حوارى نيويورك إرسال رسالة عن طريق Yahoo إلى فتى من حوارى نيويورك

 
إحصائية الترشيح

عدد النقاط : 24
فتى من حوارى نيويورك تم تعطيل التقييم

 

 

إفتراضي


 

ربنـــــاااااا يخليـــــك يا حبـــــى

شكــــرا على مرورك الجميـــل واللــــه

ويسلملى زوقك العالـــــى

تحياتـــــــــــــــــــــــــىىىىىىىىىىىىىىىىىىىى ىىىىى

 

   

رد مع اقتباس
قديم 07-17-2006, 08:41 AM   رقم المشاركة : 4
معلومات العضو
mostafaatef
مزيكاوى شديد طحن
 
إحصائية العضو






 

mostafaatef غير موجود حالياً إرسال رسالة عن طريق MSN إلى mostafaatef إرسال رسالة عن طريق Yahoo إلى mostafaatef

 
إحصائية الترشيح

عدد النقاط : 10
mostafaatef is on a distinguished road

 

 

إفتراضي


 

مشكور يا مافيا على المعلومات الجامده مووووووووت دى كلها

 

التوقيع

<div align="center"></div>

   

رد مع اقتباس
قديم 07-17-2006, 12:58 PM   رقم المشاركة : 5
معلومات العضو
فتى من حوارى نيويورك
¤®§( Love You 4EveR )§®¤
 
الصورة الرمزية فتى من حوارى نيويورك
 

 

 
إحصائية العضو






 

فتى من حوارى نيويورك غير موجود حالياً إرسال رسالة عن طريق ICQ إلى فتى من حوارى نيويورك إرسال رسالة عن طريق AIM إلى فتى من حوارى نيويورك إرسال رسالة عن طريق MSN إلى فتى من حوارى نيويورك إرسال رسالة عن طريق Yahoo إلى فتى من حوارى نيويورك

 
إحصائية الترشيح

عدد النقاط : 24
فتى من حوارى نيويورك تم تعطيل التقييم

 

 

إفتراضي


 

العفـــــــــو يا حوبـــــــى

تحياتـــــــــــــــــىىىىىىىىىىىىىىىىىىىىىىىىىى

 

   

رد مع اقتباس
قديم 07-22-2006, 12:53 PM   رقم المشاركة : 6
معلومات العضو
NORTONFOX
مزيكاوى مستجد
 
إحصائية العضو





 

NORTONFOX غير موجود حالياً

 
إحصائية الترشيح

عدد النقاط : 10
NORTONFOX is on a distinguished road

 

 

إفتراضي


 

رائع يا مافيا

 

   

رد مع اقتباس
رد

العلامات المرجعية

الكلمات الدلالية
لغة, الجافا, java, language

أدوات الموضوع ابحث في الموضوع
ابحث في الموضوع:

البحث المتقدم
أنماط عرض الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code هو متاح
الإبتسامات نعم متاح
[IMG] كود متاح
كود HTML معطل

الإنتقال السريع إلى:

المواضيع المتشابهة
الموضوع كاتب الموضوع المنتدى مشاركات المشاركة الأخيرة
برنامج الجافا الذي لاغنى عنه لأي جهاز Sun Java JRE 6 Update 21 بتحديثات جديده torbidoo الكومبيوتر والانترنت 5 09-02-2011 04:34 PM
حصريــاً :: أحدث ألعاب الجافا :: لجميع الأجهزة التى تدعم الجافا ::Java Games 2010 Mix :: بحجــــــم 18 ميجــا :: على اكتر من سيرفر Rozeno العـاب موبـــى فــــون 3 09-17-2010 06:18 AM
حصريا وبانفراد : احدث اصدار من الجافا Java Runtime Environment 1.6.0.18 WzaM الكومبيوتر والانترنت 14 03-06-2010 06:09 PM
Top Java Games August 2009 - افضل العاب الجافا للموبايل على اكثر من سيرفر Pinky العـاب موبـــى فــــون 10 10-02-2009 06:20 AM
دلع موبيالك بأحدث العاب الجافا الرهيبة واحدث الاصدارات Mobile Java Games 240x320 lodyvw العـاب موبـــى فــــون 4 02-26-2009 01:51 PM

Bookmark and Share

RSS RSS 2.0 XML MAP HTML

كل الأوقات هي بتوقيت GMT +3. الساعة الآن 10:51 AM.

أقسام المنتدى

مزيكـا فور ايفـر | منتديات مزيكا فور ايفر العامه | خليك اونلاين | فرفشه ونعنشه | أغانى مزيكا فور ايفر | مزيكا فور ايفر الإدارة | سينمــااا مزيكــــا فور ايفــــر | دليل اخبار المنتدي وقوانينه والشروحات الهامه | مـ،ـوقف صـ،ـداقااات وترحـ،ـيب المزيكـاويـة | كــن مــــع اللـــــه | القسم الرياضى العام | مكان مكحرت خاص بالتماسيح والسحالى | عيـ،ـادة مزيكـا فور ايفـر | جــراج مزيكـا فور ايفر,, بيب:بيب:: | الكومبيوتر والانترنت | يا مكحرت يا رايق | العـب مع مزيكـا فور ايفـر | العـاب مزيكـا فـور ايفـر المجنونـة | كلمـاااات الاغانــــــــى | البـ،ـوم صـ،ـور مزيكـ،ـا فـ،ـور ايفـر | كليبات عربية | كليبات اجنبية | الشكـاوى والاقتراحـات مـن المزيكـاوية | المــــواضيــــع الجـــــامدة طحـــــن | بـــــدروم مزيكـــااا فــــور ايفـــــر | مشـرفيـن وادرييـن مزيكـا فور ايفـر | شعبــى فـى شعبــى | مزيكا فور ايفر افلام عربية | اخبار النجوم | القـسـ،ـم العـ،ـام لمزيكـا فـور ايفر | كرتون مزيكا فور ايفر | غـرايب وعجـ،ـايب المزيكاويـة | ريمكسـات مزيكــا فـــور ايفــــر | مــشـ،ـاكـ،ـل الحـ،ــب | الشعـ،ـر والكـ،ــلامـ الحـــ،ــ،ـلــــووو | قـ،ـصص وحكـ،ـايـات مزيكـ،ـا فور ايفـر | الالبومـــاااات الكاملــــــة | مسـلسـلات مزيكـا فور ايفـــر | مزيكا فور ايفر افلام ومسلسلات اجنبى | ترجمات الافلام | مسابقات والغاز | برامـج وشروحـات واخبـار موبـى فـون | ويفــات وكليبـات موبـى فــون | العـاب موبـــى فــــون | رسائـل وثيمـات موبـى فـون | برمجة دعم مواقع ومنتديات | شـروحـات ودروس الفـوتو شـوب | صـ،ـووور نجـ،ـوم العـ،ـرب | صــ،ـور نجـ،ـوم الغـ،ـرب | بوسترات الالبومات والافلام العربية والاجنبيه | أدوات الفـوتو شـــوب | تصاميم الاعضاء والاستفسارات | مقالب وعصر الاعضاء | مـــوبـايـل مزيكـا فور ايفر | صـ،ـور كـرتونـ , انمــى | قسم الاكسيسوريز و والازياء والموضة اللى البنات تحبها | الهـم مـ،ـم الاكـ،ـلات يعنـى وشغل المطبـخ | مالتميديا اسلامية | Singles | Full Albums | Full Discography | مزيكـا فور ايفر تـى فـى | الألبومات الكاملة [Full Discography] | مسرحيات مزيكا فور ايفر | قسم للديكو وكل ما يخص البيت | قسم الجمال والميك أب | أزياء تماسيحنا الحلوووووين | عروض الأستضافه والتصميم من مزيكا فور ايفر | مسلسلات مزيكا فور ايفر الأنجلش | افلام هندى وكل ما يخص سينما بولييود | الاغـــانـــى العـــربيـــــة | الاغـــانـــى الاجنبيـة | قسم الاغانى وكليبات وانترفيوهات الهندى | صور واخبار نجوم بولييود | طلبات وترجمات الافلام الهندية | المسلسلات الاذاعيــة | زمن الفن الجميل | منتدى سلاسل الأفلام | مواضيع الاعضاء | منتدى الشيرنج العام | قسم الإشتراكات | قسم الدعم الفني | قسم الاستفسارات | قسم الأهداف والفيديوهات الرياضية | قسم الأخبار والصور الرياضية | قسم الراب والهيب هوب | اهداف وفديوهات ومباريات كاس العالم 2010 | اخبار وصور كاس العالم 2010 | قسم الافلام الاجنبية القديمة وما قبل عام 2009 | قسم الافلام الاجنبية المترجمة | قسم الافلام الاجنبية المدبلجة | برامج الحماية | برامج الشات | نسخ الويندوز وبرامج معالجة النظام | منتديات المصارعة الحرة | عروض NXT الإسبوعية | عروض SuperStars الإسبوعية | عروض TNA الإسبوعية | عروض SmackDown الإسبوعية | عروض RAW الإسبوعية | قسم الماتشات المنفردة و هوم فيديو | العروض الشهرية PPV والسنوية | برامج الملتميديا والكوداكز | منتدي ستار اكاديمي | قسم الصور والأخبار | قسم اليوميات والـ sms والايفال ونتائج النومنيه | قسم الأغاني والصوتيات | قسم البرايمات | صور واخبار المصارعين | ميديا رمضان 2012 | اسلاميات | مسلسلات رمضان 2012 | برامج تليفزيونية رمضان 2012 | أخبـ،ـار ثـ،ـورة أم الدنيـ،ـا | ميـديـ،ـا رمضـ،ـان 2013 | مسلسلات رمضان 2013, | برامج تليفزيونية رمضان 2013, | اسلاميات | ميديا رمضان 2014 | برامج تليفزيونية رمضان 2014 | مسلسلات رمضان 2014 | اسلاميات |



Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.

3 4 5 6 7 9 10 12 13 15 16 18 19 20 21 22 23 24 25 26 28 29 30 31 34 35 36 37 39 40 41 42 43 44 45 46 47 51 53 54 55 56 57 58 59 60 61 62 63 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 84 85 86 87 88 89 90 91 94 95 97 98 99 100 101 102 103 110 111 118 120 121 122 123 124 128 129 130 131 132 133 134 135 136 137 138 139 140 141 153 154 155 156 157 159 161 162 163 164 166 167 168 169