الـ Object Oriented Programming أو البرمجة كائنية التوجه، واللي بنختصرها بـ OOP، هي عبارة عن Programming Paradigm (نمط أو نموذج في البرمجة). النمط ده تم تقديمه لأول مرة في أواخر الخمسينات وأوائل الستينات.

الموضوع بدأ عن طريق مجموعة من الباحثين في جامعة MIT، وكان قائدهم شخص اسمه John McCarthy. جون مكارثي هو اللي طور لغة الـ Lisp، وقدم فيها مفهوم مهم جداً وهو “Data as first-class citizen”، ودي كانت الشرارة الأولى اللي انطلقت منها الـ OOP.

Evolution of OOP (60s - 90s)

1960s - 1970s:

بين فترة الستينات والسبعينات، ظهرت مجموعة من لغات البرمجة زي Simula و Smalltalk. اللغات دي طورت واشتقوا منها مبادئ الـ OOP الأساسية زي الـ Class والـ Object. لكن، في الوقت ده، اللغات دي مكانش ليها انتشار واسع بشكل أكاديمي أو تجاري.

1980s: C++

في التمانينات، حصلت نقلة نوعية بتقديم لغة C++. اللغة دي تبنت مفاهيم الـ Object Oriented (زي الـ Classes والـ Objects) بشكل قوي.

ده خلى المطورين في الوقت ده يقدروا يستخدموها عشان يبنوا أنظمة Software معقدة وضخمة، وعشان كده اللغة دي لاقت استحسان كبير جدًا في الـ Industry وصناعة البرمجيات.

1990s: Java

في التسعينات، زادت شهرة الـ OOP بشكل أكبر بكتير، وده بسبب تقديم لغة Java. الجافا كانت مصممة خصيصًا للاستخدام بداخل بيئة الشبكات وبيئة النظم الموزعة (Distributed Systems)، وده ساعد في ترسيخ الـ OOP كنمط أساسي.

Nowadays:

حاليًا، الـ OOP منتشرة بكثرة كنمط ونموذج في البرمجة، ومدعومة من أشهر لغات البرمجة اللي بنستخدمها النهاردة زي:

  • C#
  • Python
  • Ruby
  • وغيرهم كتير.

Other Programming Paradigms

هل فيه أنماط أو نماذج (Paradigms) تانية للبرمجة غير الـ OOP؟ أكيد فيه. خلينا نستعرض أهمهم:

1. Procedural Programming

نموذج البرمجة الإجرائية. النوع ده بيقوم بشكل أساسي على استخدام الـ Functions عشان ينظم الكود.

  • مثال: لغة C.

2. Functional Programming

النوع ده بيقوم على الـ Mathematical Functions (الدوال الرياضية). بيعزز مفاهيم زي:

  • الـ Immutability (عدم القابلية للتغيير).
  • الـ Recursion.
  • الـ Higher-Order Functions.
  • أمثلة: لغات زي Haskell و Lisp.

3. Logic Programming

نموذج البرمجة المنطقي، وده بيقوم على الـ Formal Logic (المنطق الرسمي) واستخدام الـ Declarative Approach (الأسلوب التصريحي) في البرمجة.

  • مثال: لغة Prolog.

4. Scripting Programming

نموذج البرمجة النصي. بيعتمد على كتابة Scripts أو Small Code Snippets (أجزاء صغيرة من الكود) عشان تقوم بـ Automation (أتمتة) لـ Tasks معينة وكبيرة.

  • أمثلة: لغات زي Python، Perl، و JavaScript.

5. Event-Driven Programming

نموذج البرمجة اللي بتقوده الأحداث. الـ Paradigm ده بيستخدم عملية التطوير بناءً على التفاعلية والاستجابة. اللي بيحدد سير البرنامج هو مجموعة الأحداث (Events) اللي بيقوم بيها الـ User.

  • أمثلة: JavaScript و C#.

6. Reactive Programming

نموذج البرمجة التفاعلي. بيسمح بإنشاء أنظمة صغيرة بتتفاعل مع التغييرات في الـ Inputs (المدخلات)، عن طريق نشر التغييرات دي تلقائيًا لجميع أجزاء النظام.

  • مثال: مكتبة ReactiveX.
mindmap
  root((Programming Paradigms))
    OOP
      C#
      Java
      Python
    Procedural
      C Language
    Functional
      Haskell
      Lisp
    Logic
      Prolog
    Scripting
      Python
      JavaScript
    Event-Driven
      JavaScript
      C#
    Reactive
      ReactiveX

Multi-Paradigm Languages & C#

زي ما لاحظنا، فيه بعض لغات البرمجة بتدعم Paradigm واحد فقط، والبعض الآخر بيدعم أكتر من نمط (Multi-Paradigm)، زي الـ JavaScript والـ C#.

في الكورس ده، هنغطي مفاهيم الـ OOP باستخدام لغة C#.

ليه اخترنا الـ C#؟

  1. لأنها General Purpose (متعددة الأغراض).
  2. لغة High Level.
  3. بتعمل Support لأكتر من Paradigm (بما في ذلك الـ OOP، Event-Driven، Functional features، وغيرها).