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

في جافا هناك مجموعة من انواع البيانات الاولية Primitive Data Types والتي نستخدمها لتخزين البيانات العادية مثل int و float، تتيح لنا الجافا بانشاء انواع مركبة من الانواع الاولية فممكن ان ننشأ مثلا نوع جديد اسمه User ويتكون من نص لتخزين الاسم واخر لتخزين كلمة السر ورقم لتسجيل العمر:

class User{
	String userName;
	String password;
	int age;
}

عند تعريف نوع جديد في جافا، نستخدم كلمة الصنف (class) لنعريف هذا النوع واذا اردنا ان ننشأ متغير من ذلك النوع الجديد نستخدم كلمة new كالاتي

User x = new User();
x.userName = "Ahmed";
x.password = "123";
x.age = 22;

User y = new User();
y.userName = "Fatema";
y.password = "123";
y.age = 21;
  • عندما نستخدم كلمة new فاننا نقوم بانشاء كائن (Object) في الذاكرة من نوع User وهو يحتوي على صفاته (attributes) مثل userName و password و age و كل كائن يحتوي على صفاته الخاصه به.
  • اذا اردنا ان نصل الى احد عناصر الكائن نقوم باستخدام “.” ثم اسم الصفة (attribute).
  • الانواع التي يتم انشاءها من الاصناف تكون انواع مرجعية (Referenced).
  • فعليا لا يتم تخزين بيانات الكائن (Object) في المتغير x او y، لكن ما يحدث انه يتم انشاء كائن (Object) في الذاكرة ويتم تخزين عنوانه (address) في الذاكرة في ذلك المتغير.
ملحوظة: قد نستخدم كلمة حالة (state) بدلا من صفات (attributes)

الذاكرة: الانواع الاولية (primitive) و الانواع المرجعية (referenced)

في الجافا يتم تخزين المتغيرات و الانواع الاولية في منطقة من الذاكرة اسمها ال Stack و يتم تخزين الكائنات او الانواع المرجعية في منطقة اسمها ال Heap، لذا تسمى الانواع المرجعية بهذا الاسم، حيث انه ما يتم تخزينه في المتغير هو المرجع (reference) للعنوان في الذاكرة

صورة توشح تخزين الكائنات في الذاكرة في جافا.

الدوال/الطرق Methods

​الاصناف عادة ما لا تحتوي على صفات (attributes) فقط، لكنها تحتوي ايضا على طرق methods لكي نستطيع ان نعمل عمليات على البيانات الموجودة في كل كائن، لنتخيل ان هناك صنف لانشاء العدادات و يكون هناك طريقة لزيادة قيمة العداد:

class Counter{
	int value = 0; // تكون البداية صفر
	int increase(){
		value = value + 1;// نضيف 1 على القيمة الموجودة
		return value;
	}
}


Counter a = new Counter();
Counter b = new Counter();

System.out.println(a.increase());//1
System.out.println(a.increase();//2

System.out.println(b.increase();//1

كما لاحظنا في المثال السابق فالمتغير b عندما نقوم بالعملية increase فانه يغير في الصفة/حالة (attribute/state) الخاص به ويكون في معزل عن المتغير a.

خلاصة

الجافا هي لغة كائنية (Object Oriented) حيث انه في اثناء تشغيل البرنامج نقوم بتخليق مجموعة من الكائنات (Objects) في الذاكرة التي تتفاعل مع بعضها لكي يعمل البرنامج. مثلا نعمل برنامج لبيع السلع، فنمثل كل سلعة متوفرة عندنا بكائن (Object) في الذاكرة و يكون عندنا مجموعة من الزبائن حيث نمثل كل زبون ايضا بكائن (Object)، بالطبع شكل كائن السلع يختلف عن كائن الزبون من حيث الصفات (attributes) و التصرفات (behavior) ، فمثلا كائن الزبون عنده صفات مثل الاسم، و الاموال المتاحة وغيرها كما انه يستطيع ان يشتري او يحجز السلع او ان يدفع الاموال، اما كائن السلع فعنده صفات مثل السعر و ال ID.
اذا اردنا ان نمثل ذلك المثال في الجافا سيكون عندنا:

  • صنفين من الكائنات: السلع و الزبائن، ونمثلها بالاصناف (classes)
  • لكل منهم صفاتهم المختلفة (attributes) ونمثلها بانواع البيانات المختلفة (Data Types)
  • تتفاعل فيما بينها عن طريق التصرفات (Behaviors) المتاحة لكل منها ونمثلها بالطرق (Methods)

guest
0 تعليقات
Inline Feedbacks
اظهر كل التعليقات