تجربتي مع (Object Oriented Programming (OOP

  • مجهول

هل شعرت يوماََ أنك تائِه من كثرة الأكواد المستخدمة في برنامجك ؛ انا مثلك ي صديقي كنت أعاني من هذه النقطة ، أكود كثيرة بطريقة غير منظمة تحتمل الكثير من الأخطاء والكثير من الصعوبة في الوصول إليها، دعني أخبرك عن الأسلوب الأمثل لبناء برمجيات قوية بأسلوب منظم ومرتب يسهل التعامل معها ويسهل الرجوع إليها فيما بعد .

ما هي البرمجة الكائنية التوجه (Object Oriented Programming (OOP

البرمجة كائنية التوّجه ( OOP) هي إحدى نماذج البرمجة الحتمية Imperative Programming التي تتيح للمبرمج إنجاز الوظيفة المطلوبة عبر تحديد مجموعةٍ من الإجرائيات والخطوات المنطقية. فهي تعتمد بالأساس على إنشاء علاقة ارتباط عضوي بين البيانات والمتحولات من جهة، وبين التوابع والإجرائيات من جهةٍ أخرى، وذلك بخلاف البرمجة الإجرائية التي تعتمد على تنفيذ المهمة المطلوبة عبر إجرائياتٍ لا تتضمن أي علاقة أو ارتباط عضوي بين المتحولات، التوابع وبنى التحكم.

الأعمدة الأساسية للبرمجة كائنية التوجه Pillars of OOP

تعتمد البرمجة كائنية التوجه، علي 4 مفاهيم أساسية تمثل الخصائص الفريدة لهذا النموذج البرمجيّ والأعمدة الأساسية لبنائه ، وهذه المفاهيم هي:

  • التغليف Encapsulation: هو القدرة على جمع البيانات، المتحولات، التوابع والبنى المختلفة ضمن بنيةٍ واحدة هي الكائن (الغرض)، وهذا يعني أنه يمكننا النظر للكائن على أنه “الغلاف” الذي يجمع بداخله العديد من الأعضاء المختلفة والتي تمتلك علاقاتٍ مع بعضها البعض.
  • التجريد Abstraction: هو تحديد مدى ظهور البيانات التي تنتمي للكائن، بحيث يمكن جعل بعضها “عام Public” والآخر “خاص Private“، وهذا يعني أنه يمكن التعامل مع الأعضاء العامة عبر توابع وإجرائيات خارجية لا تنتمي للكائن نفسه، بينما لا يمكن التعامل مع الأعضاء “الخاصة” إلا من قبل التوابع والإجرائيات المعرّفة داخل الكائن نفسه.
  • الوراثة Inheritance: هي المفهوم الذي يتيح إنشاء كائناتٍ “ترث” صفات كائناتٍ أخرى . كمثالٍ بسيط، يمكننا تعريف صف عام يمثل الأشكال الهندسية Geometrical Shapes والذي يمتلك أعضاءً هي الطول، العرض، المحيط والمساحة. من هذا الصف نستطيع أن “نرث” صفًا آخر هو الدائرة، والذي يمثل أيضًا شكلًا هندسيًا وبالتالي فإنه “سيرث” كافة الصفات الخاصة به، إلا أنه شكل هندسي فريد إذ يمتلك خاصية أخرى هي نصف القطر. عندما نقوم بإنشاء صف الدائرة اعتمادًا عبر اشتقاقه من صف الأشكال الهندسية، فإننا بعالم البرمجة نقوم بـ “توريث” صفات من صفٍ إلى آخر.
  • تعدد الأشكال Polymorphism: هو إعادة استخدام نفس التابع أو العملية ولكن لغاياتٍ وأهدافٍ مختلفة، وبالتالي فإن التابع قد أصبح له أشكال (وجوه) متعددة. لو أردنا أن نأخذ مثالًا من الحياة الواقعية، فإنه يمكن لأي رجل أن يكون أب، زوج، موظف وهاوي قراءة بنفس الوقت، وبالتالي فإن هذا الرجل يمتلك “أشكالًا” متعددة تختلف بحسب السياق والظروف التي يتواجد بها. تعدد الأشكال في البرمجة كائنية التوّجه يمكن أن يتم عبر مفهوم التحميل الزائد Overloading، والذي بدوره ينقسم للتحميل الزائد للعمليات Operators-Overloading والتحميل الزائد للتوابع Functions Overloading. التحميل الزائد للعمليات أو التابع هو الإجرائية التي تتيح إعادة استخدام عملية رياضية ما (مثل الجمع) لتنفذ أهدافًا مختلفة بحسب السياق الذي تأتي ضمنه، وكذلك الأمر تمامًا بالنسبة للتوابع. يأخذ مفهوم تعدد الأشكال نمطًا آخر يرتبط بالصفوف والكائنات المشتقة عبر الوراثة، والتي تتيح استخدام الصف المشتق Derived Class وكأنه الصف الأساسيّ Base Class الذي ورث بعض صفاته منه.

ما هي تجاربكم مع البرمجة كائنية التوجية وكيف استفدتم منها؟ وما هو إنطباعكم عنها ؟

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

دعني أخبرك عن الأسلوب الأمثل لبناء برمجيات قوية بأسلوب منظم ومرتب يسهل التعامل معها ويسهل الرجوع إليها فيما بعد .

مما لا شك فيه أن البرمجة الكائنية مهمة ومفيدة في العديد من التطبيقات ولقد أدهشتني عبقريتها عند التعرف عليها لأول مرة وفوائدها عن الطريقة العادية. ولكنني أعترض على لفظ "الأمثل" فلو وجد هذا المصطلح في عالم البرمجة لاختفت منذ زمن!

لذلك في رأيي على المستخدم أن يعرف جميع الطرق. ماهي مميزاتها ماهي عيوبها وكيف يتمكن من الاستفادة منها فليس دائمًا يكون استخدام الكائنات هو الحل.

وعلى أية حال فهناك أربعة أنواع لذلك:

  1. Procedural Programming: وهي الطريقة العادية التي يبدأ بها معظم من يتعلمون المجال حيث يقسم الكود إلى مجموعة من الأجزاء كل جزء يقوم بعمل معين وهذا عن طريق استخدام الدوال واستدعائها بداخل الكود.
  2. Object-oriented Programming: وهذا ما ذكرته مشكورًا في مساهمتك حيث نستخدم مجموعة من الكائنات للقيام بالعمل بشكل أسهل.
  3. Functional Programming: وهذه طريقة لا يعرفه الكثيرون ولكن لها الكثير من المميزات حيث أنه يقسم الكود فيها و هنا يتم تقسيم المشكلة أو الحل المطلوب إلى وحدات وظيفية. تؤدي كل وحدة مهمتها الخاصة وتكون مكتفية ذاتيًا بحيث يمكن اعتبارها برنامجًا صغيرًا. ثم يتم تجميع هذه الوحدات معًا لتشكيل الحل الكامل.
  4. Logical programming: هنا تكون الوحدات منطقية بدل من أن تكون وظيفية.

ولكن بالطبع لا أختلف على أنه لولا البرمجة الكائنية لتوقف التطور منذ زمن طويل حيث سيكون من الصعب جدًا قراءة وتعديل أكواد الآخرين بل الإضافة عليها وإعادة استخدامها أيضًا.

لكن البرمجة كائنية التوجه مشهورة للغات محددة مثل جافا، وسي شارب، وروبي، وبايثون وphp,

ما أقصده أنها لن تكون مناسبة لباقي اللغات

بالطبع ليس كل لغات البرمجة متبعة لأسلوب البرمجة كائنية التوجة ويرجع ذلك إما لقصور هذه اللغة او إنغلاق هذه اللغة علي نموذج معين من نماذج البرمجة القديمة ؛ وفي كلتا الحالتين ،أنصحك بالإبتعاد عن هذه اللغة مباشرة وتعلم لغة برمجية أخري : لأنها بكل بساطة لن تساهم في مواكبة التحديثات "الجبارة" حالياً في مجال البرمجة .