ما هي البرمجة الـ Procedural, Functional و الـ OOP و ما الفرق بينها ؟

ما هي البرمجة الـ Procedural, Functional و الـ OOP و ما الفرق بينها ؟

إستهلاكك لمادة البرمجة يفتح أبواباً كثيرة للتعرف على أشياء جديدة في هذا المجال، سواء من ناحية اللغات البرمجية او التقنيات البرمجية و أيضا البرامج المستخدمة في مجال البرمجة بشكل عام، و قد تجد في شروحات بعض اللغات البرمجية ان هذه اللغة مثلا مجرد لغة برمجة Functional، او ان هذه اللغة هي لغة برمجة OOP إختصار لعبارة Object Oriented Programming ... لكن هل تسائلت يوما لما هذا التقسيم؟ ما الذي يعنيه لغة برمجة Fonctional ؟ او لغة برمجة Procedural ؟ او Object Oriented  Programming ؟ 
فيما يلي شرح لكل الأقسام الثلاث ( و قسم إضافي اخر في مجال البرمجة ) و الشرح بالتفصيل اللغات التي تنتمي لهذا النوع و أهم الفروقات بين كل نوع. 

- الـ Functional Programming : 

في البرمجة بشكل عام، يوجد مجموعة من القواعد التي يجب عليك إتباعها من أجل الحصول على النتيجة المرغوبة لعل أهمها إختيار الوسيلة الأسهل و الأمثل للقيام بالعملية البرمجية، كتعريف للـ Functional Programming فهي البرمجة التي تسمح لك بإدراج مجموعة من القواعد او المدخلات او الـ Arguments ثم الحصول على نتيجة (Return) بناءً على طرقة التعامل مع تلك الـ Argurments، و يتم إستخدامها في إجراء العمليات الحسابية او التعامل مع أي شيئ يحتاج الى إسترجاع قيمة معينة بعد معالجة مجموعة من البيانات.
إن كنت مبرمجاً من قبل، فأنت تدرك ان عمل الـ Function ( الدالة ) بسيط، إذ يأخذ مجموعة من الـ Arguments ثم يقوم بإعادة قيمة Return و في الوسط نجد مجموعة من الـ Instructions، من هنا إقتبست أيضا الـ  Functional Programming إسمها. 

كل اللغات البرمجية تقريبا تأتي متضمنة خواص الـ Functional Programming و ذلك لكونها الهيكل الأساس للغة البرمجية، اما عملها فيتجلى في إجراء العمليات الحسابية، المقارنات و أيضا الحلقات التكرارية، فمثلا، إن اردت إجراء عملية حسابية، فأنت ببساطة تقوم بخلق بعض المتغيرات و تمرير القيم الخاصة بها و إجراء العملية ثم إعادة النتيجة. 
اما بعض اللغات البرمجية التي تعتمد على الـ Functional Programming فهي كثيرة، بل تقريبا كل اللغات منها الـ C، بايثون، الروبي، Haskell. 
توجب هنا الإشارة الى ان بعض اللغات البرمجية مثل Clojur او Erlang تعتمد على الـ Functional Programming ف إجراء عمليات حسابية كبيرة جدا، ببساطة يمكن لبعض اللغات و إن كانت تتضمنها الا تقوم بعمليات بهذه الكيفية او القوة، مثل الجافاسكربت مثلا. 

ما هي البرمجة الـ Procedural, Functional و الـ OOP و ما الفرق بينها ؟

- الـ Procedural Programming : 

يمكنك إلتماء عبارة Procedure في إسم هذا النمط البرمجي، و يُقصد بها تعريفا باللغة العربية " الإجراء "، ان كانت الـ Functional Programming تقوم بقراءة التعليمات سطراً بسطر و تنفيذها بهدف الخروج بنتيجة في الأخير، فإن الـ Procedural Programming جاءت لحل مشكلة تشغيل كل قطعة من الكود دفعة واحدة، و الإعتماد فقط على تشغيل جزء معين من شفرة برمجية حسب الطلب / الإجراء. 
سيكون أسهل بالنسبة لي - كمبرمج - ان اطور مجموعة من الشفرات البرمجية ( لنقل مثلا كود يقوم بحساب مساحة مربع، و كود يقوم بحساب مساحة مستطيل، ثم الدائرة ) و بعد تشغيل البرنامج لا اقوم بتشغيل كل الأكواد دفعة واحدة، بل اقوم بتشغيل الكود الفرعي فقط حين يطلبه المستخدم، فإن نقر المستخدم على زر الحصول على مساحة المربع، اقوم بتشغيل الكود الخاص بذلك و أقوم بإعطاء النتيجة، بينما بقية الكود لا تشتغل الا عند الطلب او الإجراء. 

