You are on page 1of 10

‫الوحدة الحادي عشر‬

‫الكيانات والكالسات ‪Classes and Objects‬‬

‫نظري‬
‫الكيانات والكالسات ‪ - Classes and Objects‬نظري‬

‫تعريف الكالس ‪: Classes‬‬

‫‪ : Class‬نكتبها كالس في العربية ‪ .‬و الكالس عبارة عن حاوية كبيرة تستطيع أن تحتوي على‬

‫كل الكود من متغيرات و دوال و كائنات إلخ‪..‬‬

‫‪ ‬مفهوم الخصائص ‪:‬‬

‫أي متغيرات يتم تعريفها بداخل كالس و خارج أي دالة تسمى خصائص (‪ , )Attributes‬و هذا‬

‫يعني أن أي كائن من هذا الكالس سيكون عنده هذه الخصائص ‪.‬‬

‫تستطيع التعامل مع هذه الخصائص من الكائن مباشرة ‪ ,‬بينما المتغيرات العادية ال يمكنك‬

‫التعامل معها من الكائن ‪.‬‬

‫‪ ‬مفهوم الـ ‪: Object‬‬

‫‪ : Object‬تعني كائن في اللغة العربية‪ .‬و الكائن عبارة عن نسخة مطابقة لكالس معين ‪.‬‬

‫بما أن الكائن عبارة عن نسخة من الكالس‪ ,‬يمكننا القول أنه ال يمكن إنشاء كائن إذا لم يكن‬

‫هناك كالس ‪.‬‬

‫إذا في مفهوم برمجة الكائنات نقوم بإنشاء كالس معين يسمونه ‪blue print‬‬

‫أي (النسخة الخام أو النسخة األصلية) ‪ ,‬و بعدها ننشئ نسخة أو أكثر من هذا الكالس و نفعل‬

‫بها ما نريد بدون أن نغير محتويات الكالس األساسي و هكذا نكون حافظنا على كودات‬

‫الكالس األساسي ألننا نعدل على النسخ و ليس عليه مباشرة ‪.‬‬

‫‪ ‬طريقة التعامل مع الكائنات ‪:‬‬

‫‪ -‬نقوم بإنشاء كائن من الكالس ‪.‬‬

‫‪ -‬بعدها نقوم بإدخال قيم لخصائصه ‪ ,‬إستدعاء دواله إلخ‪..‬‬

‫‪126‬‬
‫‪www.tvtc.gov.sa‬‬ ‫م‪ .‬عبدالمجيد العتيبي‬
‫الكيانات والكالسات ‪ - Classes and Objects‬نظري‬

‫‪ ‬الستدعاء أي شيء موجود في الكائن الذي خلقناه ‪:‬‬

‫‪ -‬نضع إسم الكائن‪.‬‬

‫‪ -‬ثم نقطة‪.‬‬

‫‪ -‬ثم الشيء الذي نريد الوصول إليه ( سواء إسم متغير أو دالة )‪.‬‬

‫‪ ‬نصائح عليك إتباعها ‪:‬‬

‫‪ -‬يفضل إنشاء كل كالس في ملف جافا خاص‪.‬‬

‫‪ -‬إبدأ إسم الكالس دائما بحرف كبير‪.‬‬

‫‪ -‬إبدأ إسم الكائن دائما بحرف صغير‪.‬‬

‫‪ ‬الكلمة ‪: this‬‬

‫الكلمة ‪ this‬هي كلمة محجوزة في لغة جافا ‪ ,‬و هي تستخدم لإلشارة إلى الـ ‪Global‬‬

‫‪ ,Variables‬و تستخدم أيضا لإلشارة إلى الكائن الحالي ‪ ,‬و يمكن استخدامها في أماكن عديدة ‪.‬‬

‫‪ ‬مفهوم الـ ‪: Constructor‬‬

‫‪ : Constructor‬تكتب كونستركتور بالعربية ‪.‬‬

‫من أهم األشياء التي عليك التفكير بها بعد إنشاء كالس جديد‪ ,‬هي تسهيل طريقة خلق‬

‫كائنات من هذا الكالس ‪ ,‬من هنا أتت فكرة الكونستركتور وهو عبارة عن دالة لها نوع خاص ‪,‬‬

‫يتم إستدعائها أثناء إنشاء كائن لتوليد قيم أولية للخصائص الموجودة فيه ‪.‬‬

‫بما أنه ال يمكن إنشاء كائن من كالس إال من خالل كونستركتور ‪ ,‬سيقوم مترجم جافا بتوليد‬

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

‫كونستركتور‪.‬‬

‫‪127‬‬
‫‪www.tvtc.gov.sa‬‬ ‫م‪ .‬عبدالمجيد العتيبي‬
‫الكيانات والكالسات ‪ - Classes and Objects‬نظري‬

‫‪ ‬المتغيرات التي يتم وضعها في الكالس تقسم إلى ثالث فئات أساسية ذكرناها في‬

