Paradigmes
Présentation des deux types de paradigmes Les paradigmes impératifs regroupent un grand nombre de paradigmes qui sont parmi les plus utilisés actuellement. Lors de la programmation impérative, le problème original est découpé en une séquence d’instructions que la machine devra effectuer afin d’obtenir un résultat. La programmation impérative pousse à se poser la question « comment arriver au résultat? » puisque chaque opération doit être décrite par l’utilisateur.
Programmer selon ce paradigme correspond à indiquer à la machine chaque modification qu’elle devra faire à sa mémoire. Celle-ci effectue ainsi une série de calculs pour résoudre le problème.
Les paradigmes déclaratifs sont moins répandus, bien que le paradigme fonctionnel soit très utilisé. Plutôt que sur le moyen d’obtenir un résultat, ils se concentrent sur les éléments qui permettent d’y arriver. Ces paradigmes se basent sur des théories mathématiques telles que la logique, ou les fonctions. Ils représentent ces éléments et leurs interactions, mais décrivent plus les éléments qui permettent de résoudre le problème que les calculs à faire pour y parvenir.
Par définition, ils sont donc plus éloignés de la machine et n’utilisent pas de variables.
Langages
Définition
Ensemble organisé de symboles, de mots-clés, de caractères et de règles (instructions et syntaxe) utilisé pour adresser des commandes à l’ordinateur et assurer la communication avec la machine.
Puisque le langage humain n’est pas compris par l’ordinateur, et que le langage machine est peu compréhensible aux humains, les langages de programmation sont les liens de traduction entre l’homme et la machine. Et tout comme il exü;te plusieurs manières de conceptualiser cette communication (les paradigmes), il existe plusieurs langages, chacun rattaché à un ou plusieurs paradigmes de programmation.
Le langage de programmation détermine la syntaxe utilisée pour indiquer les opérations que l’ordinateur devra effectuer.
Interopérabilité et compatibilité
Plusieurs paradigmes, plusieurs langages, la multiplicité des moyens impose de faire des choix, et travailler avec plusieurs langages ou paradigmes n’est pas simple.
Chacun offre des avantages et des inconvénients. Programmer demande au préalable d’évaluer quel est le langage qui répond le mieux aux besoins exprimés. Certains demandent en plus d’allier plusieurs environnements physiques, plusieurs types de médias, plusieurs systèmes d’exploitation. Souvent, plutôt que de recoder totalement des fonctionnalités existantes, des composants sont repris dans d’autres programmes, ou bien des librairies sont utilisées. Ceux-ci existent déjà et permettent de gagner du temps, mais sont également codés dans un langage précis. Ainsi apparait le besoin de faire travailler des langages les uns avec les autres.
Les différents langages travaillent plus ou moins bien ensemble de manière native.
Certains sont vraiment difficiles à allier, alors que d’autres sont pensés pour être utilisés de concert.
Définition 3 (Compatibilité). Capacité d’un ordinateur et du matériel associé à communiquer entre eux et à échanger des données, ou de deux ordinateurs à exécuter les mêmes programmes sans que les résultats attendus soient compromis ou altérés.
Deux programmes compatibles peuvent communiquer ensemble. Dans le meilleur des cas, ils peuvent travailler ensemble et échanger des informations en temps réel, mais la compatibilité couvre également des programmes qui peuvent écrire et lire un même format de fichier. Lorsque deux langages, ou deux programmes, doivent agir ensemble, la compatibilité est le minimum requis. La majorité des langages essaient donc d’offrir une compatibilité minimale avec les autres, mais il est fréquent qu’elle ne soit pas suffisante.
Définition Interopérabilité
Capacité que possèdent des systèmes informatiques hétérogènes à fonctionner conjointement, grâce à l’utilisation de langages et de protocoles communs, et à donner accès à leurs ressources de façon réciproque.
Deux systèmes interopérables peuvent travailler ensemble de manière transparente. Ils communiquent directement, et travaillent ensemble. Cela repose souvent sur une accessibilité et une visibilité importante de l’un sur l’autre. Ils sont ainsi faits pour travailler ensemble. Certains programmes peuvent, par exemple, ouvrir et modifier en même temps un même fichier. Chacun voit alors en temps réel les modifications effectuées par l’autre.
Chaînes de traitement
Plusieurs domaines utilisent le concept de « Chaîne de traitement » . Le principe général est assez simple : les traitements qui vont être effectués sont représentés par une série d’opérations qui se suivent les unes les autres.
Définition
Définition Chaîne de traitement
Ensemble de travaux « enchaînés » exécutés à la suite les uns des autres et considérés comme une partie d’une application.
Les chaînes de traitement sont utilisées en informatique, mais également dans d’autres domaines. Elles ont l’avantage de ne pas demander de connaissances spécifiques pour être utilisées et comprises. De ce fait , plusieurs programmes permettent leur utilisation.
Outils
Ce chapitre présente les théories et objets mathématiques qui sont utilisés pour essayer de répondre à la problématique. Les systèmes applicatifs typés et la logique combinatoire sont utilisés en analyse des langues naturelles [20]. La logique combinatoire a d ‘ailleurs été utilisée pour construire une 1811gue, le Lojban [6], qui tente de permettre une communication universelle entre les hommes, mais également avec les machines. Ainsi que pour construire des langages de programmation fonctionnels, tels que Haskell .
Systèmes applicatifs typés
Les systèmes applicatifs typés ressemblent aux fonctions usuelles mathématiques.
Ils représentent des fonctions ayant une ou plusieurs entrées et une sortie unique, chaque entrée et chaque sortie étant typées.
Logique combinatoire
En mathématiques, une fonction est associée à des types. On la définit comme une application ayant un ensemble de départ et un ensemble d’arrivée. Le À-calcul met de côté la notion de type et définit des fonctions qui n’ont pas besoin d’être décrites par le type d’entrée et de sortie. Le paradigme fonctionnel, qui est de type déclaratif, est basé sur ce type de calcul. Cependant, elle reste collée au besoin d’avoir des variables.
Schnfinkel introduit la logique combinatoire en 1924 [19], suivi par Curry et Feys en 1958 [8]. Celle-ci s’abstrait de ce besoin, elle fonctionne sans variables.
Principes fondamentaux de la logique combinatoire
Les combinateurs sont des opérateurs qui agissent sur les éléments qui les suivent.
Ces éléments peuvent être des combinateurs, des arguments ou des fonctions. Pour bien comprendre les lois qui les régissent, le plus simple est de commencer par le lambda calcul.
Association des systèmes applicatifs et de la logique combinatoire
Les systèmes applicatifs permettent d’exprimer des fonctions et leur enchaînement. Ils permettent de décrire l’application de plusieurs fonctions à la suite selon une chaîne de traitement. Par exemple, soient f une fonction qui s’applique sur deux entrées et 9 une fonction qui s’applique sur une seule entrée. Soient x , y des valeurs. Si ces fonctions s’enchaînent de telle sorte que la valeur renvoyée par 9 appliqué à x est utilisée comme première entrée par f, elle s’exprimera ainsi : f(gx)y. Ce type d’expression, bien que lisible par l’homme, a pour désavantage de mélanger les noms des fonctions et leurs entrées.
Les combinateurs permettent d’exprimer autrement cet enchaînement de fonctions. Cette expression peut aussi s’écrire: Bfgxy. Cette nouvelle expression est séparable en trois parties distinctes : les combinateurs, B, les fonctions, f g, et les valeurs d ‘entrées, xy. Les deux premières parties représentent la chaîne de traitement et l’ordre d’application de ses fonctions, alors que la dernière donne l’ensemble des entrées attendues pour cette chaîne.
Ainsi associées, ces deux théories permettent de développer le modèle qui sera présenté dans le chapitre suivant.
Méthodologie
Maintenant que les théories utilisées ont été présentées, ce chapitre décrira la méthodologie utilisée afin de représenter les liens entre les modules et leur ordre d’exécution. Il commencera par un rappel des objectifs et contraintes de ce travail, qui sera suivi des règles qui ont été mises en place pour atteindre ces objectifs.
Objectifs et contraintes
Comme évoqué précédemment, notre objectif principal est de permettre à des programmes, ou scripts, de travailler de concert sans avoir besoin de leur imposer des contraintes, sans avoir accès à leur code, et sans que l’utilisateur n’ait besoin de connaissances en programmation. Les programmes doivent donc communiquer en toute liberté quant à leur paradigme, leur langage, leur fonctionnement , et sans avoir à dévoiler ces informations.
Le seul élément qu’ils doivent avoir en commun est de prendre une ou plusieurs entrées et d’avoir une sortie. Nous les appellerons des modules. Ici interviennent les fonctions applicatives. En effet, chaque module peut être représenté par une fonction applicative dont les entrées et sortie sont celles du module. Mais l’exécution de chaque module n’est pas totalement indépendante des autres, et en particulier des modules dont l’exécution détermine ses entrées. Les combinateurs gardent une trace des opérations et de leur ordre, ce qui permet de reconstruire une chaîne de traitement à partir du résultat de son analyse.
Exemple Un module prenant en entrée un texte et retournant une métrique le concernant sera représenté paf’ une fonction d’un texte vers un réel. Notons Ml ce module, Txt le type texte et R le type réel.
|
Table des matières
Introduction
1 État de l’art
1.1 Paradigmes et langages de programmation
1.1.1 Paradigmes
1.1. 2 Langages
1.2 Interopérabilité et compatibilité
1.3 Chaînes de traitement
1.3.1 Définition
1.3.2 Plateformes existantes
2 Outils
2.1 Systèmes applicatifs typés
2.2 Logique combinatoire
2.2.1 Principes fondamentaux de la logique combinatoire
2.2.2 Du lambda calcul à la logique combinatoire
2.2.3 Propriétés importantes
2.2.4 Autres combinateurs
2.2.5 Association des systèmes applicatifs et de la logique combinatoire
3 Méthodologie
3.1 Objectifs et contraintes
3.2 Définitions de règles formelles
3.2.1 Règle applicative
3.2.2 Règle de composition
3.2.3 Règle de composition distributive
3.2.4 Règle de duplication
3.2.5 Règle de permutation
3.3 Exemple de réduction d’une chaîne
3.4 Synthèse des règles
4 Implémentation
4.1 Choix techniques
4.1.1 Librairie de fonctions
4.1.2 Application de test
4.2 Algorithme d’application
4.2.1 Priorité d’application
4.2.2 Deux approches choisies
4.3 Tests et résultats
Conclusion
Bibliographie
Annexe A
Test des algorithmes
A.1 A.1 Chaînes de test valides.
A.2 A.2 Chaînes de test non valides
A.3 A.3 Temps d’exécution
Télécharger le rapport complet