Paradigmes de programmation

information-icon

Les premières épreuves du bac 2024 sont pour bientôt ! Consulte notre dossier sur le contrôle continu et le calcul des notes de ton bac pour maximiser ta préparation pour les révisions à ton examen 💪

Programmation impérative

  • Dans ce cours nous nous intéressons aux styles, ou paradigmes de programmation, qui sont différentes manières de penser les problèmes et d'écrire des programmes informatiques pour les résoudre.
  • Le paradigme impératif indique précisément (étape par étape) comment une tâche doit être menée à bien.
  • Il fait, comme les machine de Turing, appel à la notion d'état.
  • Les langages assembleurs sont naturellement basés sur le paradigme impératif. On trouve également C, C++, Java ou Python parmi les langages inspirés du paradigme impératif.
  • Le paradigme de programmation procédurale est rattaché au style impératif.
  • Il consiste à créer des procédures que l’on appelle pour obtenir l'exécution de courtes séquences d'instructions.
  • Ce découpage en procédures facilite le réemploi de portions de code et améliore la maintenabilité des programmes.
  • Parmi les langages basés sur le paradigme procédural figurent C, C++, LISP, PHP et Python.
  • La programmation impérative consiste en une succession d'étapes entraînant des modifications d'état.

Programmation fonctionnelle

  • La programmation fonctionnelle se rapproche du traitement mathématique par équations mathématiques.
  • Les entrées sont traitées pour fournir un résultat en sortie, sans conservation d'état interne ni mutation de données.
  • En programmation fonctionnelle, une fonction ne doit pas modifier d'éléments extérieurs à son environnement local.
  • Dans le cas contraire elle produit ce qu'on appelle un effet de bord.
  • Si la variable nombres, extérieure à la fonction, est modifiée à chaque appel de fonction, elle constitue un effet de bord.
  • Pour l'éviter on redéfinit la fonction afin qu'elle effectue une copie de la liste et travaille uniquement sur cette copie.
  • Ainsi la liste originale passée en argument n'est pas modifiée par la fonction.
  • Les expressions lambda sont basées sur le lambda-calcul conceptualisé par Alonzo Church.
  • Contrairement aux fonctions définies classiquement, les expressions lambda ne peuvent pas contenir d'instructions et se limitent à des expressions.
  • Elles peuvent toutefois comporter plusieurs paramètres en entrée.
  • Les expressions lambda permettent aussi de créer des fonctions anonymes, dépourvues de noms, destinées à être utilisées ponctuellement.
  • Trois fonctions complémentaires de traitement typiques de la programmation fonctionnelle :
  • map() qui permet d’appliquer des transformations ;
  • filter() qui permet d’appliquer des filtres ;
  • et reduce() qui permet d’appliquer des réductions.
  • Ces fonctions prennent en premier argument une fonction qui sera appliquée à chacun des éléments individuels composant le second argument.
  • Voici quelques langages orientés programmation fonctionnelle : Sccala, LISP, OCaml, Haskell, Python, C++, Ruby ou encore Java.
  • La programmation fonctionnelle s'articule autour de fonctions de traitement qui n'entraînent pas de mutation de données et ne conservent pas d'état.

Programmation objet

Dans ce paradigme :

  • les données rattachés aux objets sont appelées attributs ou propriétés ;
  • les procédures ou fonctions rattachées aux objets sont appelées méthodes.
  • On définit comment les objets de la classe sont initialisés avec la méthode spéciale __init__().
  • Le paramètre self fait référence à l'objet appartenant à la classe (instance), lequel peut aussi posséder différents attributs.
  • Les valeurs des attributs sont spécifiques à chaque instance ou objet de la classe.
  • On définit ensuite des méthodes applicables à chacun des objets : elles peuvent créer, accéder, modifier, ou supprimer des attributs de l'objet considéré.
  • L'instanciation consiste à créer un objet appartenant à une classe donnée.
  • La création d'un objet s'effectue depuis la classe, en passant les arguments attendus au niveau de la méthode __init__(). * Les méthodes sont ensuite accessibles au niveau de l'objet nouvellement créé.
  • L'encapsulation désigne le regroupement des données et des procédures au sein de l'objet.
  • La programmation objet comporte deux autres notions essentielles :
  • l'héritage qui consiste à créer des sous-classe héritant des propriétés de la classe parente ;
  • et le polymorphisme qui consiste à pouvoir adapter le comportement d'une méthode d'une classe à l'autre.
  • Le principe d'héritage nous offre la possibilité de redéfinir uniquement certaines caractéristiques en fonction des besoins, et de conserver toutes les autres.
  • Parmi les langages de programmation orientée objet, on compte C++, Javascript, Python, Java, Ruby ainsi que SmallTalk.