‫الجدول التالي ‪:‬‬

‫هي المتغيرات التي يتم تعريفها بداخل أي دالة ‪,‬‬ ‫‪Local Variables‬‬
‫أو ‪ ,constructor‬أو بداخل ‪ ( block‬مثل الحلقات‪ ,‬الجملة‬
‫‪ switch‬إلخ‪.) ..‬‬
‫هي المتغيرات التي يتم تعريفها بداخل الكالس و خارج‬ ‫‪Instance Variables‬‬
‫حدود أي دالة أو ‪ , constructor‬أو ‪ . block‬تسمى أيضا‬
‫‪. Global Variables‬‬
‫هي المتغيرات التي يتم تعريفها كـ ‪ static‬بداخل الكالس‬ ‫‪Class Variables‬‬
‫و خارج حدود أي دالة أو ‪ ,constructor‬أو ‪. block‬‬

‫‪ ‬نقاط مهمة حول الكونستركتور ‪:‬‬

‫‪ ‬كل كالس يتم إنشاءه‪ ,‬يحتوي على كونستركتور واحد على األقل ‪ .‬و حتى إن لم تقم‬

‫بتعريف أي كونستركتور ‪ ,‬سيقوم المترجم بإنشاء واحد إفتراضي عنك ‪.‬‬

‫‪ ‬في كل مرة يتم إنشاء كائن جديد‪ ,‬يجب استدعاء الكونستركتور ‪.‬‬

‫‪ ‬القاعدة األساسية عند تعريف كونستركتور هي أنه يجب أن يحمل نفس إسم الكالس و‬

‫يكون نوعه ‪.public‬‬

‫‪ ‬في حال قمت بتعريف كونستركتور ‪ ,‬لن يقوم المترجم بإنشاء واحد إفتراضي‪ ,‬أي لن‬

‫يعود هناك كونستركتور إفتراضي ‪.‬‬

‫‪ ‬يمكنك تعريف أكثر من كونستركتور‪ .‬و يمكنك دائما إنشاء كونستركتور فارغ‪ ,‬حتى‬

‫تستخدمه إن كنت ال تريد إعطاء قيم أولية محددة للخصائص عند إنشاء كائن ‪.‬‬

‫‪128‬‬
‫‪www.tvtc.gov.sa‬‬ ‫م‪ .‬عبدالمجيد العتيبي‬
‫الكيانات والكالسات ‪ - Classes and Objects‬نظري‬

‫عالقة الـ ‪ Object‬بالـ ‪: Class‬‬ ‫‪‬‬

‫الكائنات تساعد المبرمج كثيرا‪ ,‬فمثال إذا كنت تنوي إنشاء برنامج بسيط لحفظ معلومات‬

‫أشخاص‪ ,‬هل ستنشئ كالس لكل شخص ؟!‬

‫طبعا ال ‪ ,‬بل تنشئ كالس واحد فقط يمثل شخص ‪ ,‬و تضع فيه األشياء األساسية التي تريدها‬

‫أن تكون موجودة عند كل شخص‪ .‬ثم تنشئ منه كائنات قدر ما شئت‪ ,‬و عندها يصبح كل كائن‬

‫من هذا الكالس عبارة عن شخص له معلوماته الخاصة ‪.‬‬

‫أنا كالس اسمي ‪ Person‬عبارة عن إنسان وأمتلك الخصائص التالية‬


‫العمر‬ ‫الوظيفة‬ ‫الجنس‬ ‫اإلسم‬

‫نحن كائنات من الكالس ‪Person‬‬


‫اإلسم ‪ :‬روز‬ ‫اإلسم ‪ :‬محمد‬
‫الجنس ‪ :‬أنثى‬ ‫الجنس ‪ :‬ذكر‬
‫الوظيفة ‪ :‬معلمة‬ ‫الوظيفة ‪ :‬مهندس‬
‫العمر ‪24 :‬‬ ‫العمر ‪26 :‬‬

‫‪129‬‬
‫‪www.tvtc.gov.sa‬‬ ‫م‪ .‬عبدالمجيد العتيبي‬
‫الوحدة الحادي عشر‬

‫الكيانات والكالسات ‪Classes and Objects‬‬

‫عملي‬
‫الكيانات والكالسات ‪ - Classes and Objects‬عملي‬

‫‪ ‬لتعريف كالس جديد يكفي فقط كتابة الكلمة ‪ ,class‬ثم وضع إسم له‪ ,‬ثم فتح أقواس‬

‫تحدد بدايته و نهايته‪ .‬مثال ‪:‬‬

‫‪‬‬ ‫{ ‪class ClassName‬‬


‫‪‬‬
‫‪‬‬ ‫}‬

‫‪ ‬بما أن الكائن عبارة عن نسخة من الكالس‪ .‬لتعريف كائن من كالس معين يجب وضع إسم‬

‫الكالس ثم وضع إسم للكائن ‪.‬‬

