Description of the course:

This course introduces the major programming paradigms that have shaped modern software development. Students will study imperative, object-oriented, functional, logic, descriptive, concurrent, reactive, and emerging paradigms, understand their theoretical foundations, compare their strengths and limitations, and learn to select the most appropriate paradigm for solving different classes of software engineering problems. Practical programming exercises will expose students to several programming languages representing different paradigms

Target Audience

First-year Master’s students (M1), Software Engineering specialization

Objectives

By the end of this course, students will be able to:

  • Explain the theoretical foundations of the main programming paradigms.
  • Identify and describe the key concepts specific to each paradigm, including imperative, object-oriented, functional, and logic programming.
  • Analyze a given problem and compare the suitability of different programming paradigms for solving it.
  • Justify and select the most appropriate programming paradigm according to the context, constraints, and requirements of a given problem.
  • Apply and implement programming solutions using different languages and programming styles associated with each paradigm.
Knowledge (Savoir)
  • Explain the theoretical foundations of the main programming paradigms.
  • Identify and describe the key concepts of each paradigm.
Skills (Savoir-faire)
  • Analyze a problem and compare the suitability of different programming paradigms.
  • Implement solutions using different programming languages and styles associated with each paradigm, such as C, Java, Python, Haskell, and Prolog.
  • Justify and select the most appropriate programming paradigm for a given problem.
Professional Attitudes (Savoir-être)
  • Develop a professional and reasoned approach to selecting appropriate programming tools and paradigms.
  • Work effectively in teams during projects and case studies, while considering software quality, maintainability, and scalability.

وصف المقياس

يقدّم هذا المقياس مقدمة حول أهم نماذج البرمجة (Programming Paradigms) التي أسهمت في تشكيل وتطوير هندسة البرمجيات الحديثة. يتعرّف الطلبة على نماذج البرمجة الإجرائية/الضرورية (Imperative)، الموجّهة للكائنات (Object-Oriented)، الوظيفية (Functional)، المنطقية (Logic)، الوصفية (Descriptive)، المتزامنة (Concurrent)، التفاعلية (Reactive)، بالإضافة إلى بعض النماذج البرمجية الناشئة.

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

الفئة المستهدفة

طلبة السنة الأولى ماستر (M1)، تخصص هندسة البرمجيات (Software Engineering).

الأهداف

في نهاية هذا المقياس، سيكون الطالب قادرًا على:

  • شرح الأسس النظرية لأهم نماذج البرمجة.

  • تحديد ووصف المفاهيم الأساسية الخاصة بكل نموذج، بما في ذلك البرمجة الضرورية، والموجّهة للكائنات، والوظيفية، والمنطقية.

  • تحليل مشكلة معينة ومقارنة مدى ملاءمة نماذج البرمجة المختلفة لحلها.

  • تبرير واختيار نموذج البرمجة الأنسب وفقًا للسياق والقيود والمتطلبات الخاصة بالمشكلة المطروحة.

  • تطبيق وتنفيذ حلول برمجية باستخدام لغات برمجة وأساليب مختلفة مرتبطة بكل نموذج برمجي.

المعارف (Savoir)
  • شرح الأسس النظرية لأهم نماذج البرمجة.

  • تحديد ووصف المفاهيم الأساسية لكل نموذج برمجي.

المهارات (Savoir-faire)
  • تحليل مشكلة ومقارنة مدى ملاءمة نماذج البرمجة المختلفة لحلها.

  • تنفيذ حلول باستخدام لغات برمجة وأساليب مختلفة مرتبطة بكل نموذج، مثل C وJava وPython وHaskell وProlog.

  • تبرير واختيار نموذج البرمجة الأنسب لمعالجة مشكلة معينة.

المواقف والسلوكيات المهنية (Savoir-être)
  • تطوير منهجية مهنية ومنطقية في اختيار أدوات البرمجة والنماذج البرمجية المناسبة.

  • العمل بفعالية ضمن فرق أثناء إنجاز المشاريع ودراسة الحالات، مع مراعاة جودة البرمجيات، وقابليتها للصيانة، وقابليتها للتوسع.