البرمجة الكائنية الموجهة
البرمجة الكائنية oop وهي إختصاراً للمصطلح (object oriented programming) في الدروس القادمة سوف نتناول البرمجة الكائنية الموجهة oop و إذا تابعتم الدروس التي سوف نطرحها في المستقبل سوف تكونوا قادرين على التعامل مع البرمجة الموجهة الكائنية oop بأي لغة كانت تستخدم مفاهيم البرمجة الكائنية oop من حيث البنية و الشكل مثل لغة جافا وسي شارب.
سوف نتكلم عن جيمع المواضيع المحيطة في البرمجة الكائنية الموجهة oop ونحاول الإلمام بكل صغيرة و كبيرة حتى يخرج المتعلم من هنا بمعلومات جيدة جداً بحيث يستطيع التعامل مع البرمجة الكائنية الموجهة oop بأي لغة تنتهج نفس بنية الجافا و شكلها قبل البدء في تعريف البرمجة الكائنية الموجهة oop أو تعريف الكلاسات و الكائنات سوف نلقي نظرة سريعة على شكل البرنامج في البرمجة الكائنية oop.
تحدثنا في الدروس الأولى أن لغة الجافا تنتهج شكل oop من حيث البنية و الشكل يتكون الكائن من دوال methods, هذا الكائن تندرج تحته الدوال ممكن أن نكتب اكثر من دالة و نعمل لها تضمين include وتحت الكائن تبقى وظيفته أنه مسؤول عن هذه الدوال و بدل إستدعاء كل دالة لوحدها نستدعي الكائن في الدوال الذي به كلها.
الشكل العام لإستخدام البرمجة الكائنية في جافا
package oop; class a { } public class Oop{ public static void main(String[] args){ }}
معنى كلمة package هي أن كل الأسطر التي أسفل هذه الكلمة تكون تابعة للحزمة package أي أنها تنتمي للكلمة التي تكون بعد كلمة package. و يتوفر لدينا كلاسين بالشكل السابق هما الكلاس a و الكلاس Oop و هذين الكلاسين يتبعون الحزمة oop. ونستفيد من الحزمة بتحزيم البرنامج الذي نكتبه يعني القدرة على إعادة إستخدام كل الأكواد التي إستخدمناها بمشروع آخر. مثلاً قمنا بكتابة برنامج إستخدمنا به 6 كلاسات و إحتجنا لإستخدام هذه الكلاسات بدلاً من كتابتها مرة ثانية. نستطيع إعادة إستخدامها بواسطة تضمين إسم الحزمة ببرنامج آخر و ثم إستدعاء الكلاسات الموجودة و بذلك سوف نختصر جهد و زمن و كود.
معنى كلمة class هذا يعتبر أنه رأس الهرم في عالم البرمجة الموجهة oop و هو اهم شيئ بها. سابقاً قبل ظهور البرمجة الموجهة oop كانت الأكواد تكتب بطريقة غير منظمة و بشكل عشوائي. و إحتاجوا إلى تنظيم البيانات و تقسيم البيانات وترتيب البيانات بحيث يسهل على المبرمج التعامل مع البيانات. عندما تكون مقسمة بشكل مرتب و منظم و لذلك قاموا بإنشاء ما يسمى بـ البرمجة الموجهة oop و الكلاسات.
والفائدة الثانية للكلاس هي أن الكلاس يقوم بحماية المتغيرات و تحديد درجات. الوصول لتكون بياناتنا أكثر حماية و درجات الوصول سوف نتكلم عنها في دروس قادمة. الكائن في البرمجة الكائنية هو نسخة من الكلاس و نستفيد منه أننا لا نستطيع. الوصول للبيانات داخل الكلاس بشكل مباشر إلا بإستخدام كائن يتم إشتقاقه من نفس الكلاس.
مثال 1
package oop; class a { int n=9; } public class Oop{ public static void main(String[] args){ a ob=new a(); System.out.println(ob.n); }}
في البداية أسمينا الحزمة oop ثم أنشأنا الكلاس a و يحتوي على متغير و كان من نوعه عددي int و إسمه n و قيمته هي 9. ودخلنا إلى البرنامج الرئيسي لنطلب منه طباعة قيمة المتغير n و أنشأنا كائن من نفس الكلاس لكي نستطيع الوصول للكلاس a. وكتبنا إسم الكلاس a ثم كتبنا إسم الكائن ثم كتبنا new a يعني هذا هو نسخة من الكلاس. نضمنها بداخل الكائن ob ثم طبعنا الكلاس و عند تشغيل البرنامج سيطبع لنا 9 الذي هي قيمة المتغير a.
مفهوم الكلاس في جافا
الكلاس class في Java هو عبارة عن حاوية كبير أو صندوق نستطيع أن نضع به كل الكود مثل(المتغيرات - الدوال - الكائنات) و أي شيئ آخر في الكود.
الشكل العام لكتابة الكلاس في جافا
class Name{ محتويات الكلاس }
مثال 2
class Muhammad { String child1; String child2; String child3; String child4; String child5; void printInfoMuhammad() { System.out.println("Child1: " +child1); System.out.println("Child2: " +child2); System.out.println("Child3: " +child3); System.out.println("Child4: " +child4); System.out.println("Child4: " +child5); } }
فيما يلي أنشأنا كلاس وهو Muhammad و يحتوي على خمس متغيرات وهي أبناء لـ Muhammad, و أضفنا دالة تقوم بعرض قيم هذه المتغيرات وهي printInfoMuhammad عندما يتم إستدعاءها.
مفهوم الكائن object في جافا
الكائن object في جافا, ويكون هذا الكائن نسخة طبق الأصل مطابقة لكلاس معين, هذا يعني أننا لا نستطيع إنشاء كائن مالم يكن هناك كلاس class في البرنامج. لتعريف كائن object من كلاس يجب علينا وضع إسم الكلاس وبعده نضع إسم لهذا الكائن.
الشكل العام لتعريف كائن في جافا
Muhammad amed = new Muhammad();
مثال 3
Muhammad amer; amer = new Muhammad();
السطر الأول يعني أن الكائن amer سيكون كائن من الكلاس Muhammad. السطر الثاني يعني اخذنا كائن من الكلاس Muhammad و قمنا بتخزينه في amer و اصبح amer هو كائن مشتق من الكلاس Muhammad.
الكونستركتور Constructor في جافا
الكونستركتور Constructor لغة جافا, تسهل علينا طريقة انشاء كائنات من كلاس معين وتعتبر شيئ مهم يجب التفكير به بعد إنشاء الكلاس. وهو عبارة عن دالة يكون لها نوع خاص, يتم إستدعاء هذه الدالة في أثناء إنشاء الكائن من أجل توليد قيم أولية للخصائص الموجودة فيه.
class Saja{ }
سوف يقوم كومبايلر أو مفسر جافا بتوليد الكونستركتور فارغ بشكل إفتراضي في وجد أن الكلاس الذي أنشأته لا يحتوي على كونستركتور بالشكل الآتي.
class Amer { public amer(){ } }