الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الدرس الأول: ماهو الObject ؟

مغلق
بدأه حسام الملحم في 16 مارس 2002 · 18 رد · 18,372 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم،

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

ملاحظة: هذا الموضوع يناقش فقط مبادئ البرمجة الشيئية(الكائنية) ولا يدخل في الكود. في موضوع آخر سيتم تعليم الكود. إن فهم هذا المبدأ جيداً يسهل عليك البرمجة في أي من Java أو C#، لذلك من الأفضل التركيز على فهم المبادئ للبرمجة الشيئية، لأنها لغة قريبة من لغة الإنسان في التفكير. فالبرمجة لم تعد التعامل بين أنواع الأرقام والحروف كما في اللغات الأخرى بل أصبحت التعامل مع الأشياء كما في حياتنا اليومية نتعامل مع أشياء، وصنع الأشياء كما نصنع نحن الأشياء.

ملاحظة: أدوات التطوير وماذا يحتاج المبرمج للبدء سيكون في موضوع خاص آخر.

المراجع: Thinking In Java

http://www.mindview.net/Books/TIJ/DownloadSites

الجزء الأول: ما هو الشيءObject ؟

1- تعريف الشيء (Object):

بما أن الجافا هي لغة برمجة تعتمد فيها على الأشياء وإن صح التعبير (الكائنات). فمن الأجدر الإقدام الآن وتعريف الشيء، إلا أني أجد نفسي فارغاً فلا أستطيع تعريفه بكلمات. فكلمة شيء عادة تستخدم لتعريف أشياء أخرى.

على كل حال نستطيع تعريفه بطريقة عكسية، بصفة عامة: فكل شيء عبارة عن شيء. فالحاسب شيء، والفأرة شيء، والنافذة Window شيء، والزر Button شيء، والأرقام أشياء، والكلمة String شيء، حتى المصفوفة Array شيء.

وهي ليست محكورة في الحاسب بل حتى الأشياء المحسوسة، فالباب شيء، والمصباح شيء، والسيارة شيء، والهواء شيء، وأي شيء حولك الآن هو شيء، أنت بنفسك شيء. وغيرها وغيرها كلها أشياء.

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

1
#2

أرجو أن يحوز هذه على رضا الله ثم رضاكم

2-خصائص الأشياءObjects:

1- كل شيء أو كل Object له:

أ- مكونات يتكون منه الشيء.

ب- أعمال تُنفذ على هذا الشيء أو ينفذها هذا الشيء. (أفعال)

أمثلة:

1- الباب الخشبي:

أ-مكون من: لوح على شكل مستطيل من الخشب، ومقبض، ومحاور على جانب اللوح لثبيتها على الجدار وغيرها من المكونات.

ب-العمل: افتح الباب، أغلق الباب، أغلقه من الداخل الخ...

2- الجوال:

أ-مكون من: لوحة مفاتيح، سماعة، و مايكروفون، وجهازي ارسال واستقبال، ذاكرة، شاشة، الخ..

ب-العمل: اتصل بالرقم الفلاني، سجل الرقم الفلاني، استقبل المكالمة، أغلق المكالمة، الخ.

3- المصباح:

أ-مكون من: زجاجة مفرغة بها بعض الأسلاك، تضيء بالحرارة.

ب- العمل: انر المصباح، أطفئ المصباح، الخ...

4- الكلمة String:

أ- مكونة من: سلسلة من الأحرف.

ت-العمل: كبر حروفها Upper Case ، صغر حروفها Lower Case، قارنها بكلمة أخرى، احسب عدد أحرفها الخ..

5- الرقم:

أ-مكون من: رقم.

ب-العمل: اجمع مع، اضرب بـ ، اقسم على الخ...

6- السلسلة LinkedList :

a.مكونة من: خانات لوضع الأشياء موصولة ببعضها.

b. العمل: (وسيلة تخزين معلومات) ابحث، أضف، احذف، الخ..

7- الزر Button:

a.مكون من: شكل، وموضع، ومساحة، ولون، ومستمع للحوادث من ضغط وكبس.

