mcse
مرحباا بك في منتدى mcse
تشكرك الادارة على هده الزيارة


انضم إلى المنتدى ، فالأمر سريع وسهل

mcse
مرحباا بك في منتدى mcse
تشكرك الادارة على هده الزيارة
mcse
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

(15) صفة في فئة عبارة عن عضو من فئة أخرى

اذهب الى الأسفل

(15) صفة في فئة عبارة عن عضو من فئة أخرى Empty (15) صفة في فئة عبارة عن عضو من فئة أخرى

مُساهمة من طرف Ebisu الأربعاء يونيو 16, 2010 11:49 am

لسلام
عليكم و رحمة الله و بركاته

(ملاحظة: يحتوي الدرس على عدد من الصور التي اجتهدت في
اختزال
حجمها قدر الاستطاعة، أرجو الصبر)

درسنا اليوم فيه شيء من الطول، و شيء من التفصيل. من فضلك لا
تقرأه إلا و
أنت في حالة ذهنية صافية غير مشوشة.. لأفضل النتائج.. والله الموفّق
:-)
على فكرة.. فيه بعض الرياضيات أرجو أن يسعدكم هذا لعلمي بولع
المبرمجين (وأنا
منهم) بالرياضيات Smile


تمهيد
:
لنجرب أن
نضع فئة الإنسان. ماهي صفاته و قدراته؟


عين، لسان، قلب، انه يفكر، يبدع.
ممتاز.

لنتصوّر أننا نرغب في كتابة فئة القلب. و نضع فيها
صفات أي قلب:

يضخ الدم، ينبض.
رائع جداً..
الآن تصوّر أن عضواً من فئة القلب سيكون صفة لعضو
فئة
الانسان..

لغز؟ لنحلّه معاً عبر درس اليوم Smile


مقدّمة المثال:
لنفترض
أننا نرغب في بناء فئة للخط المستقيم. و حتى
نبدأ فعلياً في ذلك. لابد من أن نعرف المزيد عن خصائص و مميزات الخط
المستقيم
أليس كذلك.

لنسأل أنفسنا:
ماهو الخط المستقيم؟

حتى
نجيب على هذا التساؤل لابد أن نعرف القليل
عن
خصائص الخط المستقيم. لنتأمّل الشكل التالي:



(15) صفة في فئة عبارة عن عضو من فئة أخرى Img01





<blockquote>
كما ترى في الشكل. لدينا نقطتان النقطة
الأولى:
P1 و الثانية P2.

و يربط بينهما الخط المستقيم. إذا الخط المستقيم هو كل ما
يربط بين
نقطتين، أليس كذلك؟ حسناً إذا احداثيات النقطة الأولى
P1 و احداثيات النقطة الثانية
P2 يحددان معاً كيف نرسم الخط
المستقيم.

</blockquote>






نقطة توقّف..
قد
يقول
قائل منكم أن للخط لوناً وهو في الشكل اللون الأسود. فأقول
صحيح. اللون
صفة من صفات الخط. و قد يقول آخر أن لون النقاط أحمر فأقول
خطأ. لأن
لون النقاط من صفات النقاط و ليس من صفات الخط ;-)
فلا تخلط الأمور.

فمثلاً يمكن أن نكتب فئة مختصّة بالنقاط
نسمّيها
Point مثلاً. و نضع فيها صفات
النقطة و هي
ستكون الاحداثي السيني، و الاحداثي الصادي، و اللون. و لكن حين
نعرّف
الخط المستقيم ما يهمّنا من النقطة هو احداثياتها. أم لونها
فستأخذه
بشكل طبيعي من لون الخط نفسه. نحن نتحدّث عن الخط فقط. و
استخدمنا
النقاط لتوضيح أن الخط يربط بينهما.

لم تستوعب النقطة؟ لا تخف أبداً.. تابع
الدرس و ان
شاء الله تتوضح الأمور Smile


إذاً لدينا الآن
فئة الخط
المستقيم Line. و لكن في حالتنا اليوم نحن
مضطرون
إلى بناء فئة أخرى.. ما هي؟

صحيح.. فئة النقطة و لنطلق عليها Point
و أي نقطة في العالم تتكون من احداثيين (س، ص) أليس كذلك؟ و باللغة
الانجليزية: (x,y). لننظر إلى الشكل
التالي:



