Paradigmes de Programmation Discussion CSI2520, Hiver 2007
Paradigmes Programmation impérative: le programme est constitué d' une séquence d’énoncés à être exécutés séquentiellement Programmation logique: le programme décrit les propriétés de la solution recherchée et un mécanisme d'inférence propose des solutions répondant à ces critères. Programmation fonctionnelle: le programme est vu comme une transformation des données d' entrée afin d'obtenir la sortie désirée. Programmation orientée objet: le programme se décompose en un ensemble d’objets interagissant entre eux par l’échange de messages. Programmation concurrente: le programme autorise la répartition des tâches à accomplir en un ensemble de plusieurs processus asynchrones pouvant être exécutés en parallèle. CSI2520, Hiver 2007
Pourquoi étudier les langages de programmation? Faciliter l'expression des idées par l'emploi d'un langage de programmation expressif en regard de l'application visée. Donner les connaissances permettant à un programmeur de choisir un langage approprié. Comprendre comment un concept informatique peut être mis en application par la programmation. Utiliser de façon plus efficace un langage. Accroître l'efficacité du code résultant. Faciliter l'apprentissage de nouveaux langages. Comprendre la relation qui existe entre un algorithme et un langage. Donner un aperçu de l’état de l'art en programmation. Etre en mesure de comparer les différents langages existants. Donner la possibilité de concevoir un nouveau langage. CSI2520, Hiver 2007
Différents langages Une opération peut être exprimée dans différents langages, puis exécutée sur la même machine. Différent langages permettent de résoudre différents problèmes de façon différente. Différence entre ces langages: syntaxe (forme, apparence) sémantique CSI2520, Hiver 2007
Discussion de Paradigmes // Factoriel en Java public static double factorial(int n) { if (n < 0) return 0.0; double fact = 1.0; while(x > 1) { fact = fact * n; n = n - 1; } return fact; // Factoriel en Prolog factorial(0,1). factorial(N,F) :- N>0, N1 is N-1, factorial(N1,F1), F is N * F1. CSI2520, Hiver 2007
Critères dans l’évaluation d’un langage Expressivité Expressivité des structures de contrôle et de données. Qu’est-ce qui est plus facile à lire et maintenir: un long programme bâti à partir d’éléments simples? -ou- un programme bref bâti à partir d’éléments complexes? Exemples d’expressivité: la récursivité, le retour arrière incorporé de Prolog, la recherche dans les langages de base de données. Exemple de peu d’expressivité: instructions d’assembleur. CSI2520, Hiver 2007
Critères de choix d’un langage Facilité de lecture La lisibilité d’un langage est essentielle, en particulier, pour des fins d’évolution, de maintenance, et de mise à jour des logiciels. Abstraction: permettre la généralité des programmes, l’abstraction procédurale, et l’abstraction des données. Absence d’ambiguïtés Absence d’une surabondance de choix: Par exemple, certains langages permettent d’écrire les boucles de plusieurs façons différentes. CSI2520, Hiver 2007
Critères de choix d’un langage Facilité d’écriture Abstraction: comme pour la lecture Simplicité: Pascal est simple Prolog est conceptuellement simple, mais difficile en pratique. C++ et Java? Modularité: aussi la présence d’outils de modularisation et la capacité d’être incorporé dans un environnement de programmation intégré. CSI2520, Hiver 2007
Critères de choix d’un langage Orthogonalité l’absence de restrictions sur la façon de combiner les primitives du langage. (Il est plus facile de constater le manque d’orthogonalité.) Exemple: Un tableau peut-il contenir des éléments de n’importe quel type? Il en résulte en une diminution du nombre de cas spéciaux. CSI2520, Hiver 2007
Critères de choix d’un langage Facilité d’apprentissage Petit langage avec peu de restrictions Scheme Une (seule) façon simple de faire les choses Peu de mots clés C Facilité de détection des erreurs Java CSI2520, Hiver 2007
Critères de choix d’un langage Facilité d’utilisation Facile à lire, facile à écrire, facile à apprendre Bons outils de développement, bonne documentation Peu de code à écrire afin de solutionner un problème CSI2520, Hiver 2007
Critères dans l’évaluation d’un langage Simplicité: le fait de n' inclure qu' un nombre limité de composantes dont l'usage est naturel et cohérent. Abstraction: le fait de pouvoir représenter une structure complexe tout en ignorant des détails jugés non essentiels. Portabilité: jusqu’à quel point ce langage a été standardisé, si plusieurs dialectes du langage coexistent. Modularité: de quelle facon le programme peut être subdivisé en unités cohérentes. Robustesse: détection précoce des erreurs, vérification des types. Uniformité: le langage devrait utiliser avec consistance les notations et conventions habituellement admises. CSI2520, Hiver 2007
Critères dans l’évaluation d’un langage Traduisibilité: devrait permettre la traduction efficace du langage en code machine. Précision: le fait que le langage ait été clairement d´efini, que toute séquence donne des résultats prédictibles. Extensibilité: la structure devrait permettre d' y ajouter de nouveaux concepts, de nouvelles options, permettant ainsi au langage d‘évoluer harmonieusement Restricabilité: si il existe plusieurs facon d' utliser le langage, ou un sous-ensemble de celui-ci de facon a limiter la complexité de son usage au besoin. Support: l'existence d'outils de développement intégrés. Apparence: la facon dont se présente le code Élégance: la facon dont se présente les solutions CSI2520, Hiver 2007
Critères de choix d’un langage Tous les langages de programmation ont: variables, constantes, strucutres de données règles de portée types, expressions structures de contrôle (selection, iteration) récursivité (pour la plupart des langages) sous-programmes ... En Prolog et en Scheme, données et programmes ont la même forme En Scheme, toutes les données ont les même privilèges (incluant les fonctions) Java offre une grande variété de données et structures CSI2520, Hiver 2007
Critères de choix d’un langage Fiabilité: Vérification des types, traitement des exceptions et erreurs, l’absence d’ambiguïtés (et en général la lisibilité et l’aptitude à l’écriture). Coût associé à l’utilisation du langage. Temps nécessaire au développement (facilité de programmation, disponibilité de code, de librairies et de documentation). Facilité d’implémentation: (affecte la disponibilité et le coût des compilateurs). L’implémentation de Pascal, C, C++ et Java ont été de grands succès. Temps nécessaire pour traduire, et l’efficacité du code résultant. Portabilité et standardisation. CSI2520, Hiver 2007
Critères de choix d’un langage Chaque langage vient avec son modèle d’exécution Compilé ou interprété? Tourne-t-il sur une machine virtuelle? Est-il concu pour être portable? efficace? expressif? CSI2520, Hiver 2007
Analyse syntaxique (parsing) Programme source Séquence d’unités lexicales Analyse lexicale (scanning) Analyse syntaxique (parsing) Table de symboles Arbre syntaxique Optimisation du code Programme abstrait (code intermédiaire) Analyse sémantique Programme abstrait (optimisé) Chargeur/Éditeur de liens (Loader/Linker) Génération du code Code exécutable (object code) Programme résultant Données d’entrée Ordinateur Données de sortie CSI2520, Hiver 2007
Points forts et faibles d’un langage Globalement, chaque langage de programmation a des points forts, et des points faibles: Java Prolog Scheme Pascal C C++ CSI2520, Hiver 2007
Choix d’un langage de programmation Choisir le meilleur langage par application Traitement du langage Retour-arrière (jeux) Simulations … par familiarisation pour travailler en équipe par gout CSI2520, Hiver 2007