‫;)(‪Person ahmad = new Person‬‬

‫‪ ‬هنا قمنا بتعريف كائن من الكالس ‪ Person‬إسمه ‪. ahmad‬‬

‫‪ ‬إذا الكائن ‪ ahmad‬سيكون عنده نسخة خاصة فيه من خصائص الكالس ‪. Person‬‬

‫مالحظة ‪ :‬الكود ()‪ new Person‬هو الذي يقوم فعليا بتوليد كائن من الكالس‪ .‬و هو يعطي‬

‫قيم أولية للخصائص الموجودة فيه ‪.‬‬

‫‪131‬‬
‫‪www.tvtc.gov.sa‬‬ ‫م‪ .‬عبدالمجيد العتيبي‬
‫الكيانات والكالسات ‪ - Classes and Objects‬عملي‬

‫بما أنه ال يمكن إنشاء كائن من كالس إال من خالل كونستركتور‪ ,‬سيقوم مترجم جافا بتوليد‬

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

‫كونستركتور ‪.‬‬

‫إذا قمنا بتعريف كالس إسمه ‪ Person‬و لم نقم بتعريف كونستركتور له كما في‬
‫الكالس التالي‬

‫‪‬‬ ‫{ ‪class Person‬‬


‫‪‬‬
‫‪‬‬ ‫}‬

‫سيقوم المترجم بإنشاء كونستركتور فارغ بشكل تلقائي عننا كالتالي‬

‫‪‬‬ ‫{ ‪class Person‬‬


‫‪‬‬
‫‪‬‬ ‫{ )(‪public Person‬‬
‫‪‬‬
‫‪‬‬ ‫}‬
‫‪‬‬
‫‪‬‬ ‫}‬

‫اآلن سنقوم بإنشاء الكالس ‪ Person‬و إنشاء كائنات منه في الكالس الذي يحتوي على الدالة‬

‫()‪. main‬‬

‫مالحظة ‪ :‬يجب إنشاء الكالس ‪ Person‬و الكالس ‪ Main‬في نفس الـ ‪ package‬حتى يعمل‬

‫الكود بشكل صحيح ‪.‬‬

‫‪132‬‬
‫‪www.tvtc.gov.sa‬‬ ‫م‪ .‬عبدالمجيد العتيبي‬
‫ عملي‬- Classes and Objects ‫الكيانات والكالسات‬

Person.java

public class Person {

// ‫ خصائص‬4 ‫هنا قمنا بتعريف‬


String name;
String sex;
String job;
int age;

// ‫هنا قمنا بتعريف دالة تطبع محتوى كل خاصية عندما يتم‬


‫استدعاءها‬
void printInfo() {
System.out.println("Name: " +name);
System.out.println("Sex: " +sex);
System.out.println("Job: " +job);
System.out.println("Age: " +age);
System.out.println();
}
}

Main.java

public class Main {

public static void main(String[] args) {

// Person ‫هنا قمنا بإنشاء كائنات من الكالس‬


Person p1 = new Person(); // ‫ سيمثل محمد‬p1 ‫الكائن‬
Person p2 = new Person(); // ‫ سيمثل روز‬p2 ‫الكائن‬
Person p3 = new Person(); // ‫ سيمثل أحمد‬p3 ‫الكائن‬
Person p4 = new Person(); // ‫ سيمثل ربيع‬p4 ‫الكائن‬

// p1 ‫هنا قمنا بتحديد خصائص الكائن‬


p1.name = "Mhamad";
p1.sex = "Male";
p1.job = "Programmer";
p1.age = 21;

// p2 ‫هنا قمنا بتحديد خصائص الكائن‬


p2.name = "Rose";
p2.sex = "Female";
p2.job = "Secretary";
p2.age = 22;

133
www.tvtc.gov.sa ‫ عبدالمجيد العتيبي‬.‫م‬
‫ عملي‬- Classes and Objects ‫الكيانات والكالسات‬

// p3 ‫هنا قمنا بتحديد خصائص الكائن‬


p3.name = "Ahmad";
p3.sex = "Male";
p3.job = "Doctor";
p3.age = 34;

// p4 ‫هنا قمنا بتحديد خصائص الكائن‬


p4.name = "Rabih";
p4.sex = "Male";
p4.job = "Engineer";
p4.age = 27;

// ‫هنا قمنا بعرض خصائص كل كائن‬


p1.printInfo();
p2.printInfo();
p3.printInfo();
p4.printInfo();

}
}

‫سنحصل على النتيجة التالية عند التشغيل‬

 Name: Mhamad
 Sex: Male
 Job: Programmer
 Age: 21

 Name: Rose
 Sex: Female
 Job: Secretary
 Age: 22

 Name: Ahmad
 Sex: Male
 Job: Doctor
 Age: 34

 Name: Rabih
 Sex: Male
 Job: Engineer
 Age: 27

134
www.tvtc.gov.sa ‫ عبدالمجيد العتيبي‬.‫م‬

You might also like