(15) صفة في فئة عبارة عن عضو من فئة أخرى Img02 <blockquote>
فنلاحظ الشكل المجاور قليلاً.. ستجدون
النقطة
الحمراء و الممثلة بالنقطة P1
تعكس اثنين
من الاحداثيات. أحدهما ينعكس على المحور (س) والآخر ينعكس
على المحور
(ص).

و نلاحظ أيضا في الأرقام التي تجاور
النقطة ان
الاحداثي السيني تم تعريف أولاً. ثم تم تعريف الاحداثي
الصادي.

و لكي نكتب الفئة في اللغة الانجليزية
أرجو ملاحظة
أن س= x، و أن ص=y.
كما ارجو ملاحظة اتجاه اللغة. حيث ان الاتجاه بالانجليزي
سيكون من
اليسار لليمين هكذا: (x,y).

ملاحظة: سامحوني على رداءة خطي ههههههه
:-)

</blockquote>





كتابة البرامج:


الآن و بعد هذه الدراسة المتعمّقة
في
الهندسة الاحداثية. (أرجو أنها كانت خفيفة على قلوبكم) نستطيع ببساطة
أن نبني
معاً فئة النقطة أو Point. لنتأمّل الكود
التالي:


<blockquote>


(15) صفة في فئة عبارة عن عضو من فئة أخرى Point01
</blockquote>

لقد قمنا هنا بتعريف أبسط فئة
للنقطة
Point و هي فئة لها اثنتين من الخصائص.
احداثي
السينات، و احداثي الصادات Smile


الآن سنقوم بكتابة ملف فئة الخط
المستقيم.
لنتأمّل الكود التالي:

<blockquote>


(15) صفة في فئة عبارة عن عضو من فئة أخرى Line01
</blockquote>
تجدون أن الخط المستقيم له صفتان تميزانه (أو
بمعنى أصح
تميّزان أي عضو نقوم باستخراجه من هذه الفئة) و هما النقطة الأولى
p1 و النقطة الثانية p2.


والآن لنلخّص ما فعلناه. لقد كتبنا فئة و هي فئة
النقطة
Point و هي فئة قائمة بذاتها. ثم كتبنا
فئة الخط
المستقيم Line و استخدمنا في تعريفها
عضوين من
الفئة الأولى. فالنقطة p1 في فئة الخط
المستقيم
عبارة عن صفة لعضو. و هي بحد ذاتها عضو من فئة النقطة
Point. أتمنى أن تكون هذه النقطة واضحة :-)

والآن سنكتب برنامج ثالث مثلاً ليكون هو البرنامج
الذي
نستخدم فيه أعضاء من فئة الخط المستقيم مثلاً. و سأسمّيه
Painter لأننا ان شاء الله سنكتب في نهاية هذه الدورة برنامج
رسم بسيط
:-) حسناً لنتأمّل هذا الكود:

<blockquote>
(15) صفة في فئة عبارة عن عضو من فئة أخرى Painter01
</blockquote>
لا تخف لا تخف :-) سنشرحه جزءاً جزءاً. بالطبع
الهيكل
العام للبرنامج مفهوم وواضح من دروس سابقة.

<blockquote>
شرح كود برنامج
Painter:
لننظر إلى الشكل:
<blockquote>
(15) صفة في فئة عبارة عن عضو من فئة أخرى Painter01p1
</blockquote>
نلاحظ عرض السطرين 5 و 6 فيهما استخراج عضوين
هما
line1 و line2
من فئة
الخط المستقيم. ثم قمنا بعد ذلك بحجز الذاكرة لهما لكونها من فئة
قمنا
بتعريفها (Aggregate Data Type) كما
شرحنا في الدرس
الثالث عشر
. هنا الطريق تمام و مفتوح


لننظر للشكل التالي:
<blockquote>
(15) صفة في فئة عبارة عن عضو من فئة أخرى Painter01p2
</blockquote>
في الشكل الأعلى نجد الأسطر من 8 و حتى السطر
13. في
السطر الثامن نجد تعليقاً يخبرنا أننا سنقوم الآن بإعداد النقاط في
السطرين
اللذين قمنا بتعريفهما للاستخدام. لأننا لو تذكر في تعريفنا للخط
المستقيم
لم نقم باستخدام new لحجز المساحة لكلتا

