ما هي البرمجة كائنية التوجه
تكثر المفاهيم البرمجية التي يجب على المبرمج الإلمام بها في حال رغبته بالدخول في عالم برمجة التطبيقات والمواقع وغيرها. بالطبع هناك لغات برمجةٍ خاصةٍ لكلّ نوعٍ من البرمجيات، لكن هناك مايجب إتقانه بغض النظر عن نوع اللغة والهدف من استخدامها. من أهم هذه الأمور البرمجة كائنية التوجه (أو غرضية التوجه Object-Oriented Programming)، أو كما هي معروفة بالتسمية الشهيرة بين أوساط المبرمجين OOP Programming.
مفهوم البرمجة غرضية التوجه
تجمع البرمجة الكائنية بين مجموعة من الخصائص (Properties) والوظائف (أو الطرق Methods) في وحدة تسمى الغرض (Object). بدورها تُنظّم هذه الكائنات (الأغراض) في فئات. تنتشر هذه البرمجة هذا على نطاق واسعٍ بين لغات البرمجة الأكثر استخدامًا مثل: Java و C ++ وPHP، على اعتبار أن هذه اللغات تساهم في تبسيط هيكل وتنظيم أقسام البرامج. ومن الشائع غالبًا استخدم المبرمجون OOP لدى حاجتهم لإنشاء برامج معقدة.
البرمجة كائنية التوجه مقابل البرمجة الإجرائية
تركز البرمجة الإجرائية على كتابة إجراءاتٍ وطرقٍ لتطبيقها على البيانات، أما البرمجة غرضية التوجه مبينة على مفهوم تشكيل أغراضٍ تحوي الإجراءات والطرق معًا. من هنا تتفوق OOP على البرمجة الإجرائية بالجوانب التالية:
الأساسيات الأربع للبرمجة كائنية التوجه
كغيرها من المفاهيم البرمجية، تملك البرمجة غرضية التوجه مفاهيمًا أساسيةً يمكن من خلالها تحليل مبدأ العمل بها ودراستها. يجد بعض متعلمي البرمجة كائنية التوجه صعوبةً في البداية لفهمها ويشعرون ببعض التعقيد، إلا أن الفهم المستقل لكل مفهومٍ من مفاهيمها يساعد على الفهم العام البرنامج. تنقسم هذه المفاهيم إلى أربعة:
سلبيات البرمجة غرضية التوجه
مما لا شك فيه أن البرمجة كائنية التوجه حملت الكثير من التحسينات والمرونة في كتابة البرامج وغيّرت طريقة تفكير المبرمجين بشكلٍ كبير، إلا أنها لا تخلو من بعض السلبيات وهي:
كنتيجة يمكن الخلاص بها من مفهوم البرمجة كائنية التوجه هي أنها تتطلب التفكير في بنية البرنامج المطلوب والتخطيط المسبق له. بالإضافة للنظر في كيفية تقسيم ماهو مطلوبٌ إلى فئاتٍ بسيطةٍ يمكن إعادة استخدامها بسلاسةٍ، على اعتبار تطبيق مبدأ ال OOP يسمح بالعمل بهياكل بيانات أفضل وقابلية إعادة الاستخدام reusability (هذا ماتبحث عنه كبرى شركات البرمجة)، وبالتالي توفير الجهد والمال على المدى الطويل.
تكثر المفاهيم البرمجية التي يجب على المبرمج الإلمام بها في حال رغبته بالدخول في عالم برمجة التطبيقات والمواقع وغيرها. بالطبع هناك لغات برمجةٍ خاصةٍ لكلّ نوعٍ من البرمجيات، لكن هناك مايجب إتقانه بغض النظر عن نوع اللغة والهدف من استخدامها. من أهم هذه الأمور البرمجة كائنية التوجه (أو غرضية التوجه Object-Oriented Programming)، أو كما هي معروفة بالتسمية الشهيرة بين أوساط المبرمجين OOP Programming.
مفهوم البرمجة غرضية التوجه
تجمع البرمجة الكائنية بين مجموعة من الخصائص (Properties) والوظائف (أو الطرق Methods) في وحدة تسمى الغرض (Object). بدورها تُنظّم هذه الكائنات (الأغراض) في فئات. تنتشر هذه البرمجة هذا على نطاق واسعٍ بين لغات البرمجة الأكثر استخدامًا مثل: Java و C ++ وPHP، على اعتبار أن هذه اللغات تساهم في تبسيط هيكل وتنظيم أقسام البرامج. ومن الشائع غالبًا استخدم المبرمجون OOP لدى حاجتهم لإنشاء برامج معقدة.
البرمجة كائنية التوجه مقابل البرمجة الإجرائية
تركز البرمجة الإجرائية على كتابة إجراءاتٍ وطرقٍ لتطبيقها على البيانات، أما البرمجة غرضية التوجه مبينة على مفهوم تشكيل أغراضٍ تحوي الإجراءات والطرق معًا. من هنا تتفوق OOP على البرمجة الإجرائية بالجوانب التالية:
- أسرع وأسهل للتنفيذ.
- تؤمن OOP بنيةً واضحةً للبرامج.
- تجعل الكود أكثر سهولةً للصيانة والتعديل والتنفيذ. كما في لغة الجافا مثلًا.
الأساسيات الأربع للبرمجة كائنية التوجه
كغيرها من المفاهيم البرمجية، تملك البرمجة غرضية التوجه مفاهيمًا أساسيةً يمكن من خلالها تحليل مبدأ العمل بها ودراستها. يجد بعض متعلمي البرمجة كائنية التوجه صعوبةً في البداية لفهمها ويشعرون ببعض التعقيد، إلا أن الفهم المستقل لكل مفهومٍ من مفاهيمها يساعد على الفهم العام البرنامج. تنقسم هذه المفاهيم إلى أربعة:
- التغليف (Encapsulation): تسعى الكائنات في كل برنامج للتفاعل والوصول لبعضها البعض، لكن قد يكون للمبرمج هدفٌ يتطلب عزلها عن بعض. لتحقيق ماسبق، يُغلِّف المبرمج كل غرض بصفوفٍ خاصة منفردة individual classes ومن هنا جاءت تسمية الميزة ب"التغليف". من خلال هذه الميزة لن تستطيع الكلاسات التفاعل والتعديل في متغيرات وتوابع غرض ما. في النتيجة يمكن للمبرمجين نسخ هذا الغرض في برامج أخرى دون القلق من تداخله مع أغراض أخرى.
- التجريد (Abstraction): يمكن النظر للتجريد على أنه امتدادٌ لميزة التغليف في البرمجة كائنية التوجه؛ حيث أنه يخفي خصائص وطرق من الكود الخارجي لجعل واجهة الأغراض أبسط. يستخدم المبرمجون التجريد لأغراضٍ مفيدةٍ متعددةٍ أبرزها عزل التعديلات التي تجرى على الكود بحيث ينحصر التأثير بالمتغيرات الحالية لدى حدوث خطأٍ ما وضمان عدم انتشار التغيير إلى الكود الخارجي.
- الوراثة (Inheritance): يمكن للمبرمجين باستخدام هذه الميزة تفادي تكرار التعليمات البرمجية المتشابهة. على سبيل المثال، تشترك عناصر كود HTML التالية: مربع نصي (Text Box)، وحقل الاختيار Select) Field)، ومربع الاختيار (Checkbox) بنفس الخصائص في طرق محددة. هنا ولتفادي تكرار الخصائص والطرق لكل عنصر من HTML ، يمكن تعريفها مرةً واحدةً في غرضٍ عام واحدٍ. لتحقيق ذلك يمكن تسمية الغرض العام على سبيل المثال HTMLElement وبالتالي ستستطيع باقي الأغراض وراثة الخصائص والطرق اللازمة منه دون الحاجة لكتابتها عدة مرات وبالنتيجة تقليل حجم الكود البرمجي.
- تعدد الأشكال (Polymorphism): تتيح هذه الميزة للمبرمجين إعادة تعريف طريقة عمل جزئية معينة ضمن البرنامج بتغيير طريقة تنفيذها أو بتغيير الأجزاء التي تُنّفذ بها.
سلبيات البرمجة غرضية التوجه
مما لا شك فيه أن البرمجة كائنية التوجه حملت الكثير من التحسينات والمرونة في كتابة البرامج وغيّرت طريقة تفكير المبرمجين بشكلٍ كبير، إلا أنها لا تخلو من بعض السلبيات وهي:
- يمكن أن تكون كتابة برنامج باستخدام OOP عمليةً مربكةً بعض الشيء ومخادعة.
- يحتاج المبرمج لتخطيطٍ كبيرٍ وخبرةٍ للبدء بتنفيذ OOP في برنامجه.
- حجم البرامج التي تستخدم البرمجة غرضية التوجه أكبر من نظيراتها في البرمجة الإجرائية.
- استكمالّا للبند السابق فإن الحجم الأكبر للبرنامج سيتطلب وقتًا أكبر للتنفيذ في بعض الأحيان.
كنتيجة يمكن الخلاص بها من مفهوم البرمجة كائنية التوجه هي أنها تتطلب التفكير في بنية البرنامج المطلوب والتخطيط المسبق له. بالإضافة للنظر في كيفية تقسيم ماهو مطلوبٌ إلى فئاتٍ بسيطةٍ يمكن إعادة استخدامها بسلاسةٍ، على اعتبار تطبيق مبدأ ال OOP يسمح بالعمل بهياكل بيانات أفضل وقابلية إعادة الاستخدام reusability (هذا ماتبحث عنه كبرى شركات البرمجة)، وبالتالي توفير الجهد والمال على المدى الطويل.