1 Paradigmes des langages de programmation : SUPPORT DE COURS Introduction (langages de programmation L.P) Langage ? (Déf. Larousse) Capacité, observée chez tous les hommes, d'exprimer leur pensée et de communiquer au moyen d'un système de signes vocaux et éventuellement graphiques (la langue). Tout système structuré de signes non verbaux remplissant une fonction de communication : Langage gestuel. Langage animal. Ensemble de caractères, de symboles et de règles qui permettent de les assembler, utilisé pour donner des instructions à un ordinateur. 2 Introduction (langages de programmation L.P) Langage de programmation ? (quelques déf. possibles) Déf.1 : Notation systématique avec laquelle on peut décrire un d’étapes nécessaires à une machine, pour ensemble l’accomplissement d’une tâche donnée (résolution d’un problème) Déf.2 : Formalisme artificiel permettant d’exprimer des algorithmes, tout en étant un langage pouvant être étudié en utilisant des outils/concepts propres à la linguistique Déf.3 : Notation pour la description d’algorithmes et structures de données pouvant être implémentée sur ordinateur 3 Introduction (langages de programmation L.P) Langage de programmation ? (différents aspects, niveaux de description) 1. Syntaxe (ou grammaire) 2. Sémantique 3. Pragmatique (aspect pratique) 4 Introduction (langages de programmation L.P) Langage de programmation ? (différents aspects, niveaux de description) 1. Syntaxe (ou grammaire) : « Forme du L.P », On définit d’abord les symboles du langage (alphabet), puis les mots ou unités lexicales du langage (séquence de symboles de l’alphabet), puis les phrases du langage (séquence de mots du langage) Répond à la question ‘cette phrase du langage est elle correcte ? ’ 5 Introduction (langages de programmation L.P) Langage de programmation ? (différents aspects, niveaux de description) 2. Sémantique : « Sens du L.P» , Répond à la question ‘quel est le sens (signification) d’une phrase correcte du langage?’ Mets en relation par exemple, une phrase correcte du langage et une fonction de calcul mathématique 6 Introduction (langages de programmation L.P) Langage de programmation ? (différents aspects, niveaux de description) 3. Pragmatique (aspect pratique) : « implémentation du L.P » Répond à la question « comment le sens d’une phrase correcte est il traduit en calcul/traitement ? » La traduction du sens d’une phrase correcte en traitement peut varier dans le temps et n’est pas définitivement fixée lors de la définition du L.P Le choix entre différents modes de passage de paramètres aux fonctions ou bien l’utilisation de différents types de boucles itératives sont des aspects pratiques du L.P (diff. Trad. pour un même sens) 7 Introduction (langages de programmation L.P) Pourquoi étudier les L.P? 1. Augmente la capacité d’expression d’idées (plus complexes); en ayant des connaissances sur des concepts appartenant à d’autres L.P, le programmeur n’est plus limité aux caractéristiques d’un seul L.P 2. Augmente les possibilités de choix d’un langage approprié pour un problème donné 3. Augmente la capacité d’apprentissage de nouveaux L.P 8 Introduction (langages de programmation L.P) Pourquoi étudier les L.P? 4. Améliore la compréhension des différentes implémentations de concepts dans les différents L.P, permettant une meilleur utilisation de ceux-ci 5. Meilleurs utilisation/maîtrise des L.P supposés déjà connus 6. Permet de faciliter la création de nouveaux L.P et contribue de façon générale, au développement du domaine informatique 9 Introduction (langages de programmation L.P) Domaines des applications informatiques et leurs L.P associés Applications scientifiques (FORTRAN & ALGOL60) o Priorité pour l’efficacité du programme o Structures de données peu complexes Applications du monde des affaires (COBOL) o Facilité de création de rapports riches et détaillés o Facilité de manipulation des nombres décimaux et données de type caractères Intelligence artificielle (LISP & PROLOG) o Manipulation de données symboliques et non pas numériques o Listes chainées à la place de tableaux 10 Introduction (langages de programmation L.P) Domaines des applications informatiques et leurs LP associés Programmation système (PL/S, EXTENDED ALGOL, C) o Efficacité d’exécution (temps/ressources) o Inclure des possibilité d’accès de bas niveau à des dispositifs externes Applications WEB (JAVA, PHP, JAVASCRIPT) o Langage de balisage (HTML qui n’est pas un L.P) o Langages de scripts, embarqué dans le document HTML par exemple (PHP,JS) 11 Introduction (langages de programmation L.P) Critères d’évaluation des L.P : Un Besoin d’évaluation des L.P se fait ressentir à cause de leurs grand nombre Trois critères peuvent être considérer : 1. Lisibilité 2. Facilité d’écriture 3. Fiabilité 12 Introduction 1. (langages de programmation L.P) Critères d’évaluation des L.P : Lisibilité facilité avec laquelle un programme écris dans un L.P donné est lu et compris, parmi les caractéristiques qui affecte ce critère, on peut citer : Simplicité générale du L.P (ex: il est préférable d’avoir un nombre réduit de concepts/composants de base) Orthogonalité : possibilité de combiner différents composants de base du langage de plusieurs façon, chaque combinaison ayant un sens Type de données : disponibilité de types et structures de données et/ou les moyens de leurs définition/création (type booléen : True plus lisible que 1) 13 Introduction 1. (langages de programmation L.P) Critères d’évaluation des L.P : Facilité d’écriture (1) facilité avec laquelle un programme est écris dans un L.P pour un type de problème donné, parmi les caractéristiques qui affecte ce critère, on peut citer : Simplicité du L.P : trop de concepts et de composants dans un L.P peut mener à la surutilisation (ou mal utilisation) d’un sous ensemble de composants au détriment d’un autre Orthogonalité : trop de combinaison possibles entres composants du langage peut empêcher la détection d’erreurs 14 Introduction 1. (langages de programmation L.P) Critères d’évaluation des L.P : Facilité d’écriture (2) Possibilités d’abstractions : Capacité à définir des structures de données complexes tout en ignorant les détails de leurs implémentations lors de leurs utilisation 2 types d’abstraction peuvent être supporter dans un L.P : données / processus Exemple d’Abstraction de processus : sous programme Exemple d’Abstraction de données : arbre (classe avec données et pointeurs) Expressivité : beaucoup de traitement avec peu de code, exemple : i++ au lieu de i = i + 1 15 Introduction 1. (langages de programmation L.P) Critères d’évaluation des L.P : fiabilité On dit qu’un programme est fiable s’il accomplis ses tâches sous n’importe quelles conditions, les points suivants affectent la fiabilité des programmes d’un L.P Vérification de type : détecter les erreurs de type dans un programme, de préférence lors de la compilation Gestion des exceptions : capacité du programme à intercepter les erreurs à l’exécution, prendre les mesures correctives nécessaire, puis à continuer l’exécution ou le traitement Aliasing : plusieurs noms (références) pour une même cellule mémoire, peut conduire à des erreurs (caractéristique dangereuse dans un L.P) Lisibilité et facilité d’écriture : plus il est facile d’écrire un programme, plus il aura de chance d’être correcte; un programme difficile à lire, sera difficile à modifier (maintenance) 16 Introduction (langages de programmation L.P) Critères d’évaluation des L.P : Autres critères : Coût d’un L.P: exécution et compilation des programmes Création, tests et utilisation des programmes, Maintenance des programmes Portabilité : indépendance des programmes écris dans un L.P des architectures matérielles (machines) 17 Introduction (langages de programmation L.P) Méthodes d’implémentation des L.P (1) : Les L.P peuvent êtres implémenter par l’une des trois méthodes suivantes : 1. Compilation 2. Interprétation pure 3. Système hybride 18 Introduction 1. (langages de programmation L.P) Méthodes d’implémentation des L.P (2) : Compilation : Le programme (code source) est traduit en code machine par le compilateur, et est ensuite directement exécuté par l’ordinateur produit des programmes rapides à l’exécution une fois la compilation terminée 19 Introduction 2. (langages de programmation L.P) Méthodes d’implémentation des L.P (3) Interprétation pure : Un interpréteur est requis durant l’exécution d’un programme, il lit les instructions du programme source plus ou moins une à la fois, et les exécute progressivement L’interpréteur implémente une machine virtuelle, qui a pour ‘langage machine’, le langage de programmation en question 20 Introduction 3. Méthodes des L.P (4) (langages de programmation L.P) d’implémentation Implémentation hybride: Code source compilé en code intermédiaire, qui est ensuite interprété par un interpréteur L.P indépendant de l’architecture de la machine, un interpréteur (MV) pour chaque type de machine 21 Introduction (langages de programmation L.P) Classification des L.P : 1. 2. Langages déclaratifs Programmation fonctionnelle Programmation logique Langages impératifs Programmation procédurale Programmation orientée objets Programmation concurrente 22 Introduction (langages de programmation L.P) Historique (1) : PLANKALKÜL Langage développé en 1945 par Zuse en Allemagne mais jamais implémenté, travaux publiés en 1972 Zuse a écris des algorithmes dans son langage pour une large variété de problèmes, Langage contenant des structures de données avancées telles les enregistrements (pouvant être imbriqués ) et les tableaux Les travaux de Zuse incluaient des programmes et des algorithmes d’une grande complexité : o tri de tableau de nombres o analyse de la syntaxe de formules logiques (avec parenthèses) o Jeu d’Echecs 23 Introduction (langages de programmation L.P) Historique (2) : langage machine Langage bas niveau utilisé pour programmer les premiers ordinateurs les opérations et calculs à réaliser sont représentés en binaire Instructions élémentaires (addition, charger une valeur dans un registre) Code très difficile à écrire/lire/maintenir/modifier Considéré comme langage de première génération (1GL) Nécessité de développer un langage qui se rapproche plus du langage naturel de l’utilisateur de la machine 24 Introduction (langages de programmation L.P) Historique (3) : langage d’assemblage (assembleurs) Représentation symbolique du langage machine, plus proche du langage naturel un programme appelé ‘assembleur’ traduit du code écrit en langage d’assemblage vers du code en langage machine Chaque modèle de machine a son propre langage d’assemblage, ce qui réduit la portabilité des programmes en assembleurs Langage bas niveau de deuxième génération (2GL) 25 Introduction (langages de programmation L.P) Historique (4) : Pseudocodes (1) Apparus dans un contexte où les programmes étaient écris en langage machine (14 représente un ADD par exemple) sur des ordinateurs lents, coûteux, peu fiables, avec peu de mémoire en plus d’être difficile à programmer Short Code : o Langage développé par John Mauchly en 1949 pour l’ordinateur BINAC initialement, puis porté sur l’ordinateur UNIVAC 1 o Basé sur des valeurs d’une suite de paire de bytes (byte de 6bit) représentant des expressions mathématiques à évaluer o Exemple : l’expression X0 = X1 + X2 est codée en : 00 X0 03 X1 07 X2 o Langage interprété et non pas traduit en un code machine 26 Introduction (langages de programmation L.P) Historique (5) : Pseudocodes (2) Speedcoding : o Développé par Backus pour l’IBM 701 o Langage interprété o Etend le langage machine afin de supporter des opérations en virgule flottante, inclut également les instructions de saut (C ou I) entre autres Compilateurs UNIVAC : o Une série de compilateurs nommés A-0, A-1 et A-2 développés par Grace Hopper et son équipe entre 1951 et 1953 o Étend du pseudo code en code machine (même principe d’une macro) 27 Introduction (langages de programmation L.P) Historique (années 50 et 60) Apparition des MAINFRAMES : (ordinateur central), ordinateurs à usage général, très coûteux et de grande taille (remplis une chambre), utilisé par du personnel spécialisé Méthode de Traitement en Batch (par lots), programmes exécutés séquentiellement en ayant toutes les ressources de la machine à disposition Les premiers L.P de haut niveau ont été développé pour ce genre de système, L.P produisant des programmes qui ne permettent pas beaucoup d’interaction avec la machine et qui sont exécuté du début à la fin sans intervention externe 28 Introduction (langages de programmation L.P) Historique (années 50 et 60) FORTRAN (FORmula TRANslation) Peut être considéré comme le premier L.P impératif de haut niveau Développé par John Backus et son équipe en 1957 à IBM Destiné à des applications de type scientifique/numérique Conçu pour produire des programme facile à écrire et performant à l’exécution (IBM 704 comme ordinateur de référence) Premier L.P symboliques Plusieurs ajouts au fil des versions (if then else, gestion dynamique de la mémoire…etc.) Types de base limités (types numériques, booléen, file, string, tableaux) à permettre l’utilisation d’expressions arithmétiques 29 Introduction (langages de programmation L.P) Historique (années 50 et 60) ALGOL (ALGOrithmic Language) Plus qu’un langage, il s’agit d’une famille de langages impératifs, le premier, ALGOL 58, a été développé en 1956 par un comité dirigé par Peter Naur L.P prédominant dans le domaine académique mais pas de vrai succès commercial L.P universel, et non pas orienté vers un type d’application, se voulant indépendant de la machine L.P qui a grandement influencé les L.P modernes, il a apporté entre autres : Structuration du programme en blocs Passage de paramètres par nom Récursivité des procédures Tableaux dynamique If then else, for et while (ALGOL60), case (ALGOL68) ALGOL 60 (1960) est la version la plus importante 30 Introduction (langages de programmation L.P) Historique (années 50 et 60) LISP (LISt Processor) Développé par une équipe du MIT (Massachusetts Institute of Technology) dirigée par John McCarthy en 1960 Orienté vers des applications non-numérique (traduction automatique de textes), permet la manipulation d’expressions symboliques (des listes composées d’atomes), utilisé dans le domaine de l’intelligence artificielle Langage fonctionnel et interprété en général (interactif), dont les programmes sont des séquences d’expressions qui sont évalués, ou des fonctions appliquées à des arguments 31 Introduction (langages de programmation L.P) Historique (années 50 et 60) COBOL (COmmon Buisness Oriented Language) Orienté applications commerciales et développé avec pour objectif une syntaxe aussi proche que possible de l’anglais Langage développé initialement par une équipe dirigée par Grace Hopper au département de la défense US, standardisé en 1968, toutefois, COBOL n’a eu que peu d’influence sur le développement des L.P Programmes longs et peu efficaces Parmi ses contributions : DEFINE (pour les macros) Structures de données hiérarchiques (enregistrements) 32 Introduction (langages de programmation L.P) Historique (années 50 et 60) SIMULA Extension du L.P ALGOL, développé depuis 1962 au centre de calcul norvégien par Nygaard et Dahl, Destiné aux applications de simulation à événements discrets (situations avec files d’attentes par exemple) Sa version la plus importante, SIMULA67 a introduit pour la première fois, les concepts de classes et d’objets entre autres, considéré comme le premier L.P orienté objets SIMULA67 ajoute différents mécanismes à ALGOL60 : Pointeurs Co-routines (procédures concurrentes, proche du concept de thread) Classes et objets 33 Introduction (langages de programmation L.P) Historique (années 70) Microprocesseurs et mini ordinateurs Machines de Petite taille par rapport aux Mainframes Systèmes plus interactifs avec entrée/sorties plus complexes Temps de réponse d’un programme est devenu important, et l’utilisation de timeouts 34 Introduction (langages de programmation L.P) Historique (années 70) C Développé par Dennis Ritchie et Ken Thompson dans les laboratoires BELL en 1972 L.P Initialement Orienté applications systèmes pour UNIX, très vite devenu L.P universel Grandement inspiré d’ALGOL68, permet un accès au fonctionnalités bas niveau de la machine, et la programmation de systèmes plus interactifs Syntaxe compacte et compilateur générant du code machine efficace 35 Introduction (langages de programmation L.P) Historique (années 70) Pascal Développé en 1971 par Niklaus Wirth à partir de l’ ALGOL W, en visant un maximum de simplicité et d’expressivité L.P d’apprentissage le plus utilisé jusqu’à la fin des années 80 Premier L.P à introduire le concept de code intermédiaire (P-code) pour la portabilité des programmes Langage plus sûr, ne fournissant pas d’opérations dangereuses de manipulation de pointeurs par exemple 36 Introduction (langages de programmation L.P) Historique (années 70) PROLOG L.P logique développé en 1972 par Pierre Roussel et Alain Colmerauer LP interprété Une des application de PROLOG, création d’une sorte de BDD intelligente qui contient un ensemble de faits et de règles, utilisant des mécanismes de déduction (logique de premier ordre) pour répondre à des requêtes (réponse : vrai ou faux) 37 Introduction (langages de programmation L.P) Historique (années 80) Apparition des PC Micro ordinateur personnel pour le grand publique avec un O.S interactif basé sur des fenêtres graphiques Apparition des systèmes embarqués dans des domaines où l’erreur est intolérable Apparition des systèmes temps réel nécessitant des LP dédiés 38 Introduction (langages de programmation L.P) Historique (années 80) C++ Première version définis par Bjarne Stroustrup en 1986 dans les laboratoires BELL Ajout de concepts orienté objets au langage C (classes, héritage …etc.) Efforts pour Maintenir une retro compatibilité avec les programmes C 39 Introduction (langages de programmation L.P) Historique (années 80) ADA Le Département américain de la défense lance une compétition entre plusieurs groupes de développeurs (académique et industriel) pour le développement d’un nouveau LP répondant à ses exigences Le vainqueur, Jean Ichbiah, propose un langage basé sur PASCAL, incluant plusieurs nouveaux composants pour la programmation temps réel et des systèmes embarqués : o Concept de tâches o Mécanismes de synchronisation et de gestion d’erreurs (exceptions) o Mécanismes pour l’exécution concurrente de tâches 40 Introduction (langages de programmation L.P) Historique (années 90) Internet et le WWW Possibilité de connecter des millions de systèmes par des réseaux pour le partage de données et de programmes Transmission de données et accès à des informations à distance à travers des canaux partagé par des milliers d’utilisateurs soulève des problèmes à tous les niveaux d’un système, y compris le L.P : Efficacité Fiabilité Sécurité 41 Introduction 42 (langages de programmation L.P) Historique (années 90) JAVA Développé par une équipe dirigée par Jim Gosling chez SUN, première version fonctionnelle en 1992 Les développeurs se sont basé sur C++, ajoutant/supprimant/modifiant ses composants, résultat : L.P puissant et flexible à l’image de C++, mais en même temps, réduit, plus simple et plus sûr/fiable Purement orienté objet (à l’opposé de C++), un programme JAVA est un ensemble de classes Utilisation d’un ramasse-miettes Utilisation d’un code intermédiaire + machine l’interprétation de ce code sur la machine cible virtuelle pour