النقطتين. و هكذا وجب علينا في هذا البرنامج أن نقوم بذلك.




نقطة توقّف..
إن
هذه الخطو ضرورية جداً جداً جداً جداً جداً. ستسأل لماذا..
تذكّر معي
أننا قمنا بتعريف الخط المستقيم في البرنامج بأن فيه عضوين
من فئة
النقطة Point. و لم نقم بعد بحجز
أي مساحة
لهذين العضوين.

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

الدرس
الثالث عشر

لمزيد من المعلومات حول هذه النقطة.

هل تعتقد أن هذه مشكلة يجب أن نجد لها
حلاً. تفكير
رائع :-) وهذا ما سنفعله في الدرس القادم من هذا الموضوع.



لننظر للشكل التالي:
<blockquote>
(15) صفة في فئة عبارة عن عضو من فئة أخرى Painter01p3
</blockquote>
هنا نجد الأسطر من 15 إلى 19. و في السطر 15 نجد
تعليقاً
يخبرنا أننا سنقوم بإعطاء قيماً للخط المستقيم line1

. و هذا يعني أننا سنحدد النقاط التي يصل بينهما. و بتفسير أكثر
سنقوم
بتحديد الاحداثيات السينية و الصادية لكلتا النقطتين. نلاحظ أننا
استخدمنا
الـ dot notation هنا و هذا يعني انني
سأقوم
باستخدام صفة (في حالتنا) خاصة بالعضو الذي ينتمي للفئة
Line. لننظر لدفتر الرسم البياني و نحاول رسم هذا الخط الذي
يربط
بين النقطتين (10,10) و (20،20).

<blockquote>

(15) صفة في فئة عبارة عن عضو من فئة أخرى Line10102020


هل الخط المستقيم الأول واضح الآن؟ أرجو ذلك
:-)



</blockquote>
والآن لننظر للشكل التالي:
<blockquote>
(15) صفة في فئة عبارة عن عضو من فئة أخرى Painter01p4
</blockquote>
كما في القسم السابق، و لكن هذه المرة في الأسطر
من 21
إلى 25 سنقوم بتحديد الاحداثيات لنقطتي الخط المستقيم الثاني.
لننظر للشكل
التالي الذي يمثل الخط المستقيم على الرسم البياني:

<blockquote>
(15) صفة في فئة عبارة عن عضو من فئة أخرى Line5492
</blockquote>
أرجو أن يكون هذا الجزء واضحاً تماماً بالنسبة
لكم.

<blockquote>

</blockquote>
والآن لنتابع الجزء الأخير:
<blockquote>
(15) صفة في فئة عبارة عن عضو من فئة أخرى Painter01p5
</blockquote>
الأسطر من 27 إلى 37 تقوم بطباعة السطر بشكل متب
كما في
أي سطر طباعة آخر. تطبعه على الشاشة.

كل ما في الأمر أننا قمنا بترتيب المخرجات.



نقطة توقّف..

استخدام اشارة (+) في داخل جملة الطباعة لا تعني أننا سنقوم
بالجمع.
إلا في حالو واحدة وهي أنه وُجد على طرفي هذه الإشارة داخل
أمر
الطباعة عددين قابلين للجمع. و حتى هذا ليس الحال دائماً.
لأنه يعتمد
في بعض الأحيان على ترتيب المتغيرات و موقعها في جملة
الطباعة نفسها.

علامة الجمع بين المتغيرات من نوع
String و هي التي تمثلها العبارات

المحصورة بين علامتي التنصيص " و "، يعني أنه سيتم جمع هذه
العبارات.
و هذا ما تفعله جملة أو أمر الطباعة
System.out.println.


</blockquote>


التشغيل:

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


<blockquote>
(15) صفة في فئة عبارة عن عضو من فئة أخرى PainterResult01
</blockquote>


الخاتمة:

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

ملاحظة برنامجنا حتى الآن لا يقوم بالرسم.. و لكنه
سيفعل
ان شاء الله :-) كل ما هنالك أننا نبنيه جزءاً جزءاً. فالصبر يا
إخوان.
Ebisu
Ebisu
مبرمج جيد
مبرمج جيد

عدد المساهمات : 45
السٌّمعَة : 50
تاريخ التسجيل : 11/06/2010
العمر : 43

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى