|
|||||||||
|
|
|||||||||
|
|
|||||||||
|
|
|
|
السلام عليكم ورحمة الله وبركاته.. (ملاحظة: يحتوي الدرس على عدد من الصور التي اجتهدت في اختزال حجمها قدر الاستطاعة، أرجو الصبر) درسنا اليوم فيه شيء من الطول، و شيء من التفصيل. من فضلك لا تقرأه إلا و أنت في حالة ذهنية صافية غير مشوشة.. لأفضل النتائج.. والله الموفّق :-) على فكرة.. فيه بعض الرياضيات أرجو أن يسعدكم هذا لعلمي بولع المبرمجين (وأنا منهم) بالرياضيات :)
لنجرب أن نضع فئة الإنسان. ماهي صفاته و قدراته؟ عين، لسان، قلب، انه يفكر، يبدع. لنتصوّر أننا نرغب في كتابة فئة القلب. و نضع فيها صفات أي قلب: يضخ الدم، ينبض. الآن تصوّر أن عضواً من فئة القلب سيكون صفة لعضو فئة الانسان.. لغز؟ لنحلّه معاً عبر درس اليوم :)
لنفترض أننا نرغب في بناء فئة للخط المستقيم. و حتى نبدأ فعلياً في ذلك. لابد من أن نعرف المزيد عن خصائص و مميزات الخط المستقيم أليس كذلك. لنسأل أنفسنا:ماهو الخط المستقيم؟حتى نجيب على هذا التساؤل لابد أن نعرف القليل عن خصائص الخط المستقيم. لنتأمّل الشكل التالي:
إذاً لدينا الآن فئة الخط المستقيم Line. و لكن في حالتنا اليوم نحن مضطرون إلى بناء فئة أخرى.. ما هي؟ صحيح.. فئة النقطة و لنطلق عليها Point و أي نقطة في العالم تتكون من احداثيين (س، ص) أليس كذلك؟ و باللغة الانجليزية: (x,y). لننظر إلى الشكل التالي:
الآن و بعد هذه الدراسة المتعمّقة في الهندسة الاحداثية. (أرجو أنها كانت خفيفة على قلوبكم) نستطيع ببساطة أن نبني معاً فئة النقطة أو Point. لنتأمّل الكود التالي:
لقد قمنا هنا بتعريف أبسط فئة للنقطة Point و هي فئة لها اثنتين من الخصائص. احداثي السينات، و احداثي الصادات :) الآن سنقوم بكتابة ملف فئة الخط المستقيم. لنتأمّل الكود التالي:
تجدون أن الخط المستقيم له صفتان تميزانه (أو بمعنى أصح تميّزان أي عضو نقوم باستخراجه من هذه الفئة) و هما النقطة الأولى p1 و النقطة الثانية p2. والآن لنلخّص ما فعلناه. لقد كتبنا فئة و هي فئة النقطة Point و هي فئة قائمة بذاتها. ثم كتبنا فئة الخط المستقيم Line و استخدمنا في تعريفها عضوين من الفئة الأولى. فالنقطة p1 في فئة الخط المستقيم عبارة عن صفة لعضو. و هي بحد ذاتها عضو من فئة النقطة Point. أتمنى أن تكون هذه النقطة واضحة :-) والآن سنكتب برنامج ثالث مثلاً ليكون هو البرنامج الذي نستخدم فيه أعضاء من فئة الخط المستقيم مثلاً. و سأسمّيه Painter لأننا ان شاء الله سنكتب في نهاية هذه الدورة برنامج رسم بسيط :-) حسناً لنتأمّل هذا الكود:
لا تخف لا تخف :-) سنشرحه جزءاً جزءاً. بالطبع الهيكل العام للبرنامج مفهوم وواضح من دروس سابقة.
لننظر إلى الشكل: نلاحظ عرض السطرين 5 و 6 فيهما استخراج عضوين هما line1 و line2 من فئة الخط المستقيم. ثم قمنا بعد ذلك بحجز الذاكرة لهما لكونها من فئة قمنا بتعريفها (Aggregate Data Type) كما شرحنا في الدرس الثالث عشر. هنا الطريق تمام و مفتوح لننظر للشكل التالي:
في الشكل الأعلى نجد الأسطر من 8 و حتى السطر 13. في السطر الثامن نجد تعليقاً يخبرنا أننا سنقوم الآن بإعداد النقاط في السطرين اللذين قمنا بتعريفهما للاستخدام. لأننا لو تذكر في تعريفنا للخط المستقيم لم نقم باستخدام new لحجز المساحة لكلتا النقطتين. و هكذا وجب علينا في هذا البرنامج أن نقوم بذلك.
لننظر للشكل التالي: هنا نجد الأسطر من 15 إلى 19. و في السطر 15 نجد تعليقاً يخبرنا أننا سنقوم بإعطاء قيماً للخط المستقيم line1 . و هذا يعني أننا سنحدد النقاط التي يصل بينهما. و بتفسير أكثر سنقوم بتحديد الاحداثيات السينية و الصادية لكلتا النقطتين. نلاحظ أننا استخدمنا الـ dot notation هنا و هذا يعني انني سأقوم باستخدام صفة (في حالتنا) خاصة بالعضو الذي ينتمي للفئة Line. لننظر لدفتر الرسم البياني و نحاول رسم هذا الخط الذي يربط بين النقطتين (10,10) و (20،20).
والآن لننظر للشكل التالي: كما في القسم السابق، و لكن هذه المرة في الأسطر من 21 إلى 25 سنقوم بتحديد الاحداثيات لنقطتي الخط المستقيم الثاني. لننظر للشكل التالي الذي يمثل الخط المستقيم على الرسم البياني: أرجو أن يكون هذا الجزء واضحاً تماماً بالنسبة لكم. والآن لنتابع الجزء الأخير: الأسطر من 27 إلى 37 تقوم بطباعة السطر بشكل متب كما في أي سطر طباعة آخر. تطبعه على الشاشة. كل ما في الأمر أننا قمنا بترتيب المخرجات.
إنّك إذا قمت بكتابة جميع البرامج بشكل صحيح، فإنّك بعد عمل الترجمة Compile للملفات الثلاثة، و تشغيل الملف الأخير Painter، فإنه سيظهر لك هذا الناتج:
هذا ما لدي في هذا الجزء. و لكن دعوني أسأل، هل ما فعلناه كان الأفضل؟ أم أن هناك طريقة أفضل لعمل نفس الناتج. الجواب ستجدونه في الدرس القادم إن شاء الله ملاحظة برنامجنا حتى الآن لا يقوم بالرسم.. و لكنه سيفعل ان شاء
الله :-) كل ما هنالك أننا نبنيه جزءاً جزءاً. فالصبر يا إخوان.
وفوق كل ذي علم عليم |
مواضيع أخرى من نفس النوعية
|
||||||||||||
| جميع الحقوق محفوظة JavaGirl, 2006 | ||