البرمجة كائنية التوجيه ( Object Oriented Programming ) ويمكن اختصارها إلى ( OOP )، هي نموذج مشتق من لغة البرمجة، فأي لغة برمجة لها النموذج الخاص بها .
من أين جاءت الفكرة؟قديما كا الأسلوب المتبع في البرمجة هو بناء البرنامج على شكل مجموعة من المتغيرات والدوال التي يتم تنفيذها بشكل إجرائي، أي مجموعة من الإجراءات والتعليمات التي يتم تنفيذها حسب ترتيب ظهورها في البرنامج، وفي كثير من الأحيان يكون الكود متداخل ومعقد، إلى جانب أنه كان يتم تكرار نفس الأكواد عند تكرار نفس الوظيفة على شيء مختلف، هذه التكرار والعبثية جعلت من قراءة البرنامج وتتبع الأخطاء شيء قاتل للصحة والوقت، فنشأت فكرة البرمجة الكائنية.
وتعتمد البرمجة كائنية التوجيه على منطق أو فكرة الكائنات، بحيث إذا كانت هناك مجموعة من الدوال تخص عنصر معين في البرنامج وهذا العنصر يتكرر استخدامه في أماكن مختلفة وبأشكال مختلفة، يتم عمل إطار عام يحتوي على هذه الدوال لإعادة استخدامها دون الحاجة لتكرارها. بما أن هذه الإطار سيجعل من الممكن استخدام الكود على أكثر من عنصر وبأشكال مختلفة، تم الإشارة لهذا الإطار بإسم الفئة Class والعناصر التي تستفيد من الكود بالكائنات Objects.
فالكون هو عبارة عن كائنات وكل مجموعة من هذه الكائنات تندرج ( مشتقة / تابعة ) تحت فئة ما. فأنت كائن تندرج تحت فئة الإنسان ، ونسر ما هو كائن يندرج تحت فئة النسور التي بدورها تندرج تحت فئة الطيور.
ويمكن أيضاً أن تنقسم الفئات نفسها إلى فئات فرعية . فيمكن تقسيم فئة الإنسان إلى فئتي الذكور والإناث ، والحيوانات إلى مائية وبرمائية. وكل فئة بالطبع لها خصائص وأفعال مشتركة لكن الكائن المشتق من الفئة يمكن أن يكون له خاصية زائدة عن الفئة الرئيسية وأيضاً يقوم ببعض الأفعال الأخرى.
فكل فئة الإنسان تتشارك في خصائص معينة مثل (السمع – البصر – الشم – الإحساس) ويتشاركون أيضاً في أفعال معينة مثل ( الأكل – الشرب – النوم ). لكن أنت ككائن مشتق من هذه الفئة يمكن أن يكون لديك خاصية مختلفة مثل أنك لا تسمع ( عافاكم الله جميعاً )، وتقوم بأعمال إضافية مثل ( ترفع أثقال ) .
البرمجة كائنية التوجيه ( Object Oriented Programming )قياساً على ما ذكرناه عن الكائنات سابقاً ، فإن هذا المنطق يتم تطبيقه على البرمجة بحيث يتم تقسيم الكود على شكل فئات ( Classes ) وهذه الفئات يُشتق منها كائنات ( Objects ). بحيث يتم تجميع المتغيرات PHP Variables والدوال PHP Functions التي يتم استخدامها بشكل متكرر داخل فئة Class لكن ستختلف بعض المسميات :
المتغيرات هي خصائص الفئة ويطلق عليها ( Properties – Attributes ). في معظم الأحوال تستخدم Properties الدوال هي ( سلوك – أفعال – طرق ) الفئة ويطلق عليها ( Actions – Methods – Behavior ) في معظم الأحوال تستخدم Methods يطلق على الكائن المشتق من الفئة اسم ( المثيل ) Instance ، وعملية إنشاء كائن نفسها تسمى Instantiation. لماذا تستخدم الفئات والكائناتقلنا أن قوة الدوال تكمن في أنها تقوم بتجميع عددة أسطر برمجية , هذه الاسطر يتم استخدامها في أماكن متعددة متفرقة , وبالتالي لن نضطر لتكرار الاسطر والحفاظ على الكود مرتب وتزيد من معد أداء البرنامج.
ثم جاءت الفئات لتزيد اللغة قوة بحيث تقوم بتجميع محموعة من الدوال والمتغيرات التي يتم استخدامها بشكل متكرر تحت اسم معين بحيث يمكنك اعادة استخدام هذه العناصر في أكثر من مكان بمجرد اسم الفئة أو انشاء كائن منها.
صيغة كتابة الفئة ( Class ) <?php class ClassName{ // Properties // Methods } ?> يتم تعريف الفئة باستخدام الكلمة class ثم اسم الفئة. يتم احتواء خصائص الفئة ( Properties ) و طرقها ( Methods ) داخل الأقواس المجعدة { }. اضافة الخصائص Properties وهي بالطبع كما قلنا عبارة عن متغيرات. اضافة الطرق ( Methods ) ألا وهي الدوال. صيغة تعريف الكائنات ( Objects )أولاً الكائنات في لغات البرمجة عموماً هي نوع من أنواع البيانات Data types، وإذا كان الكائن مشتق من فئة ما ، فعند إنشاء كائن جديد تستخدم الكلمة ( new ) قبل اسم الفئة، ثم تخزين بيانات الكائن في متغير هكذا $object = new ClassName();
مثال :
لكي تصبح الفكرة أكثر وضوحاً سنقوم باستخدام الإنسان كمثال ، فكل إنسان له خصائصه المميزة مثل ( اسمه – وزنه – عمره – جنسه – لونه ) ، ويقوم ببعض الأنشطة مثل ( الأكل – الشرب – النوم ) . فسنقوم ببناء فئة عامة ونطلق عليها human وسنقوم بإنشاء كائن منها اسمه Ahmed$ ( تعالى الله هو الخالق )
[highlight background=”” color=””]تجاهل الكلمات مثل public – Private – protected التي ستجدها في الكود، فسيتم توضحها لاحقاً[/highlight]
<?php class human{ // تعريف الخصائص public $name; public $weight; public $age; public $sex; public $colour; // تعريف الطرق public function eating(){ //code here } public function drinking(){ //code here } public function sleeping(){ //code here } } $Ahmed = new human(); ?>في الكود السابق قمنا بتعريف الفئة human وأنشأنا منها انسان جديد يدعى Ahmed$ وهنا أصبح أحمد كائن جديد ( New object ) وله جميع خواص الفئة .
استخدام الخصائص Propertiesيتم الوصول إلى المتغيرات/خصائص الفئة عن طريق الكلمة المحجوزة $this فإذا فرضنا أننا نريد استخدام الخاصية name$ التي تم تعريفها في المثال السابق، داخل الطريقة ()eating ، يتم استخداما بالشكل التالي :
public function eating(){ echo $this->name.'is eating' }لكن ماذا عن الرمز ( -> )؟
الرمز ( <- )يستخدم الامر -> للإشار إلى الخاصية المراد الوصول إليها داخل الفئة ولاحظ استخدام علامة ( $ ) قبل الكلمة this وليس قبل اسم المتغير.
تجميع الكلبعد أن تعرفت على الأساسيات العامة للفئات ( PHP Classes ) والكائنات ( PHP Objects ) يمكننا الآن فهم الصورة العامة لكيفية الاستفادة منها في المثال التالي :
ذكرنا مثالاً مبسطاً عن كيفية تعريف الفئات من خلال تعريف الفئة human وأعطيناها الخصائص ( الاسم – العمر – الجنس – اللون – الوزن ) وقمنا بتعريف بعض الطرق مثل ( الأكل – الشرب -النوم ) ، لكن قمنا بالتعريف فقط بدون إضافة وظيفة حقيقية. سنقوم باستخدام نفس المثال مع إضافة بعض الوظائف ومن ثم انشاء كائن جديد ثم تعريف خصائص الكائن الجديد.
<?php class human{ // تعريف الخصائص public $name; public $weight; public $age; public $sex; public $colour; // تعريف الطرق public function eating(){ echo $this->name.' '."is eating"; } public function weight(){ echo $this->name.' '."is weighing".' '.$this->weight; } public function age(){ echo $this->name."is".' '.$this->age.' '."years old"; } } // إنشاء كائن جديد $Ahmed = new human(); //التلاعب بخصائص الكائن $Ahmed->name = "Ahmed"; $Ahmed->age = 25; $Ahmed->weight = "75kg"; //استدعاء طرق الكائن الجديد echo $Ahmed->eating().'<br>'; echo $Ahmed->weight().'<br>'; echo $Ahmed->age(); ?>شرح الكود
1 – قمنا بتعريف فئة باسم human في السطر رقم 2
2 – ثم قمنا بتعريف خصائص الفئة من السطر رقم 5 إلى السطر رقم 9
3 – قمنا بتعريف طرق الفئة وهي الدوال ( eating – weight – age )
4 – هذه الطرق ستقوم بطباعة سلاسل نصية ( String Variables ) باستخدام خصائص الفئة عن طريق الكلمة this
5 – في السطر رقم 26 قمنا بإنشاء كائن جديد باسم Ahmed باستخدام الكلمة new مع اسم الفئة التي نريد انشاء الكائن منها
6- بدأنا من السطر رقم29 التلاعب بخصائص الكائن الجديد ( الاسم – الوزن – العمر ) .
7 – في السطر رقم 36 وحتى 38 نطلب الآن استدعاء وطباعة نتيجة طرق الكائن والتي بدورها هي طرق الفئة ، وذلك عن طريق كتابة اسم الكائن متبوعاً بالأمر -> ثم اسم الطريقة التي تريد استدعائها.
[button title=”عرض نتيجة الكود” link=”https://makiomar.com/php-oop/simple_oop.php” target=”_blank” size=”” color=”” class=””]
بهذه الطريقة يمكن انشاء أي عدد من الكائنات وأيضاً إضافة خصائص جديدة , فإذا أردت إنشاء كائن جديد اسمه Mohamed$ ولكن له خواص أخرى مثل ( الشعر ) فيمكننا بعد تعريف الكائن كما ظهر في السطر رقم 20 ، إضافة الخاصية الجديدة هكذا
// إنشاء كائن جديد $Mohamed = new human(); // اضافة خاصية جديدة للكائن الجديد $Mohamed->hair="curly"; ماذا عن استخدام الكلمة public ؟هذه الكلمة لها علاقة بما يسمى حدود الرؤية بالإضافة إلى الكلمتين ( Private – Protected ) بحيث تتحكم هذه الكلمات الثلاثة في إمكانية الوصول إلى خصائص وطرق الفئة ويمكنك معرفة المزيد عن حدود الرؤية من ( PHP Visibility ).
مصطلحات البرمجة الكائنية
هذه المصطلحات ستواجهها بشكل متكرر في البرمجة الكائنية ومرفق معها تعريف مبسط لها :
object : كائن له خصائصه المميزة وطرق تعايشه property : خاصية الكائن وهي عبارة عن متغيرات عادية ( PHP Variables ) Method : طريقة الكائن وهي عبارة عن دوال عادية ( PHP Functions ) class : فئة تجمع الخصائص والطرق المشتركة لمجموعة من الكائنات. ويتم انشاء كائنات جديدة من هذه الفئة inheritance or extension : يمكن لفئة ما أن ترث خصائص وطرق فئة أخرى. visibility : بما أنه يتم انشاء كائنات من الفئة أو حتي توريث هذه الفئات ، وجب تحديد أي الخصائص أو الطرق يمكن الوصول إليها سواء من الكائنات أو من الفئات الوارثة. abstract class : هي فئة مخصصة للتوريث فقط ولا يمكن إنشاء كائنات جديدة منها . final class : هي فئة لا يمكن توريثها interface : هي فئة عبارة عن واجهة فقط ، أي يتم تعريف الطرق ( methods ) بدون كود قابل للتنفيذ. trait : يطلق عليها السمات وتستخدم للتوريث المتعدد

