Paradigmes de programmation
Programmation impérative
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
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 , 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 :
- qui permet d’appliquer des transformations ;
- qui permet d’appliquer des filtres ;
- etqui 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
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 .
- Le paramètre 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 . * 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.