F.Distination
08-12-2006, 02:14 PM
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/530e933947.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/530e933947.gif)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/837fe7d133.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/837fe7d133.gif)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/f224546f50.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/f224546f50.gif)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/a7cd59e6de.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/a7cd59e6de.gif)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/fea5254fe0.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/fea5254fe0.gif)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
لغة الجافا هي أحد لغات البرمجة الحديثة نوعاَ ما، كما أنها واحدة من أكثر لغتين إنتشارا ً مع لغة السي شارب.
فمع الجافا تستطيع أن تكتب برامج لــــ:1: سطح مكتب Desktop مثل برامج مكافحة الفيروسات
2: الويب مثل هذا الموقع مثلا
3: الموبايل
4: برامج الخادم مثل قواعد البيانات وبرامج المؤسسات
ظهرت لغة الجافا التي أنتجتها شركة صن قبل السي شارب التي أنتجتها مايكروسوفت، وقد كان ولازال إنتشار هذه اللغة يسبب أرقاُ وصداعاُ كبيرا لشركة مايكروسوفت وخصوصا في عمل برامج المؤسسات والويب حتى ظهرت السي شارب.
و لكن ماهو سر هذه القوة.... إنه للأسباب التالية:
1: تعمل برامج الجافا على معظم أنظمة التشغيل مثل اليونكس و اللينوكس و السولاريس و الويندوز. ولكن من أهم هذه النظم هو اليونكس لأنه أكثر أمانا ومقاومة الفيروسات و أكثر ثباتا من الويندوز، ولهذا كل المؤسسات الكبيرة مثل البنوك تستخدم اليونكس
2: لغة سهلة التعلم و كبيرة الإمكانيات وبدون تعقيدات السي بلس بلس C++ و الكوم COM.
لقد كان في فكر مخترع هذه اللغة هو إختراع لغة تستطيع أن تركز بها في وصف المشكلة التي تريد حلها بعيدا عن تفاصيل نظام التشغيل. هذه التفاصيل مثل:
1: كيفية كتابة ملف على القرص الصلب
2: كيف أكتب معلومات في ذاكرة الجهاز وكيف أعيد قراءتها
3: كيف أخلق المعلومات في صورة Object ومتى أقوم بحذفها
فمثلا إذا كنت أريد أن أكتب برنامج لإدارة المدارس وقلت لك أن تأخذ التفاصيل السابقة معك وأن تفكر في المشكلة فلن تصل لحل المشكلة مثل شخص آخر يضع كل تفكيره وتركيزه في وصف نظام إدارة المدرسة مثل من له حق استخدام النظام و ما هي المعلومات المطلوبة عن المدرسين و الطلبة و المناهج و ما هي السيناريوهات USE CASES المختلفة للنظام.
إذن فلغة الجافا هي تقريبا مثل أي لغة لغة طبيعية كالعربية والإنجليزية نستخدمها لنعبر عن أفكارنا ومشاكلنا ونتواصل بها مع الآخرين
هذه مقدمة سريعة. يجب أن أذهب الآن و لكن هل هناك من يريد أن يتعلم الجافا لأدخل في الموضوع تعلم لغة الجافا ...
الدروس:
*** الدرس الاول ****
بسم الله الرحمن الرحيم
الكمبيوتر ليس مجرد آلة ولكنه يميل أكثر إلى أن يكون أداة تحاكي العقل. والكمبيوتر هو أداة للتعبير مثل الكتابة والرسم وفن النحت وصناعة الأفلام، وال Object Oriented Programming هي خطوة كبيرة لرؤية الكمبيوتر كوسيلة للتعبير أكثر منه كمجرد آلة.
كل لغات البرمجة هي تجريد أو تبسيط لشيء ما
ولكن كيف نستطيع أن نتواصل مع الكميبوتر؟ إن مجموعة الأوامر أو الشفرات التي يستطيع أن يفهمها الكمبيوتر مباشرة وبدون ترجمة تسمى ال machine code أي شفرة الآلة. أي أن الmachine code هي اللغة الأساسية للكمبيوتر وهي مجموعة من الأوامر التي يفهما الكمبيوتر مباشرة بدون مترجم وينفذها مباشرة. ولكل نوع من الكمبيوتر أو بدقة أكثر لكل CPU ال machine code الخاصة به. ولكن ما هي الحروف التي تتكون منها كلمات هذه اللغة؟ إنها تتكون فقط من حرفين وهما ال 0 و 1 . فمثلا قد يكوا هناك أمر في الصورة 01101 وأمر آخر مثل 01110.
بالطبع من الصعب جداً كتابة برنامج بال machine code ولهذا جاءت لغة ال Assembly كتجريدabstraction أو لنقول لغة أسهل فهما من ال machine code ، فلغة الAssembly تتكون من أوامر مثل الmachine code ولكن بدلا من أن تكون الأوامر في صورة 0 و 1 فأنها في صورة حروف سهلة الفهم و التذكر مثل الأمر ADD مثلاً.
ومع الحاجة لبرامج أكثر تعقيداً ظهرت لغات أخرى كثيرة فيما بسمى بلغات الأوامر Imperative languages مثل السي Cو البيسك BASIC , و الفورتران ، فكل هذه اللغات هي تجريد للغة ال Assembly أي جيل جديد من اللغات الأسهل فهما و إستخدام .
ولكن لاحظ معي هنا أن كل هذه التحسينات لازالت تجعلك تفكر في الكمبيوتر كمجرد آلة لها مجموعة من أذرار التشغيل مثل التلفاز و غسالة الأطباق أكثر من تفكيرك في المشكلة أو النظام الذي تريد أن تحاكيه.
فالمبرمج هنا يحتاج أكثر إلى أن يربط مشكلة أو نظام ما بأوامر الكمبيوتر وهذا يحتاج إلى مجهود كبير جدا كما إن هذه البرامج ستكون صعبة ومكلفة في صيانتها.
فالمطلوب هو أن نكتب أشياء تمثل وتعبر عن المشكلة التي نريد حلها أكثر من أن نكتب مجموعة من الأوامر الخاصة بالآلة. ولهذا ظهرت لغات مثل LISP و ال APL و هي لغات إختارت رؤية محددة لمجموعة من المشاكل ، ثم ظهرت لغة الPROLOG و التي كانت ترى أن البرنامج هو مجموعة من القرارات المنطقية. و هذه اللغات كانت تقدم حلول جيدة جداً في نطاق المشاكل التي صممت لحلها ولكنها ضعيفة لحل مشكلات خارج هذا النطاق.
ثم ظهر لغات ال Object Oriented Programming أي البرمجة التي تميل لمحكاةالشيء مثل السي بلس بلس و الجافا والسي شارب ، بالطبع المصطلح يحتاج إلى تفسير أكثر لنفهم المراد منه.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
ما هو الObject ؟
ال Object أي الشيء هو المفتاح لفهم ال OOP أي ال Object Oriented Programming ، فعندما تنظر حولك فإنك تستطيع أن ترى أشياء كثيرة (أي Objects كثيرة) في العالم الحقيقي مثل مكتبك و شاشة كمبيوترك و دراجتك و قلمك و كرتك إذا كنت تحب كرة القدم مثلي. الأشياء الموجودة في العالم الحقيقي تشترك كلها في صفتان: كل الأشياء لها حال state (أو لنقول صفات حالية) و لها سلوك behavior فمثلا الكلب له حالة مثل الإسم (إسمه هرقل) و اللون (لونه بني) و جائع ، وله سلوك مثل يهز ذيله و يشمشم في الأرض . و الدراجة مثلا لها حالة مثل الترس الحالي و نوع البدالات و لها عجلتان و لها عدد من التروس يساوي 20 ، وللعجلة سلوك أيضاً فإنها تفرمل وتسُرع و تبطيء.
تمثيل الأشياء (Objects) في البرمجة يشترك مثل الأشياء في العالم الحقيقي في إنه لها أيضاً حالة (صفات حالية) وسلوك.
ال Object في البرمجة يعبر عن الحالة عن طريق متغير أو أكثر. المتغير Variable هو معلومة لها إسم نعرفها به و المتغير له نوع (type) مثل أن يكون رقما صحيحاً Integer أو حرف char
و الObject في البرمجة يعبر عن السلوك عن طريق ال Function أي الوظيفة أو الخدمة التي يستطيع أن يقدمها.
أي أن الObject هو مجموعة من المتغيرات و الوظائف المرتبطة.
فبإستخدام ال Objectsفي البرنامج نستطيع أن نحاكي ونمثل الأشياء في العالم الحقيقي ،من الممكن أن نعبر عن اللاعبين في صورة Objects في لعبة كمبيوتر مثل الFifa.
كل شيء يستطيع أن يعرفه الObject هو حالة state يمثلها عن طرق المتغيرات Variables و أي شيء يستطيع أن يفعله هو وظيفة Function (سنستخدم كلمة method بدلاً من كلمة Function )
فمثلا نستطيع أن نعبر عن الدراجة بمجموعة من المتغيرات مثل أن سرعتها 30 كيلومتر في الساعة و سرعة دوران العجلة هي 90 لفة في الدقيقة و لها خمسة تروس. هذه المتغيرات تعرف بInstance variables أي المتغيرات التي تعبر عن Object محدد ، فمثلا أنا وأنت بشر ولكن أنا لي أنا أسمي هاني و أنت إسمك محمد (مثلا) فلكل منا المتغير ( إسم) ولكن القيمة التي يحملها هذا الإسم مختلفة. أتمنى أن يكون المفهوم بstate أي الحالة قد إتضح.
والدراجة أيضا لها methods لتفرمل وتسرع و.... هذه ال methods تسمى ب instance methods وذلك لأن هذه ال methods تغير في الحالة state أي قيم المتغيرات الخاصة ب object محدد. فمثلا عندما نطلب ال method التي إسمها أسرعي في دراجتي فإن سرعتها قد تغيرت وأصبحت 40 كيلومتر بدلا من 30 كيلومترا وبالطبع هذه التغير غير قيمة السرعة أي هو تغير أثر في دراجتي ولم يؤثر في دراجات أخرى.
الآن نستطيع أن نقول أن ال Object Oriented Programming هو البرمجة التي بها نستطيع أن نحاكي الأشياء الموجودة في العالم الحقيقي في صورة Objects لها حالة state و سلوك behavior، و نستطيع أن نقول أن حالة = instant variables و السلوك = instance methods
أي أن ال Object Oriented Programming هي البرمجة التي تميل ناحية كتابة البرنامج عن طريق وصف الأشياء أكثر من كتابة أوامر ومصطلحات خاصة بالآلة.
مع ال OOP المبرمج ليس مقيد بأنواع ثابتة من المتغيرات مثل integer , char, WORD بل إنه يستطيع أن يُعرف أنواع جديدة و يُخلّق متغيرات من هذه الأنواع الجديدة.
كما قلنا فإننا نستطيع أن نعرف Objects كل منها له حالته فأنا لي إسمي و وظيفتي وهوايتي و لكن هناك الكثيرون أيضا بشر مثلي لنا صفات وسلوك مشترك فنحن ننتمي إلى عائلة البشر وهناك عائلات أخرى من الأشياء الأخرى فهناك عائلة الكلاب وعائلة الأسماك وعائلة السيارات وهكذا.
فالobjects التي تنتمي لنفس العائلة لها صفات مشتركة و أيضا لها سلوك مشترك.
كلمة عائلة تعني أيضاً نوع وفي الOOP نكتبها class ،وقد كان أول ظهور لهذا المصطلح كان في لغة ال Simula-67 .
فمثلاً إذا كتبنا برنامج عن المدارس ستكون ال classes هي : المدرسون والطلبة و المواد الدراسية، أما الأستاذ أحمد والأستاذة أمل فهم objects من النوع (class) المدرسون ،و أما الفيزياء و الرياضيات فأنها Objects من ال class مواد دراسية . قد تسألني وأين ال objects من ال class الطلبة ؟يبدو إنهم في أجازة الآن .
بالطبع كل الobjects التي تنتمي لنفس ال class صفات مشتركة فالمدرسون صفاتهم تكون : المادة التي يدرسها، وأرقام الفصول التي يدرس لها و إسم المدرس ، أما ال objects التي تنتمي إلى ال class المدرسون فلكل منهم المادة التي يدرسها فأستاذ أحمد يدرس الرياضيات والفصول التي يدرسها فهي الفصول 1 و 2 من السنة الدراسية أولى ثانوي، أما الأستاذة أمل فإنها تدرس مادة الفيزياء وتدرس لكل فصول الصف الثاني الثانوي.
بالطبع المدرسون لهم سلوك أو خدمات يقدمونها methods مثل يدرس و يصحح ، والobjects هنا تقدم هذه الخدمات ولكن حسب المادة التي يدرسها.
لذا ففي ال OOP فأننا نُعرف أنواع جديدة classes مثلما و نُخلِّق منها objects مثلما نُخلِّق متغيرات variables من الأنواع الأساسية التي تكون جزء من اللغة و التي تسمى built in types مثل ال integer و char .
لذا ال class هي أيضاً types ولكنك أنت الذي يعُرّفها.
لنفترض أنه عندنا class إسمها مصباح Light من والmethods التي تقدمها هي ينير on و يغلق off
فكيف نعبر عن هذا في الجافا
Light mesbah = new Light();
mesbah.on();
mesbah.off();
فهنا قمنا بتعريف object إسمه mesbah (مصباح) من ال class التي أسمها Light، ولكي يتم تخليق هذا المتغير فأستخدمنا ال مصطلح new ثم كتبنا إسنم ال class ثم ننهي الأمر بإستخدام فصلة منقوطة.
ولكي نقوم بطلب خدمة on أي يضيء على المصباح فقد كتبنا اسم الobject مصباح ثم نضع نقطة (.) ثم نكتب إسم ال method (الخدمة) التي نريدها كما في السطر الثاني.
سنكتفي بهذا القدر من الدرس حتى أعرف رأيكم في شرحي و هل تريدون كماً أكثر من المعلومات في الدروس القادمة؟
الواجب العملي هو أن تجيبوني على السؤالين السابقين وأن تقوموا بكتابة code مثل السابق ولكن على class إسمها (كمبيوتر).
في الدرس القادم سنتعرف على بقية خواص ال Object Oriented Programming مثل ال access control و ال inheritance و ال polymorphism.
*** الدرس الثاني ***
تكلمنا في الدرس السابق عن الobjects وعرفنا أن كل ال objects التي تنتمي لنفس ال class يشتركون في نفس الصفات (variables) والسلوك (methods) و الآن بإذن الله سنكمل باقي خواص ال Object Oriented Programming التي تمثل الأساس لكتابة برامج قوية ومتميزة .
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
ما هو ال Inheritance؟
يوجد في علوم الأحياء علم إسمه التصنيف العلمي (Scientific Classification) وفيه يقوم العلماء بتصنيف الكائنات الحية وترتيبها طبقاً للخواص المشتركة. أول نظام للتنصيف قام به أرسطو الذي صنفها على أساس بيئتها , وقد ترجم ابن رشد تصنيف أرسطو في كتاب مفقود وبقيت الترجمة اللاتينية لكتاب ابن رشد. و التصنيف الحديث تعود جذوره إلى نظام كارلوس لينيوس, الذي صنف الأنواع طبقا للخواص الفيزيائية المشتركة.
يبدأ التصنيف الرئيسي بتسلسل مملكه ، شعبة ، طائفة ، رتبة ، عائلة ، جنس ، نوع . بعد ذلك أضيف فوق رتبة ، تحت رتبة ، فوق طائفة ، تحت طائفة ، قبيلة . وتصنيفات أخرى.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/875319cdaa.jpg (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/875319cdaa.jpg)
فمثلا الإنسان ينتمي لمملكة الحيوان (Animalia) ومن صفات هذه المملكة أن الكائنات فيها متعددة الخلايا multicellular أي إنها كائنات تتكون من أكثر من خلية و إذا تدرجنا في شجرة الحياة للإنسان فسنجده ينتمي إلى طائفة (class)أسمها الثديات (Mammaila) والتي ينتمي إليها كل الحيوانات و من صفات هذه الطائفة أن الكائنات التي تنتمي إليها تلد صغاراً و ترضعهم أمهاتهم اللبن عن طريق الثدي. وينتمي الإنسان أيضاُ إلى تحت طائفة (subclass) إسمها placentalia و التي من صفاتها أن الطفل في مرحلة الحمل يتغذى عن طريق المشيمة.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1c22122354.jpg (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1c22122354.jpg)
فالإنسان يرث صفات وسلوك ال تحت طائفة (subclass) التي تسمى placentalia وبالتالي يرث صفات وسلوك الطائفة (class) التي أسمها Mammaila وبالتالي يرث صفات وسلوك المملكة Animalia. وكما نري فإن التصنيفات العليا أي التي تتجة ناحية جذر الشجرة مثل المملكة تحتوي على صفات عامة و كلما تدرجنا ناحية فرع الشجرة كلما كانت الصفات و السلوك أكثر تخصصاً مثل صفات وسلوك الإنسان.
مفهوم ال Inheritance في OOP ينطبق عليه نفس الكلام السابق. فال class من الممكن أن ترث صفات و سلوك class أخرى. وال class التي ترث نسميها subclass و الclass التي يورث منها تسمى superclass وكما نلاحظ فهذة المسميات جاءت من علم التصنيف.
وفي الجافا من الممكن أن ترث ال class مباشرة من class واحدة فقط ولكنها تستطيع أن ترث من أكثر من class بطريقة غير مباشرة.
فلو قلنا أن الشجرة التي في الصورة السابقة هي شجرة كاملة (هي غير كاملة بالطبع) فإننا نقول أن ال subcalss التي تسمى placentalia ترث صفات ال class التي تسمى Mammaila بطريقة مباشرة و ترث صفات المملكة Animalia بطريقة غير مباشرة.
وكما نرى فإن ال subclass ليست محدودة بصفات ال superclass التي ترث منها بل تزيد عليها صفات وسلوك . في الجافا فإن ال superclass العليا في شجرة الوراثة أي الجذرهي ال class التي تسمى Object.
ال class Object ليس لها علاقة بمعنى object الذي تكلمنا عنه بل هي class وإسمها Object. وطالما أن جذر الشجرة في الجافا هي Object class فإن كل ال classes ترث سلوك وصفات هذه ال class مثل السلوك (method) toString و التي ترجع String (تتابع من الحروف) والتي تصف ال class.
لو رجعنا لعلم التصنيف و أردنا أن نعرف class تكون هي الجذر لكل الأشياء سواء حية أو غير حية فما هي ال methods التي ستكون في هذه ال class؟
أعتقد إنها ُتسَبِّحُ.
يقول تعالى ( ُتسَبِّحُ لَهُ السَّمَاوَاتُ السَّبْعُ وَالأَرْضُ وَمَن فِيهِنَّ وَإِن مِّن شَيْءٍ إِلاَّ يُسَبِّحُ بِحَمْدَهِ وَلَـكِن لاَّ تَفْقَهُونَ تَسْبِيحَهُمْ إِنَّهُ كَانَ حَلِيماً غَفُوراً)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
إن مميزات ال Inheritance هي:•
ال subclasses نستخدمها لنحصل على سلوك وصفات أكثر تخصصا من ال superclass التي سلوكها عاما
في البرامج الكبيرة يشترك أكثر من مبرمج في كتابة البرنامج ومن الممكن أن يكتب أحد المبرمجين abstract classes أي classes تجريدية بمعنى إنها تشتمل على سلوك عام وعلى المبرمجين الآخرين أن يقوموا في ال subclasses بكتابة الكود الخاص بهذه السلوك (methods) فمثلا في برنامج صناع الحياة قام المبرمج عمرو خالد بعمل ال abstract class التي إسمها نهضة و ال methods التي تنتمي لها هذه ال class هي (مثلا) : تنهض بالأمة و تتفوق و تبدع و تصمم و تنتج
وعلى المبرمجين المشتركين في برنامج النهضة أن يكتبوا subclasses ترث من ال class نهضة و يقوموا بكتابة ال الكود الخاص بال methods التي تنتمي لل class نهضة. فمنهم من يكتب ال class زراعة الأسطح ومنهم من يكتب class النهضة الصحية وهكذا...
ما هو ال access control؟
لقد خلق المبدع والأول والآخر سبحانه الclass الإنسان وجعل له صفات (members = variables) من عينين وأنف وأذن و قلب و الكثير من الصفات الأخرى وقد جعل الله هذه الصفات من الممكن أن نصل لها ونمسكها فنستطيع أن نمسك أعيننا و هناك الطبيب الجراح الذي يمسك القلب بيديه فهذه الصفات يستطيع أن يصل لها أي شيء فهي عامة (public) ، وخلق الله أيضاً صفات (members) في الإنسان مثل الروح ولكننا لانستطيع أن نصل لها و نمسك بها. يقول تعالى (و يسألونك عن الروح قل الروح من أمر ربي) فهي صفات خاصة (private) ممنوع أن تصل لها أي (class) أخرى . و تخيل لو كانت الروح من الممكن أن نصل لها ونمسكها مثل العين فكما إنه هناك من تمرض عينه فيقوم بنقل عين إنسان آخر فلو كانت الروح من الممكن أن نصل لها (public) لوجدنا من لاتعجبه روحه فينقل ويستبدل روح إنسان آخر ! إذن فهناك (members) في ال class تكون public وأخرى private لاتستطيع class أخرى أن تصل لها مباشرة. ولكن قد يقوم صانع ال class بعمل methods تؤثر في هذه ال private members ودون أن تصل لها. فمثلا جعل الله الخالق العظيم methods في الإنسان يستطيع بها أن يؤثر في الروح ومن هذه ال methods يصلي و يزكي ويصوم و....
في الجافا يستطيع ال class creator أن يحدد قواعد الوصول (access control) لل members في ال class من variables و methods. هذه access control هي : publicو private و protected و ال package access (default).
وسنتكلم عنهم بالتفصيل في دروس قادمة عند شرح الكود.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
ما هو ال Interface ؟
في الكمبيوترات الحديثة توجد ال USB والتي نستطيع عن طريقها أن نوصل الكثير من الإجهزة للكمبيوتر مثل الطابعات و الكاميرات. ومن الممكن أن نخترع أي جهاز ونوصله بالكمبيوتر عن طريق ال USB .
في الجيش توجد رتب مختلفة وهذه الرتب تتكلم مع بعضها بقواعد وبروتوكول محدد. إذن لنجعل ال classes المختلفة تتكلم وتتفاعل مع بعضها البعض لابد من برتوكول يحدد طريقة الإتصال. فالكمبيوتر لايهمه نوع الجهاز المتصل به فالمهم أن يكون هذا الجهاز فيه إمكانية الإتصال بالكمبيوتر عن طريق الUSB . هناك مواقع على الإنترنت من classes مختلفة فمنها ما هو PHP و منها ASP ومنها JSP ولكي نعرض هذه المواقع بمتصفح الإنترنت فالمتصفح لا يهمه ال class التي ينتمي لها هذا الموقع فالمهم فقط هو أنها تستطيع أن ترسل الHTML عن طريق بروتوكول ال HTTP. هذا البروتوكول المستخدم في الإتصال بين ال objects من classes مختلفة يسمى interface.
فعندما نريد أن نجعل classes كثيرة تتكلم مع class أخرى فعلى هذة ال classes أن تحتوي على ال methods الموجودة في ال interface الذي يحدد طريقة الإتصال.
الدرس القادم سنبدأ تعلم مكونات الجافا وكتابة كود ال java.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
الواجب العملي:
تخيل إنه توجد class إسمها سيارة فما هي ال vairables, and methods التي توجد بها و أي منها public وأي منها private و ما هي ال subclasses التي نقترحها للclass سيارة؟ ويوجد ماركت كبير لبيع السيارات و القوارب و الالأدوات الرياضية فما هي ال methods التي يجب أن تكون موجودة في ال interface الذي ستحتوية هذه ال classes .
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
*** الدرس الثالث ***
لغة الجافا مثل اللغات التي نتكلم بها لها قواعد نحوية. ولكن ما هي فائدة القواعد في اللغة؟ إن قواعد النحو في اللغة تعطي الناس قدرة أفضل على الإتصال و تحسين مهارات التفكير فإنها تجعلك منصت ومتكلم و قاريء وكاتب بكفاءة كبيرة.
اللغة تكون بين متكلم ومستمع أو كاتب وقاريء. بالنسبة للجافا فأنت المتكلم و الكاتب أما المستمع والقاريء فهو الكمبيوتر. ولكي نستطيع أن نوصل أفكارنا للكمبيوتر ونجعله يفهمها وأيضا حتى تكون أفكارنا أكثر وضوحا فيجب أن نلتزم بقواعد لغة الجافا.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
إقرأوا معي البرنامج BasicDemo التالي:
public class BasicsDemo {
public static void main(String[] args) {
int sum = 0;
for (int current = 1; current <= 10; current++) {
sum += current;
}
System.out.println("Sum = " + sum);
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
هذا البرنامج يقوم بجمع الأرقام من واحد إلى عشرة ثم يقوم بعرض النتيجة على الشاشة. هذا البرنامج يحتوي على الكثير من القواعد في الجافا وإن كان لايبدو واضحا الآن ولكن ما يهمنا هنا أن نشرح مكونات الجافا الموجودة بهذا البرنامج. عذه المكونات مثل المتغيرات variables و معاملات operators و الأوامر الي تحكم مسارتنفيذ البرنامج control flow statement.
فالمتغيرات نستخدمها لتحمل المعلومات وسوف نتكلم بعد قليل كيف نعرف المتغيرات وما هي أنواع المتغيرات وكيف نعرف مجال scope المتغير.
أما المعاملات فسوف نتعلم كيف نكتب العمليات المختلفة سواء عمليات حسابية أو عمليات التخصيص assignment operators .
وسوف نتعلم في مباديء الجافا كيف نمزج المتغيرات و المعاملات في تسلسل معين ونكون جملة expression . هذه الجمل هي أحجار البناء أو القوالب التي يتكون منها برنامج الجافا.
وسنتعلم أيضا الأوامر الي تحكم مسارتنفيذ البرنامج control flow statement مثل الأوامر الشرطية والتي بها لا تنفذ أجزاء من الكود إلا بتوفر شروط معينة. وكيف نكتب أوامر التكرار.
سنتكلم في هذا الدرس عن المتغيرات.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
قلنا سابقا أن ال object له صفات أو أحوال states ويحتفظ بقيمها في ال variables.
فالمتغير يحمل معلومة أوبيانات ونشير للمتغير بإسم identifier يمثل بطاقة الهوية أو الشيء المميز لهذا المتغير.
هذا الإسم هو تسلسل من الحروف اليونيكود سواء أرقام أو حروف ولابد أن يبدأ الإسم بحرف هجاء إنجليزي أي حرف من a إلى z أو A إلى Z أو أن يبدأ ب ال under score _ أو بعلامة الدولار $.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
أمثلة لأسماء المتغيرات:
HelloWorld
Math
Applet
test123
r2d2
MAX_VALUE
FordV8
_DA_DA
$100
HereIsA$20
وأيضا لا يجب أن يكون إسم المتغير من الأسماء المحفوظة reserved words وسوف نتكلم عنها في درس آخر
وكما أن للمتغير إسم فله أيضا نوع type يحدد القيم التي يكن أن يحتويها هذا المتغير و العمليات الي يمكن تنفيذها على هذا المتغير.
فمثلا لو عرفنا متغير وكان إسمه x وكان من النوع class التي إسمها Car فإن x لايمكن أن يحمل القيم من نوع class التي إسمها بنك.
إذن ما هي القاعدة النحوية لتعريف متغير في لغة الجافا؟
القاعدة هي: type nameأي نكتب إسم النوع الذي يكون منه المتغير ثم نكتب إسم المتغير
مثال:
int x
فهذا متغير إسمه x و من النوع int
لكل متغير مدى أو مجال scope نستطيع أن نستخدم إسم المتغير فيه. مجال المتغير يتحدد بطريقة غير مباشرة بالمكان الذي قمنا فيه بتعريف المتغير. والمجال أيضا يحدد متى يتم تخليق المتغير ومتى يتم إزالته من ذاكرة البرنامج أي متى يموت.
سنتكلم عن الscope بالتفصيل في درس قادم.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
هناك فئتان من الأنواع types التي يمكن أن يكون منها المتغير. الفئتان هما الأنواع الأولية primitive types و الأنواع المرجعية reference types.
المتغير الذي يكون من النوع primitive يحتوي على قيمة واحدة فقط وهذه القيمة لها مقاس في ذاكرة البرنامج ولها شكل format مثل أن يكون تسلسلا من الحروف أو تسلسلا من الأرقام وهذا المقاس والشكل يحدده نوع المتغير . فمثلا المتغير من النوع int مقاسه 32 بت bits وشكله أي الformat هي two's complement والمتغير من النوع char مقاسه 16 بت و شكله يكون Unicode character.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
الأنواع الأولية في الجافا هي:
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/5f54b18b01.jpg (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/5f54b18b01.jpg)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
من الممكن أن نعطي للمتغير قيمة و نحن نعرفه. هذه القيمة تسمى literal value
int x = 3
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/c217729262.jpg (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/c217729262.jpg)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
كما في الجدول السابق لنعرف قيمة من النوع int مباشرة في الكود فنكتب تسلسلا من الأرقام الصحيحة ولكي نقوم بكتابة قيمة long (أي رقم صحيح طويل) فإننا نضع حرف L أو l في نهاية التسلسل الرقمي. أما إذا كتبنا تسلسل من الأرقام وفيه علامة عشرية أي نقطة فهو من النوع double وإذا وضعنا في آخر التسلسل الحرف F أو f فهو من النوع float. أما ال character في يتكون من أي حرف Unicode واحد فقط بين two single quotes أي بين ' ' . ال quote في اللغة العربية تعني قطفة.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
الفئة الأخرى من المتغيرات هي الأنواع المرجعية reference types فالمتغيرات التي ليست من الأنواع الأولية primitives السابقة فهي reference types مثل ال class و ال interface و المصفوفات arrays.
القيمة التي يحملها المتغير الذي يكون من الفئة reference هي عنوان المعلومة التي يحملها وليس المعلومة نفسها أي ليس مثل ال primitive types.
ال reference يشبه ال shortcut أي الإختصار فعندما نقوم بعمل shortcut لملف أو برنامج فإن هذه ال shortcut تشير إلى مكان الملف أو البرنامج وليست هي الملف أو البرنامج نفسه.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/35059ac897.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/35059ac897.gif)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
الواجب العملي:
أي من التالي هو أسماء متغيرات صحيحة:
int
anInt
i
i1
1
thing1
1thing
ONE-HUNDRED
ONE_HUNDRED
something2do
في الكود الخاص بالرنامج السابق BasicDemo ما هي المتغيرات وما هي أنواعها؟
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/d350f9d030.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/d350f9d030.gif)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/2176fae6ee.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/2176fae6ee.gif)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/0d0277aa45.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/0d0277aa45.gif)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/837fe7d133.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/837fe7d133.gif)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/f224546f50.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/f224546f50.gif)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/a7cd59e6de.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/a7cd59e6de.gif)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/fea5254fe0.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/fea5254fe0.gif)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
لغة الجافا هي أحد لغات البرمجة الحديثة نوعاَ ما، كما أنها واحدة من أكثر لغتين إنتشارا ً مع لغة السي شارب.
فمع الجافا تستطيع أن تكتب برامج لــــ:1: سطح مكتب Desktop مثل برامج مكافحة الفيروسات
2: الويب مثل هذا الموقع مثلا
3: الموبايل
4: برامج الخادم مثل قواعد البيانات وبرامج المؤسسات
ظهرت لغة الجافا التي أنتجتها شركة صن قبل السي شارب التي أنتجتها مايكروسوفت، وقد كان ولازال إنتشار هذه اللغة يسبب أرقاُ وصداعاُ كبيرا لشركة مايكروسوفت وخصوصا في عمل برامج المؤسسات والويب حتى ظهرت السي شارب.
و لكن ماهو سر هذه القوة.... إنه للأسباب التالية:
1: تعمل برامج الجافا على معظم أنظمة التشغيل مثل اليونكس و اللينوكس و السولاريس و الويندوز. ولكن من أهم هذه النظم هو اليونكس لأنه أكثر أمانا ومقاومة الفيروسات و أكثر ثباتا من الويندوز، ولهذا كل المؤسسات الكبيرة مثل البنوك تستخدم اليونكس
2: لغة سهلة التعلم و كبيرة الإمكانيات وبدون تعقيدات السي بلس بلس C++ و الكوم COM.
لقد كان في فكر مخترع هذه اللغة هو إختراع لغة تستطيع أن تركز بها في وصف المشكلة التي تريد حلها بعيدا عن تفاصيل نظام التشغيل. هذه التفاصيل مثل:
1: كيفية كتابة ملف على القرص الصلب
2: كيف أكتب معلومات في ذاكرة الجهاز وكيف أعيد قراءتها
3: كيف أخلق المعلومات في صورة Object ومتى أقوم بحذفها
فمثلا إذا كنت أريد أن أكتب برنامج لإدارة المدارس وقلت لك أن تأخذ التفاصيل السابقة معك وأن تفكر في المشكلة فلن تصل لحل المشكلة مثل شخص آخر يضع كل تفكيره وتركيزه في وصف نظام إدارة المدرسة مثل من له حق استخدام النظام و ما هي المعلومات المطلوبة عن المدرسين و الطلبة و المناهج و ما هي السيناريوهات USE CASES المختلفة للنظام.
إذن فلغة الجافا هي تقريبا مثل أي لغة لغة طبيعية كالعربية والإنجليزية نستخدمها لنعبر عن أفكارنا ومشاكلنا ونتواصل بها مع الآخرين
هذه مقدمة سريعة. يجب أن أذهب الآن و لكن هل هناك من يريد أن يتعلم الجافا لأدخل في الموضوع تعلم لغة الجافا ...
الدروس:
*** الدرس الاول ****
بسم الله الرحمن الرحيم
الكمبيوتر ليس مجرد آلة ولكنه يميل أكثر إلى أن يكون أداة تحاكي العقل. والكمبيوتر هو أداة للتعبير مثل الكتابة والرسم وفن النحت وصناعة الأفلام، وال Object Oriented Programming هي خطوة كبيرة لرؤية الكمبيوتر كوسيلة للتعبير أكثر منه كمجرد آلة.
كل لغات البرمجة هي تجريد أو تبسيط لشيء ما
ولكن كيف نستطيع أن نتواصل مع الكميبوتر؟ إن مجموعة الأوامر أو الشفرات التي يستطيع أن يفهمها الكمبيوتر مباشرة وبدون ترجمة تسمى ال machine code أي شفرة الآلة. أي أن الmachine code هي اللغة الأساسية للكمبيوتر وهي مجموعة من الأوامر التي يفهما الكمبيوتر مباشرة بدون مترجم وينفذها مباشرة. ولكل نوع من الكمبيوتر أو بدقة أكثر لكل CPU ال machine code الخاصة به. ولكن ما هي الحروف التي تتكون منها كلمات هذه اللغة؟ إنها تتكون فقط من حرفين وهما ال 0 و 1 . فمثلا قد يكوا هناك أمر في الصورة 01101 وأمر آخر مثل 01110.
بالطبع من الصعب جداً كتابة برنامج بال machine code ولهذا جاءت لغة ال Assembly كتجريدabstraction أو لنقول لغة أسهل فهما من ال machine code ، فلغة الAssembly تتكون من أوامر مثل الmachine code ولكن بدلا من أن تكون الأوامر في صورة 0 و 1 فأنها في صورة حروف سهلة الفهم و التذكر مثل الأمر ADD مثلاً.
ومع الحاجة لبرامج أكثر تعقيداً ظهرت لغات أخرى كثيرة فيما بسمى بلغات الأوامر Imperative languages مثل السي Cو البيسك BASIC , و الفورتران ، فكل هذه اللغات هي تجريد للغة ال Assembly أي جيل جديد من اللغات الأسهل فهما و إستخدام .
ولكن لاحظ معي هنا أن كل هذه التحسينات لازالت تجعلك تفكر في الكمبيوتر كمجرد آلة لها مجموعة من أذرار التشغيل مثل التلفاز و غسالة الأطباق أكثر من تفكيرك في المشكلة أو النظام الذي تريد أن تحاكيه.
فالمبرمج هنا يحتاج أكثر إلى أن يربط مشكلة أو نظام ما بأوامر الكمبيوتر وهذا يحتاج إلى مجهود كبير جدا كما إن هذه البرامج ستكون صعبة ومكلفة في صيانتها.
فالمطلوب هو أن نكتب أشياء تمثل وتعبر عن المشكلة التي نريد حلها أكثر من أن نكتب مجموعة من الأوامر الخاصة بالآلة. ولهذا ظهرت لغات مثل LISP و ال APL و هي لغات إختارت رؤية محددة لمجموعة من المشاكل ، ثم ظهرت لغة الPROLOG و التي كانت ترى أن البرنامج هو مجموعة من القرارات المنطقية. و هذه اللغات كانت تقدم حلول جيدة جداً في نطاق المشاكل التي صممت لحلها ولكنها ضعيفة لحل مشكلات خارج هذا النطاق.
ثم ظهر لغات ال Object Oriented Programming أي البرمجة التي تميل لمحكاةالشيء مثل السي بلس بلس و الجافا والسي شارب ، بالطبع المصطلح يحتاج إلى تفسير أكثر لنفهم المراد منه.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
ما هو الObject ؟
ال Object أي الشيء هو المفتاح لفهم ال OOP أي ال Object Oriented Programming ، فعندما تنظر حولك فإنك تستطيع أن ترى أشياء كثيرة (أي Objects كثيرة) في العالم الحقيقي مثل مكتبك و شاشة كمبيوترك و دراجتك و قلمك و كرتك إذا كنت تحب كرة القدم مثلي. الأشياء الموجودة في العالم الحقيقي تشترك كلها في صفتان: كل الأشياء لها حال state (أو لنقول صفات حالية) و لها سلوك behavior فمثلا الكلب له حالة مثل الإسم (إسمه هرقل) و اللون (لونه بني) و جائع ، وله سلوك مثل يهز ذيله و يشمشم في الأرض . و الدراجة مثلا لها حالة مثل الترس الحالي و نوع البدالات و لها عجلتان و لها عدد من التروس يساوي 20 ، وللعجلة سلوك أيضاً فإنها تفرمل وتسُرع و تبطيء.
تمثيل الأشياء (Objects) في البرمجة يشترك مثل الأشياء في العالم الحقيقي في إنه لها أيضاً حالة (صفات حالية) وسلوك.
ال Object في البرمجة يعبر عن الحالة عن طريق متغير أو أكثر. المتغير Variable هو معلومة لها إسم نعرفها به و المتغير له نوع (type) مثل أن يكون رقما صحيحاً Integer أو حرف char
و الObject في البرمجة يعبر عن السلوك عن طريق ال Function أي الوظيفة أو الخدمة التي يستطيع أن يقدمها.
أي أن الObject هو مجموعة من المتغيرات و الوظائف المرتبطة.
فبإستخدام ال Objectsفي البرنامج نستطيع أن نحاكي ونمثل الأشياء في العالم الحقيقي ،من الممكن أن نعبر عن اللاعبين في صورة Objects في لعبة كمبيوتر مثل الFifa.
كل شيء يستطيع أن يعرفه الObject هو حالة state يمثلها عن طرق المتغيرات Variables و أي شيء يستطيع أن يفعله هو وظيفة Function (سنستخدم كلمة method بدلاً من كلمة Function )
فمثلا نستطيع أن نعبر عن الدراجة بمجموعة من المتغيرات مثل أن سرعتها 30 كيلومتر في الساعة و سرعة دوران العجلة هي 90 لفة في الدقيقة و لها خمسة تروس. هذه المتغيرات تعرف بInstance variables أي المتغيرات التي تعبر عن Object محدد ، فمثلا أنا وأنت بشر ولكن أنا لي أنا أسمي هاني و أنت إسمك محمد (مثلا) فلكل منا المتغير ( إسم) ولكن القيمة التي يحملها هذا الإسم مختلفة. أتمنى أن يكون المفهوم بstate أي الحالة قد إتضح.
والدراجة أيضا لها methods لتفرمل وتسرع و.... هذه ال methods تسمى ب instance methods وذلك لأن هذه ال methods تغير في الحالة state أي قيم المتغيرات الخاصة ب object محدد. فمثلا عندما نطلب ال method التي إسمها أسرعي في دراجتي فإن سرعتها قد تغيرت وأصبحت 40 كيلومتر بدلا من 30 كيلومترا وبالطبع هذه التغير غير قيمة السرعة أي هو تغير أثر في دراجتي ولم يؤثر في دراجات أخرى.
الآن نستطيع أن نقول أن ال Object Oriented Programming هو البرمجة التي بها نستطيع أن نحاكي الأشياء الموجودة في العالم الحقيقي في صورة Objects لها حالة state و سلوك behavior، و نستطيع أن نقول أن حالة = instant variables و السلوك = instance methods
أي أن ال Object Oriented Programming هي البرمجة التي تميل ناحية كتابة البرنامج عن طريق وصف الأشياء أكثر من كتابة أوامر ومصطلحات خاصة بالآلة.
مع ال OOP المبرمج ليس مقيد بأنواع ثابتة من المتغيرات مثل integer , char, WORD بل إنه يستطيع أن يُعرف أنواع جديدة و يُخلّق متغيرات من هذه الأنواع الجديدة.
كما قلنا فإننا نستطيع أن نعرف Objects كل منها له حالته فأنا لي إسمي و وظيفتي وهوايتي و لكن هناك الكثيرون أيضا بشر مثلي لنا صفات وسلوك مشترك فنحن ننتمي إلى عائلة البشر وهناك عائلات أخرى من الأشياء الأخرى فهناك عائلة الكلاب وعائلة الأسماك وعائلة السيارات وهكذا.
فالobjects التي تنتمي لنفس العائلة لها صفات مشتركة و أيضا لها سلوك مشترك.
كلمة عائلة تعني أيضاً نوع وفي الOOP نكتبها class ،وقد كان أول ظهور لهذا المصطلح كان في لغة ال Simula-67 .
فمثلاً إذا كتبنا برنامج عن المدارس ستكون ال classes هي : المدرسون والطلبة و المواد الدراسية، أما الأستاذ أحمد والأستاذة أمل فهم objects من النوع (class) المدرسون ،و أما الفيزياء و الرياضيات فأنها Objects من ال class مواد دراسية . قد تسألني وأين ال objects من ال class الطلبة ؟يبدو إنهم في أجازة الآن .
بالطبع كل الobjects التي تنتمي لنفس ال class صفات مشتركة فالمدرسون صفاتهم تكون : المادة التي يدرسها، وأرقام الفصول التي يدرس لها و إسم المدرس ، أما ال objects التي تنتمي إلى ال class المدرسون فلكل منهم المادة التي يدرسها فأستاذ أحمد يدرس الرياضيات والفصول التي يدرسها فهي الفصول 1 و 2 من السنة الدراسية أولى ثانوي، أما الأستاذة أمل فإنها تدرس مادة الفيزياء وتدرس لكل فصول الصف الثاني الثانوي.
بالطبع المدرسون لهم سلوك أو خدمات يقدمونها methods مثل يدرس و يصحح ، والobjects هنا تقدم هذه الخدمات ولكن حسب المادة التي يدرسها.
لذا ففي ال OOP فأننا نُعرف أنواع جديدة classes مثلما و نُخلِّق منها objects مثلما نُخلِّق متغيرات variables من الأنواع الأساسية التي تكون جزء من اللغة و التي تسمى built in types مثل ال integer و char .
لذا ال class هي أيضاً types ولكنك أنت الذي يعُرّفها.
لنفترض أنه عندنا class إسمها مصباح Light من والmethods التي تقدمها هي ينير on و يغلق off
فكيف نعبر عن هذا في الجافا
Light mesbah = new Light();
mesbah.on();
mesbah.off();
فهنا قمنا بتعريف object إسمه mesbah (مصباح) من ال class التي أسمها Light، ولكي يتم تخليق هذا المتغير فأستخدمنا ال مصطلح new ثم كتبنا إسنم ال class ثم ننهي الأمر بإستخدام فصلة منقوطة.
ولكي نقوم بطلب خدمة on أي يضيء على المصباح فقد كتبنا اسم الobject مصباح ثم نضع نقطة (.) ثم نكتب إسم ال method (الخدمة) التي نريدها كما في السطر الثاني.
سنكتفي بهذا القدر من الدرس حتى أعرف رأيكم في شرحي و هل تريدون كماً أكثر من المعلومات في الدروس القادمة؟
الواجب العملي هو أن تجيبوني على السؤالين السابقين وأن تقوموا بكتابة code مثل السابق ولكن على class إسمها (كمبيوتر).
في الدرس القادم سنتعرف على بقية خواص ال Object Oriented Programming مثل ال access control و ال inheritance و ال polymorphism.
*** الدرس الثاني ***
تكلمنا في الدرس السابق عن الobjects وعرفنا أن كل ال objects التي تنتمي لنفس ال class يشتركون في نفس الصفات (variables) والسلوك (methods) و الآن بإذن الله سنكمل باقي خواص ال Object Oriented Programming التي تمثل الأساس لكتابة برامج قوية ومتميزة .
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
ما هو ال Inheritance؟
يوجد في علوم الأحياء علم إسمه التصنيف العلمي (Scientific Classification) وفيه يقوم العلماء بتصنيف الكائنات الحية وترتيبها طبقاً للخواص المشتركة. أول نظام للتنصيف قام به أرسطو الذي صنفها على أساس بيئتها , وقد ترجم ابن رشد تصنيف أرسطو في كتاب مفقود وبقيت الترجمة اللاتينية لكتاب ابن رشد. و التصنيف الحديث تعود جذوره إلى نظام كارلوس لينيوس, الذي صنف الأنواع طبقا للخواص الفيزيائية المشتركة.
يبدأ التصنيف الرئيسي بتسلسل مملكه ، شعبة ، طائفة ، رتبة ، عائلة ، جنس ، نوع . بعد ذلك أضيف فوق رتبة ، تحت رتبة ، فوق طائفة ، تحت طائفة ، قبيلة . وتصنيفات أخرى.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/875319cdaa.jpg (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/875319cdaa.jpg)
فمثلا الإنسان ينتمي لمملكة الحيوان (Animalia) ومن صفات هذه المملكة أن الكائنات فيها متعددة الخلايا multicellular أي إنها كائنات تتكون من أكثر من خلية و إذا تدرجنا في شجرة الحياة للإنسان فسنجده ينتمي إلى طائفة (class)أسمها الثديات (Mammaila) والتي ينتمي إليها كل الحيوانات و من صفات هذه الطائفة أن الكائنات التي تنتمي إليها تلد صغاراً و ترضعهم أمهاتهم اللبن عن طريق الثدي. وينتمي الإنسان أيضاُ إلى تحت طائفة (subclass) إسمها placentalia و التي من صفاتها أن الطفل في مرحلة الحمل يتغذى عن طريق المشيمة.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1c22122354.jpg (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1c22122354.jpg)
فالإنسان يرث صفات وسلوك ال تحت طائفة (subclass) التي تسمى placentalia وبالتالي يرث صفات وسلوك الطائفة (class) التي أسمها Mammaila وبالتالي يرث صفات وسلوك المملكة Animalia. وكما نري فإن التصنيفات العليا أي التي تتجة ناحية جذر الشجرة مثل المملكة تحتوي على صفات عامة و كلما تدرجنا ناحية فرع الشجرة كلما كانت الصفات و السلوك أكثر تخصصاً مثل صفات وسلوك الإنسان.
مفهوم ال Inheritance في OOP ينطبق عليه نفس الكلام السابق. فال class من الممكن أن ترث صفات و سلوك class أخرى. وال class التي ترث نسميها subclass و الclass التي يورث منها تسمى superclass وكما نلاحظ فهذة المسميات جاءت من علم التصنيف.
وفي الجافا من الممكن أن ترث ال class مباشرة من class واحدة فقط ولكنها تستطيع أن ترث من أكثر من class بطريقة غير مباشرة.
فلو قلنا أن الشجرة التي في الصورة السابقة هي شجرة كاملة (هي غير كاملة بالطبع) فإننا نقول أن ال subcalss التي تسمى placentalia ترث صفات ال class التي تسمى Mammaila بطريقة مباشرة و ترث صفات المملكة Animalia بطريقة غير مباشرة.
وكما نرى فإن ال subclass ليست محدودة بصفات ال superclass التي ترث منها بل تزيد عليها صفات وسلوك . في الجافا فإن ال superclass العليا في شجرة الوراثة أي الجذرهي ال class التي تسمى Object.
ال class Object ليس لها علاقة بمعنى object الذي تكلمنا عنه بل هي class وإسمها Object. وطالما أن جذر الشجرة في الجافا هي Object class فإن كل ال classes ترث سلوك وصفات هذه ال class مثل السلوك (method) toString و التي ترجع String (تتابع من الحروف) والتي تصف ال class.
لو رجعنا لعلم التصنيف و أردنا أن نعرف class تكون هي الجذر لكل الأشياء سواء حية أو غير حية فما هي ال methods التي ستكون في هذه ال class؟
أعتقد إنها ُتسَبِّحُ.
يقول تعالى ( ُتسَبِّحُ لَهُ السَّمَاوَاتُ السَّبْعُ وَالأَرْضُ وَمَن فِيهِنَّ وَإِن مِّن شَيْءٍ إِلاَّ يُسَبِّحُ بِحَمْدَهِ وَلَـكِن لاَّ تَفْقَهُونَ تَسْبِيحَهُمْ إِنَّهُ كَانَ حَلِيماً غَفُوراً)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
إن مميزات ال Inheritance هي:•
ال subclasses نستخدمها لنحصل على سلوك وصفات أكثر تخصصا من ال superclass التي سلوكها عاما
في البرامج الكبيرة يشترك أكثر من مبرمج في كتابة البرنامج ومن الممكن أن يكتب أحد المبرمجين abstract classes أي classes تجريدية بمعنى إنها تشتمل على سلوك عام وعلى المبرمجين الآخرين أن يقوموا في ال subclasses بكتابة الكود الخاص بهذه السلوك (methods) فمثلا في برنامج صناع الحياة قام المبرمج عمرو خالد بعمل ال abstract class التي إسمها نهضة و ال methods التي تنتمي لها هذه ال class هي (مثلا) : تنهض بالأمة و تتفوق و تبدع و تصمم و تنتج
وعلى المبرمجين المشتركين في برنامج النهضة أن يكتبوا subclasses ترث من ال class نهضة و يقوموا بكتابة ال الكود الخاص بال methods التي تنتمي لل class نهضة. فمنهم من يكتب ال class زراعة الأسطح ومنهم من يكتب class النهضة الصحية وهكذا...
ما هو ال access control؟
لقد خلق المبدع والأول والآخر سبحانه الclass الإنسان وجعل له صفات (members = variables) من عينين وأنف وأذن و قلب و الكثير من الصفات الأخرى وقد جعل الله هذه الصفات من الممكن أن نصل لها ونمسكها فنستطيع أن نمسك أعيننا و هناك الطبيب الجراح الذي يمسك القلب بيديه فهذه الصفات يستطيع أن يصل لها أي شيء فهي عامة (public) ، وخلق الله أيضاً صفات (members) في الإنسان مثل الروح ولكننا لانستطيع أن نصل لها و نمسك بها. يقول تعالى (و يسألونك عن الروح قل الروح من أمر ربي) فهي صفات خاصة (private) ممنوع أن تصل لها أي (class) أخرى . و تخيل لو كانت الروح من الممكن أن نصل لها ونمسكها مثل العين فكما إنه هناك من تمرض عينه فيقوم بنقل عين إنسان آخر فلو كانت الروح من الممكن أن نصل لها (public) لوجدنا من لاتعجبه روحه فينقل ويستبدل روح إنسان آخر ! إذن فهناك (members) في ال class تكون public وأخرى private لاتستطيع class أخرى أن تصل لها مباشرة. ولكن قد يقوم صانع ال class بعمل methods تؤثر في هذه ال private members ودون أن تصل لها. فمثلا جعل الله الخالق العظيم methods في الإنسان يستطيع بها أن يؤثر في الروح ومن هذه ال methods يصلي و يزكي ويصوم و....
في الجافا يستطيع ال class creator أن يحدد قواعد الوصول (access control) لل members في ال class من variables و methods. هذه access control هي : publicو private و protected و ال package access (default).
وسنتكلم عنهم بالتفصيل في دروس قادمة عند شرح الكود.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
ما هو ال Interface ؟
في الكمبيوترات الحديثة توجد ال USB والتي نستطيع عن طريقها أن نوصل الكثير من الإجهزة للكمبيوتر مثل الطابعات و الكاميرات. ومن الممكن أن نخترع أي جهاز ونوصله بالكمبيوتر عن طريق ال USB .
في الجيش توجد رتب مختلفة وهذه الرتب تتكلم مع بعضها بقواعد وبروتوكول محدد. إذن لنجعل ال classes المختلفة تتكلم وتتفاعل مع بعضها البعض لابد من برتوكول يحدد طريقة الإتصال. فالكمبيوتر لايهمه نوع الجهاز المتصل به فالمهم أن يكون هذا الجهاز فيه إمكانية الإتصال بالكمبيوتر عن طريق الUSB . هناك مواقع على الإنترنت من classes مختلفة فمنها ما هو PHP و منها ASP ومنها JSP ولكي نعرض هذه المواقع بمتصفح الإنترنت فالمتصفح لا يهمه ال class التي ينتمي لها هذا الموقع فالمهم فقط هو أنها تستطيع أن ترسل الHTML عن طريق بروتوكول ال HTTP. هذا البروتوكول المستخدم في الإتصال بين ال objects من classes مختلفة يسمى interface.
فعندما نريد أن نجعل classes كثيرة تتكلم مع class أخرى فعلى هذة ال classes أن تحتوي على ال methods الموجودة في ال interface الذي يحدد طريقة الإتصال.
الدرس القادم سنبدأ تعلم مكونات الجافا وكتابة كود ال java.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
الواجب العملي:
تخيل إنه توجد class إسمها سيارة فما هي ال vairables, and methods التي توجد بها و أي منها public وأي منها private و ما هي ال subclasses التي نقترحها للclass سيارة؟ ويوجد ماركت كبير لبيع السيارات و القوارب و الالأدوات الرياضية فما هي ال methods التي يجب أن تكون موجودة في ال interface الذي ستحتوية هذه ال classes .
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
*** الدرس الثالث ***
لغة الجافا مثل اللغات التي نتكلم بها لها قواعد نحوية. ولكن ما هي فائدة القواعد في اللغة؟ إن قواعد النحو في اللغة تعطي الناس قدرة أفضل على الإتصال و تحسين مهارات التفكير فإنها تجعلك منصت ومتكلم و قاريء وكاتب بكفاءة كبيرة.
اللغة تكون بين متكلم ومستمع أو كاتب وقاريء. بالنسبة للجافا فأنت المتكلم و الكاتب أما المستمع والقاريء فهو الكمبيوتر. ولكي نستطيع أن نوصل أفكارنا للكمبيوتر ونجعله يفهمها وأيضا حتى تكون أفكارنا أكثر وضوحا فيجب أن نلتزم بقواعد لغة الجافا.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
إقرأوا معي البرنامج BasicDemo التالي:
public class BasicsDemo {
public static void main(String[] args) {
int sum = 0;
for (int current = 1; current <= 10; current++) {
sum += current;
}
System.out.println("Sum = " + sum);
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
هذا البرنامج يقوم بجمع الأرقام من واحد إلى عشرة ثم يقوم بعرض النتيجة على الشاشة. هذا البرنامج يحتوي على الكثير من القواعد في الجافا وإن كان لايبدو واضحا الآن ولكن ما يهمنا هنا أن نشرح مكونات الجافا الموجودة بهذا البرنامج. عذه المكونات مثل المتغيرات variables و معاملات operators و الأوامر الي تحكم مسارتنفيذ البرنامج control flow statement.
فالمتغيرات نستخدمها لتحمل المعلومات وسوف نتكلم بعد قليل كيف نعرف المتغيرات وما هي أنواع المتغيرات وكيف نعرف مجال scope المتغير.
أما المعاملات فسوف نتعلم كيف نكتب العمليات المختلفة سواء عمليات حسابية أو عمليات التخصيص assignment operators .
وسوف نتعلم في مباديء الجافا كيف نمزج المتغيرات و المعاملات في تسلسل معين ونكون جملة expression . هذه الجمل هي أحجار البناء أو القوالب التي يتكون منها برنامج الجافا.
وسنتعلم أيضا الأوامر الي تحكم مسارتنفيذ البرنامج control flow statement مثل الأوامر الشرطية والتي بها لا تنفذ أجزاء من الكود إلا بتوفر شروط معينة. وكيف نكتب أوامر التكرار.
سنتكلم في هذا الدرس عن المتغيرات.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
قلنا سابقا أن ال object له صفات أو أحوال states ويحتفظ بقيمها في ال variables.
فالمتغير يحمل معلومة أوبيانات ونشير للمتغير بإسم identifier يمثل بطاقة الهوية أو الشيء المميز لهذا المتغير.
هذا الإسم هو تسلسل من الحروف اليونيكود سواء أرقام أو حروف ولابد أن يبدأ الإسم بحرف هجاء إنجليزي أي حرف من a إلى z أو A إلى Z أو أن يبدأ ب ال under score _ أو بعلامة الدولار $.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
أمثلة لأسماء المتغيرات:
HelloWorld
Math
Applet
test123
r2d2
MAX_VALUE
FordV8
_DA_DA
$100
HereIsA$20
وأيضا لا يجب أن يكون إسم المتغير من الأسماء المحفوظة reserved words وسوف نتكلم عنها في درس آخر
وكما أن للمتغير إسم فله أيضا نوع type يحدد القيم التي يكن أن يحتويها هذا المتغير و العمليات الي يمكن تنفيذها على هذا المتغير.
فمثلا لو عرفنا متغير وكان إسمه x وكان من النوع class التي إسمها Car فإن x لايمكن أن يحمل القيم من نوع class التي إسمها بنك.
إذن ما هي القاعدة النحوية لتعريف متغير في لغة الجافا؟
القاعدة هي: type nameأي نكتب إسم النوع الذي يكون منه المتغير ثم نكتب إسم المتغير
مثال:
int x
فهذا متغير إسمه x و من النوع int
لكل متغير مدى أو مجال scope نستطيع أن نستخدم إسم المتغير فيه. مجال المتغير يتحدد بطريقة غير مباشرة بالمكان الذي قمنا فيه بتعريف المتغير. والمجال أيضا يحدد متى يتم تخليق المتغير ومتى يتم إزالته من ذاكرة البرنامج أي متى يموت.
سنتكلم عن الscope بالتفصيل في درس قادم.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
هناك فئتان من الأنواع types التي يمكن أن يكون منها المتغير. الفئتان هما الأنواع الأولية primitive types و الأنواع المرجعية reference types.
المتغير الذي يكون من النوع primitive يحتوي على قيمة واحدة فقط وهذه القيمة لها مقاس في ذاكرة البرنامج ولها شكل format مثل أن يكون تسلسلا من الحروف أو تسلسلا من الأرقام وهذا المقاس والشكل يحدده نوع المتغير . فمثلا المتغير من النوع int مقاسه 32 بت bits وشكله أي الformat هي two's complement والمتغير من النوع char مقاسه 16 بت و شكله يكون Unicode character.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
الأنواع الأولية في الجافا هي:
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/5f54b18b01.jpg (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/5f54b18b01.jpg)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
من الممكن أن نعطي للمتغير قيمة و نحن نعرفه. هذه القيمة تسمى literal value
int x = 3
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/c217729262.jpg (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/c217729262.jpg)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
كما في الجدول السابق لنعرف قيمة من النوع int مباشرة في الكود فنكتب تسلسلا من الأرقام الصحيحة ولكي نقوم بكتابة قيمة long (أي رقم صحيح طويل) فإننا نضع حرف L أو l في نهاية التسلسل الرقمي. أما إذا كتبنا تسلسل من الأرقام وفيه علامة عشرية أي نقطة فهو من النوع double وإذا وضعنا في آخر التسلسل الحرف F أو f فهو من النوع float. أما ال character في يتكون من أي حرف Unicode واحد فقط بين two single quotes أي بين ' ' . ال quote في اللغة العربية تعني قطفة.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
الفئة الأخرى من المتغيرات هي الأنواع المرجعية reference types فالمتغيرات التي ليست من الأنواع الأولية primitives السابقة فهي reference types مثل ال class و ال interface و المصفوفات arrays.
القيمة التي يحملها المتغير الذي يكون من الفئة reference هي عنوان المعلومة التي يحملها وليس المعلومة نفسها أي ليس مثل ال primitive types.
ال reference يشبه ال shortcut أي الإختصار فعندما نقوم بعمل shortcut لملف أو برنامج فإن هذه ال shortcut تشير إلى مكان الملف أو البرنامج وليست هي الملف أو البرنامج نفسه.
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/35059ac897.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/35059ac897.gif)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
الواجب العملي:
أي من التالي هو أسماء متغيرات صحيحة:
int
anInt
i
i1
1
thing1
1thing
ONE-HUNDRED
ONE_HUNDRED
something2do
في الكود الخاص بالرنامج السابق BasicDemo ما هي المتغيرات وما هي أنواعها؟
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/1693a13e73.gif)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/d350f9d030.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/d350f9d030.gif)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/2176fae6ee.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/2176fae6ee.gif)
http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/0d0277aa45.gif (http://www.flashfp.net/uploader/modules/up-pic/pic/uploads/0d0277aa45.gif)