في لغات برمجية متقدمة، قد تجد انها تستخدم ما يسمى بالـ Routines او الـ Subroutines او Methods او حتى الـ Procedure، بحيث تقوم بتضمين قطعة كود معينة في جزء معين من الكود الرئيسي و تقوم بتشغيله فقط عند الحاجة مثل النقر على زر او حدوث Event معين. 
يوجد العديد من اللغات البرمجية التي تعتمد عليها مثل الـ C، البايثون، الجافا و Php و غيرها . 

- الـ OOP Programming : 

الـ OOP، و هي إختصار لعبارة Object-Oriented Programming لكن سنرمز لها في بقية هذا المقال بالـ OOP، يعتمد في الأساس هذا النمط على تحويل الكود البرمجي او المشروع البرمجي على شكل كائنات (Objects) لكل كائن خواصه و تعريفاته الخاصة، و يمكن التلاعب بهذه الكائنات سواء أثناء إنشائها عن طريق ما يسمى بالـكلاس Class او بعد إنشائها بإستخدام الـ Objects، يتم التعامل مع مجموعة كبيرة من التقنيات الوسطية في الـ OOP و أساسها أربع تقنيات و هي : Inheritance و Encapsulation و الـ Abstraction و أخيرا الـ Ploymorphisme . 

بالنسبة لإستخدامات الـ OOP، فهي مختلفة قليلا عن إستخدامات كل من الـ Functional التي تسعى لإنجاز المهام الحسابية، او الـ Procedural التي تسعى لمعالجة المهام الإجرائية، الهدف من الـ OOP هو تشكيل مشروع برمجي مهيكل بطريقة جيدة، بحيث يتبع نمطاً معينا من التصميم الهيكلي التي تسمح لنا بتعديله، إضافة مميزات جديدة، حماية البيانات و المعطيات و تسهيل التعامل مع المشروع البرمجي، فإن كان لديك مشروع برمجي كبير نسبيا و تريد صناعته بطريقة لا تربكك، و بإحترافية، فعليك تحليله ثم إستخراج الكائنات الموجودة في ذلك المشروع ( مثلا الزبون، المنتج، نوع المنتج ... ) هذه كائنات، ثم نقوم بإعدادا كلاسات خاصة بها بإتباع القواعد الأساسية في صناعتها (Getters, Setters, Constructors, Methods ...)، و أثناء إجراء أي عملية و لنقل مثلا شراء منتج A من طرف الزبون 1، نقوم فقط بخلق الكائنين و إعطاء مميزات كل واحد ثم تسجيلها. 
اما بالنسبة للغات البرمجية التي تدعم الـ OOP فهي كثيرة منها : Java, C# , Ruby, Php . 

- ما الفرق بين الأنواع الثلاث ؟ 

من خلال شرحها يمكنك إستنباط الفرق بينها، يمكننا ان نجد لغة برمجة تدعم الأنواع الثلاث ( مثل جافا مثلا ) او لغات برمجة تدعم فقط إثنتين او واحدة فقط من هذه الأنواع، و يختلف الإستخدام حسب الرغبة، لكن معظم اللغات البرمجية حاليا أصبحت تدعم التقنيات الثلاث.
تسمح لك الـ Functional بإستخدام التقنيات الحسابية في البرمجة بشكل عام و تسهيل التعامل معها عن طريق مجموعة من الأوامر و الأسطر البرمجية، بيما تسمح لك الـ Procedural بالتعامل مع جزء واحد من الكود البرمجي (Block of Code) حسب نوع الطلب المرغوب فيه من طرف المستخدم او حتى المبرمج، اما الـ OOP فتقنياتها تعتمد على هيكلة المشاريع البرمجية الكبيرة بغية تطوير، تحديث، و إضافة مميزات جديدة للمشروع البرمجي دون لبس او لخبطة في المشروع بأكمله. 

شاركه على :