اذهب إلى المحتوى
  • 0

ما الفرق بين البرمجة الوظيفية Functional Programming والبرمجة كائنية التوجه Object Oriented Programming؟

Hassan Eldeeb

السؤال

Recommended Posts

  • 1

البرمجة الوظيفية Functional Programming

  • العنصر الأساسي فيها هو التابع، يستقبل البيانات ويعالجا وقد يعيد قيمة ما نتيجة المعالجة
  • العنصر الثاني فيها هو البيانات، فهي تنتقل من تابع إلى آخر بحسب واجهة متفق عليها بين التوابع (مثلا نص، مصفوفة، أعداد، بنية معطيات محددة)
  • تمتلك التوابع خصائص معينة، مثل التركيب بينها لإنشاء تابع جديد، التوابع العليا وهي التي تولد توابع تعمل بطرق مختلفة

للقراءة أكثر راجع المقال التالي:

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

  • العنصر الأساسي فيها هو الكائن، وظيفته تغليف حالة ما وتوفير واجهة للتعامل مع تلك الحالة
  • العنصر الثاني فيها هو الرسائل التي ترسل بين الكائنات، فكل كائن يمكنه استدعاء تابع من كائن آخر، فتتولد شبكة من الكائنات المرتبطة ببعضها ويمكنها العمل معًا لغرض ما
  • يتم توليد الكائنات من خلال الصنف Class، فهو يعد معمل لتلك لكائنات
  • للأصناف خصائص مثل الوراثة وهي إعادة تعريف بعض التوابع والمتغيرات من صنف ضمن صنف آخر
  • الخصائص الثلاثة الرئيسية لهذا النوع من البرمجة هي :
    • التغليف Encapsulation: يمكن للكائن تغليف حالة ما داخله، أي لا يمكن الوصول إليها ولا التعامل معها إلا عن طريق الكائن
    • تعدد الأشكال Polymorphism: يمكن للكائن أن يعامل بأكثر من شكل، حيث يمكنه تضمين أكثر من حزمة من التوابع، ويمرر للكائنات الأخرى التي تحتاج لحزمة ما من تلك التوابع
    • الوراثة Inheritence: يمكن للصنف وراثة توصيف وتضمين صنف آخر، أي إعادة تعريف توابع بتضميناتها (أو فقط شكلها) ضمنه

يمكنك القراءة أكثر في المقال التالي:

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

oop

  • كل شئ في الoop عبارة عن objects حيث يجب وجود class وتأتي منه objects وكل صنف يمكنه الوراثة من صنف أخر بحيث يأخذ منه خصائصه والدوال الخاصة به
  • كل كائن يحتوي على خصائص attributes و bhafiors عبارة عن دوال
  • الدوال تنقسم إلى نوعين pure functions تقوم بإستقبال مُعطيات وتقوم بإخراج معطيات من دون التعديل على خصائص على الكائن, بينما الدوال الغير نقية non-pure functions تقوم بالتعديل على خصائص الكائنات
  • مثال على شفرة برمجية للoop 
    public class Person {
      private String name; 
    
      public String getName() {
        return name;
      }
    
      public void setName(String newName) {
        this.name = newName;
      }
    }

    هنا نلاحظ وجود الدالة getName التي تقوم بإرجاع إسم الشخص, والدالة setName التي هي دالة غير نقية حيث تقوم بالتعديل على خاصية الإسم لدى الشخص 

functional programming

  • الدوال في الfunctional programming كلها نقية حيث تقوم بإستقبال المعطيات وإخراج ناتج دون وجود side effects أي أنها لا تقوم بالتعديل أو تغيير أحد القيم الموجودة لدينا

  • تمتاز أنها declarative أي أن نقوم بمعالجة البيانات عبر مجموعة من الدوال الجاهزة بتجميع تلك الدوال معًا دون الإحتياج إلى كتابة الشفرة الخاصة بكل دالة منهم

  •  List<Integer> numbers
                = Arrays.asList(1,2,3,4,5);
     
            numbers.forEach(number
                            -> System.out.print(
                                number + " "));

    كما تلاحظ في أننا هنا نقوم فقط بأخذ مجموعة من القيم الموجودة في مصفوفة ونقوم بالمرور عليها وطباعة العناصر دون أن نقوم بالتغيير في القيم الأصلية وكل سطر في البرنامج عبارة عن دالة

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

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


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

 اما البرمجة الوظيفية functional programming فهي جيدة عندما يكون لديك مجموعة ثابتة من الأشياء  ومع تطور شفرتك فإنك تضيف بشكل أساسي عمليات جديدة على الأشياء الموجودة يمكن تحقيق ذلك عن طريق إضافة وظائف جديدة تحسب مع أنواع البيانات الموجودة 

من الممكن أيضًا استخدام كل من نماذج البرمجة وفقًا لاحتياجاتنا الخاصة نظرًا لأن لدينا لغات مثل python و java وما إلى ذلك تدعم كلا من المفاهيم الموجهة للكائنات oop وتعمل أيضًا بالبرمجو الوظيفية functional programming

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...