b.العمل: اضغط، (لكل زر عمل معين)، غير مكانه، غير لونه، غير شكله، غير وظيفته.. الخ..

8- المستطيل:

أ-مكون من: أربعة أضلاع متعامدة، وموقع.

ب-العمل: غير موقعه، حركه، اقلبه، غير أطوال أضلاعه، الخ..

وغيرها وغيرها من الأمثلة التي لا تنتهي، فكل شيء هو Object وكل شيء له مكونات و أعمال.

3- بهذا المفهوم نستطيع وضع خصائص للغات البرمجة شيئية التوجه:

1- كل شيء هو Object. كما أشرنا سابقاً

2- البرنامج هي مجموعة من الأشياء تعطي لبعضها أوامر لتنفيذ عمل معين.

3- كل شيء Object له ذاكرة مخصصة مكونة من أشياء Objects أخرى.

4- كل شيء ينتمي إلى صف Class معين. فالأبواب من صف باب، والأزرار من صف زر Button، والجوال من صف جوال. بمعنى آخر، لو قلت لك: ما هذا؟ وأشرت لك على كلمة معينة (Object) ، فستقول لي أن هذه (Class) String، أي من صف String. ولو قلت لك ابحث لي عن أي سيارة (Class) ، فستأتيني بسيارة معينة (Object). وهكذا.

في الدرس القادم نتابع الموضوع في هذا النطاق.

أرجو التعليق على جودة ما يكتب.

#3

تسلم يدك

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

#4

بارك الله فيك أبو مازن ،، واصل على بركة الله.

#5

الدرس الثاني

#6

ملاحظات: الرجاء متابعة الفهرس العام لدروس جافا للمبتدئين والمحترفين لمعرفة الجديد

الفهرس العام لدروس جافا للمبتدئين والمحترفين

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

الدرس الثاني: الوراثة.

مبدأ الوراثة:

الوراثة هو مايجعل اللغة، شيئية التوجه Java أو C#، لها المكانة العليا بين لغات البرمجة الأخريات، لأنها ببساطة تمكن الحاسب من التفكير في الأشياء كما يفكر الإنسان عن الأشياء التي حوله، "إنا نقترب من عصر يفهم الحاسب ما نحن فيه." كي أكون أكثر وضوحاً عن الوراثة، خذ المثال التالي:

الوراثة: هو إمكانية اكتساب صف Class جديد "مكونات وأعمال"(راجع الدرس السابق) صف آخر هو بالأصل ينتمي إليه.

مثال:

صف جوال Nokia: يرث من صف جوال الذي يمتاز بأن له لوحة مفاتيح وبالقدرة على الاتصال. ويزيد عليه قابلية لعب الحية snake به.

صف أسد: يرث من صف الثدييات الذي يمتاز بأنه يلد. ويزيد عليه أنه حيوان مفترس وغيره من الزيادات.

صف الثدييات: يرث من صف الحيوان الذي يمتاز بأنه يأكل وينام ويموت. ويزيد عليه بأنه يلد.

نستفيد من هذه أن الأسد أيضاً يأكل وينام ويموت لأنه حيوان. (لاحظ السلسلة من أسد }} ثديي }} حيوان }} شيء Object.

الزر Button: يرث من صف Component الذي يمتاز بأنه يمكن التعامل به وأخذ بيانات منه. ويزيد عليه بأنه يقبل الإدخال عن طريق الضغط على الفأرة.

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

صف Component: يرث من صف شيء Object الذي لا يمتاز بشيء. ولكن يزيد عليه أنه يمكن التعامل به وأخذ بيانات منه.

أعتقد أن الوراثة قد تفهم جيداً عن طريق تلك الأمثلة.

ملاحظة: الصف الذي لا يرث من صف معين، يرث من صف شيء Object. الذي هو يقع في أعلى السلسة.

من الملاحظ أيضاً أن لكل صف أب مباشر واحد يرث منه.

الفائدة من الوراثة:

تخيل صديقاً لك لديه جوال Nokia وهو جالس إلى جوارك. وتخيل نفسك تريد الاتصال بأحد أقاربك. فقلت له: ممكن جوالك الـ Nokia؟ بالمنطق، سوف يعطيك جواله أليس كذلك؟؟

تخيل أنك قلت له: ممكن جوالك؟؟ (لم تقل جوالك الـNokia) بالمنطق أيضاً، زميلك سيعطيك جواله Nokia. لأن جواله الـNokia هو عبارة عن جوال. إذاً يمكنك الاتصال به.

تخيل أنك قلت له: ممكن جوالك Seimens؟ بالمنطق أيضاً سوف يرد عليك ويقول: ليس لدي جوال Seimens.

هل فهمتم هذه العلاقات والمبدأ؟ تخيل أنك تريد صنع برنامج يستخدم جوالاً للاتصال. إن المنطق يقول لك: لست مضطراً إلى ذكر نوع الجوال، بل يكفي أن تذكر أنك تريد جوالاً لبدأ العمل. فإنك لا تريد سوى الاتصال. فأيما أعطيت من أنواع من الجوالات فبرنامجك سيعمل بدون أي مشاكل.

تخيل أن لديك صندوق به مجموعة Collection من الأقلام مرتبة ترتيباً معيناً تستطيع من خلاله معرفة وتتبع الأقلام من الأصغر إلى الأكبر مثلاً. فلن يضرك إن لم تعرف نوعية هذا الترتيب. قد يكون مرقم ArrayList، أو سلسلة LinkedList، أو Stack أو Queue أو متجه Vector أو غيرها أو غيرها. فما دام أنها مجموعة Collection فإنك ستستطيع البحث فيه بطريقة أو بأخرى لا داعي لمعرفتها. فإنك بذلك تستطيع أن تأمر أحداً (أو تنادي على وسيلة Method أو Procedure أوSubdirectory (حسب ما يطيب لك تسميته) وتقول له: "يوجد بهذا الصندوق مجموعة Collection من الأقلام، الرجاء أن تأتيني بقلم أخضر اللون." لاحظ عدم ذكرك لنوعية المجموعة، فإن ذلك غير مهم معرفته لا لك ولا هو فإنه سيستطيع البحث فيه لأنه مجموعة Collection.

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

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

#7

طيب انا عندي سؤال

هل يشتق الـ Method من الـ Object

و هل الـ Object يشتق من الـ Class

يعنى الترتيب يكون تنازليا Class - Object - Method

ماهي انواع الـ Method و ما الاختلافات اللي بينها !؟؟!

#8

الإجابة السريعة:

الObject: عبارة عن شيء موجود مثل الفأرة التي بيدك.

الClass: عبارة عن نوع للشيء، مثلاً نوع الشيء الذي بيدك عبارة عن شيء من نوع فأرة.

الMethod: عمل يستطيع عمله الObject. مثلاً يمكنك الضغط على الزر الأيسر للفأرة.

ال static method: عمل يستطيع عمله الClass.

الField: عبارة عن مكون من مكونات الObject. مثلاً الفأرة تتكون من زر أيمن وزر أيسر وغيرها.

الstatic Field: عبارة عن مكون من مكونات الClass.

الReference: عبارة عن أداة للتحكم بالObject.

الإجابة المفصلة بعد الامتحانات.

#9

نلاحظ شيئين في هذا البرنامج البسيط التالي المكون من صف SomeObject :

بعض (المكونات) static وبعضها غير ذلك.

بعض (الأعمال) static وبعضها غير كذلك.

الجمل المعرفة ب static تنتمي إلى الصف SomeObject ولا تنتمي إلى الشيء المشتق من الصف.

public class SomeObject{	//class صف

	public int objectNumber=0;  //instance field مكون من مكونات هذا الشيء

	public static int classNumber=0;  //static field مكون من مكونات (الصف) هذا


	public SomeObject(int no){	//Constructer لصناعة (شيء) جديد
		objectNumber=no;
	}
	public void increaseObjectNumber(int no){   //instance method لزيادة الرقم لشيء معين
		objectNumber=objectNumber+no;
	}
	public int getObjectNumber(){	//instance method لمعرفة الرقم المخزن في الشيء
		return objectNumber;
	}
	public static int getClassNumber(){	//static method  لمعرفة الرقم المخزن في الصف
		return classNumber;
	}
	public static void increaseClassNumber(int no){//static method لزيادة الرقم المخزن في الصف
		classNumber=classNumber+no;
	}
}

الجمل المعرفة ب static تنتمي إلى الصف SomeObject ولا تنتمي إلى الشيء المشتق من الصف.

بمعنى آخر يوجد لدينا:

SomeObject.classNumber;		//static field
SomeObject.increaseClassNumber(int no);	//static method
SomeObject.getClassNumber();	static method

ولا يوجد لدينا

SomeObject.objectNumber;	//XXXXXXXXXX instane Field خطأ لأن ذلك XXXXXXXXXXXXXXXXX
SomeObject.increaseObjectNumber(int no);//XXXXXXXXXX instance method خطأ لأن ذلك XXX
SomeObject.getObjectNumber();	//XXXXXXXXXX instance method خطأ لأن ذلك XXXXXXX

بل يوجد لدينا:

SomeObject o1 = new SomeObject(10);  //Constructor مناداة الصانع لصناعة (شيء) جديد
SomeObject o2 = new SomeObject(100);  //Constructor مناداة الصانع لصناعة (شيء) جديدآخر

o1.objectNumber;  //instance field 
o1.increaseObjectNumber(5); //instance method لزيادة الرقم الموجود في الشيء الأول ب5 
o2.getObjectNumber();	//instance method لمعرفة الرقم المخزن في الشيء الثاني

يمكننا إنشاء ما نريد من الأشياء باستخدام الصانع Constructor

هل استوعب الفرق بين static وغير ذلك؟؟ أرجو الرد.

#10

بعد التحية ...

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

#11

أضن أن الصعوبة تكمن في أن الجافا لغة تعتمد على الأشياء 100%, ولا تقبل البرمجة بالطريقة التقليدية. وهذه هي خاصية هذه اللغة.

#12

(y)

#13

مشكور اخي كتير على الموضوع

وتقبل تحياتي

اختكم

الاعصار ......

#14

مشكور على الشرح المبسط والجميل

بارك الله فيك

#15

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

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

عندي إضافة متواضعة للإجابة المختصرة بما يخص العلاقة methods, objects, classes

نحن نعرف أن لغات البرمجة العالية المستوى فثل C, pascal, quickBasic, ... ترتكز على ما يسمى بالبرامج الفرعية التي هي عبارة عن الخدمات أو الوظائف التي يدور حولها البرنامج أو بمعنى آخر تقسيم البرنامج إلى أقسام فرعية تبرمج من خلال الدوال functions والاجراءات procedures بشكل عام وهي من هنا ترتكز على الوظائف وتهمل نسبيا البيانات ولا يناسب ذلك الواقع الحياتي المؤلف من أشياء أو كائنات Objects

من هنا أتى التطوير في علم البرمجة نحو التركيز على البيانات (أشياء أو كائنات Objects) والتي بدورها تصنف إلى أصناف Classes أي أن هناك أصناف من الكائنات ولكل منها سلوكه methods أو خدماته البيانات التي تحدده بالضبط أي تحدد هويته . لنأخذ مثال الحسابات المصرفية:

فيمكن أن يكون عندنا الكثير من الحسابات المصرفية والتي نعتبرها كائنات objects ولكن كلها تندرج تحت نفس المفهوم أو الصنف الذي هو حساب مصرفي Class حيث هذا المفهوم يحدد ماهية الحسبات المصرفية من ناحية بياناتها وكيفية عملها.

من هنا الصنف (صف أو فئة) class هو نموذج عن الكائنات أو تصور عن مفهومها يتحدد به ماهيتها والخدمات التي تطبق عليها وبتعريف الصنف نكون أضفنا نوع بيانات جديد إلى البرنامج يمكن العمل عليه كمفهوم كامل من ناحية البيانات والخدمات المتعلقة به

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

الحساب الأول رقم: 1000001، اسم العميل: خالد، الرصيد: 1000، ...

الحساب الثانيرقم: 1000002، اسم العميل: علي، الرصيد: 2000، ...

الحساب الأول رقم: 1000003، اسم العميل: محمد، الرصيد: 1500، ...

طبعا بيانات الكائنات تحدد عند إنشائها أو لاحقا بعد إنشائها من خلال مشيدات أو بانيات constructors الفئة أو الخدمات التي توفرها

هنا نكون وضحنا العلاقة بين Object and Class

أم الطرق (نهج، دوال، خدمات، سلوكيات، رسائل) methods فهي عبارة عن خدمة توفرها ال class وهناك خاصية مهمة تغير بطبيعة عمل الطرق وهي static

1-فالطرق الساكنة static mecthods هي خدمة توفرها الclass وتطبق باستقلالية عن كائنات هذه الclass أي يمكن أن تنفذ هذه الطرق باستدعائها من خلال اسم الclass قبل وجود أي كائن من الclass وهي عبارة عن خدمة عامة للفئة، مثال

الطريقة parseInt المعرفة في class Integer التي تاخذ String وترجع int ومهمتها تحويل السلسلة إلى عدد صحيح فهذه خدمة عامة توفرها class Integer

2- الطرق العادية الغير ساكنة non-static methods وهذه الطرق تحتاج إلى كائن من الclass التابعة له كي تطبق عليه وهي لا تعمل بدون كائن ويتم استدعاؤها من خلال كائن مثل خدمة الإيداع لا يمكن ان تعمل دون أن يمون عندنا حساب مصرفي وكذلك الطريقة length() المعرفة بال class String لا يمكن تطبيقها دون أن يكون عندنا ساسلة فعلية

وكذلك بالنسبة للبيانات المعرفة داخل الclass فتتأثر كليا بالخاصية static

1- البيانات الساكنة static data members وتسمى أيضا class variables : فهذه البيانات تخزن مرة واحدة فقط بالذاكرة مع الفئة ويمكن أن نقول أنها تكون مشتركة بين جميع كائناتها لأنه يوجد نسخة واحدة منها فقط في الذاكرة، وتستعمل عندما نريد أن يمون نسخة واحدة فقط من البيانات معنا

2- البيانات الغير ساكنة non-static data members وتسمى object variables لأنها تتبع الكائنات أي أن كل كائن من كائنات الclass له نسخته الخاصة منها ويكون موجود نسخ من هذه البيانات بقدر معا هو منشأ من كائنات من الclass ومثال عن ذلك رقم الحساب واسم العميل والرصيد

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

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

والسلام عليكم

#16

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

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

وخلاصة ماجاء في هذا الموضوع :

1- تعريف الـobject (الكائنات).

2- خصائص الـobject كل واحد له مكوناته وعمله الذي يقوم بهز

3- كل object له ذاكرة مكونة من object وكل object ينتمي إلى class.

4- مبدا الوراثة : وهي امكانية اكتساب الـclass - class آخر هو بالاصل ينتمي إلية ويستفاد منها في فهم العلاقات.

5- العلاقة بين الـ class والـobject و الـmethod

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

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

ماهو الشي المشتق من الصف في الكود.

- توضيح الفرق بين static method والـ non-static method ولو أمكن رسم بياني او شجرة توضح العلاقة بين الـobject والـmethod والـ class

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

#17

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

جزاك الله على هذا الشرح الوفى

#18

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

انا استفدت وفهمت الفرق بين الكلاس والاوبجكت والميثود اضافه الى مبدا الوراثه

خالص شكري

#19

لو سمحت وين الدروس للمبتدئين

الروابط لو سمحت وممكن تحطلنا اياهن

بالبرمجة الشيئية

:(

تم تعديل هذه المشاركة بواسطة rana1 في 4 أكتوبر 2007 في 01:27

50988445.gif

RaNoUsH GrApHiC dEsIgNeR

هذا الموضوع مغلق.

مواضيع مشابهة