المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : تعلم البرمجة بلغة الجافا


المدرس العربي
08-06-2007, 05:38 PM
بسم الله الرحمن الرحيم
اللهم ارزقنا فهم النبيين وحفظ المرسلين وإلهام الملائكة المقربين
أهلا بكم في رحاب موقع المدرس العربي ومنتدى المدرس العربي مع لغة البرمجة الساحرة
لغة الجافا بجناحيها جافا ابلت وجافا ابليكشن
المدرس العربي
www.deyaa.org

قصة الجافا

كان ياما كان" في سالف العصر والزمان في ولاية كاليفورنيا ببلاد الأمريكان شركة ذات شان اسمها صن ميكروسيستيمز مضى على ميلادها عشر سنوات في بداية التسعينيات من القرن الذي فات
شرعت في مشروع كبير لتشغيل الأجهزة الالكترونية ذات المعالجات الدقيقة بطريقة تفاعلية بحيث يتم التحكم فيها بكود برمجي واختارت أجهزة التلفاز التي ترتبط ببعضها وبمحطات البث عبر الكبلات لتكون باكورة المشروع
وقامت بتكليف فارس مغوار قادم من بلاد الجوار اسمه الدكتور جيمس جوزلينج بقيادة فريق تطوير لتنفيذ هذا المشروع الذي سمته ( المشروع الأخضر )
واجتمع فريق التطوير وكان هدفه الكبير تطوير الأجهزة الالكترونية الاستهلاكية بحيث تكون سهلة العمل خالية من العلل وفكر الفريق وأمعن التفكير في الطريقة التي بها يتم كتابة كود برمجي لا يعتمد على منصة التشغيل وعندها سيتم تشغيل البرنامج المنشود على جميع أجهزة التلفاز رغم اختلاف وحدة المعالجة المركزية بكل منها
وفي نفس التوقيت ولكن على الجانب الآخر من المحيط في إحدى جامعات سويسرا كان هناك فريق يقدم مشروع لتطوير الويب بلغة جديدة ديناميكية ( html) ونعود الآن للدكتور
اختار الدكتور جيمس اللغة ذائعة الصيت في ذاك العصر ألا وهي لغة السي بلاس بلاس ليتم بها التنفيذ وبدء العمل الفعلي ولكن ليس كل ما يتمناه المرء يدركه ولم تطاوع لغة سي بلاس بلاس الدكتور جيمس فاضطر للتعديل والتغيير وبعد صبر طويل ومخاض جهيد وضعت السي وليدها الجديد فاسماه جيمس أواك تيمنا بتلك الشجرة التي هام بها جيمس منذ أن رآها منذ نافذة مكتبه
وبهذه اللغة الوليدة ابتكر فريق التطوير في خريف 1992 مشروع أطلق عليه [ Star 7 ]
عبارة عن [ personal hand-held remote control ] ورغم ذلك خسرت شركة صن عطاء لتطوير
a television set-top box لشركة Time-Warner مما سبب تعثرا في خطى فريق التطوير مما أدى الى تفكير شركة صن في إلغاء المشروع وتمضي الأيام ولكن هيهات لمن يطلب المجد أن ينام فلكل مجتهد نصيب فظهر الويندوز كنظام تشغيل ذو واجهة رسومية وعرف الناس الماوس وانتشر الانترنت بعد ظهور لغة ( html ) وتطورها وأصبح أكثر شعبية وفي منتصف العام 1994 فكر فريق التطوير في توظيف تكنولوجيا لغتهم الوليدة التي لا تعتمد على منصة التشغيل في عمل مستعرض لصفحات الانترنت وكانت هذه هي الشرارة فقاموا بتغيير اسم اللغة الى ( جافا ) واستخدموها في بناء مستعرض اطلقوا عليه ( WebRunner ) وذلك أدى الى دهشة مديري شركة صن لما حققه ذلك المستعرض من نجاح من الناحية التجارية
وفي الثالث والعشرين من آيار للعام 1995 م
أعلنت شركة صن رسميا عن إطلاق الجافا و مستعرض HotJava في مؤتمر ( SunWorld ’95 ) في سان فرانسيسكو وازداد الاهتمام بالجافا بشكل متزايد خلال شهور الصيف من ذلك العام واستطاع المبرمجون عبر العالم تحميل الإصدارة ألفا من الجافا ومستعرض الجافا وقاموا بإجراء التجارب على هذه النسخة الجديدة والمدهش أن هذه النسخة التجريبية من الجافا كانت الأساس لحصول شركة صن على جائزة في سبتمبر 1995 مما حذا بشركة صن عن الإعلان عن الإصدارة بيتا من لغة الجافا في نهاية هذا الشهر وقد أدت هذه الإصدارة الى تأكيد لغة الجافا وتثبيت قدمها كلغة برمجة جديدة يستخدمها المبرمجون لإبداع برمجيات موثقة
مع نهاية العام 1995 م جذبت لغة الجافا انتباه اللاعبين الأساسين في مجال الانترنت وكان المنعطف المميز في حياة اللغة الوليدة هو إعطاء شركة صن رخصة استخدام الجافا للمستعرض الأشهر في هاتيك الأيام وهو مستعرض نيتسكيب ( Netscape Navigator ) بالإضافة الى أن معظم شركات البرمجيات والشبكات أخذت في الإعلان عن برامجها مشمولة بلغة الجافا مثل بورلاند ، ميتسوبيشي ، أدوب ، لوتس ، اي بي إم ، ماكروميديا ( فلاش ) وأيضا أوراكل وما أدراك ما أوراكل ونضع تحت هذا الاسم عدة سطور

Borland, Mitsubishi Electronics, Dimension X, Adobe, Lotus, IBM,
Macromedia, Natural Intelligence, Oracle, and Spyglass.

ونأتي الآن الى التغير الدراماتيكي في حياة الجافا والذي حدث في السابع من ديسمبر للعام 1995 م حيث أعلنت شركة ميكروسوفت عن نيتها الترخيص للجافا في منتجاتها خاصة مستعرضها الأشهر للانترنت وهو انترنت إكسبلورر والدراماتيكية في إعلان ميكروسوفت يأتي من أن مؤسسها بيل جيتس كان قبل شهرين من هذا الإعلان قد قلل من أهمية لغة الجافا حيث قال عنها أنها مجرد لغة برمجة أخرى.
ولقد كان إعلان ميكروسوفت عن الترخيص للجافا في منتجاتها اعترافا صريحا بأن للجافا دورا محوريا في سوق الانترنت

المدرس العربي
08-06-2007, 06:20 PM
مرحبا بكم
ماذا نعني بالبرمجة ؟

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

توجد لغات برمجة عديدة إلا أنه يوجد فيها نوع من التخصص حيث يعتمد إختيار اللغة على المهام التي نريد من الحاسب إنجازها حيث أن لكل لغة ما يناسبها وهناك مهام يصعب تنفيذها بلغة معينة ولكنها تكون ميسورة بلغة أخرى ومن اللغات التي ظهرت في فترة الستينات لغة البيسك وهي لغات تدرس للمبتدئين وكلمة بيسك لفظة أوائلية تشكل الحروف الأولى من
Biginners All Symbolic Instruction Cod

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

ما متطلبات البرمجة ؟

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


ما الذي أحتاجه لكي أكتب برنامجا بلغة الجافا ؟

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

ولكن لماذا نالت الجافا هذه الشهرة والإهتمام العالمي ؟

لكي نجيب عن هذا التساؤل نتعرف أولا على الطريقة التي طورت بها لغة الجافا ففي أوائل التسعينيات من القرن العشرين 1990 اخترعت لغة الجافا شركة صن ميكروسيستمز ولهذا الإختراع قصة عجيبة حيث أن الشركة كانت قبل ذلك قد كلفت المهندس جيمس جوزلينج بوضع برامج لتشغيل الأجهزة التطبيقية الذكية مثل التيلفزيون التفاعلي باستخدام لغة سي بلاس بلاس وحينها وجد جيمس جوزلينج صعوبة في في التعامل مع هذه اللغة فقام هو وفريق العمل المساعد له بتطوير هذه اللغة فولدت لغة جديدة تتوافق مع احتياجاته فكانت لغة الجافا وقد خططت شركة صن في تلك الأيام لاستغلال هذه اللغة الوليدة في التيلفزيون التفاعلي لكي تربح المليارات وحدث نوع من البطء في مشروع التلفزيون التفاعلي ــ ربما عن قصد من الشركات الأخرى المنافسة ــ ونتيجة لذلك فكرت شركة صن في توقيف مشروع تطوير هذه اللغة الوليدة وتسريح العاملين في هذا المشروع أو نقلهم الى قسم آخر ولكن حدث ما لم يكن في الحسبان حيث أنه في هذه الفترة كانت الانترنت قد بدأت في الإنتشار بسرعة مذهلة مع نزول نظام الويندوز للأسواق وحيث أن لغة الجافا الوليدة التي اخترعت أصلا لبرمجة الأجهزة التطبيقية فيها من السمات ما يجعلها أكثر توافقا مع الشبكة العنكبوتية الدولية ـ الإنترنت ـ فقد كان لها السبق وأضافت الكثير الى الإنترنت الذي كان قبلها مقصورا على تبادل النصوص ولكن المطورين بشركة صن ابتكروا طريقة تجعل برامج الجافا تعمل بسهولة في صفحات الإنترنت وغيروا الإسم الذي كان قد أطلقه عليه مبتكرها من أواك ـ شجرة السنديان ـ الى الجافا ومن هنا أصبحت الجافا مرتبطة في شهرتها بالإنترنت حيث أن برنامج جافا صغير يوضع في صفحة من صفحات موقع على الشبكة الدولية يراه الملايين في جميع أنحاء العالم في نفس الوقت وقد كان هذا لا يتوفر الا مع الجافا مما أعطاها شهرة واسعة أكبر من شهرة نجوم هوليود ولحسن حظ شركة صن أن لغة الجافا أكدت نفسها في المجال الذي طورت له أصلا فقد بدأ الآن التيلفزيون التفاعلي في الانتشار وما يسمى سينما المنزل والمشاهدة حسب الطلب وليس هذا فقط بل إنتشر ما هو أكثر فائدة لشركة صن وهو الهاتف المحمول وللجافا أكبر دور في برمجة البرامج التي يعمل بها في أجياله السابقة واللاحقة ولا نستغرب أن يحدث نوع من الغيرة بين شركة ميكروسوفت وشركة صن ميكروسيستمز مما دفع ميكروسوفت الى أن تحذف ماكينة الجافاالافتراضية من الاصدارة الاولى للويندوز اكس بي وهذه الماكينة الافتراضية مسئولة عن عرض برامج الجافا على الانترنت ولكن ميكروسوفت تراجعت أمام طلب ملايين المستخدمين حول العالم فوضعتها مرة ثانية في الإصدارات اللاحقة وقد كانت قضية مشهورة تناولتها الصحف والمجلات خلال العام الماضي
وقد ساهم في شهرة الجافا أيضا برامجها العلمية التفاعلية التي تصلح لمعظم المناهج التعليمية في جميع مراحل التعليم وبالتالي فان لها دورا كبيرا في التعليم الالكتروني والتعليم عن بعد والفصول الافتراضية
--------------------------------------------------------------------------------

المدرس العربي
08-10-2007, 02:35 PM
السلام عليكم
مرحبا بكم جميعا
نناقش اليوم كيفية تجهيز الحاسب لكي استخدمه في البرمجة بلغة الجافا
كيف أجهز حاسبي للبرمجة ؟
لكي تكتب برنامجا بلغة الجافا يجب أولا إعداد الحاسب وتجهيزه بنوع من البرمجيات الخاصة ببرمجة الجافا وتتوفر في الوقت الراهن العديد من المنتجات المختلفة الخاصة بتطوير برامج الجافا ولكن أهمها وأشهرها الآن
Java 2 Platform, Standard Edition (J2SE (http://java.sun.com/javase/downloads/index.html))

Java Developers Kit ( JDK) (http://java.sun.com/j2se/1.4.2/download.html)
ويمكنك تحميلها من موقع شركة صن ميكروسيستيمز السابق وهي أحدث اصدارة من العدة ولكن اذا اردت أن تستخدم الادوات التي استخدمها فيمكنك تحميلها من الموقع

http://java.sun.com/products/archive/jdk/1.1.8_010/

كما يمكنك تحميل ما تريد من أدوات البرمجة الخاصة بلغة الجافا من الموقع


ومن أرشيف شركة صن ميكروسيستيمز (http://java.sun.com/products/archive/index.html)

ويمكنك تحميلها من موقع شركة صن ميكروسيستيمز السابق وهي أحدث اصدارة من العدة ولكن اذا اردت أن تستخدم الادوات التي استخدمها فيمكنك تحميلها من الموقع
موقع ارشيف شركة صن ميكروسيستيمز (http://java.sun.com/products/archive/jdk/1.1.8_010/)
وبعد أن حملت العدة على حاسبي كيف أثبتها وأجهزها للعمل ؟

اولا بالنسبة لمستخدمي ويندوز اكس بي بمجرد تثبيت ادوات البرمجة على جهازك فانها تصبح جاهزة تلقائيا للاستخدام
ثانيا بالنسبة لمستخدمي ويندوز 98 يتبع الخطوات التالية
الآن بدأ العمل الجدي ياصاحبي وهذا السؤال هو البداية الحقيقية للبرمجة نعم تجهيز ادوات البرمجة عملية معقدة نوعا ما وتختلف من حاسب الى آخر ولكن مع الاصرار والثقة لا توجد مشاكل وما قام به غيرك ليس مستحيلا وبالتالي يمكنك مع قليل من التركيز القيام به واذا كان نظام التشغيل لديك هو ميكروسوفت ويندوز 98 وقمت بتحميل العدة الخاصة بالبرمجة فما عليك الا تثبيتها كما تثبت أي برنامج جديد وفي هذه الحالة يوجد اختلاف عن باقي البرامج حيث لن يوضع في قائمة البرامج أي رمز للعدة ولن تجد مايدل على وجود العدة في قائمة البرامج ولكن في الجزء الرئيسي من القرص الصلب في حاسبك وهو غالبا السي سوف تجد مجلدا يحمل اسم النسخة التي قمت بتثبيتها من العدة وهي في الحاسب لدي 1.1.8 وهذه العدة تعمل في الخفاء ولكي تجعلها تعمل مع أي جزء من اجزاء القرص الصلب عليك القيام بهذه العملية
من قائمة ابدأ اختر أمر تشغيل وفيه اكتب
http://www.deyaa.org/rn09.jpg
ثم انقر على موافق فيظهر الصندوق الحواري التالي قم بالتنقل بين مفاتيح الجدولة فيه الى أن تصل الى الشكل التالي
http://www.deyaa.org/rn08.jpg
ولكن اذا كنا نستخدم احدث اصدارة من الويندوز فعليك بتحميل آخر اصدارة من عدة الجافا من الموقع الاتي

http://java.sun.com/j2se/1.5.0/download.jsp
وعندها لن تحتاج الى الخطوة السابقة الخاصة بإصدارة الويندوز 98

الحمد لله لقد نجحت وماذا بعد ؟

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


ياصديقي أنا واحد مبتدأ لا تحيرني ؟

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

يا صديق أنا لا أعرف الا برنامج الوورد فهل يصلح ؟

يا صاحبي لا تغضب صبرا نعم يصلح برنامج الوورد لكتابة برامج الجافا ولكن بشرط أن تحفظ الملفات كنصوص فقط يعني
Text Only

بالنسبة لمستخدمي ويندوز اكس بي او فيستا لكن تحتاج الاعدادات السابقة
ولكن يجب ان تحمل احدث عدة للبرمجة من موقع جافا صن لشركة صن ميكروسيستيمز

ولكن اذا اردت تجهيز المسار
إعداد المسار

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

الخطوات

افتح لوحة التحكم في وضع category view [ عرض التصنيفات ] ثم انقر على رابط الأداء والصيانة [ Performance and Maintenance ] إذا كان نظام التشغيل لديك win xp أو رابط الصيانة إذا كان نظام التشغيل ويندوز فسيتا
انقر على رابط النظام [ System link ] سيفتح لك الصندوق الحواري الأشهر الخاص بخصائص النظام

http://www.deyaa.org/java6/jaded04.png

انقر على مفتاح الجدولة Advanced tab [ إعدادات متقدمة ] ثم انقر على مفتاح Environment Variables [ متغيرات بيئة التشغيل ]

سيظهر لك صندوق حواري خاص بمتغيرات بيئة التشغيل


http://www.deyaa.org/java6/jaded06.png

حدد PATH في قائمة متغيرات النظام [ System Variables ] ثم انقر على مفتاح (( تحرير )) Edit button سيظهر لك صندوق حواري لتكتب فيه المسار الخاص بعدة الجافا

انقر على مفتاح موافق ثلاثة مرات للخروج والحفظ

المدرس العربي
08-13-2007, 08:24 PM
لقد وعدتني بمفاجأة أما آن الأوان بعد لها ؟

آن الآوان وهي مفاجأة سارة سوف تساعدك كثيرا في البرمجة وهي عبارة عن برنامج يعمل في بيئة الويندوز ويقوم بكل شيء نيابة عنك


http://www.deyaa.org/java6/JEDPls13.zip
http://www.deyaa.org/rn07.jpg

شكرا جزيلا ومن فعل معروفا يتمه كيف يعمل هذا البرنامج ؟
هذا البرنامج يوفر عليك كثيرا من الجهد والعناء عند البرمجة سواء كان ذلك للتطبيقات أو البريمجات
ولنتعرف أولا على تجهيز البرنامج وربطه بعدة الجافا على حاسبك

يا أستاذ لقد دوختني معاك البرناج أيضا يحتاج الى إعداد ؟

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

http://www.deyaa.org/rn05.jpg

فيظهر الشكل أدناه قم بكتابة مافيه مع مراعاة تغيير رقم الاصدارة التي قمت بتحميلها هذا اذا كانت مختلفة
http://www.deyaa.org/rn06.jpg
هل الأن أصبحت جاهزا لكتابة برنامجي الأول أم لا ؟

ياصديقي سمعت بيتا لابي القاسم الشابي يقول

ومن يتهيب صعود الجبال *** يعش أبد الدهر بين الحفر

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

لقد أصبحت متشوقا لكتابة برنامجي الأول فلما التمهل ؟

ياصديقي لنمضي الأن أستعمل معالج النصوص الذي اخترته وان كنت افضل استخدام البرنامج السابق
ابدأ البرمجة بلغة جافا

المدرس العربي
08-18-2007, 03:10 PM
الأهداف

أن يعطي المتدرب البرنامج اسما بواسطة الجملة كلاس

أن ينظم المتدرب البرنامج بواسطة الحاصرات

أن يحفظ المتدرب المعلومات في متغير

أن يغير قيمة المتغير

أن يعرض المعلومات المحفوظة في المتغير

أن يترجم البرنامج
أن يشغل المتدرب البرنامج
أن يقوم المتدرب البرنامج

ما الخطوات التي سوف نسير عليها لكتابة برنامجي الأول ؟

الخطوات هي
أولا : كتابة البرنامج بمعالج النصوص الذي اخترته وهو بالنسبة لي البرنامج الذي اشرنا اليه في الصفحة السابقة واذا كنت قد جهزته كما ذكرنا سالفا فقد اختصرت نصف المسافة ولكن اذا كنت قد فضلت برنامج الوورد فلا بأس ولكن تذكر أن تحفظ الملف كنص فقط يعني بدون تنسيق
وإن كنت اخترت برنامج الدوس ـ المحرر ـ إيديت ـ فهو جيد من حيث أنه يقوم بترقيم الأسطر وهي مفيدة في حالة إكتشاف الأخطاء
Class ثانيا : اعطاء البرنامج الذي سوف تكتبه إسما بواسطة الجملة
{ } ثالثا : تنظيم البرنامج بواسطة الحاصرات
رابعا : حفظ المعلومات في متغير وتغيير قيمة المتغير
خامسا : عرض المعلومات المحفوظة في المتغير
سادسا : حفظ البرنامج
سابعا : ترجمة البرنامج
ثامنا : تشغيل البرنامج
تاسعا : تقويم البرنامج ـ تصحيح الأخطاء والتعديل ـ
PepClock إنشاء البرنامج الأول

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


الهدف من البرنامج

الهدف من البرنامج حساب معدل الزيادة السكانية في إحدى الدول ـ مقدار إزدياد عدد السكان في الثانية ـ في الدقيقة ـ في الساعة مع ملاحظة أن الأرقام عشوائية كمثال فقط

ما الأسلوب الذي سوف نتبعه ؟

لتحديد معدل الزيادة السكانية نقوم بتزويد الحاسب بمقدار الزيادة السكانية في هذه الدولة في اليوم الواحد


هل أبدأ الآن بالكتابة ؟
نعم هيا بنا أستعمل برنامج النصوص الذي اخترته واكتب فيه ما يلي مع مراعاة عدم كتابة رقم السطر والنقطتان


: class PopClock {
2: public static void main (String[] arguments) {
3: // My first java program goes here
4: int pop = 7300;
5: pop = pop / 1440;
6: System.out.println("A minute's worth of pop is " + pop);
7: }
8: }


مهلا يا أستاذ ما هذه الطلاسم ؟

قبل أن نقوم بتفسير أي شيء وحتى لا ننسى في زحام هذه الطلاسم يجب أن نقوم بما يلي على وجه السرعة
PopClock.java أولا بمجرد أن تنتهي من كتابة برنامجك الأول احفظه باسم
تأكد من استعمال الأحرف الكبيرة تماما كما يظهر في البرنامج المكتوب أعلاه
استعمل مفتاح الجدولة ومفتاح المسافة لإدراج المسافات الفارغة قبل بعض الأسطر
نأتي الآن الى تفسير الطلاسم كما تقول
السطر رقم 1
PopClock هذا السطر كأنك تقول للحاسب الآتي ـ أيها الحاسب لوسمحت مولودي الأول سمه من فضلك
statement كما تذكر من المقدمة في الصفحات السابقة أن كل أمر تعطيه للحاسب يسمى جملة
class الجملة
طريقة تعطي اسما لبرنامج الحاسب ونلاحظ أن اسم البرنامج يطابق مع اسم الملف
السطر رقم 2
2: public static void main (String[] arguments) {

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

3: // My first java program goes here


هذا السطر يسمى تعليق ويضعه المبرمج كملاحظة لمن يقرأ نص البرنامج والعلامة // في بداية السطر تعلم الحاسب بوجوب تجاهل هذا السطر
السطر رقم 4
4: int pop = 7300;

تأمر هذه الجملة الحاسب بأن يخزن القيمة 7300 والتي تعين مقدار ازدياد عدد السكان في دولة ما في اليوم الواحد في متغير
المتغيرات ـ مواقع تخزين يستعملها الحاسب لتخزين المعلومات ويمكن تغيير قيمة المتغير
وسوف نتناول في الدرس القادم موضع المتغيرات بالتفصيل ولكن الان نشير على وجه السرعة الى أن المتغيرات تستعمل لإحتواء أنواع مختلفة من المعلومات مثل الارقام الصحيحة والعشرية والحروف والنصوص وبالتالي يجب أن نحدد للحاسب أي نوع من هذه المعلومات سوف نضعها في المتغير وفي برنامجنا الأول الذي نحن بصدده نلاحظ أن المتغير يحتوي على رقم
int صحيح وهذا نعرفه من وضع اسم المتغير
int المتغير
يمكنه تخزين قيم تقع بين -2.1 بليون و 2.1بليون
نلاحظ أن الجملة في السطر الرابع تنتهي بفاصلة منقوطة ; حيث تستعمل هذه الفاصلات المنقوطة عند نهاية كل أمر في برامج جافا ويستعملها الحاسب لتحديد نهاية الأمر وبدايةالأمر التالي
السطر رقم 5
5: pop = pop / 1440;

يعطي هذا السطر للحاسب أمرا بأن يجعل المتغير بوب يساوي قيمته الحالية مقسومة على 1440 وهنا سوف يقوم الحاسب بقسمة قيمة المتغير على عدد الدقائق في اليوم وبالتالي نوجد مقدار الزيادة في عدد السكان في الدقيقة الواحدة
السطر السادس
6: System.out.println("A minute's worth of pop is " + pop);

في هذا السطر نحدد للحاسب الذي يجب أن يعرضه وهو النص التالي ( مقدار الزيادة السكانية في الدقيقة تساوي ) يليها القيمة المخزنة في المتغير بوب
System.out.println
تعني اعرض سطرا على جهاز خرج النظام ( المونيتور ) فيتم عرض كل ما يوجد بين القوسين


كيف يمكنني أن أترجم برنامجي الأول

ترجمة البرنامج تعني تحويل الأوامر التي أعطيناها للحاسب الى نسق يفهمه الحاسب وبالتالي يجب ترجمة برامج الجافا قبل تنفيذها ويتم ترجمة برامج الجافا في عدة تطوير الجافا التي حملناها من موقع صن ميكروسيستيمز عن طريق أداة مساعدة تستخدم سطر الأوامر ( الدوس ) وتسمى هذه الاداة جافاسي
ونلاحظ هنا أن مستخدمي نظام يونيكس لن يجدوا غرابة في التعامل مع عدة تطوير الجافا حيث يتم التعامل في معظم استخدامات يونيكس عن طريق سطر الأوامر أما مستخدمي ويندوز بأي إصدارة فيمكنهم استخدام الدوس عن طريق ابدأ ـ البرامج ـ موجه ميكروسوفت دوس
javac ترجمة البرنامج عن طريق
أولا باستخدام برنامجنا
http://www.deyaa.org/jed0091.jpg

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

javac PopClock.java

عند عدم حدوث أخطاء سيتم انشاء ملف جديد باسم
javac PopClock.class
في حالة الأخطاء سوف تعرض رسالة تشرح هذه الأخطاء وأرقام الأسطر التي حدث فيها الخطأ

الان ماذا تبقى لنا عن تشغيل البرنامج ؟

لتشغيل برنامج جافا اكتب مايلي

java PopClock
http://www.deyaa.org/all09.png

لقد أجاب الحاسب عن السؤال وهذه الاجابة هي مقدار الزيادة السكانية في الدقيقة تساوي 5 نسمة

اذا أردت ظهور رسالة تظهر خرج الرنامج وباللغة العربية

http://www.deyaa.org/img2.gif

http://www.deyaa.org/pop003.png


وهذا مثال فقط والعدد هنا كمثال
الى اللقاء في الدرس القادم

المدرس العربي
08-18-2007, 04:09 PM
الدرس الثاني
الأهـــداف
أن يتعرف المتدرب على المفاهيم الأساسية للبريمجات
أن يتعلم كيفية عمل البريمجات
أن يعد المتدرب بريمجه الأول
أن يعرض المتدرب المعلومات في البريمج
أن يتدرب على توقيف البريمج وتشغيله
أن يضع البريمج في صفحة موقع انترنت
الخاصة ببرامج الجافا على الانترنت Html أن يستعمل كود لغة

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

import java.awt.*;

public class PopClockApplet extends java.applet.Applet {
int Pop;

public void init() {
Pop = 730000;
Pop = Pop / 1440;
}

public void paint(Graphics screen) {
screen.drawString("مقدار الزيادة في عدد السكان في الدقيقة " + Pop +"نسمة" , 5, 50);
}
}

شوية شوية علي يا أستاذ ؟
بعد أن تكتب البرنامج احفظه في مجلد معين تنشئه في مكان تختاره وليكن سطح المكتب مثلا ولتسمه العمدة 9 وضع فيه هذا الملف ومن خلال البرنامج ترجمه كما يظهر لك في الصورة أدناه

http://www.deyaa.org/jed0093.jpg

بعد ذلك انشيء الملف التنفيذي كلاسس كما في الصورة القادمة
مرة ثانية كيف أكون الملف التنفيذي كلاسس؟

Execute كما في الصورة أدناه من أدوات أختر الأمر
سوف يفتح لك موجه الدوس تلقائيا أكتب فيه الأمر التالي

javac PopClockApplet.java

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

http://www.deyaa.org/jed0094.jpg

http://www.deyaa.org/jed0095.jpg

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

<html>
<applet code=PopClockApplet.class width=250 height=80 codebase="http://www.deyaa.org/"></applet>


</html>
وهذا البرنامج أمامك يعمل وتراه والعملية بسيطة جدا ياصديقي

المدرس العربي
08-31-2007, 07:38 PM
الأهـــداف
أن يقارن المتدرب بين التطبيق والريمج
أن يفهم عمل التطبيق
أن ينظم المتدرب التطبيق
أن يرسل الوسطاء الى التطبيق
أن يفهم عمل البريمج
أن يعرف الأجزاء الضرورية للبريمج
أن يرسل البارامترات الى بريمج
أن يستعمل وسوم لغة إتش تي إم إل لنشر بريمج في الانترنت

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

كيف أنظم برنامجي؟

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

هيا بنا أستعمل برنامج معالج النصوص الذي اخترته واكتب فيه هذا النص ولكن أذكرك بدون أرقام الأسطر والنقطتين في بداية كل سطر

class SquareRoot {
2: public static void main(String[] arguments) {
3: int number = 625;
4: System.out.println("The square root of "
5: + number
6: + " is "
7: + Math.sqrt(number) );
8: }
9: }

وماذا بعد ؟

SquareRoot قم بحفظ البرنامج باسم
انتقل الى المجلد الذي يوجد فيه ثم قم بترجمة البرنامج بكتابة ما يلي في موجه الدوس

javac SquareRoot.java

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

SquareRoot.class
وماذا عن برنامجنا المفضل ؟
اذا كنت تستعمل برنامجنا المفضل اتبع الخطوات المصورة التالية
http://www.deyaa.org/jed0081.gif
وفي موجه الدوسhttp://www.deyaa.org/jed0082.gif

ولتشغيل البرنامج

http://www.deyaa.org/jed0083.gif

ولكن يا أستاذي العزيز هل كل مرة أريد أن أحسب الجذر التربيعي أكتب برنامج جديد هذه أعمال شاقة ؟

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

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

يعني هذا أننا الآن نستعد لكتابة برنامج جديد في معالج النصوص
نعم أكتب النص التالي لبرنامجنا الجديد


class NSRoot {
public static void main(String[] arguments) {
int number = 0;
if (arguments.length > 0)
number = Integer.parseInt( arguments[0] );
System.out.println("The square root of "
+ number
+ " is "
+ Math.sqrt(number) );
}
}


احفظ البرنامج باسم NSRoot.java
قم بترجمة البرنامج بنفس الطريقة فيتكون ملف جديدفي نفس المجلد بنفس الإسم ولكن بامتداد كلاسس

لتشغيل البرنامج استعمل المفسر واكتب الأمر التالي

java NSRoot 81

http://www.deyaa.org/jed0084.gif

هل نكتب الان نفس التطبيق السابق ولكن للانترنت

نعم في برنامجنا المفضل اكتب النص التالي


public class SRootApplet extends java.applet.Applet {
int number;

public void init() {
number = 625;
}

public void paint(java.awt.Graphics g) {
g.drawString("الجذر التربيعي للعدد " +
number +
" هو " +
Math.sqrt(number), 5, 50);
}
}


بعد أن تنتهي من كتابة البرنامج احفظه باسم

SRootApplet.java

ترجم البرنامج بكتابة الأمر التالي

javac SRootApplet.java

في حالة النجاح سيتم انشاء ملف بنفس الإسم ولكن بامتداد كلاسس

وهنا نلفت الانتباه الى أن برامج الجافا المترجمة لا تختبر باستعمال المفسر جافا ولكن يجب وضعها في صفحة انترنت وبالتالي يمكن معاينة هذه الصفحة إما بمستعرض إنترنت أو استعمال أداة خاصة توجد ضمن عدة تطوير الجافا وتسمى هذه الأداة
appletviewer

لانشاء صفحة للعرض عبر صفحات الويب استعمل برنامج الفورنت بيج واكتب التالي في الصفحة ليست العادية ولكن إتش تي إم إل


<html>
<applet code=SRootApplet .class width=300 height=100 codebase="http://www.deyaa.org/">

</applet>
</html>



والآن نرى البرنامج وهو يعمل

أما إذا أردت استعمال ألأداة السابق الإشارة اليها أكتب ما يلي عبر سطر الأوامر

appletviewer SRootApplet.html
ولكن الآن كيف يمكن ادخال أعداد الى البرنامج


اكتب النص التالي


public class NSRootApplet extends java.applet.Applet {
int number;

public void init() {
String parameter = getParameter("NUMBER");
if (parameter != null)
number = Integer.parseInt(parameter);
}

public void paint(java.awt.Graphics g) {
g.drawString("الجذر التربيعي لعدد " +
number +
" هو " +
Math.sqrt(number), 5, 50);
}
}



احفظ البرنامج وترجمه
ولكي تتمكن من ارسال أعداد الى البرنامج عدل الكود في صفجة الانترنت الى الكود التالي

<html>
<applet code=NSRootApplet.class width=300 height=100 codebase="http://www.deyaa.org/">
<param name="NUMBER" value=196>
</applet>
</html>

لمعاينة البرنامج حال العمل

[لارسال عدد جديد الى البرنامج

VALUE قم بتغيير الصفة
وهو موجود في مصدر صفحة الوب وهنا نشير الى أنه يمكن استعمال العدد الذي نرغب فيه من البارامترات بشرط أن يكون لكل بارامتر صفة مختلفة ومحددة في العلامة <PARAM>

--------------------------------------------------------------------------------

المدرس العربي
09-04-2007, 11:14 PM
السلام عليكم
مرحبا بكم جميعا في سلسلة الجافا التدريبية ، واود ان اشير هنا الى أن هذا الدرس وضعته في غير السياق محدد سلفا في السناريو وذلك لرغبة الكثيرين لمعرفة المزيد عن التطبيقات الخاصة بالانترنت
التي هي تصغير برنامج ـ بريمج ـ ولهذا لزم التنويه
البريمجات ــ التطبيقات الصغيرة لمواقع الانترنت ــ
الدرس الرابع عشر
كيف تصمم بريمجا
الأهداف

أن يعرف المتدرب البريمج

أن يعد المتدرب بريمجا

أن يضع المتدرب بريمجا في صفحة من صفحات الانترنت

ان يستعمل المتدرب علامات وسمات لغة إتش تي إم إل الخاصة بالبريمجات
العرض


أهلا ومرحبا بكم جميعا ونواصل مسيرتنا ـ بعون الله ـ مع الجافا

مرحبا بك استاذنا وكل عام وأنت بخير

شكرا جزيلا وأرحب بك صديقي العزيز

ما عنوان درسنا اليوم ؟

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

الاولى من ميكروسوفت وكانت موجودة في الويندوز 98 بشكل تلقائي ولكن بسبب التنافس بين ميكروسوفت وصن ميكروسيستيمز تم حذف ماكينة الجافا الافتراضية المعنية بتشغيل بريمجات الجافا من اصدرات الويندوز التالية حتى آخر نسخة من الويندوز اكس بي

والثانية من صن ميكروسيستتيمز ويمكنك تحميلها من هذا الرابط

ماكينة الجافا الإفتراضية

ولكي تعمل بريمجات الجافا يجب ان تحمل الى حاسب المستخدم
عفوا أستاذي الكريم استوقفك لسؤال ـــ ـــ ـــ هل عمل بريمجات الجافا من خلال حاسوب المستخدم ميزة أم عيب ؟
هذه من مميزات الجافا حيث تعمل بريمجات الجافا من خلال حاسوب المستخدم وليس من خلال السيرفر الذي تخزن به صفحات الموقع وهذا يستلزم أن يكون حجم ملفات البريمجات صغيرا
ولكن يا استاذ اليست هذه النقطة بالذات مثيرة للقلق ؟
هذه من مميزات الجافا حيث تعمل بريمجات الجافا من خلال حاسوب المستخدم وليس من خلال السيرفر الذي تخزن به صفحات الموقع وهذا يستلزم أن يكون حجم ملفات البريمجات صغيرا
ولكن يا استاذ اليست هذه النقطة بالذات مثيرة للقلق ؟
قلق من أية ناحية ؟ اتقصد ناحية الأمان ؟ ان كان هذا ما تقصد اقول لك ان بريمجات الجافا تخضع لتدقيقات كثيرة تجعلها اكثر امانا
كيف نبدأ اذا يا استاذي العزيز ؟
اود ان اذكرك بأننا قد قدمنا في البداية نموذجا لبريمج وكان هذا لإيضاح الفرق بين التطبيق والبريمج ولكننا الان سوف نتكلم بالتفصيل عن البريمجات من جميع النواحي وبعون الله تعالى سوف نتدرب على مواضيع متقدمة من حيث ربط بريمجات الجافا بالتطبيقات المعدة بلغة الفيجوال بيسك ذائعة الصيت وهذا الموضوع يهم الكثيرين ممن يبرمجون بلغة الفيجوال بيسك وبعبارة أخرى سوف نتدرب على وضع بريمج جافا في برنامج تمت برمجته بلغة الفيجوال بيسك
هيا يا صديقي نبدأ
JApplet لكي ننشأ بريمج جافا نركز على الخطوة الأولى وهي جعل البريمج فئة فرعية لجافا أبلت
.com.sun.java.swing واذكر هنا بأن هذه الفئة تشكل جزءا من حزمة
SWING تسمى هذه الحزمة
التي توفر مجموعة من الفئات لإنشاء واجهة مستخدم رسومية وما يلزم من العناصر المرئية للبريمج حيث يعامل البريمج كإطار مرئي داخل صفحة الانترنت اذا جافا ابلت جزء من سوينج
وسوف نتكلم بالتفصيل ان شاء الله عن موضوع السوينج

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

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

ارجو يا استاذي امثلة لهذه النهج ؟
اليك هذه الأمثلة

paint( ) :: int( ) :: stop( ) & start( ) ::: destroy( ) :::

paint( ) اولا النهج

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

عفوا استاذي العزيز تحتاج هذه النقطة الى مزيد من التوضيح

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





public class paint(graphics screen) {
// display statements go here
}

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



import java.awt.Graphics;
import java.awt.graphics2D;



واذا كانت لديك النية لاستعمال عدة فئات ـ كلاسس ـ من الحزمة
java.awt
استعمل الجملة التالية التي تجعل كل هذه الفئات متوفرة في بريمجك
java.awt.*
شكرا جزيلا لك على هذا التوضيح المسهب وماذا عن باقي النهج أو كما تشبهم عفاريت الجافا ؟

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

stop( ) & start( ) النهجان

init عندما يبدأ البرنامج في العمل أول مرة ينفذ النهج

start( ) هذا النهج هو الذي يلي النهج التجهيزي بمعنى انه كلما نفذ البريمج يتم التعامل مع هذا النهج

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

destroy( ) النهج

هذا النهج عكس النهج التجهيزي انت ويتم استدعاؤه مباشرة قبيل اغلاق البريمج والانتهاء من العمل واضا هناك حالة اخرى يستدعى فيها وهي حالة اعادة البريمج الى وضعه الإبتدائي
كيف اضع برنامجي في صفحة من صفحات موقعي على الشبكة الدولية ؟

سبق وان تكلمنا عن هذا الامر في الدرس الرابع ولكن لا باس من التذكير بهذا الأمر



<applet code=Refraction.class width=500 height=450></applet>



توضع البريمجات في صفحات مواقع الانترنت باستعمال الوسم أبلت ولنناقش الأمر السابق

CODE تحدد السمة
اسم ملف البريمج ـ اسم الكلاسس ـ وهو في هذا المثال ملف واحد باسم الانكسار واذا كان هناك اكثر من ملف يجب ان يكون الاسم المكتوب بعد علامة يساوي هو اسم الملف الرئيسي يعني الكلاسس الأساسي الذي يعتبر فئة فرعية من الفئة جافا ابلت

WIDTH & HEIGHT تحدد هذين السمتين

الحجم الدقيق لإطار البريمج داخل الصفحة ويجب ان يكون البريمج بمساحة عرض تسمح بعرض ما نريد عرضه بصورة صحيحة

مثال آخر



<applet code="Moledm.class" width=300 height=290 archive="Moledm.jar"><PARAM NAME="Type" VALUE="ac"></APPLET>


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

أستاذي العزيز الا يمكننا اداراج ملف الجافا ابلت بنفس الطريقة التي يدرج بها ملف الفلاش ؟

بلى يمكننا ذلك ولكن مع بعض التعديلات حيث ان الوسم اوبجيكت يستخدم لكل الملفات التفاعلية التي يمكن ادراجها على صفحات مواقع الانترنت والتي تسمى كائنات ومنذ الاصدارة 4.0 من مستعرض الانترنت اصبح هناك دعم للوسم اوبجيكت ونراه في ملفات الفلاش بشكل واضح واليك هذا المثال للبرنامج السابق


<object classid="java:PopClock.class"width=270 height=80></object>



مثال لبريمج

import java.awt.*;

public class PopClock extends java.applet.Applet {
int Pop;

public void init() {
Pop = 7300;
Pop = Pop / 1440;
}

public void paint(Graphics screen) {
screen.drawString("مقدار الزيادة في عدد السكان في الدقيقة " + Pop +"نسمة" , 5, 50);
}
}




لوضع البريمج في صفحة موقع اضف هذا الوسم

<html><applet code=PopClock.class width=270 height=80 codebase="http://www.deyaa.org/"></applet></html>

لرؤية البريمج وهو يعمل

http://www.deyaa.org/jom014.htm

على فكرة يمكن وضع البريمجات مباشرة في المنتدى بكود PHP وبالسماح برفع ملفات class و Jar الخاصة بالجافا وهي اختصار لجافا ارشيف
الى اللقاء في درس قادم بعون الله

المدرس العربي
09-08-2007, 12:58 PM
كيف أدرج بريمج جافا أبلت في ملف بوربوينت ؟

أولا : تحميل الملف التالي


http://skp.mvps.org/downloads/lwsetup.exe

أو
http://skp.mvps.org/downloads/liveweb.zip

ثانيا فك الملف المضغوط إذا كنت قد حملت الاختيار الثاني أو قم بتنصيب الملف إذا كنت قد حملت الاختيار الأول

ثالثا افتح برنامج البوربوينت

رابعا من قائمة أدوات اختر وظائف إضافية


http://www.deyaa.org/pp036.jpg

اختر وظائف إضافية تظهر لك
http://www.deyaa.org/pp037.jpg

حدد اسم الملف الذي حملته وهو 'LiveWeb.ppa'

سيظهر لك تحذير بخصوص تفعيل وحدات الماكرو لا تسأل فيه ومكنها وخليك جريء

الآن قد نجحنا والله المستعان
نأتي الآن الى بيت القصيد ألا وهو إدراج ملف جافا ضمن شريحة بوربوينت

الطريقة السهلة : إدراج الأبلت ضمن صفحة HTMl

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

من قائمة ادارج اختر Web Pages

http://www.deyaa.org/pp033.jpg

سيظهر لك مستلم يأخذك خطوة خطوة الى أن يوصلك لهدفك خليك ماشي معاه



[CENTER]http://www.deyaa.org/pp038.jpg

اليك الآن هذا المثال العملي ملف بوربوينت به ملف جافا ابلت
للتحميل

المدرس العربي
09-08-2007, 01:19 PM
كيفية ادراج ملف dir في عروض البوربوينت
والتحكم فيه بواسطة shockwave ActiveX control
نفتح برنامج البوربوينت
حسب الخطوات التالية

http://www.deyaa.org/swoc01.jpg

http://www.deyaa.org/swoc02.jpg

http://.www.deyaa.org/swoc03.jpg

http://www.deyaa.org/swoc04.jpg

وبنفس الطريقة يمكن ادراج ملفات الفلاش في عروض البوربوينت وذلك باختيار ملف التحكم بالفلاش بدلا من shockwave
وايضا يمكن ادراج ملفات الجافا ابلت بنفس الطريقة ولكن بعد عمل تحويل لها بواسطة قنطرة صن ميكروسيستيمز للربط بين الجافا ابلت والفيجوال بيسك ولكن هذا موضوع متقدم جدا في البرمجة ويستوجب معرفة وتمرس بلغة الجافا والفيجوال بيسك
ولمن يريد مزيدا من المعلومات عن هذا الموضوع عليه البحث عن JavaBeans
Beans - Active-x Bridge

المدرس العربي
09-08-2007, 01:32 PM
المفاهيم الأساسية للجافا
الأهداف
أن يتعرف المتدرب على أنواع المتغيرات
أن ينشيء متغيرا
أن يخزن القيم في المتغيرات
أن يستعمل المتغيرات في العمليات الرياضية
أن يضع قيمة متغير في متغير آخر
أن يزيد قيمة المتغير
أن ينقص قيمة المتغير



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

إالى أن الأعداد في البرنامج الأول هي أعداد تصورية لكي يصمم المتدرب برنامجه هو بالاعداد الحقيقية في وطنه أذا أراد أن يصمم برنامجا لحساب مقدار ازدياد السكان كل دقيقة ـ ما علينا نعود لموضوعنا ـ
أود أن أفرق بين الجملة والتعبير ؟

Statement & expressions

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

ولكن ما أنواع المتغيرات وما شروط انشاء المتغير ؟
النوع الأول int

يستعمل اذا كان المتغير سوف يستخدم لتخزين الأعداد الصحيحة ـ لا تحتوي على فاصلة عشرية وهذا النوع من المتغيرات يمكن أن يستوعب الأعداد الصحيحة من سالب 214 مليار الى موجب 214 مليار


يستعمل لتخزين الاعداد العشرية

هل هناك أنواعا أخرى من المتغيرات العددية ؟

نعم هناك ثلاثة أنواع من المتغيرات العددية غير الرئيسية تستعمل مع الاعداد الصحيحة

byte النوع الاول الفرعي
يستخدم للأعداد الصحيحة التي تتراوح بين -128 و 127
short النوع الثاني الفرعي
يستعمل للأعداد الصحيحة الأصغر من النوع انت والعدد الصحيح من هذا النوع الفرعي يتراوح بين -32768 و 32767
مثال

short setNumber = 236

long النوع الثالث الفرعي
يستعمل للأعداد الصحيحة الكبيرة التي لا يمكن استعيابها في النوع إنت وهذا النوع يمكنه استيعاب أعدادا حتى 19 خانة

هل توجد متغيرات لتخزين النصوص ؟

نعم توجد متغيرات لتخزين النصوص بنوعيها كحروف مفردة أو كسلاسل حروف
char النوع الأول يسمى
character وهي بداية كلمة

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

char key = 'u';

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

String studentName = "ema";

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

هل هذه كل أنواع المتغيرات في الجافا ؟
طبعا لا فهناك نوعا في غاية الأهمية يستعمل لتخزين القيمة صواب أو خطأ

boolean يسمى هذا النوع من المتغيرات
false & true ستعمل لتخزين القيمة

واليك هذا المثال

boolean questionA = false;

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

المدرس العربي
09-08-2007, 01:49 PM
الدرس الخامس
العمليات الرياضية وترتيبها


الأهداف

أن يتعرف المتدرب على أنواع المتغيرات
أن ينشيء متغيرا
أن يخزن القيم في المتغيرات
أن يستعمل المتغيرات في العمليات الرياضية
أن يضع قيمة متغير في متغير آخر
أن يزيد قيمة المتغير
أن ينقص قيمة المتغير


كيف أخزن المعلومة في متغير ؟

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

int i = 500;

i نلاحظ أننا أنشأنا متغيرا
هذا المتغير يحتوي على القيمة الإبتدائية 500 وهكذا وبنفس الطريقة يمكننا إعداد المتغيرات المخزنة للأعداد ويختلف الأمر بالنسبة للمتغيرات المخزنة لحرف أو سلسلة حروف حيث يجب وضع علامات اقتباس حول القيمة المراد تخزينها

String studentName = "alyaa";

ولكن هل يمكن إعداد أحد المتغيرات ليساوي قيمة متغير آخر من نفس النوع ؟
نعم يمكننا إعداد متغيرا ليساوي قيمة متغير آخر من نفس النوع كما نرى في المثال التالي

int i = 500;
int k= i ;

ولكن يا أستاذي ماذا يحدث إذا لم أحدد قيمة أبتدائية للمتغير ؟

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

studentName هذا اسم لمتغير لن يكون نفس هذا
StudentName تغيير الحرف الأول من صغير الى كبير في نفس البرنامج لاسم المتغير يؤدي الى خطأ عند الترجمة

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

وماذا عن العمليات الرياضية على المتغيرات ؟

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

يعني هذا أننا رجعنا الى المرحلة الابتدائية والى مدرس الحساب اليس كذلك يا أستاذ ؟

ما أجمل العودة الى ذكريات الطفولة والمرحلة الأولى وتلك الأيام الخوالي حيث البراءة والأحلام الوردية ـ ما علينا ـ نرجع بالذاكرة الى أيام مدرس الرياضيات في المرحلة الإعدادية ونسترجع العمليات الأربع الشهيرة في الحساب الجمع والطرح والضرب والقسمة وعلاماتها الأربع المعروفة + و - و * و / هذه الرموز تسمى مؤثرات وتستعمل هذه المؤثرات في برامج الجافا لإجراء العمليات الرياضية على الأرقام طبعا يراودك تساؤل عن الإختلاف بين * و × وبين / و ÷ ولكن كل أمر نتفق فيه على قواعد من البداية يسهل الأمور وهذا بمثابة الدستور الذي نمشي على منهاجه

operators ( معاملات (مؤثرات

نستعمل العلامة + لإجراء عملية الجمع
نستعمل العلامة - لتعبير الطرح
يستعمل تعبير الضرب العلامة * في برامج الجافا
يستعمل تعبير القسمة العلامة / في برامج الجافا
نستعمل المؤثر % لتحديد باقي القسمة
نستعمل المؤثر ++ لزيادة القيمة المخزنة في المتغير بمقدار واحد
يستخدم المعامل -- لإنقاص قيمة المتغير بمقدار واحد

البرنامج الا ينبغي أن أعرف التريب الذي يتبعه الحاسب لإنجاز هذه العمليات حتى يمكنني ضبط قيمة المتغير ؟

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

وسوف نأخذ مثالا عمليا لتوضيح كل ما سبق تناوله في هذا الموضوع بإذن الله

المدرس العربي
09-08-2007, 01:54 PM
بسم الله خير الأسماء والصلاة والسلام على إمام الانبياء
اللهم يا محول الاحوال حول حالي لأحسن حال
اللهم ارزقني فهم النبيين وحفظ المرسلين وإلهام الملائكة المقربين



الأهداف

أن يخزن المتدرب النص بواسطة سلاسل الحروف

أن يعرض المتدرب نصوص في البرنامج

أن يدرج المتدرب حروفا خاصة في سلاسل الحروف

أن يلصق سلسلتين من الحروف معا

أن يدرج المتغيرات ضمن سلسلة الحروف

أن يقارن بين سلسلتي حروف

أن يحدد طول سلسلة الحروف

أن يغير حروف نص من حروف كبيرة الى صغيرة

أن يعدد استعمالات سلاسل الحروف


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

يا أستاذ ماذا تقصد بسلاسل الحروف ؟

Strings سلاسل الحروف

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

ولكن ما الفرق بينها وبين الحروف ؟

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

char سبق وأن عرفنا أن المتغير من النوع

يستخدم لتخزين حرف واحد على سبيل المثال

char keyopen='$';

هذه الجملة تنشىء متغيرا باسم

لتخزين حرفا واحدا ونلاحظ هنا أنه يمكننا تحديد قيمة أولية للمتعير ونؤكد على أن قيمة الحرف يجب أن تحاط بعلامة اقتباس مفردة

طيب اذا أردت تخزين نص ماذا افعل يا أستاذي ؟

ياصديقي حينما تريد تخزين نص ما عليك إلا أن تنشىء متغيرا من النوع استرينج وتعطيه اسما كما يلي

String studentName="Ahmad bahaa eldin Hegazy";

تنشىء هذه الجملة متغيرا من النوع استرينج يسمى ـ اسم الطالب ـ ويخزن فيه النص أحمد بهاء الدين حجازي

عفوا يا أستاذ لاحظت هنا ملاحظة لا أدري هل تستحق أن أطرحها أم أطرحها جانبا ؟

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

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

int float char boolean هذه المتغيرات وغيرها تبدأ بحروف صغيرة ولكن المتغير من النوع استرينج يجب أن يبدأ بحرف كبير
String هكذا
والسبب يا صديق هو في سلاسل الحروف التي التي تعتبر نوع خاص من الموارد يسمى كائنات ويجب أن يكون الحرف الأول من اسم نوع كل الكائنات حرفا كبيرا وسوف نتناول موضوع الكائنات بالتفصيل في الدروس مستقبلا بعون الله

بارك الله فيك يا أستاذي العزيز ـــ والآن كيف يمكننا عرض هذه السلاسل في البرنامج ؟

سبق أن قولنا أنه لعرض نص في البرنامج نكتب ما يلي

system out println("Line of Force of Magnetic Field.")

تنتج هذه الجملة النص التالي
Line of Force of Magnetic Field.

طيب يا أستاذ ثمة أمر آخر ألاحظ أن علامتي الاقتباس لم تعرض فكيف أعرض علامات الاقتباس ذاتها والأقواس ؟

وضعت لغة الجافا رموزا خاصة لعرض علامات الإقباس المفردة أو المزدوجة أو الشرطة المائلة

لعرض علامات الإقباس المفردة أو المزدوجة أو الشرطة المائلة مثال
ما تعرضه
الرمز

علامة اقتباس مفردة
\'

شرطة مائلة للخلف
\\

علامة اقتباس مزدوجة
\"

علامة جدولة
\t

تراجع
\b

من أول السطر
\r

تغذية النموذج
\f

سطر جديد
\n

كيف أدمج نصين معا ؟ يعني كيف ألصق سلسلتين من الحروف معا ؟

يستعمل المؤثر + للصق نصين معا واليك هذا المثال

system out println("\"The Series of Hydrogen Spectrum\'are Leyman's series" +

"Balmer's series \"\n\t~pacshen's series");

هل يمكننا استعمال متغيرات أخرى مع سلاسل الحروف

نعم يمكننا استعمال متغيرات أخرى ونستخدم المعامل + لربط هذه المتغيرات والسلاسل كما في المثال التالي

int length = 102;

char degree = 'M';

system out println("operating time :"+ length + "minutes");

system out println("Degree" + degree);
سيكون الناتج الذي يعرض على الشاشة

operating time : 102 minutes

Degree M

ونحن نتقدم الآن يلح علي سؤال يرتبط بهذا الأمر كيف يعرف برنامج البريد الالكتروني مثلا أني قد كتبت اسمي خطأ اذا حدث ذلك ؟

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

equals( )

اليك هذا المثال
String favorite = "ahli";

String guess = "zamalek";

system out println("Is omda's favorite sport club a" + guess + "?");

system out println("Answer :" + favorite. equals(guess));

نلاحظ أن الجزء الأخير

favorite. equals(guess)

Method يسمى

وهو وسيلة تستخدمها الجافا لتحديد ما اذا كانت سلسلة حروف تحتوي على نفس القيمة الموجودة في سلسلة أخرى فاذا كان المتغيران من النوع استرينج في المثال السابق يحتويان نفس القيمة يتم عرض النص صواب والعكس يتم عرض النص خطأ
Is omda's favorite sport club a zamalek ?

Answer : false

كيف نغير حالة الحروف من صغير الى كبير والعكس؟

لغة الجافا تحتوي على طرق لعرض سلاسل الحروف بأحرف كبيرة أو أحرف صغيرة

ToUpperCase( ) أحرف كبيرة

ToLowerCase( ) أحرف صغيرة
اليك هذا المثال

String teacher = "Samy Adnan"

String change = teacher.toUpperCase( );

سوف تتحول كل الحروف في السلسلة الى حروف كبيرة أي الى

SAMY ADNAN

هل نستطيع احصاء عدد حروف كلمة معينة ؟
length( ) نعم نستطيع ونستخدم النهج


int nameLength = gravitational.length( );


واليك هذا التمرين الاجمالي

في هذا التمرين نعرض لأسماء مراجع في الفيزياء







class RePhysics {
public static void main(String[] arguments) {
String title = "The Resources";
String dir = "Physics Resources";
String res1 = "College Physics";
int year1 = 1968;
String auth1 = "Raytheon Education Company";
String res2 = "Fundamentals of Physics";
int year2 = 1974;
String auth2 = "D. Haliday and R. Resnick";
String res3 = "Practical Physics";
int year3 = 1972;
String auth3 = "John Murry";
String res4 = "Physics";
int year4 = 1979;
String auth4 = "Macmillan Publishing";
// display information
System.out.println(title + "\n" +
dir + " \n\n" +
res1 + "\t" + auth1 + "\t" + year1 + "\n" +
res2 + "\t" + auth2 + "\t" + year2 + "\n" +
res3 + "\t" + auth3 + "\t" + year3 + "\n" +
res4 + "\t" + auth4 + "\t" + year4);
}



ويكون خرج هذا البرنامج بعد ترجمته كما في الصورة



http://www.deyaa.org/res990.jpg

لتحميل المصدر والملف التنفيذي

http://www.deyaa.org/les6.zip

الى اللقاء في الدرس القادم بإذن الله

سؤال تحضيري

ما المقصود بالجمل المشروطة ؟

if else switch case break

كيف نستخدم المؤثرات الشرطية

= = != > < ?

المدرس العربي
09-08-2007, 02:01 PM
الاهداف
- ان يعرف المتدرب التفكير المنطقي
- ان يستعمل المتدرب الجمل المشروطة لتصميم برامج أكثر ذكاء
- ان يستعمل المتدرب الجملة اذا للاختبارات المشروطة
- ان يستعمل المتدرب جملا أخرى مع الجملة اذا
- ان يقارن المتدرب بين قيمتين
- ان يختبر المتدرب تساوي قيمتين
أن يستعمل المتدرب الجملة ــ اذا لم ــ كنقيض للجملة اذا

أن يربط المتدرب عدة جمل مشروطة معا



أن يستخدم المتدرب للاختبارات المعقدة الجملة

أن ينشأ المتدرب اختبارات معقدة بواسطة المؤثر الثلاثي



نرحب بكم مرة ثانية ونواصل مسيرتنا ـ بعون الله ـ مع الجافا

مرحبا بك يا أستاذنا ما عنوان درسنا اليوم ؟

عنوان الدرس السابع من سلسلة دروس الجافا هو الجملة المشروطة ـ اذا ـ

Conditional Statement



عفوا يا صديقي أريد تمهيد أو مثال توضيحي ؟

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

If ***Else *** Switch

أستاذي هل نرجع المتغير بوليان الذي يستعمل لتخزين قيمتين فقط هما ـ صواب ,خطأ ؟

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

طيب مثال بسيط يوضح الأمور لو سمحت ؟

if ( degree > 75)

System.out.println("very good ");

نلاحظ هنا أن اذا الشرطية تحدد ما اذا كان المتغير المذكور وهو درجة الطالب أكبر من 75 باستخدام المؤثر أكبر من ولا يتم تنفيذ جواب الشرط الا اذا كان فعل الشرط صحيحا يعني أنه لن يكتب للطالب جيد جدا الا اذا كانت درجته أكبر من 75 وهكذا

وصلت أم نزيد ؟

حياك الله أستاذي العزيز ولكن لفت انتباهي وجود فعل الشرط بين قوسين وأيضا أنك كتبت فعل الشرط على سطر وجواب الشرط على سطر فهل لهذا مغزى معين

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

ماذا يحدث لو ضعنا فاصلة منقوطة بعد القسم الأول ـ فعل الشرط ـ ؟


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



ألاحظ يا أستاذ أنك استعملت المعامل أو المؤثر أكبر من في المثال السابق فهل يقوم بنفس الدور الذي يقوم به في الرياضيات التي ندرسها ؟

نعم يقوم بنفس الدور هو ونقيضه ـ أصغر من ـ واليك هذا المثال

if (hour < 12)
System.out.println("Good morning.");

ونلاحظ هنا أن جواب الشرط يرتبط بفعل الشرط بمعنى أنه اذا لم يتحقق الشرط فانه لن يحدث شيء
ولكن في بعض الحالات أريد أن أقارن بين قيمتين فماذا أفعل ؟

اذا أردت أن تختبر هل قيمة معينة تساوي أخرى أو أقل منها يمكنك استخدام المؤثر أصغر من أو يساوي >=

<= يستخدم لاختبار أكبر من أو يساوي

<= & >=



يمكنني إختبار المساوة فقط ؟

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

طيب واختبار عدم المساوة كيف يكون ؟

نستعمل المؤثر =! لاختبار عدم المساوة

وهل نستخدم المؤثرين السابقين لكل أنواع المتغيرات ؟

نستخدم المؤثرين == & =! لكل أنواع المتغيرات ما عدا المتغير استرينج الخاص بسلسلة الحروف وقد تكلمنا في الدرس السادس عن هذا الموضوع وأشرنا في حينه الى استعمال النهج ايكوال لاختبار تساوي سلسلتي حروف


لاحظت أنك يا أستاذي العزيز في جميع الأمثلة السابقة تجعل جواب الشرط أمرا واحدا وهو النهج

println ( )

ولكننا في عديد من الحالات قد نرغب في انجاز أكثر من مهمة كنتيجة لفعل الشرط فماذا نفعل ؟

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

لكي تنجز أكثر من مهمة كنيجة لتحقق الشرط عليك أن تنشأ جمل كتلية بواسطة { } الحاصرتين

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

main( )

وهذه الكتلة تبدأ بحاصرة الفتح { وتنتهي بحاصرة الغلق } اذاً نستعمل الجمل الكتلية مع فعل الشرط لكي نجعل الحاسب يقوم بإداء عدة مهام كنيجة لتحقق الجملة الشرطية

if (minute != 0) {
System.out.print(" " + minute + " ");
System.out.print( (minute != 1) ? "minutes" : "minute");
System.out.print(" past");
}

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

لا معضلة ولا يحزنون لكي تفعل ذلك عليك استعمل الجملة

else مع الجملة if

المدرس العربي
09-08-2007, 02:06 PM
if (hour < 12)
System.out.println("Good morning.\n");
else if (hour < 17)
System.out.println("Good afternoon.\n");
else
System.out.println("Good evening.\n");

----------------
if ( grade = = 'A')
System.out.println(" ناجح بامتياز ");
else if ( grade = = 'B')
System.out.println(" ناجح بتقدير جيد جدا ");
else if ( grade = = 'C')
System.out.println("ناجح بتقدير جيد ");
else if ( grade = = 'D')
System.out.println("ناجح بتقدير مقبول ");
else
System.out.println(" راسب وباق للاعادة ");




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

يوجد طريقة أخرى لاختبار مجموعة متنوعة من الشروط والاستجابة لكل منها منفردا هذه الطريقة هي استعمال الجملة

switch


switch (month) {
case (1):
System.out.print("January");
break;
case (2):
System.out.print("February");
break;
case (3):
System.out.print("March");
break;
case (4):
System.out.print("April");
break;
case (5):
System.out.print("May");
break;
case (6):
System.out.print("June");
break;
case (7):
System.out.print("July");
break;
case (8):
System.out.print("August");
break;
case (9):
System.out.print("September");
break;
case (10):
System.out.print("October");
break;
case (11):
System.out.print("November");
break;
case (12):
System.out.print("December");



يحدد السطر الأول من الجملة سويتش المتغير المراد اختباره وهو هنا متغير الشهر ثم نتستعمل بعد ذلك الحاصرتين لتكوين جملة كتلية
case الجملة

تختبر هذه الجملة قيمة متغير الاختبار المحدد في الجملة سويتش مقارنة بقيمة معينة

ارجو التوضيح لأننا قد رجعنا الى الطلاسم مرة ثانية ؟

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

switch ------- ------ case ------- ------- break

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

break اذا الآن اتضح وظيفة الجملة

معك حق الجملة بريك تطلب من الحاسب أن يخرج من الجملة سويتش

ولكن في بعض البرامج غير المثال المذكور أعلاه تكون جميع الجمل كايس غير صحيحة فماذا نفعل ؟

default نستعمل الجملة

حيث تستعمل هذه الجملة عندما تكون جميع الجمل كايس غير صحيحة

مثال للتوضيح





switch ( grade ){
case "A":
System.out.println(" ناجح بامتياز ");
break;
case "B":
System.out.println(" ناجح بتقدير جيد جدا ");
break;
case "C":
System.out.println("ناجح بتقدير جيد ");
break;
case "D":
System.out.println("ناجح بتقدير مقبول ");
break;
default:
System.out.println(" راسب وباق للاعادة ");





عفوا أستاذي الكريم الا يوجد طريقة مختصرة عن الطريقة السابقة ؟

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

مثال

لعرض النص السيد أو السيدة ضمن برنامج يعرض أسماء المدرسين والمدرسات في المدرسة وفقا للمتغير جيندر




System.out.print( ( gender. equals("male"))?"السيدة" :" السيد");
طلب أخير من فضلك أستاذي العزيز أريد برنامجا يتضمن كل ما سبق ؟

اليك هذا البرنامج بعنوان كام الساعة

المدرس العربي
09-08-2007, 02:21 PM
import java.util.*;

class WTime {
public static void main(String[] arguments) {
// اجلب الوقت الحالي والتاريخ
GregorianCalendar now = new GregorianCalendar();
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute = now.get(Calendar.MINUTE);
int month = now.get(Calendar.MONTH) + 1;
int day = now.get(Calendar.DAY_OF_MONTH);
int year = now.get(Calendar.YEAR);

// إعرض التحية
if (hour < 12)
System.out.println("Good morning.\n");
else if (hour < 17)
System.out.println("Good afternoon.\n");
else
System.out.println("Good evening.\n");

// ابدأ الرسالة بعرض الدقائق
System.out.print("It's");
if (minute != 0) {
System.out.print(" " + minute + " ");
System.out.print( (minute != 1) ? "minutes" : "minute");
System.out.print(" past");
}

// اعرض الساعة
System.out.print(" ");
System.out.print( (hour > 12) ? (hour - 12) : hour );
System.out.print(" o'clock on ");

// عرض اسم الشهر
switch (month) {
case (1):
System.out.print("January");
break;
case (2):
System.out.print("February");
break;
case (3):
System.out.print("March");
break;
case (4):
System.out.print("April");
break;
case (5):
System.out.print("May");
break;
case (6):
System.out.print("June");
break;
case (7):
System.out.print("July");
break;
case (8):
System.out.print("August");
break;
case (9):
System.out.print("September");
break;
case (10):
System.out.print("October");
break;
case (11):
System.out.print("November");
break;
case (12):
System.out.print("December");
}

// عرض التاريخ والسنة
System.out.println(" " + day + ", " + year + ".");
}
}




http://deyaa.org/swi006.jpg

اذا اردت تحميل كود البرنامج والملف التنفيذي

ارسل ايميل

المدرس العربي
09-08-2007, 02:23 PM
اللهم ارزقنا فهم النبيين وحفظ المرسلين والملائكة المقربين
الدرس الثامن

الدرس الثامن من سلسلة دروس الجافا
For ان يستعمل المتدرب حلقة التكرار
While ان يستعمل المتدرب حلقة التكرار
Do....while ان يستعمل المتدرب حلقة التكرار
أن يقارن المتدرب بين جمل حلقات التكرار
أن يخرج المتدرب من حلقة التكرار
أن يتعرف المتدرب على كيفية تسمية حلقات التكرار
العرض

أهلا ومرحبا بكم جميعا ونواصل مسيرتنا ـ بعون الله ـ مع الجافا

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

شكرا جزيلا وأرحب بك صديقي العزيز

ما عنوان درسنا اليوم ؟

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

ما المقصود بحلقات التكرار ؟

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

ما الفائدة من حلقات التكرار ؟

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

ما هي الجمل التي تستعمل كحلقات تكرار ؟

في لغة الجافا يوجد ثلاث جمل تستعمل حلقات تكرار وهي
for while do....while

وهل تقوم هذه الجمل الثلاث بنفس العمل ؟

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

for شكرا أستاذي العزيز ولنبدأ مثلا الآن بحلقة التكرار فور

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

من فضلك استاذي الكريم أريد مثالا يبسط الموضوع ؟

لا عليك صديقي العزيز ولم أقصد بقولي عن حلقة التكرار فور بأنها أكثر تعقيدا أن أعقدك ولكن سيتضح لك المقصود بعد أن نتعرف على الجمل الثلاث ــــ ولنبدأ الآن المثال المقصود


for ( int number = 0; number < 1000; number++) {
if ( number % 14 == 0)
system.out.println("#:" + number);
}



فضلك أريد التفسير لهذا المثال وليكن مفصلا نوعا ما ؟

لك ما تريد ولله الحمد والمنة
أولا الغرض من حلقة التكرار ـــ عرض كل الأعداد الواقعة بين 0 و 999 والتي تقبل القسمة على 14 بدون باقي
ثانيا ـ المتغير نمبر يسمى بالعداد حيث تحتوي كل حلقة تكرار فور على متغير يستعمل لتحديد متى تبدأ حلقة التكرار ومتى تنتهي
ثالثا ـ تتكون جملة حلقة التكرار فور من ثلاث أجزاء هي
جزء التمهيد ــ وفيه يتم تحديد قيمة أولية للمتغير نمبر تساوي صفرا ويمكنك في هذا الجزء إعداد المتغير العداد الذي ترغب في استعماله ضمن الجملة فور وأود أن أوضح أنك يمكنك إنشاء المتغير ضمن الجملة فور كما في المثال أو إنشاء المتغير في موضع سابق من برنامجك ولكن في كلتا الحالتين يجب تحديد قيمة أولية للمتغير في هذا الجزء من الجملة فور وبحيث تكون هذه القيمة هي قيمة المتغير عندما تبدأ حلقة التكرار
if الجزء المشروط ــ في هذا الجزء يوجد اختبار مشروط موجود في الجملة
true ونلاحظ أن الشرط يجب أن يبقى صحيحا
وذلك حتى تستمر حلقة التكرار حيث أن حلقة التكرار تتوقف عندما يصبح الشرط خطأ وفي المثال الذي نتناوله الآن تتوقف حلقة التكرار عندما تصبح قيمة المتغير نمبر أكبر من 1000 ـــــ
جزء التغيير ــ هذا الجزء عبارة عن جملة وظيفتها تغيير قيمة المتغير نمبر باستعمال مؤثر الزيادة بواحد ويتم تنفيذ هذه الجملة في كل عملية تكرار لحلقة التكرار وهنا أود التأكيد على ضرورة تغيير العداد وإلا فلن تتوقف حلقة التكرار وفي المثال يزداد المتغير نمبر بواحد باستعمال معامل الزيادة بواحد ++ واذا لم يتغير المتغير نمبر فانه سيظل عند القيمة الأولية 0 ويبقى الشرط صحيحا

عفوا أستاذي الكريم ما الذي يتم تنفيذه من هذا المثال في كل عملية تكرار ؟

في كل عملية تكرار لحلقة التكرار تنفذ الجمل الموجودة ضمن الحاصرتين { } اذا المنطقة المحددة بالحاصرتين يتم فيها العمل الرئيسي لحلقة التكرار وفي مثالنا توجد جملتين ضمن الحاصرتين

{
if ( number % 14 == 0)
system.out.println("#:" + number);
}

ونلاحظ أن هذه الجملة سوف تنفذ 1000 مرة حيث تبدأ حلقة التكرار بجعل المتغير نمبر مساويا للصفر ثم تضيف بعد ذلك 1 في كل مرة من مرات التكرار وتتوقف عندما لا تكون قيمة المتغير أصغر من 1000 وكلما كان العدد قابلا للقسمة على 14 بدون باق يعرض هذا العدد بجانب النص :#

ولكن متى يكون من الضروري وضع الحاصرات ؟

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


for (int q = 0; q < 66; q++)
system.out.println("لن أفعل هذا مرة أخرى ");



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

طيب يا أستاذ اذا أردنا اعداد أكثر من متغير خلال جزء التمهيد فماذا نعمل ؟

اذا اردت إعداد أكثر من متغير في جزء التمهيد فعليك التفريق بينها بالفواصل ونلاحظ أن كل جزء من الحلقة فور يفصل عن الاجزاء الأخرى بفاصلة منقوطة

ولكن هل يمكن أن تكون أقسام حلقة التكرار فارغة ؟

نعم يمكن أن تكون أقسام حلقة التكرار فارغة وهذا عندما تكون القيمة الأولية للمتغير العداد قد تحددت في جزء سابق من البرنامج

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

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

هل باقي حلقات التكرار تتكون من ثلاثة أجزاء ؟

while لا حلقة التكرار التي سوف نتناولها الآن لا تحتوي على أقسام وحلقة التكرار هذه هي

while حلقات التكرار

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

do....while عملية بسيطة وماذا عن حلقة التكرار

do.......while حلقات التكرار

لكي ندرك الفرق بين الحلقتين اليك هذا المثال
لنفرض مثلا أن الآنسة أروى تريد الذهاب الى الكوافير فان أمامها طريقتان
الأولى أن تذهب الى الكوافير ثم تخبر والدتها
الثانية أن تستأذن أولا من والدنها قبل أن تذهب الى الكوافير
do...while الطريقة الأولى تشبه حلقة التكرار
بمعنى أنه سوف يتم تحقق الشرط لمرة واحدة قبل أن يختبر يعني أن الآنسة أروى سوف تذهب لمرة واحدة الى الكوافير سواء وافقت والدتها أم لم توافق ومن هنا يتضح لنا أنه في حلقة التكرار دو ....هويل يتم تنفيذ الشرط أولا قبل التحقق من صحة الشرط موضع الاختبار فعندما يصل البرنامج خلال عمله للمرة الأولى الى حلقة التكرار دو فانه ينفذ الجمل الموجودة بين الجملة دو والجملة هويل بشكل تلقائي ثم يجري بعد ذلك التحقق من صحة شرط الجملة هويل فاذا كان صحيحا فن البرنامج يعاود تكرار حلقة التكرار مرة أخرى أما اذا كان الشرط غير صحيح فان حلقة التكرار سوف تتوقف

ولكن يا أستاذي كيف يمكنني الخروج من حلقة التكرار ؟

للخروج من حلقة تكرار قلنا سابقا أن الشرط موضع الاختبار اذا كان غير صحيح فان هذا يوقف حلقة التكرار

طيب اذا أردت أن أوقف حلقة التكرار مباشرة والشرط المختبر صحيحا فماذا أفعل ؟

يمكنك إيقاف حلقة التكرار مباشرة حتى لو كان الشرط موضع الإختبار صحيحا باستعمال الجملة بريك

while (index <= 100)
index = index +3;
if (index ==40)

break;
system.out.println("the index is"+ index);

تواصل الحلقة التكرار الى أن تصبح قيمة المتغير اندكس أكبر من 100 ولكن اذا كانت قيمة المتغير مساوية 40 فإن حلقة التكرار سوف تتوقف مباشرة

هل توجد جملة خاصة أخرى ؟

نعم توجد حالة خاصة أخرى

while (index <= 100)
index = index +3;
if (index ==40)

continue;
system.out.println("the index is"+ index);

في حلقة التكرار هذه سوف يتم تنفيذ الجمل الا اذا صارت قيمة المتغير مساوية 40 وعندها تجعلالجملة كونتينيو حلقة التكرار تعيد تنفيذ الجملة هويل

هل يمكن وضع حلقات التكرار داخل بعضها البعض ؟

نعم يمكن وضع حلقات التكرار داخل بعضها البعض كما في المثال الآتي

while ( totalprise < 1000 ){
for( int prise=0; prise <100; prise++){
totalprise = totalprise + prise;
if ( totalprise > 2000 )
brak;
}
}

ما فعل الجملة بريك في هذه الحالة؟

فعل الجملة بريك في هذه الحالة هو ايقاف حلقة التكرار ـ فور ـ عندما تساوي قيمة المتغير 2000 أو أكثر

ولكن يا صديقي العزيز هناك حالات أرغب في ايقاف حلقتي التكرار معا فكيف الطريق الى ذلك ؟

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

المدرس العربي
09-08-2007, 02:31 PM
أن يعرف المتدرب المصفوفات
أن ينشئ المتدرب مصفوفة
أن يعرف المتدرب أبعاد المصفوفة
أن يحدد المتدرب قيمة لعنصر في المصفوفة
أن يغير المتدرب المعلومات داخل المصفوفة
أن ينشئ المتدرب مصفوفات متعددة الأبعاد
أن يفرز المتدرب المصفوفة





أهلا ومرحبا بكم جميعا ونواصل مسيرتنا ـ بعون الله ـ مع الجافا

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

شكرا جزيلا وأرحب بك صديقي العزيز

ما عنوان درسنا اليوم ؟

كل عام وأنتم جميعا بخير سوف نتناول في درس اليوم كيفية اسنعمال المصفوفات

ما المقصود بالمصفوفات ؟

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

اذا التعريف المحدد للمصفوفات ضمن سياقنا هو ...؟

المصفوفات هي مجموعة من المتغيرات المتماثلة في النوع والمرتبطة معا أو بعبارة أخرى هي عبارة عن مجموعة من المتغيرات باسم واحد

مثال بسيط بعد إذنك ؟

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



int[] samy = { 90,85,85,75,70,95 };

String[] netWeight;

String netWeight[];

boolean[] GradeStudents;

int[] primes = new int[300];



لاحظت في الأمثلة السابقة أن المثالين الثاني والثالث متشابهين الا في مكان القوسين فهل هذه الملاحظة صحيحة ؟

نعم يا صديقي ملاحظتك سليمة حيث أن لغة الجافا تتيح حرية في التحرك ومرونة في الموضع الذي يمكن أن نضع فيه القوسين المعقفين فيمكنك وضعها بعد اسم المتغير أو بعد نوع المتغير

دعنا الآن نناقش أنواع المصفوفات

هيا بنا ولنبدأ بالمصفوفات أحادية البعد
المصفوفة أحادية البعد هي المصفوفة التي لها بعد واحد فقط ـ سطر واحد من الأرقام التي تتراوح بين الصفر ورقم العنصر الأعلى المحدد للمصفوفة

وهل للمصفوفة عناصر ؟

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


int[] primes = new int[300];



ننشئ في هذا المثال مصفوفة من الأرقام الصحيحة تسمى أولية ـ الأعداد الأولية ـ وتحتوي هذه المصفوفة على 300 عنصرا يمكننا استعمالها لتخزين 300 عدد أولي

هل يجب تحديد عدد العناصر ؟

نعم عندما تنشئ مصفوفة باستعمال الجملة نيو يجب تحديد عدد العناصر ونعطي لكل عنصر قيمة أولية تعتمد على نوع المصفوفة كما يلي
المصفوفات العددية تحتوي القيمة الأولية 0

المصفوفات الحرفية تحتوي القيمة'0\' ــ وهكذا

false المصفوفات البولية تحتوي القيمة

null مصفوفات سلاسل الحروف تحتوي على القيمة الصفرية

هل نستطيع إعداد قيمة أولية للمصفوفة عند تكوينها ؟



بالنسبة للمصفوفات الصغيرة حجما يمكننا ذلك

String [] physicsTeachers = { "Samy","Nasser","Taha",};



للدرس بقية بعون الله ـ تابعونا

لمتابعة دروس الجافا

احجز نسختك من كتاب

المدرس المصرى
09-09-2007, 10:37 PM
الأخ الفاضل/ المدرس العربى
سلمت يداك
حقيقى قرأت وفهمت من خلال شرحك الفوق رائع
رائع يا أستاذنا، وأتعجب من عدم مشاركة الأعضاء
لشرحك الوافى لأن المشاركة تفاعلية
وتدفع لبذل جهد أكثر
مشكور يا أستاذنا
وننتظر المزيد

المدرس العربي
09-17-2007, 10:17 PM
السلام عليكم
شكرا جزيلا أخي
كل عام وأنت بخير

هايل
09-26-2007, 12:10 PM
الاخ الفاضل / المدرس العربي
كل عام وانت بخير
شكرا جزيلا على هذا المجهود الرائع والشرح الوافي الذي اصبح مرجعا لجميع راغبي البرمجة بلغة الجافا
وعجبت أكثر حين وجدت عديد من المنتديات تأخذ هذا الشرح وتنسبه لأحد أعضائها
ولكن دائما يبقى الأصل
شكرا جزيلا

المدرس العربي
09-27-2007, 10:20 PM
الدرس العاشر
البرمجة الكائنية

http://www.deyaa.org/josling5.jpg

جيمس جوزلينج مخنرع لغة الجافا

http://www.deyaa.org/my106.jpg

مؤسس الموقع

http://www.deyaa.org/opec03.gifالأهداف

أن يعرف المتدرب البرمجة الكائنية
أن يعرف المتدرب الكائنات
أن يتعرف على صفات الكائن
أن يستنتج كيفية سلوك الكائن
أن يدمج المتدرب الكائنات
أن يتعرف المتدرب على وراثة الكائنات
أن ينشيء المتدرب كائن
أن يدرك المتدرب تحوير الكائنات


مرحبا بك أستاذي العزيز وكل عام وحضرتك بخير ولنبدأ بالسؤال الأول ماذا نعني بالبرمجة الكائنية ؟

لكي نجيب عن هذا السؤال نرجع الى تعريف البرمجة عامة ونسترجع ما قلناه في الدرس الأول عن برامج الحاسب حيث قلنا أن برامج الحاسب هي مجموعة من التعليمات التي يكتبها المبرمج في ملف ويقوم الحاسب بتنفيذها حسب الترتيب المحدد مسبقا ولكن في حالة البرمجة الكائنية يكون البرنامج عبارة عن مجموعة من الكائنات المستقلة يكون لكل كائن مهمة محددة وللتوضيح أكثر نشبه الكائنات في لغات البرمجة الكائنية مثل الجافا بالكائنات الحية حيث يستعمل الكائن الحي مكوناته لإداء المهام التي خلقت من أجلها فيستخدم الإنسان مثلا أرجله للمشي ويداه للعمل ولسانه للكلام وأذنيه للسمع وهكذا وحين نحلل أو نجزأ برنامج جافا الى أجزاء لكل جزء أو مكون مهمة محددة فإننا حينها نكون في عملية برمجة كائنية
اذا كل برنامج في لغات البرمجة الكائنية يكون عبارة عن مجموعة من الكائنات التي تعمل معا لتحقيق عمل ما



هل جميع الكائنات سواء ؟

لا يا صديقي لسيت جميع الكائنات سواء بل تختلف عن بعضها في أمرين الأول هو الصفة بمعنى خواص الكائن نفسه والثاني هو السلوك حيث يختلف سلوك كائن عن كائن آخر

عفوا أستاذي العزيز أريد مثالا للتوضيح ؟

لا عليك يا صديقي الأمر بسيط جدا قلنا في الدروس السابقة أن كل برنامج تكتبه في لغة الجافا يسمى فئة

Class

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

ولكن يا أستاذي الفاضل ما مميزات استعمال الكائنات ؟

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

يعني يا أستاذ استبشر خيرا بتعلم البرمجة بلغة الجافا ؟

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


الان فهمت نقطة كانت غير واضحة لدي الا وهي ميزة الارث في لغات البرمجة الكائنية فهل تفضلت علينا بإيضاح هذه النقطة ؟

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

الارث Inheritance هو الاسلوب الذي يرث فيه كائن ما سلوك وصفات كائنات أخرى مماثلة له
ونتكلم اليوم عن تحويل الكائنات
عند البرمجة بلغة الجافا نحتاج الى تحويل المعلومات من شكل الى آخر وهناك عدة أنواع من التحويلات التي يمكننا القيام بها
تحويل متغير بسيط الى توع متغير آخر
استخدام كائن لانشاء متغير بسيط
استخدام متغير بسيط لانشاء كائن
ولكن ما المتغيرات البسيطة ؟
المتغيرات البسيطة هي أنواع البيانات الاساسية اتي سبق وتكلمنا عنها وتضم
int float char long double

لمتابعة هذه الدروس

احجز نسختك من كتاب

العمدة في البرمجة بلغة الجافا

المدرس العربي
09-27-2007, 10:34 PM
مرحبا بكم جميعا
مرحبا لدي سؤال من الدرس الماضي استاذي العزيز
تفضل صديقي الكريم
اريد ايضاحا أكثر حول موضوع الأرث ؟
الامر بسيط سبق ان قلنا ان البرمجة الكائنية من مميزاتها استعمال الارث وحينها عرفنا الارث بأنه الطريقة التي يرث فيها كائن ما سلوك وصفات كائنات أخرى مماثلة له
أريد مثالا للايضاح


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

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

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


السلام عليكم
نواصل حديثنا عن الكائنات
وموضوعنا اليوم تحويل الكائنات والمتغيرات البسيطة
تحويل متغير بسيط الى متغير آخر
استخدام متغير بسيط لإنشاء كائن
استخدام كائن لإنشاء متغير بسيط
ولكن ما المتغيرات البسيطة ؟
المتغيرات البسيطة هي الأنواع التي تكلمنا عنها عند بدء هذه السلسلة وتشمل الأنواع
int float char long double
التحوير : هو تحويل المعلومات من شكل الى شكل آخر
عندما نستخدم تعبيرا في برنامج يجب أن نأخذ في الاعتبار استعمال النوع الصحيح للمعلومات في هذا التعبير
أريد توضيحا أكثر
مثلا التعبير الذي يتوقع كائن سلسلة حروف يجب أن يتلقى كائن سلسلة حروف
ولكن يا استاذي الكريم ما الهدف من التحوير ؟
الهدف من التحوير انتاج قيمة جديدة تكون نوعا مختلفا من المتغيرات أو الكائنات عن توع مصدرها
استاذي الكريم افهم من ذلك أن التحوير ينتج كائنا جديدا ؟
نعم صديقي العزيز انت عندما تقوم بتحوير كائنا فإنك لا تغير قيمة المتغير أو الكائن ولكن تنشأ متغيرا أو كائنا جديدا بالتنسيق الذي تحتاج اليه
والتحوير يعني تحور مصدر الى وجهة أو مقصد يعني من مصطلحات التحوير مصطلحان هما المصدر والوجهة أو المقصد
المصدر : وهو المعلومات الأصلية
الوجهة : هي النسخة المحولة للمصدر في شكل جديد

المدرس العربي
09-29-2007, 12:49 PM
تحوير المتغيرات البسيطة
في المتغيرات العددية مثل الأعداد الصحيحة يكثر تحوير المتغيرات البسيطة
ولكن هناك نوع من المتغيرات لا يمكن استخدامه في اي تحوير وهو القيم البولية
ولكن ياستاذي العزيز ما هي الطريقة لتحوير المعلومات ؟
لتحويل المعلومات في تنسيق جديد فما عليك الا ان تضع قبلها اسم التنسيق الجديد
لو سمحت استاذي مثال للتوضيح
اذا اردت تحوير شيء في متغير لونج مثلا تضع قبله كلمة لونج بين قوسين
لو سمحت مثال للتوضيح
المثال التالي يحور قيمة

float -------- int
float source = 6.06f;
int destination = ( int) source;
وعندما نحول متغيرا ما الى متغير آخر له قيمة أكبر من المصدر فان القيمة تتحول بسهولة
مثل تحوير بايت في انت حيث يحمل بايت قيما بين -128 و 127 بينما انت يحمل قيما بين -2.1 مليون الى 2.1 مليون
لكن ياستاذي الفاضل هل يمكننا استخدام متغير بتنسيق مختلف دون تحويله
نعم يمكن استخدام متغير بتسيق مختلف دون تحويره فمثلا يمكن استخدام متغيرات char كما لو كانت متغيرات int ويمكن استخدام أي شيء كمتغير ouble

نبيل عصمت
09-30-2007, 02:35 PM
شرح فوق الممتاز وفعلا مستوفى
وبيفهم الناس اللى زينا نفسها تعرف
تسلم الأيدى يا مدرسنا العربى
شكرا

المدرس العربي
10-19-2007, 02:12 PM
شكرا جزيلا
كل عام وانتم جميعا بخير
وعيد سعيد

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

المدرس العربي
10-19-2007, 02:29 PM
الأهداف

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


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

المدرس العربي
10-20-2007, 01:25 PM
http://deyaa.org/applets33.jpg

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

مع ملاحظة أن الصفات والسلوك تتكون من قسمين قسم ذاتي والآخر موروث من الفئات العليا
استاذي العزيز لوسمحت اريد توضيحا أكثر لهذه الجزئية
لا عليك صديق الكريم
اليك بعض صفات وسلوك الفئة ابلت
أولا : النهج equals يحدد ما اذا كان الكائن ابلت يحمل نفس قيمة كائن آخر
ثانيا : النهج setBackground() يضبط لون الخلفية المعروض في البريمج
ثالثا : النهج Add( ) يضيف مكونات خاصة تفاعلية خاصة بالمستخدم مثل الازرار وحقول النص
رابعا : النهج showStatus يعرض سطرا في سطر الحالة الذي يظهر في الانترنت اكسبللور
نلاحظ هنا ان النهج الاخير هو النهج الغير موروث بينما الثلاث الآخرى موروثة من الفئات العليا
حيث يرث النهج ايكوالس من الفئة اوبجيكت ويرث صفات وسلوك النهج سيت باكجراوند من الفئة العليا كومبوننت ويرث صفات وسلوك النهج ادد من الفئة العليا كونتينار

المدرس العربي
10-20-2007, 02:19 PM
الاستاذ الكريم هل يمكن للفئة الفرعية أن تغير بعض صفات وسلوك الفئة العليا التي ورثت منها ؟
هذا سؤال هام جدا وجاء في وقته
نعم يمكن للفئة الفرعية أن تغير صفات وسلوك فئاتها العليا بل يمكن أن تستبدلها أو تمحوها كليا
وتسمى هذه العملية تجاوز النهج
ولكن يا استاذي متى نحتاج في البرنامج الى تجاوز النهج ؟
صديقي الكريم نحتاج الى تجاوز النهج اذا اعطى السلوك الموروث والصفة الموروثة من الفئة العليا نتائج غير مرغوبة وحينها ننشأ نهج جديد في الفئة الفرعية بهدف تغيير السلوك الموروث من الفئة العليا
والان يا استاذي العزيز كيف انفذ الوراثة ؟
لجعل فئة ما فئة فرعية لفئة أخرى نستعمل الجملة extends

المدرس العربي
10-27-2007, 02:57 PM
مرحبا بك
نلتقي اليوم مع أهم موضوع في البرمجة
استاذي الفاضل هل هناك موضوع هام الى هذه الدرجة لم نتحدث عنه بعد ؟
لقد اشرنا اليه في البداية اشارة سريعة ولكن اليوم نتحدث عنه بالتفصيل .
طيب ليه يااستاذي آخرنا الكلام الى هذه المرحلة المتأخرة ؟
صديقي العزيز الهدف من هذه السلسلة البرمجية هو اعداد جيل من المبرمجين العرب يطوعون لغة الجافا لخدمة مجتمعاتهم ونطوير الجافا بينز هو ما نريده في النهاية .
استاذي الكريم ما المقصود بالجافا بينز ؟
جافا بينز JavaBeans هي فئات class بلغة الجافا مصممة خصيصا بهدف اعادة استعمالها
يعني يا استاذ مكونات برمجية ؟
ما شاء الله نعم نعم هذه تسمى مكونات برمجية في كثير من لغات البرمجة
تطوير جافا بينز JavaBeans
استاذي الكريم ما المقصود الجافا بينز ؟
مرحبا بك صديقي العزيز المقصود بجافا بينز [ فئات ـ كلاس ـ مكتوبة بلغة الجافا بهدف اعادة استخدامها ويسمى معيار تطوير هذه الفئات او الكائنات جافا بينز بينما يسمى الكائن المنفرد بيين Bean
استاذي الكريم اريد توضيحا أكثر لهذه الجزيئية ؟
قلنا سابقا أن من مميزات لغة الجافا كلغة برمجة كائنية أنها تشجع إعادة الاستخدام فاذا طورت كائن مودم مثلا لكي تستخدمه في مشروع برمجي كتبته بلغة الجافا فإم هذا الكائن يمكن ان تستخدمه في مشروع آخر بشرط توافقه مع كائنات المشروع الجديد الذي تنوي اعادة استعماله فيه
وكيف نضمن هذا التوافق ؟
سؤالك هام جدا ويجيب على السؤال الأول الذي بدأت به الدرس ان الذي يضمن التوافق بين الكائنات هو المعيار الذي نطور على اساسه الكائنات وهذا المعيار هو الجافا بينز وضح الاان المقصود ولا عادو كما يقول اخواننا اليمنيون
وضح استاذي .....ولكن ما فائدة هذا المعيار ؟
فوائد هذا المعيار هي سهولة العمل بهذه الكائنات نتيجة تصميم أدوات تطوير تتبع هذا المعيار ، من يغرف المعيار يعرف كيفية عمله وبالتالي تقل الحاجة الى توثيق كيفية عمل هذه الكائنات ، تفاعل كائنيين مع بعضهما دون الحاجة لاجراء برمجة خاصة لجعلهما متوافقين
ولكن يا استاذي الفاضل هل يتطلب تطوير البينز ادوات خاصة ؟
نعم يتطلب تطوير البينز أداة برمجة خاصة الى جانب ادوات تطوير الجافا
وكيف يمكنني الحصول على هذه الآداة ؟
يمكنك الحصول على هذه الآداة من موقع شركة صن ميكروسيستيمز .
http://java.sun.com/bean/software
ويمكنك البحث عن باستخدام الكلمات المفتاحية الاتية
Borland JBuilder
Symantec Visual Cafe
Lotus BeanMachine
SunSoft java Workshope
NetBeans 5.0
The Beans Development Kit

وما الفرق بين عدة تطوير الجافا وعدة تطوير البينز ؟
عدة تطوير البينز BDK بها اداة برمجة فيجوال تسمى BeanBox تستخدم لإضافة البينز الى برامج الجافا




http://www.deyaa.org/BeanBox3.gif

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

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

هل يمكن للفئة أن ترتبط بأكثر من فئة عليا بحيث ترث صفات وسلوك اضافية ؟
لا يمكن في لغة الجافا هذا الامر ولكن يمكن ذلك في لغة ++ C ولعل هذا من الاسباب التي دفعت جيمس حوزلينج لاختراع الجافا من لغة السي

بالمناسبة استاذي طالما ذكرنا لغات برمجة أخرى اود ان أسال عن ادوات التحكم اكتيف إكس ActiveX هل تشبه جافا بينز ؟
نعم هناك تشابه بين اكتيف اكس وجافا بينز وهما وجهان لعملة واحدة تسمى مكونات برمجية تحت الطلب والفارق ان الآولى لشركة ميكروسوفت والثانية لشركة صن ميكروسيستيمز
حيث تمثل أكتيف اكس تكييف مبسط لنموذج مكونات الكائنات Component Object Model وهو معيار معقد لبرمجة مكونات البرمجة التي يمكن تنفيذها في كثير من لغات البرمجة ويمكن تطوير أدوات التحكم أكتيف إكس بعدة لغات برمجة من بينها لغة الجافا ومن الامور الهامة التي سوف نتناولها كيفية تحويل كائن بينز الى اداة تحكم أكتيف اكس

java_student
10-30-2007, 06:23 AM
السلام عليكم ورحمة الله وبركاته ,,,,

بارك الله فيك أخي ومشكور على الموقع والدروس المفيدة جداً , واسال الله تعالى ان يجعله في ميزان حسناتك.

نبيل عصمت
10-31-2007, 06:15 PM
عمنا المدرس العربى
شرحك مميز جدا على مستوى الشروح
المختلفة على النت
وحقيقى دسم ومفيييييييد


تسلم يا عمنا

المدرس العربي
12-15-2007, 08:43 AM
السلام عليكم
كل عام وانتم بخير
تلتقي اليوم مع برمجة تطبيقات النت الصغيرة ( الابلت )
ونعرض اليوم كيفية انشاء بريمج متعدد المسارات ( المهام ) المسالك

الأهداف


1 - ان ينشيء المتدرب مسارا
2 - ان يشغل المسارات ويوقفها بشكل مؤقت
3 - ان يستعمل واجهة مع البريمج
4 - ان يرسل البارامترات الى البريمج
5 - ان يكتب بريمج متعدد المسارات


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


<html>
<applet code=Dalel.class codebase="http://www.deyaa.org/" width=200 height=100> </applet>
</html>


ما الهدف من البرنامج ؟
يعرض البرنامج محموعة من المواقع مع عناوينها الالكترونية يعني دليل مواقع

وسوف نعرض النص الكامل للبرنامج مع ترجمته وعرضه ثم نقوم بشرح كل قسم من أقسام البرنامج

المدرس العربي
12-15-2007, 12:45 PM
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;

public class Dalel extends Applet
implements Runnable, ActionListener {

String[] pageTitle = new String[6];
URL[] pageLink = new URL[6];
int current = 0;
Thread runner;

public void init() {
Color background = new Color(238, 251, 177);
setBackground(background);
pageTitle[0] = "المدرس العربي";
pageLink[0] = getURL("http://www.deyaa.org");
pageTitle[1] = "وزارة التربية والتعليم";
pageLink[1] = getURL("http://www.emoe.org");
pageTitle[2] = "الرخصة الدولية ";
pageLink[2] = getURL("http://www.icdlegypt.gov.eg");
pageTitle[3] = "منتدى المدرس العربي ";
pageLink[3] = getURL("http://www.deyaa.org/vb/");
pageTitle[4] = "بيت معلمي الكيمياء";
pageLink[4] = getURL("http://www.bytocom.com/vb/");
pageTitle[5] = "جافا ابلت بنك ";
pageLink[5] = getURL("http://www.jars.com");
Button goButton = new Button("هيا");
goButton.addActionListener(this);
add(goButton);
}

URL getURL(String urlText) {
URL pageURL = null;
try { pageURL = new URL(getDocumentBase(), urlText); }
catch (MalformedURLException m) { }
return pageURL;
}

public void paint(Graphics screen) {
screen.drawString(pageTitle[current], 5, 60);
screen.drawString("" + pageLink[current], 5, 80);
}

public void start() {
if (runner == null) {
runner = new Thread(this);
runner.start();
}
}

public void run() {
while (true) {
repaint();
current++;
if (current > 5)
current = 0;
try { Thread.sleep(10000); }
catch (InterruptedException e) { }
}
}

public void stop() {
if (runner != null) {
runner.stop();
runner = null;
}
}

public void actionPerformed(ActionEvent evt) {
runner.stop();
AppletContext browser = getAppletContext();
if (pageLink[current] != null)
browser.showDocument(pageLink[current]);
}
}

المدرس العربي
12-15-2007, 12:59 PM
القسم الأول
اول قسم في البريمج قسم استدعاء جنود الجافا او كما قلنا قبل ذلك عفاريت الجافا
ويتم هذا باستعمال الجمل
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;

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

public class Dalel extends Applet
implements Runnable, ActionListener {

تنشيء هذه الجملة فئة دليل Dalel كفئة فرعية للفئة ابلت

استاذي الكريم لاحظت انك تستعمل في هذا البريمج جملة جديدة هي implements فما الغرض منها ؟
صديقي العزيز هذه الجملة تمكن الفئة السابقة من وراثة بعض الطرق الاضافية التي تتجاوز الموروثة من الفئة ابلت

وهنا تجد الفئتين Runnable, ActionListener
تسميان واجهات
ولكن استاذي ماذا تقصد بالواجهة ؟
الواجهة نوع خاص من الفئات يستفاد منها بالتوافق مع الجملة implements
ونجد ان Runnable توفر السلوك الذي يلزم البريمج ليصبح مسلكا بينما ActionListener تمكن البريمج من الاستجابة لما يقوم به المستخدم بواسطة الماوس

نبيل عصمت
12-19-2007, 04:38 PM
عظيم وملكش مثيل يا عم المدرس العربى
شغلك فى الجافا أكتر من رائع
تسلم يارائد تعليم الجافا على النت
كل سنة وأنت طيب عيد أضحى مبارك

المدرس العربي
12-22-2007, 12:55 PM
شكرا جزيلا
كل عام وانتم بخير
عيد سعيد
شكرا استاذ نبيل

المدرس العربي
12-23-2007, 09:35 PM
مرحبا بكم جميعا وكل عام وانتم بخير
نلتقي معكم اليوم مع درس آخر من دروس الجافا ضمن دروس الجزء الثاني الخاص ببريمجات الجافا التي تعمل من خلال الشبكة العنكبوتية الدولية
وعنوان الدرس اليوم انشاء برمجيات تتكلم ( تشغيل ملفات الصوت في بريمجات النت )
مقدمة
مع ظهور اجهزة الراديو كان الناس يتعجبون من تلك الالة التي تتحدث وانتشرت في هاتيك الايام النوادر والطرائف عن الجني الذي يسكن الجهاز ويتحدث منه الى الناس واليوم بعد مرور هذه السنوات نجد ان برامج الذكاء الصناعي قد طورت روبوت يتكلم في كل الامور معك واكثر من ذلك قد تسر اليه ببعض الاسرار وربما تستشيره في بعض الامور وليس هذا من افلام الخيال العلمي فهناك برامج كثيرة على النت الان تتكلم معك وتدير معك حوارا
وفي درسنا اليوم سوف نتدرب على ان نجعل الكمبيوتر يقرأ المكتوب

الأهداف
1 - ان يتعرف المتدرب على الامكانيات الصوتية لفئة جافا ابلت
2- ان يحمل المتدرب ملف صوت في اوديو كليب لاعادة الاستماع اليه
3 - ان يشغل المتدرب الاصوات ويعيد تشغيلها ويوقفها
4 - ان ينشيء المتدرب صوت متكرر
5 - أن يمزج المتدرب عدة أصوات معا
6 - ان يؤرشف المتدرب ملفات البريمج في أرشيف جافا

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

استاذي الفاضل الاحظ ان حضرتك تتكلم دائما عن جافا 2 لماذا ؟
هذه ملحوظة جيدة نحن نركز في كل هذه السلسلة على جافا 2 حيث نضع الاساس الذي لابد منه لتعلم الجافا حيث يمثل ذلك الحد الأدنى وبعون الله بعد الانتهاء من هذه السلسلة سوف نقدم النسخة الأخيرة من سلسلة جديدة للتدريب على البرمجة بلغة الجافا بعنوان
تعلم البرمجة بلغة الجافا ( جافا 6 ) وهي آخر اصدارة لجافا
وسوف يكون معظمها فيجوال جافا حيث نقدم برنامج NetBeans 6.0
ولكن مهم جدا هذا الاساس الذي به يمكن البناء للأعلى
شكرا استاذي وعفوا للمقاطعة والخروج عن السياق
لا عليك
استاذنا كيف يمكن تشغيل الاصوات في البريمجات ؟
توجد طريقتان لتشغيل الصوت في البرنامج اما كصوت يسمع مرة واحدة أو كصوت في حلقة متكررة
حيث تحمل الاصوات من ملف صوتي بتنسيق تدعمه الجافا
ما التنسيقا التي تدعمها الجافا ؟
تتعامل الجافا مع ملفات الصوت بالتنسيقات التالية

Au + AIFF + WAV + MIDI
ولكن كيف يمكن الاستماع الى الصوت ؟
اسهل طريقة لتشغيل الصوت استعمال الطريقة play للفئة جافا ابلت

وكيف يتم استدعاء النهج play() ؟
يتم ذلك بطريقتين الاولى
كائن (url) يمثل المجلد الذي نضع فيه الملف الصوتي
او بسلسلة حروف تشير الى اسم الملف

XXXX
02-25-2008, 03:57 AM
الله يعطيك الف عافيه يااستاذ عماد.
جزاك الله الف خيـــر ، انا مريت على الموضوع بسرعه بس ان شاء الله راح ارجع اقراه المره الجايه مع التطبيق.

المدرس العربي
06-13-2008, 03:26 PM
بسم الله خير الاسماء والصلاة والسلام على امام الانبياء سيدي وحبيبي محمد بن عبد الله

مرحبا بكم
نواصل مسيرتنا مع الجافا والله مقصدوي ورضاه مطلوبي

الاهداف

استعمال الخطوط في البريمج

اختيار قياس ونمط الخط

اختيار الخط

استعمال ثوابت الالوان

عرض الالوان في البريمجات

اعداد لون الخلفية

استعمال قيم نظام الالوان

انشاء تأثيرات نص خاصة باستعمال الالوان

العرض

اولا استعمال فئة الخط

مرحبا بكم معنا في هذا الدرس الذي يتناول استعمال الخطوط والالوان في بريمجات الجافا ابليت

بالنسبة للخط يهمنا فيه معرفة ثلاثة مواصفات اولها نوع الخط ومن أنواع الخطوط

Helvetica , Courier , Dialog , Times Roman

نمط الخط [ أسود . مائل . عادي ] وهكذا

حجم الخط بالنقاط

استاذي الكريم ماذا اصنع لأتمكن من عرض النص ؟

لكي تتمكن من عرض النص بأنواع خطوط وانماط وأحجام معينة يجب ان تكون الكائن فونت مائل بحجم 12 نقطة مع مراعاة اختيار الاسماء الوصفية للخط مثل خط أحادي التباعد

لوسمحت اريد توضيحا أكثر

يمكنك اختيار نمط الخط باستعمال متغير ثابت واحد أو أكثر على سبيل المثال

Font.Plain يجعل الخط غير اسود وغير مائل

يجعل الخط أسود Font.Bold

يجعل الخط مائل Font.Italic

يجعل الخط اسود ومائل Font.Bold+Font.Italic


import java.awt.*;

public class Fonts extends java.applet.Applet {

public void paint(Graphics screen) {
Font currentFont = new Font("TimesRoman", Font.PLAIN, 20);
screen.setFont(currentFont);
screen.drawString("أحبب حبيبك هونا ما ", 210, 50);
currentFont = new Font("TimesRoman", Font.PLAIN, 20);
screen.setFont(currentFont);
screen.drawString("فلربما صار عدوك يوما ما", 180, 80);
currentFont = new Font("TimesRoman", Font.PLAIN, 20);
screen.setFont(currentFont);
screen.drawString("وابغض بغيضك هونا ما ", 200, 110);
currentFont = new Font("TimesRoman", Font.PLAIN, 20);
screen.setFont(currentFont);
screen.drawString("فلربما صار حبيبك يوما ما ", 180, 140);
}
}

المثال السابق مثال سهل لاستعمال الخطوط في البريمج بعد ان تترجمه وتعرضه في صفحة انترنت يكون الناتج كالاتي

<html>
<applet code="Fonts.class" codebase="http://www.deyaa.org/nassr/" height=155 width=369>
</applet>
</html>
والان الى الالوان

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

http://deyaa.org/nassr/coll02.jpg
وللموضوع بقية

الى لقاء قادم بعون الله

المدرس العربي
07-04-2008, 09:57 AM
السلام عليكم
نواصل الدرس السابق
والان الى الالوان

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

وهذه الثوابت هي

Black , blue , cyan , darkGray , gray , green , Lightgray , magenta , orange , pink , red , white , yellow

حيث يمكنك ضبط لون الخلفية لإطار البريمج باستعمال هذه الثوابت

لو سمحت استاذي العزيز اريد مثالا على ذلك

setBackground(Color.gray);

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

في هذه الحالة نستعمل نهج يضبط اللون وتستطيع عمل هذا من النهج بينت باستعمال النهج سيت كلر

كما في المثال

public void paint(Graphics screen) {
super.paint(screen);
graphics2D screen2D = (Graphics2D) screen;
screen2D.setColor(Color.orang);
screen2D.drawString("الجافا لغة العصر ", 5 , 50);

استاذي الفاضل ماذا اصنع اذا اردت استعمال لون غير وارد في الثوابت السابقة يعني اذا اردت استعمال درجة معينة من درجات الاخضر ماذا افعل ؟
http://www.deyaa.org/nassr/coll02.jpg

صديقي العزيز اذا اردت استعمال لون غير الالوان الثابتة الثلاثة عشر في هذه الحالة يجب تحديد القيم التالية للون

R G B [ red -- green - blue ]

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


http://www.deyaa.org/nassr/coll04.gif

كما في الصورة اذا اردت اختيار اللون الفيروزي فان قيمته كما في الصورة 89 للأحمر 193 للأخضر 247 للأزرق

وللبرتقالي الفاتح 230 للأحمر 220 للأخضر 0 للأزرق

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

وماذا عن النظام الثاني لاختيار الالوان الذي توفره الجافا

تقصد نظام الالوان اتش اس بي

H S B [ Hue Saturation Brightness ]

في هذا النظام نغير درجة سطوع اللون دون تغيير أي شيء أخر في اللون

واليك هذا المثال

import java.awt.*;

public class Marhaba extends java.applet.Applet {
String text = "No text has been specified";
float hue = (float) 0.5;
float saturation = (float) 0.8;
float brightness = (float) 0.0;
Font textFont = new Font("Dialog", Font.BOLD, 20);
int textX;

public void init() {
setBackground(Color.blue);
String paramName = getParameter("TEXT");
if (paramName != null)
text = paramName;
FontMetrics fm = getFontMetrics(textFont);
textX = size().width / 2 - fm.stringWidth(text) / 2;
}

public void paint(Graphics screen) {
Color textColor = Color.getHSBColor(hue, saturation, brightness);
screen.setColor(textColor);
screen.setFont(textFont);
screen.drawString(text, textX, 30);
pause(250000);
brightness += 0.05;
if (brightness > 1) {
brightness = (float) 0.0;
pause(250000);
}
repaint();
}

public void update(Graphics screen) {
paint(screen);
}

void pause(int duration) {
for (int pause = 0; pause < duration; pause++);
}

}

بعد ترجمة الملف انشأ صفحة لعرضه

<html>
<applet code="Marhaba.class" codebase="http://www.deyaa.org/nassr/" height=60 width=400><param name="TEXT" value="مرحبا بكم مع الجافا "></applet>
</html>

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

الى اللقاء في الدرس القادم حيث نلتقي مع انشاء الرسوم المتحركة والعمل مع الرسوم ثنائية الابعاد ان شاء المولى عز وجل

المدرس العربي
07-05-2008, 04:26 PM
ان يعرف المتدرب طرق الرسم للفئة ثنائية الابعاد
ان يرسم الخطوط
ان يرسم المستطيلات
ان يرسم المضلعات
ان يرسم المتدرب الاشكال البيضاوية
ان يرسم المتدرب الاشكال بألوان مختلفة
ان يرسم الاشكال المملوءة والفارغة

العرض

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

استاذي العزيز هل تقصد ان هذا الدرس سهل ؟

صديقي الكريم المقصود أن الرسم في الجافا سهل وممتع للمبرج والمستعرض معا مثلا رسم الخطوط والمضلعات سهل مثل الدرس السابق عرض النص

ما اليات الرسم التي نتبعها ؟

للرسم نستعمل نهجا من الفئة جرافيك من داخل النهج بينت للبرنامج حيث تخزن الفئة جرافيك المعلومات المطلوبة لعرض شيء على الشاشة

Graphics وكيف استخدم الفئة

لكي تستعمل هذه الفئة عليك ان تنشأ كائن يمثل اطار البريمج أحد هذه الكائنات يرسل الى النهج بينت كما في المثال

public void paint(Graphics screen) {



وتستخدم وسيطة الكائن جرافيك داخل النهج بينت لانشاء كائن رسم ثنائي الابعاد كما في المثال

Graphics2D screen2D = (Graphics2D) screen;



ولكن استاذي الكريم كيف احدد مواضع الخطوط وابعادها ؟

لرسم الاشكال والخطوط نستعمل نظام الاحداثيات س , ص [ اكس , واي ] حيث تقع النقطة ذات الاحداثيات ( 0 ، 0 ) في الزاوية اليسرى العليا لاطار البريمج وتزداد قيم س كلما تحركنا يمينا وتزداد قيم ص كلما تحركنا لأسفل

هل يمكن تحديد قيمة قصوى للاحداثيات س ، ص ؟

نعم يمكن تحديد قيمة قصوى للاحداثيات س ، ص في البريمج باستعمال الجملتين

int maxXValue = getSize().width;
int maxYValue = getSize().height;



استاذي العزيز لدينا في هذا الدرس عدة نقاط رئيسية لرسم [ خطوط ، مستطيلات ، دوائر ، مضلعات ] نرى بمن نبدأ ؟

الطبيعي ان نبدأ بالخطوط حيث تتطلب عملية رسم الخطوط خطوتين

الأولى انشاء كائن يمثل الشكل المطلوب

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

Line2D.Float
Line2D.double

هل يوجد اختلاف بين الفئتين ؟

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

draw() يرسم الشكل فارعا
fill( ) يرسم الشكل مملوءا

public void paint(Graphics screen) {

screen.setColor(Color.magenta);
screen.drawLine(200,110,170,115);
screen.drawLine(170,115,160,90);
screen.drawLine(160,90,150,94);
screen.drawLine(160,90,153,85);
screen.drawLine(160,90,158,83);
screen.drawLine(160,90,163,84);



رسم المستطيلات
screen.setColor(Color.black);
screen.fillRect(245,65,15,15);



في المثال المذكور الجملة تنشأ مستطيلا مملوء زاويته العليا اليسرى عند الاحداثي ( 245, 65) ويبلغ عرضه 15 وطوله 15 حيث الابعاد المستخدمة البكسل نفس وحدة قياس الاحدثيات

واليك هذا المثال الاجمالي


import java.awt.*;

public class Shape extends java.applet.Applet {

public void init() {
setBackground(Color.white);
}
public void paint(Graphics screen) {
// لرسم مستطيل بزوايا مدورة نضع الجملة التالية التي تحدد
// الاحداثي س لأعلى يسار المستطيل ثم الاخداثي ص لأعلى يسار المستطيل
// ثم عرض المستطيل وارتفاع المستطيل
// ثم عدد البكسلات في الاتجاه السيني بعيدا من زاوية المستطيل
// ثم عدد البكسلات في الاتجاه الصادي بعيدا عن زاوية المستطيل
// تستخدم هاتان المسافتان لتحديد مكان بداية تدوير زاوية المستطيل
screen.setColor(Color.red);
screen.drawRoundRect(10,10,size().width-20,size().height-20,15,15);
// تقع الزاوية العليا اليسرى للمستطيل عند الاحداثي ( 10, 10 ) وتبدأ
// استدارة الزاوية على بعد 15 بكسلا من الزاوية الموجودة عند هذه النقطة
// الاتي رسم مستطيل بزوايا متعامدة
screen.setColor(Color.orange);
screen.fillRect(100,90,100,100);

screen.setColor(Color.magenta);
screen.drawLine(100,110,70,115);
screen.drawLine(70,115,60,90);
screen.drawLine(60,90,50,94);
screen.drawLine(60,90,53,85);
screen.drawLine(60,90,58,83);
screen.drawLine(60,90,63,84);

screen.setColor(Color.yellow);
screen.fillOval(110,30,60,60);

screen.setColor(Color.green);
screen.fillOval(145,45,5,5);
screen.fillOval(155,45,5,5);

screen.setColor(Color.black);
screen.fillRect(145,65,15,15);

screen.setColor(Color.cyan);
int[] xPoints = { 105, 205, 140, 105 };
int[] yPoints = { 43, 40, 15, 43 };
int points = 4;
screen.fillPolygon(xPoints, yPoints, points);
}
}




بعد عرض البريمج يكون الناتج كالاتي

<html>
<applet code="Shape.class" codebase="http://www.deyaa.org/nassr/" height=220 width=340></applet>
</html>

ويمكن تحميل مصدر البريمج بارسال رسالة عبر المنتدى الي
شكرا لكم

المدرس العربي
07-11-2008, 02:36 PM
مرحبا بكم

نواصل بعون الله مسيرتنا مع الرسم بالجافا

نعرض اليوم نموذج لاستعمال المضلعات لرسم لوحات فنية

والمفاجأة هي الموناليزا

لنرى كيف يرسم الحاسوب الموناليزا من دون استعمال فرشاة وأصباع

بريمج الجيوكوندا

import java.awt.*;

public class Monalisa extends java.applet.Applet {
Polygon hair;

public void init() {
int[] hairX = { 125, 131, 156, 217, 270, 314, 244, 233,
196, 162, 147, 153, 180, 189, 125 };
int[] hairY = { 314, 122, 75, 57, 96, 287, 319, 118,
87, 92, 133, 203, 231, 258, 314 };
hair = new Polygon(hairX, hairY, 15);

setBackground(Color.white);
}

public void paint(Graphics screen) {
Color lightyellow = new Color(250,244,198);
screen.setColor(lightyellow);
screen.fillRoundRect(147,84,103,74,23,23);
screen.fillOval(147,94,103,132);

screen.setColor(Color.black);
screen.fillPolygon(hair);

int[] eyebrow1X = { 151, 168, 174, 171, 178, 193 };
int[] eyebrow1Y = { 145, 140, 148, 184, 191, 188 };
screen.drawPolyline(eyebrow1X, eyebrow1Y, 6);

int[] eyebrow2X = { 188, 197, 213, 223 };
int[] eyebrow2Y = { 146, 141, 142, 146 };
screen.drawPolyline(eyebrow2X, eyebrow2Y, 4);

int[] mouthX = { 166, 185, 200 };
int[] mouthY = { 199, 200, 197 };
screen.drawPolyline(mouthX, mouthY, 3);

screen.fillOval(161,148,10,3);
screen.fillOval(202,145,12,5);
Font currentFont = new Font("TimesRoman", Font.PLAIN, 20);
screen.setFont(currentFont);
screen.drawString("موناليزا كما رسمها الحاسب ", 210, 50);
currentFont = new Font("TimesRoman", Font.PLAIN, 20);
}
}


بعد ترجمة البريمج وعرضه يكون الناتج كما يلي

<html>
<applet code=Monalisa.class codebase="http://www.deyaa.org/nassr/" width=400 height=400> </applet>
</html>

ماذا يفعل ليوناردو دافنشي الذي رسم هذه اللوحة عام 1505 عندما يرى الحاسوب قد رسمها في زمن لا يتعدى ثانية واحدة

اللى اللقاء في الدرس القادم ـ الرسوم المتحركة

خالص الامنيات بالتوفيق

emad Eldin

المدرس العربي
07-12-2008, 10:28 PM
الأهداف

ان ينشئ المتدرب كائن صورة لاحتواء ملفات الصور
ان يضع المتدرب سلسلة من الصور في مصفوفة
ان يعرض الصور من المصفوفة لتوليد رسم متحرك
update() لتقيل مشاكل الارتجاف يستعمل الطريقة
drawImage() ان يستعمل الامر
ان يحدد قواعد لحركة الصورة

العرض

تمهيد

مثال تمهيدي

import java.applet.Applet;
import java.awt.*;

public class Dawara extends Applet
implements Runnable
{

public void init()
{
resize(400, 300);
setBackground(Color.white);
setLayout(new BorderLayout());
Panel panel = new Panel();
panel.setLayout(new FlowLayout());
panel.add(new Button("أسرع"));
panel.add(new Button("متوسط"));
panel.add(new Button("بطيء"));
panel.add(new Button("توقف"));
add("South", panel);
Dimension dimension = size();
offScreen = createImage(dimension.width, dimension.height);
offGraphics = offScreen.getGraphics();
}

public void paint(Graphics g)
{
angle = angle + move;
Dimension dimension = size();
g.drawImage(offScreen, 0, 0, null);
offGraphics.setColor(getBackground());
offGraphics.fillRect(0, 0, dimension.width, dimension.height);
offGraphics.setColor(getForeground());
offGraphics.setColor(Color.yellow);
int i = (int)(Math.cos(angle) * (double)r + (double)xcenter);
int j = (int)(-Math.sin(angle) * (double)r + (double)ycenter);
int ai[] = {
i, (int)((Math.sin(angle) * (double)r) / 2D + (double)xcenter), xcenter
};
int ai1[] = {
j, (int)((Math.cos(angle) * (double)r) / 2D + (double)ycenter), ycenter
};
offGraphics.fillPolygon(ai, ai1, 3);
offGraphics.setColor(Color.blue);
int k = (int)(-Math.sin(angle) * (double)r + (double)xcenter);
int l = (int)(-Math.cos(angle) * (double)r + (double)ycenter);
int ai2[] = {
k, (int)((Math.cos(angle) * (double)r) / 2D + (double)xcenter), xcenter
};
int ai3[] = {
l, (int)((-Math.sin(angle) * (double)r) / 2D + (double)ycenter), ycenter
};
offGraphics.fillPolygon(ai2, ai3, 3);
offGraphics.setColor(Color.pink);
int i1 = (int)(-Math.cos(angle) * (double)r + (double)xcenter);
int j1 = (int)(Math.sin(angle) * (double)r + (double)ycenter);
int ai4[] = {
i1, (int)((-Math.sin(angle) * (double)r) / 2D + (double)xcenter), xcenter
};
int ai5[] = {
j1, (int)((-Math.cos(angle) * (double)r) / 2D + (double)ycenter), ycenter
};
offGraphics.fillPolygon(ai4, ai5, 3);
offGraphics.setColor(Color.red);
int k1 = (int)(Math.sin(angle) * (double)r + (double)xcenter);
int l1 = (int)(Math.cos(angle) * (double)r + (double)ycenter);
int ai6[] = {
k1, (int)((-Math.cos(angle) * (double)r) / 2D + (double)xcenter), xcenter
};
int ai7[] = {
l1, (int)((Math.sin(angle) * (double)r) / 2D + (double)ycenter), ycenter
};
offGraphics.fillPolygon(ai6, ai7, 3);
}

public void update(Graphics g)
{
paint(g);
}

public void start()
{
if(thread == null)
{
thread = new Thread(this);
thread.start();
}
}

public void stop()
{
thread = null;
}

public void run()
{
while(thread != null)
{
try
{
Thread.sleep(100L);
}
catch(InterruptedException _ex) { }
repaint();
}
thread = null;
}

public boolean action(Event event, Object obj)
{
if(event.target instanceof Button)
{
if("أسرع".equals(obj))
{
move = -0.40000000000000002D;
if(thread == null)
{
thread = new Thread(this);
thread.start();
}
} else
if("متوسط".equals(obj))
{
move = -0.20000000000000001D;
if(thread == null)
{
thread = new Thread(this);
thread.start();
}
} else
if("بطيء".equals(obj))
{
move = -0.050000000000000003D;
if(thread == null)
{
thread = new Thread(this);
thread.start();
}
} else
if("توقف".equals(obj) && thread != null)
{
thread.stop();
thread = null;
}
return true;
} else
{
return false;
}
}

public Dawara()
{
r = 100;
move = -0.10000000000000001D;
xcenter = 200;
ycenter = 130;
}

Thread thread;
Image offScreen;
Graphics offGraphics;
int xa;
int ya;
int xb;
int yb;
int xc;
int yc;
int xd;
int yd;
int r;
double angle;
double move;
int xcenter;
int ycenter;
}



بعد ترجمة البريمج يكون الناتج

<html>
<applet code=Dawara.class codebase="http://www.deyaa.org/nassr/" width=400 height=300></applet>
</html>

خالص الامنيات بالتوفيق
emad Eldin

المدرس العربي
07-21-2008, 03:37 PM
السلام عليكم
متابعة للدرس السابق
الأهداف

ان ينشئ المتدرب كائن صورة لاحتواء ملفات الصور
ان يضع المتدرب سلسلة من الصور في مصفوفة
ان يعرض الصور من المصفوفة لتوليد رسم متحرك
update() لتقيل مشاكل الارتجاف يستعمل الطريقة
drawImage() ان يستعمل الامر
ان يحدد قواعد لحركة الصورة
العرض

استاذي العزيز كثيرا ما نشاعد في مواقع الانترنت رسوما متحركة واعرف ان هناك برامج تفعل ذلك فكيف يمكن استغلا امكانيات لغة البرمجة الساحرة في انشاء تلك الرسوم المتحركة بدون استخدام برامج ولكم الشكر

صديقي العزيز مرحبا بك يتألف تحريك الصور عامة من رسم صورة بموقع معين وتحريك موقع الصورة واعادة رسمها في موقع جديد اذا الرسوم المتحركة في مواقع الانترنت عبارة عن سلسلة من ملفات الصور من النوع جي بي جي أو النوع جي اي اف التي تعرض في ذات الموقع بترتيب معين GIF JPG

اذا برنامجنا الان هو مجموعة من الصور المتحركة

نعم مجموعة من صور لمنارة حتى ننشأ منها صورة متحركة ونستطيع تعديل الخركة والصور بواسطة البارامترات التي ترسل الى البريمج عبر كود الاتش تي ام ال

والان هيا الى البريمج
import java.awt.*;

public class Manara extends javax.swing.JApplet
implements Runnable {

Image[] picture = new Image[6];
int totalPictures = 0;
int current = 0;
Thread runner;
int pause = 500;

public void init() {
for (int i = 0; i < 6; i++) {
String imageText = null;
imageText = getParameter("image"+i);
if (imageText != null) {
totalPictures++;
picture[i] = getImage(getCodeBase(), imageText);
} else
break;
}
String pauseText = null;
pauseText = getParameter("pause");
if (pauseText != null) {
pause = Integer.parseInt(pauseText);
}
}

public void paint(Graphics screen) {
Graphics2D screen2D = (Graphics2D) screen;
if (picture[current] != null)
screen2D.drawImage(picture[current],0,0,this);
}

public void start() {
if (runner == null) {
runner = new Thread(this);
runner.start();
}
}

public void run() {
Thread thisThread = Thread.currentThread();
while (runner == thisThread) {
repaint();
current++;
if (current >= totalPictures)
current = 0;
try {
Thread.sleep(pause);
} catch (InterruptedException e) { }
}
}

public void stop() {
if (runner != null) {
runner = null;
}
}

public void update(Graphics screen) {
paint(screen);
}
}



وبعد ترجمة البريمج يكون العرض كما يلي

<html>

<applet code=Manara.class codebase="http://www.deyaa.org/nassr/" width=169 height=203><param name="image0" value="lh0.gif">
<param name="image1" value="lh1.gif">
<param name="image2" value="lh2.gif">
<param name="image3" value="lh3.gif">
<param name="pause" value="800">
</applet>

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

وللموضوع بقية
الى اللقاء القادم بعوت الله
</html>

المدرس العربي
07-23-2008, 10:07 AM
انشاء واجهة بسيطة للمستخدم بواسطة سوينج Swing


الاهداف

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

ان يجرب المتدرب الواجهة

--------------------------------------------------------------------------------


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

ودرس اليوم قائم على كيفية تصميم واجهة مستخدم رسومية


--------------------------------------------------------------------------------

العرض

اولا المصطلحات

Graphical User Interface واجهة المستخدم الرسومية

Abstract Windowing Toolkit انشاء النوافذ المجردة

http://www.deyaa.org/nassr/les19.jpg

للموضوع بقية

المدرس العربي
07-23-2008, 04:12 PM
من المعروف ان لغة الجافا لغة مستقلة عن القاعدة التصميمية ولذلك يمكن كتابة برامج مرنة تتوافق مع اي نظام تشغيل توضع فيه وهذه من مميزات الجافا التي تميزها عن اي لغة اخرى ويحضرني هنا مثال مع الفارق اقصد ان لغة الجافا لديها من المرونة قدرا كبيرا يمكنها من التوافق مع اي نظام تشغيل وكأنها جزء منه وقد يقول البعض على سبيل التشبيه انها مثل الحرباء ونقول الى حد ما ولكن مع البعد عن الصورة البغيضة للحرباء المتمثل في التلوين حسب الموضع يعني النفاق الملون ولكن في حالة الجافا نسميه مرونة وفي البداية كان المتحكم في ذلك مجموعة من الفئات تسمى عدة انشاء الاطارات المجردة حيث انها عبارة عن مجموعة من الفئات المصممة لتعمل مع كل القواعد التصميمية ولذلك يتمكن المبرمجون في كافة انحاء العالم من كتابة برامج تنشر على الشبكة الدولية لتعمل من خلال اجهزة كمبيوتر مختلفة في انظمة التشغيل ومتصفحات الانترنت ولكن برمجيات الجافا تتوائم معها جميعا وحديثا قدمت شركة صن مجموعة من الفئات تسمى سوينج وهي مجموعة من الفئات المحسنة التي تؤثر على كيفية ظهور واجهة المستخدم وعملها والتحكم بها وتشتمل على كل ما يحتاجه المبرج لكتابة برامج تستعمل واجهة مستخدم رسومية مثل

أزرار ومربعات تأكيد

حقول نصوص

مربعات حوار

قوائم منسدلة

فئات تتعامل مع الخطوط والالوان والرسوم والاستجابة لاحداث المستخدم


اولا حقل النص وحقل التسمية
import java.awt.*;
import javax.swing.*;

public class Text extends JApplet {
JTextArea comments = new JTextArea();
JLabel l = new JLabel(" ");

public void init() {
BorderLayout flo = new BorderLayout();
Container pane = getContentPane();
comments.setRows(10);
comments.setColumns(50);
pane.setLayout(flo);
pane.add(comments, BorderLayout.CENTER);
pane.add(l, BorderLayout.EAST);
pane.add(l, BorderLayout.WEST);
pane.add(l, BorderLayout.NORTH);
pane.add(l, BorderLayout.SOUTH);
setContentPane(pane);
}
}



<html>
<applet code="Text.class" codebase="http://www.deyaa.org/nassr/" height=120 width=410>
</applet>
</html>

وهذا الناتج

عنوان موقع

import java.awt.*;
import javax.swing.*;

public class LabelText extends JApplet {
JLabel pageLabel = new JLabel("عنوان موقع انترنت ", JLabel.RIGHT);
JTextField pageAddress = new JTextField(20);

public void init() {
FlowLayout flo = new FlowLayout();
Container pane = getContentPane();
int height = pageLabel.getPreferredSize().height;
int width = pageLabel.getPreferredSize().width;
Dimension dim = new Dimension(width+10, height);
pageLabel.setPreferredSize(dim);
pane.setLayout(flo);
pane.add(pageLabel);
pane.add(pageAddress);
setContentPane(pane);
}
}



الناتج

<html>
<applet code="LabelText.class" codebase="http://www.deyaa.org/nassr/" height=80 width=450>
</applet>
</html>

ثانيا : مربعات التحرير والسرد
</html>

المدرس العربي
07-23-2008, 04:26 PM
تابع الدرس 19
ثانيا : مربعات التحرير والسرد
import java.awt.*;
import javax.swing.*;

public class CheckBoxes extends JApplet {
JCheckBox math = new JCheckBox("درجة الرياضيات ", true);
JCheckBox physics = new JCheckBox("درجة الفيزياء ", true);
JCheckBox chemis = new JCheckBox("درجة الكيمياء", false);
JCheckBox biology = new JCheckBox("درجة الاحياء ", false);

public void init() {
FlowLayout flo = new FlowLayout();
Container pane = getContentPane();
ButtonGroup sub = new ButtonGroup();
sub.add(physics);
sub.add(chemis);
sub.add(biology);
pane.setLayout(flo);
pane.add(math);
pane.add(physics);
pane.add(chemis);
pane.add(biology);
setContentPane(pane);
}
}


ويكون البريمج بعد ترجمته كما يلي

<html>
<applet code="CheckBoxes.class" codebase="http://www.deyaa.org/nassr/" height=160 width=150>
</applet>

بريمج اختيار من قائمة منسدلة

import java.awt.*;
import javax.swing.*;
// j2sdk1.4.2_13
public class Combo extends JApplet {
JComboBox profession = new JComboBox();

public void init() {
FlowLayout flo = new FlowLayout();
Container pane = getContentPane();
profession.addItem("جزار");
profession.addItem("خباز");
profession.addItem("فطايري");
profession.addItem("زهار");
profession.addItem("جنايني");
profession.addItem("عطار");
profession.setEditable(true);
pane.setLayout(flo);
pane.add(profession);
setContentPane(pane);
}
}



ويكون الناتج

<html>
<applet code="Combo.class" codebase="http://www.deyaa.org/nassr/" height=160 width=160>
</applet>
</html>
ادارة التخطيط

لشكل الاول

import java.awt.*;
import javax.swing.*;

public class Color extends JApplet {
JButton redButton = new JButton("أحمر");
JButton blueButton = new JButton("أزرق");
JButton greenButton = new JButton("أخضر");
JButton yellowButton = new JButton("أصفر");
JButton roseButton = new JButton("وردي");

public void init() {
Container pane = getContentPane();
FlowLayout flo = new FlowLayout();
pane.setLayout(flo);
pane.add(redButton);
pane.add(blueButton);
pane.add(greenButton);
pane.add(yellowButton);
pane.add(roseButton);
}
}



ويكون الناتج

<html>
<applet code="Color.class" codebase="http://www.deyaa.org/nassr/" height=70 width=308>
</applet>
</html>
الشكل الثاني

المدرس العربي
07-23-2008, 04:36 PM
تابع الدرس 19
الشكل الثاني

import java.awt.*;
import javax.swing.*;

public class Color2 extends JApplet {
JButton redButton = new JButton("أحمر");
JButton blueButton = new JButton("أزرق");
JButton greenButton = new JButton("أخضر");
JButton yellowButton = new JButton("أصفر");
JButton roseButton = new JButton("وردي");

public void init() {
Container pane = getContentPane();
GridLayout flo = new GridLayout(2, 3);
pane.setLayout(flo);
pane.setLayout(flo);
pane.add(redButton);
pane.add(blueButton);
pane.add(greenButton);
pane.add(yellowButton);
pane.add(roseButton);
}
}



ناتج البريمج

<html>
<applet code="Color2.class" codebase="http://www.deyaa.org/nassr/" height=228 width=408>
</applet>
</html>

الشكل الثالث

import java.awt.*;
import javax.swing.*;

public class Color3 extends JApplet {
JButton redButton = new JButton("أحمر");
JButton blueButton = new JButton("أزرق");
JButton greenButton = new JButton("أخضر");
JButton yellowButton = new JButton("أصفر");
JButton roseButton = new JButton("وردي");

public void init() {
Container pane = getContentPane();
BorderLayout crisisLayout = new BorderLayout();
pane.setLayout(crisisLayout);
pane.add(redButton, BorderLayout.NORTH);
pane.add(blueButton, BorderLayout.SOUTH);
pane.add(greenButton, BorderLayout.EAST);
pane.add(yellowButton, BorderLayout.WEST);
pane.add(roseButton, BorderLayout.CENTER);
setContentPane(pane);
}
}



لناتج بالشكل التالي

<html>
<applet code="Color3.class" codebase="http://www.deyaa.org/nassr/" height=228 width=408>
</applet>
</html>


نلاحظ مدى مرونة الجافا في التنويعواعادة ترتيب البريمج

الى اللقاء في الدرس القادم مع تحيات عماد الدين

مع تحيات

المدرس العربي
08-28-2008, 02:39 PM
السلام عليكم
كل عام وانتم بخير <html>

<EMBED src="http://www.deyaa.org/analogclock2.swf?do=get&amp;id=208" quality=high loop=true menu=false WIDTH=128 HEIGHT=128 TYPE="application/x-shockwave-flash"</EMBED>
</html>
اللهم بلغنا رمضان واجعلنا من عتقائك فيه من النيران وانظر الينا نظرة رضا لا نشقى بعدها ابدا
وأسكنا الفردوس الأعلى في جوار حبيبك ومصطفاك أشرف الخلق واسعدهم واكمل مخلوق في الوجود من له حن الجذع وبكى ولتظليله سارع الغمام وجرى
الحمد لله اشعر كثيرا بالسعادة حين ارى معظم المنتديات وهي تأخذ سلسلة دروس الجافا لتضعها في اقسام البرمجة لديها واسعد اكثر حين ينسبها من أخذها لنفسه حيث حينها اعرف ان الثواب الذي ارجوه قد وصل هي دروس اطلب أجرها من الوهاب عز وجل الذي فتح علي بها ونحن عباده وهو المعطي بلا سبب
وسعدت اكثر حين تأخذ منها جامعات عريقة وتشير الى الموقع في مصادرها
لا اتضايق حين اعمل معروفا في اي احد ثم ينكره او حين اضع درسا ويأخذه متلهف للشهرة وينسبه لنفسه لأن الناقد بصير <html>
<EMBED src="http://www.deyaa.org/en04.swf?do=get&amp;id=208" quality=high loop=true menu=false WIDTH=400 HEIGHT=50 TYPE="application/x-shockwave-flash"</EMBED>
</html>

من يفعل المعروف لا يعدم جوازيه لا يضيع العرف بين الله والناس
بعد مضي ستة أعوام على وضع بداية الدروس احمد الله حمدا كثيرا على الدعوات التي تصلني يوميا عبر الايميل من الطلبة والطالبات العرب وخاصة من يدرس منهم في جامعات اجنبية
حيث تصلني يوميا رسائل عديدة بعضها به جملة واحدة تعتبر اغلى وسام " بارك الله فيك " وكفى بها
ورسائل تصلني من طلبة يدرسون البرمجة في استراليا وفي اليابان وماليزيا والهند طلاب دراسات عليا
الحمد لله

المدرس العربي
08-29-2008, 02:20 PM
السلام عليكم

كل عام وحضراتكم جميعا بخير
نلتقي اليوم مع درس مكمل للدرس السابق حيث كنا قد تناولنا كيفية انشاء واجهة مستخدم رسومية باستعما سوينج ولكننا في المرة السابقة عرضنا الواجهات بدون احداث بمعنى اننا اقمنا بناء بدون سكان واحداث تقع واستجابة تحدث للحدث
واليوم سنرى كيف تستجيب برامج الجافا للاحداث
استاذي الفاضل : كل عام وحضرتك بخير
قبل ان نغوص في الاعماق وكما عودتنا دائما نريد ان نضع تعريفا للحدث . ما الحدث؟
شكرا صديق العزيز فعلا البداية سريعة ويجب ان نعود الى الرتم السابق ولكني قد اعتقدت انك الان اصبحت مبرمجا محترفا فقلت انه لا بأس من قفزات سريعة قد تنقلنا من جافا 2 الى جافا 6 آخر اصدارة من الجافا والتي تعمل بجناحيها التطبيقات والبريمجات حاليا بنقرة من الماوس ولكن بشرط ان يكون على حاسبك احدث اصدارة من عدة الجافا وهي java Version 6 Update 7

ويمكنك تحميلها من الموقع


http://www.java.com/en/

واود ان اوضح ان الاساس هو جافا 2 وكل ما بعد ذلك هو تحديثات الى ان نصل جافا 6

عموما نعود الى الرتم السابق فنبدا بالاهداف

الأهداف
1 - ان يجعل المتدرب البريمج يشعر بالحدث
2 - ان يعد المكونات بحيث تتسبب بالأحداث
3 - ان يخزن المعلومات في الواجهة
4 - ان يستعمل المتغيرات العددية مع حقول النص
5 - ان يمكن المكونات
6 - ان يعطل المكونات
7 - ان يكتب برنامج تطبيقي

العرض

الحدث : event هو ما يحدث عند اشتغال البريمج واحداث المستخدم هي الأمور التي يتسبب بها المستخدم باستعماله للماوس أو لوحة المفاتيح أو اي جهاز من اجهزة الدخل المعروفة

وما هي متطلبات الاستجابة لأحداث المستخدم ؟
تتذكر عندما كنا نتحدث عن البريمج متعدد المسالك قلنا انه يجب استعمال الواجهة Runnable
وهنا فان الاستجابة لأحداث المستخدم تتطلب استعمال واجهة EventListener

طيب كيف نضيف هذه الواجهة ؟

لإضافة هذه الواجهة يلزم أمرين
1 - توفير مجموعة الفئات java.awt.event وهذه تتوفر باستعمال الجملة
importjava.awt.event

2 - يجب ان تستغمل الفئة الجملة imlements لكي تعلن أنها سوف تستعمل واجهة استماع واحدة أو أكثر
مثال تنشىء الجملة التالية فئة تستعمل Action listener وهي واجهة تستعمل مع الازرار وغيرها من المكونات

public class Graph extends java.applet.Applet
implements ItemListener, ActionListener,
Runnable {


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

استاذي الفاضل هناك احداث كثيرة تحدث في البرنامج وهذا يعني أن البرنامج يجب ان يشتمل على واجهة مستمعة لكل نوع من المكونات التي يريد الاستماع اليها اليس كذلك ؟
بلى يجب أن يشتمل البرنامج على واجهة مستمعة لكل نوع من المكونات التي يريد الاستماع اليها
مثلا لجعل البرنامج يستجيب الى نقر زر الماوس أو للضغط على مفتاح الادخال في حقل نص نحتاج الى استعمال الواجهة Action listener وعند الاستجابة لاستعمال لائحة خيار في اختيار من متعدد او مربعات الاختيار يجب استعمال الواجهة ItemListener وهكذا
وفي حالة وجود أكثر من واجهة يجب أن نضع فواصل بين أسماء الواجهات

المدرس العربي
11-21-2008, 07:59 AM
السلام عليكم
اللهم ارزقني فهم النبيين وحفظ المرسلين والهام الملائكة المقربين
مرحبا بكم جميعا
اولا نعتذر عن التوقف الذي حدث في مسيرة الدروس السابقة
وان شاء الله سنواصل هذه السلسلة وستكون البداية مع برنامج يعتبر من اهم البرامج التي تمكن مدرسي الرياضيات والعلوم من تكوين برمجيات تفاعلية في الرياضيات والعلوم لجميع المراحل الدراسية من رياض الاطفال وحتى الجامعة والله ولي التوفيق
شكرا لكم

المدرس العربي
02-28-2009, 12:07 PM
السلام عليكم
اللهم يا مغير الأحوال حول حالي لأحسن حال

حسب طلب العديد من المتابعين نكمل بعون الله مسيرة الدروس ونستكمل الحديث عن تناول الاحداث

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

ومع مثال تطبيقي

بريمج الرسام البسيط

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.*;
import javax.swing.*;

public class SimplePaint extends JApplet
{
public static class SimplePaintPanel extends JPanel
implements MouseListener, MouseMotionListener
{

public void paintComponent(Graphics g)
{
super.paintComponent(g);
int width = getWidth();
int height = getHeight();
int colorSpacing = (height - 56) / 7;
g.setColor(Color.GRAY);
g.drawRect(0, 0, width - 1, height - 1);
g.drawRect(1, 1, width - 3, height - 3);
g.drawRect(2, 2, width - 5, height - 5);
g.fillRect(width - 56, 0, 56, height);
g.setColor(Color.WHITE);
g.fillRect(width - 53, height - 53, 50, 50);
g.setColor(Color.BLACK);
g.drawRect(width - 53, height - 53, 49, 49);
g.drawString("CLEAR", width - 48, height - 23);
g.setColor(Color.BLACK);
g.fillRect(width - 53, 3 + 0 * colorSpacing, 50, colorSpacing - 3);
g.setColor(Color.RED);
g.fillRect(width - 53, 3 + 1 * colorSpacing, 50, colorSpacing - 3);
g.setColor(Color.GREEN);
g.fillRect(width - 53, 3 + 2 * colorSpacing, 50, colorSpacing - 3);
g.setColor(Color.BLUE);
g.fillRect(width - 53, 3 + 3 * colorSpacing, 50, colorSpacing - 3);
g.setColor(Color.CYAN);
g.fillRect(width - 53, 3 + 4 * colorSpacing, 50, colorSpacing - 3);
g.setColor(Color.MAGENTA);
g.fillRect(width - 53, 3 + 5 * colorSpacing, 50, colorSpacing - 3);
g.setColor(Color.YELLOW);
g.fillRect(width - 53, 3 + 6 * colorSpacing, 50, colorSpacing - 3);
g.setColor(Color.WHITE);
g.drawRect(width - 55, 1 + currentColor * colorSpacing, 53, colorSpacing);
g.drawRect(width - 54, 2 + currentColor * colorSpacing, 51, colorSpacing - 2);
}

private void changeColor(int y)
{
int width = getWidth();
int height = getHeight();
int colorSpacing = (height - 56) / 7;
int newColor = y / colorSpacing;
if(newColor < 0 || newColor > 6)
{
return;
} else
{
Graphics g = getGraphics();
g.setColor(Color.GRAY);
g.drawRect(width - 55, 1 + currentColor * colorSpacing, 53, colorSpacing);
g.drawRect(width - 54, 2 + currentColor * colorSpacing, 51, colorSpacing - 2);
currentColor = newColor;
g.setColor(Color.WHITE);
g.drawRect(width - 55, 1 + currentColor * colorSpacing, 53, colorSpacing);
g.drawRect(width - 54, 2 + currentColor * colorSpacing, 51, colorSpacing - 2);
g.dispose();
return;
}
}

private void setUpDrawingGraphics()
{
graphicsForDrawing = getGraphics();
switch(currentColor)
{
case 0: // '\0'
graphicsForDrawing.setColor(Color.BLACK);
break;

case 1: // '\001'
graphicsForDrawing.setColor(Color.RED);
break;

case 2: // '\002'
graphicsForDrawing.setColor(Color.GREEN);
break;

case 3: // '\003'
graphicsForDrawing.setColor(Color.BLUE);
break;

case 4: // '\004'
graphicsForDrawing.setColor(Color.CYAN);
break;

case 5: // '\005'
graphicsForDrawing.setColor(Color.MAGENTA);
break;

case 6: // '\006'
graphicsForDrawing.setColor(Color.YELLOW);
break;
}
}

public void mousePressed(MouseEvent evt)
{
int x = evt.getX();
int y = evt.getY();
int width = getWidth();
int height = getHeight();
if(dragging)
return;
if(x > width - 53)
{
if(y > height - 53)
repaint();
else
changeColor(y);
} else
if(x > 3 && x < width - 56 && y > 3 && y < height - 3)
{
prevX = x;
prevY = y;
dragging = true;
setUpDrawingGraphics();
}
}

public void mouseReleased(MouseEvent evt)
{
if(!dragging)
{
return;
} else
{
dragging = false;
graphicsForDrawing.dispose();
graphicsForDrawing = null;
return;
}
}

public void mouseDragged(MouseEvent evt)
{
if(!dragging)
return;
int x = evt.getX();
int y = evt.getY();
if(x < 3)
x = 3;
if(x > getWidth() - 57)
x = getWidth() - 57;
if(y < 3)
y = 3;
if(y > getHeight() - 4)
y = getHeight() - 4;
graphicsForDrawing.drawLine(prevX, prevY, x, y);
prevX = x;
prevY = y;
}

public void mouseEntered(MouseEvent mouseevent)
{
}

public void mouseExited(MouseEvent mouseevent)
{
}

public void mouseClicked(MouseEvent mouseevent)
{
}

public void mouseMoved(MouseEvent mouseevent)
{
}

private static final int BLACK = 0;
private static final int RED = 1;
private static final int GREEN = 2;
private static final int BLUE = 3;
private static final int CYAN = 4;
private static final int MAGENTA = 5;
private static final int YELLOW = 6;
private int currentColor;
private int prevX;
private int prevY;
private boolean dragging;
private Graphics graphicsForDrawing;

SimplePaintPanel()
{
currentColor = 0;
setBackground(Color.WHITE);
addMouseListener(this);
addMouseMotionListener(this);
}
}


public SimplePaint()
{
}

public static void main(String args[])
{
JFrame window = new JFrame("Simple Paint");
SimplePaintPanel content = new SimplePaintPanel();
window.setContentPane(content);
window.setSize(600, 480);
window.setLocation(100, 100);
window.setDefaultCloseOperation(3);
window.setVisible(true);
}

public void init()
{
setContentPane(new SimplePaintPanel());
}
}

وبعد ترجمة البريمج

يكون الناتج

<html>
<applet code="SimplePaint.class" codebase="http://www.deyaa.org/math05/" width="400" height="300" archive="SimplePaint.jar"></applet>
</html>


ويعمل البرنامج الرسام البسيط استجابة لأحداث الماوس
انقر على اللون وبالماوس ارسم أو أكتب داخل اللوحة البيضاء

لتحميل الملف التنفيذي للبريمج

الرابط (http://www.deyaa.org/math05/spaints.zip)

الى اللقاء في الدرس التالي
برمجة لعبة بسيطة
والدرس الذي يليه
احداث لوحة المفاتيح

المدرس العربي
02-28-2009, 04:03 PM
مع الاستجابة لأحداث المستخدم
ومع بريمج اكثر تقدما ولكنه يعتبر في البداية بالنسبة لما يأتي بعد ذلك
برمجة لعبة بسيطة

البريمج
<html>

<applet code="Highg$Applet.class"codebase="http://www.deyaa.org/math05/" width="395" height="245" archive="Highg.jar"></applet>
</html>

والآن مع المصدر

المدرس العربي
02-28-2009, 04:21 PM
المصدر
اولا
[CODE]import java.awt.*;
import java.awt.event.*;
import java.net.URL;
import javax.swing.*;

public class Highg extends JPanel {


public static void main(String[] args) {
JFrame window = new JFrame("Highg");
Highg content = new Highg();
window.setContentPane(content);
window.pack(); // Set size of window to preferred size of its contents.
window.setResizable(false); // User can't change the window's size.
window.setLocation(100,100);
window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
window.setVisible(true);
}


/**
* The public static class Highg$Applet represents this program
* as an applet. The applet's init() method simply sets the content
* pane of the applet to be a Highg. To use the applet on
* a web page, use code="Highg$Applet.class" as the name of
* the class.
*/
public static class Applet extends JApplet {
public void init() {
setContentPane( new Highg() );
}
}
/**
* The constructor lays out the panel. A CardPanel occupies the CENTER
* position of the panel (where CardPanel is a subclass of JPanel that is
* defined below). On the bottom is a panel that holds three buttons.
* The CardPanel listens for ActionEvents from the buttons and does all
* the real work of the program.
*/
public Highg() {

setBackground( new Color(130,50,40) );

setLayout( new BorderLayout(3,3) );

CardPanel board = new CardPanel();
add(board, BorderLayout.CENTER);

JPanel buttonPanel = new JPanel();
buttonPanel.setBackground( new Color(220,200,180) );
add(buttonPanel, BorderLayout.SOUTH);

JButton higher = new JButton( "أكبر" );
higher.addActionListener(board);
buttonPanel.add(higher);

JButton lower = new JButton( "أقل" );
lower.addActionListener(board);
buttonPanel.add(lower);

JButton newGame = new JButton( "لعبة جديدة" );
newGame.addActionListener(board);
buttonPanel.add(newGame);

setBorder(BorderFactory.createLineBorder( new Color(130,50,40), 3) );

} // end constructor



/**
* A nested class that displays the cards and does all the work
* of keeping track of the state and responding to user events.
*/
private class CardPanel extends JPanel implements ActionListener {

Deck deck; // A deck of cards to be used in the game.
Hand hand; // The cards that have been dealt.
String message; // A message drawn on the canvas, which changes
// to reflect the state of the game.

boolean gameInProgress; // Set to true when a game begins and to false
// when the game ends.

Font bigFont; // Font that will be used to display the message.

Image cardImages; // Contains the image of all 52 cards

/**
* Constructor creates fonts, sets the foreground and background
* colors and starts the first game. It also sets a "preferred
* size" for the panel. This size is respected when the program
* is run as an application, since the pack() method is used to
* set the size of the window.
*/
CardPanel() {
loadImage();
setBackground( new Color(0,120,0) );
setForeground( Color.GREEN );
bigFont = new Font("Serif", Font.BOLD, 15);
setPreferredSize( new Dimension(15+4*(15+79), 185));
doNewGame();
} // end constructor


/**
* Respond when the user clicks on a button by calling the appropriate
* method. Note that the buttons are created and listening is set
* up in the constructor of the HighLowPanel class.
*/
public void actionPerformed(ActionEvent evt) {
String command = evt.getActionCommand();
if (command.equals("أكبر"))
doHigher();
else if (command.equals("أقل"))
doLower();
else if (command.equals("لعبة جديدة"))
doNewGame();
} // end actionPerformed()


/**
* Called by actionPerformmed() when user clicks "Higher" button.
* Check the user's prediction. Game ends if user guessed
* wrong or if the user has made three correct predictions.
*/
void doHigher() {
if (gameInProgress == false) {
// If the game has ended, it was an error to click "Higher",
// So set up an error message and abort processing.
message = "انقر على لعبة جديدة لتبدا من جديد";
repaint();
return;
}
hand.addCard( deck.dealCard() ); // Deal a card to the hand.
int cardCt = hand.getCardCount();
Card thisCard = hand.getCard( cardCt - 1 ); // Card just dealt.
Card prevCard = hand.getCard( cardCt - 2 ); // The previous card.
if ( thisCard.getValue() < prevCard.getValue() ) {
gameInProgress = false;
message = "سىء جدا لقد خسرت ";
}
else if ( thisCard.getValue() == prevCard.getValue() ) {
gameInProgress = false;
message = "خطأ خسرت اللعبة ";
}
else if ( cardCt == 4) {
gameInProgress = false;
message = "ربحت لقد خمنت ثلاث تخمينات صحيحة ";
}
else {
message = "صح الى التالي " + cardCt + ".";
}
repaint();
} // end doHigher()

مدنايت
07-29-2009, 09:19 AM
اريد برنامج بكبر وبصغر الاشكال عن طريق استخدام سكولار بار ساعدوني رجاء جاي في الامتحان

المدرس العربي
11-06-2010, 06:47 PM
السلام عليكم
برنامج الآلة الحاسبة

http://www.deyaa.org/java6/calcul01.png
أولا : تطبيق

الجزء الأول




import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;

public class Calculator extends JFrame implements ActionListener{
// Variables
final int MAX_INPUT_LENGTH = 20;
final int INPUT_MODE = 0;
final int RESULT_MODE = 1;
final int ERROR_MODE = 2;
int displayMode;

boolean clearOnNextDigit, percent;
double lastNumber;
String lastOperator;

private JMenu jmenuFile, jmenuHelp;
private JMenuItem jmenuitemExit, jmenuitemAbout;

private JLabel jlbOutput;
private JButton jbnButtons[];
private JPanel jplMaster, jplBackSpace, jplControl;

/*
* Font(String name, int style, int size)
Creates a new Font from the specified name, style and point size.
*/

Font f12 = new Font("Times New Roman", 0, 12);
Font f121 = new Font("Times New Roman", 1, 12);

// Constructor
public Calculator()
{
/* Set Up the JMenuBar.
* Have Provided All JMenu's with Mnemonics
* Have Provided some JMenuItem components with Keyboard Accelerators
*/

jmenuFile = new JMenu("ملف");
jmenuFile.setFont(f121);
jmenuFile.setMnemonic(KeyEvent.VK_F);

jmenuitemExit = new JMenuItem("خروج");
jmenuitemExit.setFont(f12);
jmenuitemExit.setAccelerator(KeyStroke.getKeyStrok e( KeyEvent.VK_X,
ActionEvent.CTRL_MASK));
jmenuFile.add(jmenuitemExit);

jmenuHelp = new JMenu("مساعدة");
jmenuHelp.setFont(f121);
jmenuHelp.setMnemonic(KeyEvent.VK_H);

jmenuitemAbout = new JMenuItem("هن البرنامج");
jmenuitemAbout.setFont(f12);
jmenuHelp.add(jmenuitemAbout);

JMenuBar mb = new JMenuBar();
mb.add(jmenuFile);
mb.add(jmenuHelp);
setJMenuBar(mb);

//Set frame layout manager

setBackground(Color.gray);

jplMaster = new JPanel();

jlbOutput = new JLabel("0");
jlbOutput.setHorizontalTextPosition(JLabel.RIGHT);
jlbOutput.setBackground(Color.WHITE);
jlbOutput.setOpaque(true);

// Add components to frame
getContentPane().add(jlbOutput, BorderLayout.NORTH);

jbnButtons = new JButton[23];
// GridLayout(int rows, int cols, int hgap, int vgap)

JPanel jplButtons = new JPanel(); // container for Jbuttons

// Create numeric Jbuttons
for (int i=0; i<=9; i++)
{
// set each Jbutton label to the value of index
jbnButtons[i] = new JButton(String.valueOf(i));
}

// Create operator Jbuttons
jbnButtons[10] = new JButton("+/-");
jbnButtons[11] = new JButton(".");
jbnButtons[12] = new JButton("=");
jbnButtons[13] = new JButton("/");
jbnButtons[14] = new JButton("*");
jbnButtons[15] = new JButton("-");
jbnButtons[16] = new JButton("+");
jbnButtons[17] = new JButton("sqrt");
jbnButtons[18] = new JButton("1/x");
jbnButtons[19] = new JButton("%");

jplBackSpace = new JPanel();
jplBackSpace.setLayout(new GridLayout(1, 1, 2, 2));

jbnButtons[20] = new JButton("للخلف");
jplBackSpace.add(jbnButtons[20]);

jplControl = new JPanel();
jplControl.setLayout(new GridLayout(1, 2, 2 ,2));

jbnButtons[21] = new JButton(" CE ");
jbnButtons[22] = new JButton("C");

jplControl.add(jbnButtons[21]);
jplControl.add(jbnButtons[22]);

// Setting all Numbered JButton's to Blue. The rest to Red


الى الجزء الثاني

المدرس العربي
11-06-2010, 07:05 PM
for (int i=0; i<jbnButtons.length; i++) {
jbnButtons[i].setFont(f12);

if (i<10)
jbnButtons[i].setForeground(Color.blue);

else
jbnButtons[i].setForeground(Color.red);
}

// Set panel layout manager for a 4 by 5 grid
jplButtons.setLayout(new GridLayout(4, 5, 2, 2));

//Add buttons to keypad panel starting at top left
// First row
for(int i=7; i<=9; i++) {
jplButtons.add(jbnButtons[i]);
}

// add button / and sqrt
jplButtons.add(jbnButtons[13]);
jplButtons.add(jbnButtons[17]);

// Second row
for(int i=4; i<=6; i++)
{
jplButtons.add(jbnButtons[i]);
}

// add button * and x^2
jplButtons.add(jbnButtons[14]);
jplButtons.add(jbnButtons[18]);

// Third row
for( int i=1; i<=3; i++)
{
jplButtons.add(jbnButtons[i]);
}

//adds button - and %
jplButtons.add(jbnButtons[15]);
jplButtons.add(jbnButtons[19]);

//Fourth Row
// add 0, +/-, ., +, and =
jplButtons.add(jbnButtons[0]);
jplButtons.add(jbnButtons[10]);
jplButtons.add(jbnButtons[11]);
jplButtons.add(jbnButtons[16]);
jplButtons.add(jbnButtons[12]);

jplMaster.setLayout(new BorderLayout());
jplMaster.add(jplBackSpace, BorderLayout.WEST);
jplMaster.add(jplControl, BorderLayout.EAST);
jplMaster.add(jplButtons, BorderLayout.SOUTH);

// Add components to frame
getContentPane().add(jplMaster, BorderLayout.SOUTH);
requestFocus();

//activate ActionListener
for (int i=0; i<jbnButtons.length; i++){
jbnButtons[i].addActionListener(this);
}

jmenuitemAbout.addActionListener(this);
jmenuitemExit.addActionListener(this);

clearAll();

//add WindowListener for closing frame and ending program
addWindowListener(new WindowAdapter() {

public void windowClosed(WindowEvent e)
{
System.exit(0);
}
}
);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
} //End of Contructor Calculator

// Perform action
public void actionPerformed(ActionEvent e){
double result = 0;

if(e.getSource() == jmenuitemAbout){
JDialog dlgAbout = new CustomABOUTDialog(this, "عن الحاسبة", true);
dlgAbout.setVisible(true);
}else if(e.getSource() == jmenuitemExit){
System.exit(0);
}

// Search for the button pressed until end of array or key found
for (int i=0; i<jbnButtons.length; i++)
{
if(e.getSource() == jbnButtons[i])
{
switch(i)
{
case 0:
addDigitToDisplay(i);
break;

case 1:
addDigitToDisplay(i);
break;

case 2:
addDigitToDisplay(i);
break;

case 3:
addDigitToDisplay(i);
break;

case 4:
addDigitToDisplay(i);
break;

case 5:
addDigitToDisplay(i);
break;

case 6:
addDigitToDisplay(i);
break;

case 7:
addDigitToDisplay(i);
break;

case 8:
addDigitToDisplay(i);
break;

case 9:
addDigitToDisplay(i);
break;

case 10: // +/-
processSignChange();
break;

case 11: // decimal point
addDecimalPoint();
break;

case 12: // =
processEquals();
break;

case 13: // divide
processOperator("/");
break;

case 14: // *
processOperator("*");
break;

case 15: // -
processOperator("-");
break;

case 16: // +
processOperator("+");
break;

case 17: // sqrt
if (displayMode != ERROR_MODE)
{
try
{
if (getDisplayString().indexOf("-") == 0)
displayError("خطأ في الادحال");

result = Math.sqrt(getNumberInDisplay());
displayResult(result);
}

catch(Exception ex)
{
displayError("خطأ في الادحال");
displayMode = ERROR_MODE;
}
}
break;

case 18: // 1/x
if (displayMode != ERROR_MODE){
try
{
if (getNumberInDisplay() == 0)
displayError("لا يمكن القسمة على صقر ");

result = 1 / getNumberInDisplay();
displayResult(result);
}

catch(Exception ex) {
displayError("لا يمكن القسمة على صقر");
displayMode = ERROR_MODE;
}
}
break;

case 19: // %
if (displayMode != ERROR_MODE){
try {
result = getNumberInDisplay() / 100;
displayResult(result);
}

catch(Exception ex) {
displayError("خطأ في الادحال");
displayMode = ERROR_MODE;
}
}
break;

case 20: // backspace
if (displayMode != ERROR_MODE){
setDisplayString(getDisplayString().substring(0,
getDisplayString().length() - 1));

if (getDisplayString().length() < 1)
setDisplayString("0");
}
break;

case 21: // CE
clearExisting();
break;

case 22: // C
clearAll();
break;
}
}
}
}

void setDisplayString(String s){
jlbOutput.setText(s);
}

String getDisplayString (){
return jlbOutput.getText();
}

void addDigitToDisplay(int digit){
if (clearOnNextDigit)
setDisplayString("");

String inputString = getDisplayString();

if (inputString.indexOf("0") == 0){
inputString = inputString.substring(1);
}

if ((!inputString.equals("0") || digit > 0) && inputString.length() < MAX_INPUT_LENGTH){
setDisplayString(inputString + digit);
}


displayMode = INPUT_MODE;
clearOnNextDigit = false;
}

void addDecimalPoint(){
displayMode = INPUT_MODE;

if (clearOnNextDigit)
setDisplayString("");

String inputString = getDisplayString();

// If the input string already contains a decimal point, don't
// do anything to it.
if (inputString.indexOf(".") < 0)
setDisplayString(new String(inputString + "."));
}

void processSignChange(){
if (displayMode == INPUT_MODE)
{
String input = getDisplayString();

if (input.length() > 0 && !input.equals("0"))
{
if (input.indexOf("-") == 0)
setDisplayString(input.substring(1));

else
setDisplayString("-" + input);
}

}

else if (displayMode == RESULT_MODE)
{
double numberInDisplay = getNumberInDisplay();

if (numberInDisplay != 0)
displayResult(-numberInDisplay);
}
}

void clearAll() {
setDisplayString("0");
lastOperator = "0";
lastNumber = 0;
displayMode = INPUT_MODE;
clearOnNextDigit = true;
}

void clearExisting(){
setDisplayString("0");
clearOnNextDigit = true;
displayMode = INPUT_MODE;
}

double getNumberInDisplay() {
String input = jlbOutput.getText();
return Double.parseDouble(input);
}

void processOperator(String op) {
if (displayMode != ERROR_MODE)
{
double numberInDisplay = getNumberInDisplay();

if (!lastOperator.equals("0"))
{
try
{
double result = processLastOperator();
displayResult(result);
lastNumber = result;
}

catch (DivideByZeroException e)
{
}
}

else
{
lastNumber = numberInDisplay;
}

clearOnNextDigit = true;
lastOperator = op;
}
}

void processEquals(){
double result = 0;

if (displayMode != ERROR_MODE){
try
{
result = processLastOperator();
displayResult(result);
}

catch (DivideByZeroException e) {
displayError("لا يمكن القسمة غلى ضقر");
}

lastOperator = "0";
}
}

double processLastOperator() throws DivideByZeroException {
double result = 0;
double numberInDisplay = getNumberInDisplay();

if (lastOperator.equals("/"))
{
if (numberInDisplay == 0)
throw (new DivideByZeroException());

result = lastNumber / numberInDisplay;
}

if (lastOperator.equals("*"))
result = lastNumber * numberInDisplay;

if (lastOperator.equals("-"))
result = lastNumber - numberInDisplay;

if (lastOperator.equals("+"))
result = lastNumber + numberInDisplay;

return result;
}

void displayResult(double result){
setDisplayString(Double.toString(result));
lastNumber = result;
displayMode = RESULT_MODE;
clearOnNextDigit = true;
}

void displayError(String errorMessage){
setDisplayString(errorMessage);
lastNumber = 0;
displayMode = ERROR_MODE;
clearOnNextDigit = true;
}

public static void main(String args[]) {
Calculator calci = new Calculator();
Container contentPane = calci.getContentPane();
// contentPane.setLayout(new BorderLayout());
calci.setTitle("الحاسبة");
calci.setSize(241, 217);
calci.pack();
calci.setLocation(400, 250);
calci.setVisible(true);
calci.setResizable(false);
}

} //End of Swing Calculator Class.

class DivideByZeroException extends Exception{
public DivideByZeroException()
{
super();
}

public DivideByZeroException(String s)
{
super(s);
}
}

class CustomABOUTDialog extends JDialog implements ActionListener {
JButton jbnOk;

CustomABOUTDialog(JFrame parent, String title, boolean modal){
super(parent, title, modal);
setBackground(Color.black);

JPanel p1 = new JPanel(new FlowLayout(FlowLayout.CENTER));

StringBuffer text = new StringBuffer();
text.append("");
text.append("");
text.append("العمدة");

JTextArea jtAreaAbout = new JTextArea(5, 21);
jtAreaAbout.setText(text.toString());
jtAreaAbout.setFont(new Font("Times New Roman", 1, 13));
jtAreaAbout.setEditable(false);

p1.add(jtAreaAbout);
p1.setBackground(Color.red);
getContentPane().add(p1, BorderLayout.CENTER);


التالي

المدرس العربي
11-06-2010, 07:06 PM
المتبقي




JPanel p2 = new JPanel(new FlowLayout(FlowLayout.CENTER));
jbnOk = new JButton(" OK ");
jbnOk.addActionListener(this);

p2.add(jbnOk);
getContentPane().add(p2, BorderLayout.SOUTH);

setLocation(408, 270);
setResizable(false);

addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e)
{
Window aboutDialog = e.getWindow();
aboutDialog.dispose();
}
}
);

pack();
}

public void actionPerformed(ActionEvent e)
{
if(e.getSource() == jbnOk) {
this.dispose();
}
}

}




ويعد ترحمة الملف يكون خرج البرنامج


http://www.deyaa.org/java6/calc002.png

المدرس العربي
11-24-2010, 09:13 PM
السلام عليكم

كتاب العمدة في البرمجة بلغة الجافا (http://www.deyaa.org/java6/alomda2.rar)


الجزء الأول مجاني

احمد م حجازي
12-14-2010, 08:33 PM
شكرا جزيلا جزاك الله كل الخير
شرح وافي

المدرس العربي
12-26-2010, 03:08 PM
اللهم ارزقني قهم النبيين وحقظ المرسلين والهام الملائكة المقربيين

الحمد لله
وصلتني هذه الرسالة الكريمة من المملكة

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

السلام عليك ورحمة الله وبركاته


الصراحة أحييك يا عماد الدين زغلول على هذا الشرح

الصراحة أنا بحثت كثيرا عن كتب تعليم لغة الجافا

ووجدت الكثير والكثير

لكن ويشهد علي الله لم أجد مثل شرحك للجافا

اسلوب الشرح نااااااااااااااااااااااجح جدااااااااااااا

أشكرك وأشكرك وأشكرك

على الجهد المبذول لأجلنا

بس عندي طلب بسيط ...........

أريد هذا الشرح على شكل كتاب

اذا أذنت لي

ولك مني خالص الدعاء

اللهم نور على عماد الدين

اللهم زد علمه فيما ينفع الأمة العربية والإسلامية

اللهم ارزقه من حيث لا يحتسب

اللهم وارزقه الذرية الصالحة

اللهم اجعل ما يقدمه عماد الدين في ميزان حسناته

اللهم جازه بالحسنات احسانا وبالسيئات عفوا وغفرانا

يارب العالمين

أخوك المحب لك : براء

من المملكة العربية السعودية

شكرا لك أخي براء


رابط الكتاب

http://www.deyaa.org/java6/alomda2.rar

وهذا رابط لكتاب الاصدار السابع
للاطلاع أون لاين

http://www.deyaa.org/java7/



الحمد لله

المدرس العربي
01-19-2011, 05:43 PM
السلام عليكم

نقدم لكم بعون الله سلسلة برامج متنوعة
أولا : برنامج جدول الضرب



class TestMultable
{
public static void main( String[] args )
{
// display the title
System.out.println ( " multiplication table " ) ;
System.out.println ( " ---------------------------------------------- " );
// display the number title

System.out.print ( " | " ) ;
for ( int j=1 ; j <= 9; j ++ )
System.out.print ( " " + j ) ;
System.out.println ( " " ) ;

// print table body
for ( int i = 1 ; i <= 9 ; i ++ )
{
System.out.print ( i + " | " ) ;
for ( int j = 1 ; j <= 9 ; j ++ )
{

// display the product and align properly
if ( i * j < 10 )
System.out.print ( " " + i* j ) ;
else
System.out.print ( " " + i * j ) ;
}
System.out.println ( " " ) ;
}
}
}



وبعد ترجمة البرنامج

يكون خرج البرنامج



multiplication table
----------------------------------------------
| 1 2 3 4 5 6 7 8 9
1 | 1 2 3 4 5 6 7 8 9
2 | 2 4 6 8 10 12 14 16 18
3 | 3 6 9 12 15 18 21 24 27
4 | 4 8 12 16 20 24 28 32 36
5 | 5 10 15 20 25 30 35 40 45
6 | 6 12 18 24 30 36 42 48 54
7 | 7 14 21 28 35 42 49 56 63
8 | 8 16 24 32 40 48 56 64 72
9 | 9 18 27 36 45 54 63 72 81



شكرا لكم

المدرس العربي
01-19-2011, 05:59 PM
برنامج جدول الضرب ( نافذة )




import javax.swing.JOptionPane;

public class Multiplicationt {
/** Main method */
public static void main(String[] args) {
// Display the table heading
String output = " جدول الضرب\n";
output += "------------------------------------------------\n";

// Display the number title
output += " | ";
for (int j = 1; j <= 9; j++)
output += " " + j;

output += "\n";

// Print table body
for (int i = 1; i <= 9; i++) {
output += i + " | ";
for (int j = 1; j <= 9; j++) {
// Display the product and align properly
if (i * j < 10)
output += " " + i * j;
else
output += " " + i * j;
}
output += "\n";
}

// Display result
JOptionPane.showMessageDialog(null, output);
}
}


ويكون خرج البرنامج

http://www.deyaa.org/java6/multi4.png

شكرا لكم

المدرس العربي
01-19-2011, 07:51 PM
ثالثا : برنامج الموحد




import javax.swing.JOptionPane;

public class Almohed {


public static void main( String args[] )
{
String output = "";

stop: {


for ( int row = 1; row <= 10; row++ ) {

for ( int column = 1; column <= 9 ; column++ ) {


if ( row == 9 )
break stop;

output += "لا إله إلا الله ";

}

output += "\n";
}

output += "\nLoops terminated normally";
}

JOptionPane.showMessageDialog(
null, output,"الموحد",
JOptionPane.INFORMATION_MESSAGE );

System.exit( 0 );

}
}



ويكون خرج البرنامج

http://www.deyaa.org/java6/mohed01.png

تحياتي
شكرا لكم

المدرس العربي
01-22-2011, 03:46 PM
السلام عليكم

نتابع برامج الجافا
برنامج على العمليات الرياضية





import javax.swing.JOptionPane;

class AArithOper{

public static void main(String[] args) {
int a=15;
int b=4;
int x,y,z,v,u;
float f,c=4.0f;
x=a+b;
y=a-b;
z=a*b;
v=a/b;
f=a/c;
u=a%b;
JOptionPane.showMessageDialog(
null,"أ ="+a+ "\n" + "ب ="+b+ "\n" + "أ+ ب ="+x+ "\n"+ "أ - ب ="+y+"\n"+ "أ*ب="+z+"\n"+ "أ/ب="+v+"\n"+ "أ % ب="+f);
System.exit( 0 );
}
}



وبعد ترجمة البرنامج يكون الخرج


http://www.deyaa.org/java6/aarith002.png

شكرا لكم

المدرس العربي
01-22-2011, 03:54 PM
السلام عليكم

برنامج مساحة الدائرة




import javax.swing.JOptionPane;

public class ComputerArea {
public static void main(String[] args) {
double radius;
double area;
radius = 20;
area = radius * radius *3.14159;
JOptionPane.showMessageDialog(
null, " مساحة الدائرة التي نصف قطرها "+radius +" هي " + area);
System.exit( 0 );
}




بعد ترجمة البرنامج يكون الخرج

http://www.deyaa.org/java6/aarith003.png



شكرا لكم

المدرس العربي
01-22-2011, 08:32 PM
البرنامج التحويل من جالون للتر




import javax.swing.JOptionPane;

class ArGtL {
public static void main(String[] args) {
double gallons;
double liters;
gallons = 10;
liters = gallons*3.7854;
JOptionPane.showMessageDialog(
null, gallons + " جالون " + " = " + liters + " لتر" );
System.exit( 0 );
}
}



خرج البرنامج بعد ترجمته كما يلي

http://www.deyaa.org/java6/aarith004.png


تحياتي

المدرس العربي
01-22-2011, 08:36 PM
تحويل وحدة قياس درجة الحرارة من [ درجة فهرنهايتية الى درجة سيلزية ]





import javax.swing.JOptionPane;
public class FahrenheitToCelsius {
public static void main(String[] args) {
double Fahrenheit = 97.6;
double Celsius = (5.0/9)*(Fahrenheit-32);
JOptionPane.showMessageDialog(
null,Fahrenheit + " فهرنهايت " + "تساوي" + Celsius + " سيلزية " );
System.exit( 0 );
}
}




يعد ترجمة هذا الكود وتشغيله تحصل على هذه النتيجة



http://www.deyaa.org/java6/aarith005.png

شكرا لكم

habibe
01-26-2011, 08:44 PM
merciiiiiiiiiiiii

المدرس العربي
01-27-2011, 01:25 PM
السلام عليكم

ملخصات

تعلم الجافا

http://deyaa.org/java6/hhti003.png


http://deyaa.org/java6/what0052.png


http://deyaa.org/java6/whatt005.png

http://deyaa.org/java6/spesh005.png
شكرا لكم

المدرس العربي
01-27-2011, 01:26 PM
http://deyaa.org/java6/whatt0025.png


http://deyaa.org/java6/spesh030.png


http://deyaa.org/java6/whatt0030.png


http://deyaa.org/java6/futur0036.png

شكرا

احمد م حجازي
02-05-2011, 01:12 AM
شكرا استاذنا الغالي
جزاك الله كل الخير وجعله فى ميزان حسناتك

المدرس العربي
02-17-2011, 06:49 PM
تعلم البرمجة بلغة الجافا
تابع مميزات الجافا

http://www.deyaa.org/java6/whatt0038.png


http://www.deyaa.org/java6/whatt0043.png


http://www.deyaa.org/java6/learn004.png

http://www.deyaa.org/java6/whatt0032.png

رابط للملخصات (http://www.deyaa.org/java6/java6_st.html)

لحن الفرح
04-15-2011, 06:11 PM
شكرا أستاذ والله أستفدت كثييييييييييييييييير
و جزاك الله خيرا وبارك في علمك

المدرس العربي
04-16-2011, 08:53 AM
السلام عليكم

شكرا جزيلا للحن الفرح


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



--------------------------------------------------------------------------------

1 - أصول الجافا

بداية أود التأكيد على أن أي لغة برمجة تعتمد في تطورها على عاملين
العامل الأول : التحسينات في فن البرمجة
العامل الثاني : التغيرات في بيئة الحوسبة
ولغة الجافا ليست استثناء من هذه القاعدة حيث ورثت الجافا لغة تعتبر هي القمة بالنسبة للغات البرمجة آلا وهي لغة السي وابنتها الذكية السي بلاس ولقد أضافت الجافا العديد من التحسينات والمميزات التي انعكست بصورة كبيرة على الوضع الحالي لفن البرمجة بمعنى أن لغة الجافا تنحدر من أصول برمجية عريقة يعني ذات حسب ونسب بالإضافة الى ذلك تفردها وقت ظهورها بتوافقها التام مع البيئة الحوسبية الجديدة التي أشرقت في مستهل التسعينيات من القرن المنصرم وهي الانترنت فأضافت الجافا لنسبها الأصيل ميزة تفردت بها عن باقي لغات البرمجة في ذلك الوقت وهي ميزة قابلية برمجياتها للتوزيع عبر الشبكة والعمل من خلال الانترنت
وقد ولدت الجافا من رحم السي بلاس في معامل شركة صن ميكروسيستيمز في العام 1991 على يد فريق مكون من
[ James Gosling - Mike Sheridan-
Patrick Naughton - Chris Warth - Ed Frank ]
وتم تسميتها باسم آواك - شجرة السنديان أو البلوط كما يقول الشاميون - تلك الشجرة التي أحبها جيمس جوزلينج قائد الفريق الذي تولى اختراع الجافا من خلال إطلالتها اليومية عبر نافذة مكتبه بشركة صن ولكن في العام 1995 تغير الاسم الى - جافا -

رب صدفة خير من ألف ميعاد

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

البرمجيات الحربائية [ البرمجيات المتكيفة ]

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

العلاقة العضوية بين لغة الجافا ولغة السي بلاس

قلنا سابقا أن لغة الجافا ولدت من رحم لغة السي بلاس ولذلك ورثت عنها الكثير والكثير وهذا له عدة مميزات

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

العلاقة بين الجافا والسي شارب [ #C ]

هناك دائما غيرة بين الشركات المتنافسة في نفس المجال ولعل أبرز هذه المنافسات كانت بين شركتي ميكروسوفت وصن ميكروسيستيمز ولقد بدأت هذه الغيرة في الظهور الى العلن مع بداية الألفية الثالثة وعند ظهور النسخة الأشهر من الويندوز والأطول عمرا وهي نسخة ويندوز إكس بي فلقد صدرت هذه الإصدارة وقد حذف منها ماكينة الجافا الافتراضية وهي الأداة المسئولة عن عرض بريمجات الجافا في نظام الويندوز وملحقاته ثم أصدرت ميكروسوفت نسخة السي شارب لتدعم الإطار البرمجي لميكروسوفت [ دوت نت ]
( NET Framework . ) ومعظم مميزات السي شارب مأخوذة من الجافا وخاصة خاصية قابلية التوزيع عبر النت لبرامجها إذا وصلنا الى لغتين لهما نفس قواعد لغة السي بلاس وفي نفس الوقت لهما خاصية قابلية برمجياتهما للتوزيع عبر الانترنت ورغم وجود فوارق بين الجافا والسي شارب إلا أنهما يتشابهان كثيرا في المظهر والجوهر ولهذا يسهل على المبرمج بلغة السي شارب أن يتعلم البرمجة بلغة الجافا والعكس صحيح ويأخذنا هذا المربع رقم واحد لنسأل السؤال السابق مرة أخرى
هل أصدرت ميكروسوفت السي شارب لتطيح بالجافا ؟ والإجابة ستكون طبعا لا وهذا ليس شفقة من ميكروسوفت تجاه صن ميكروسيستيمز ولكن لأن لكل لغة منهما بيئة حوسبية تختلف عن الأخرى وكما قلنا سابقا أن الجافا والسي بلاس سوف يتعايشان معا لفترة طويلة قادمة فإن نفس الشيء ينطبق على الجافا والسي شارب


--------------------------------------------------------------------------------

إسهام الجافا في الانترنت

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

جريب فروت
09-28-2011, 12:07 AM
أخيرا وصلت للدرس اللي ببحث عنها
طيب يا جماعة ليش الصور ماهي في ببعض الدروس
والله ابي اطبق
مافي حل للصور