## Exemples

Texte seul Texte et code Code seul | Nouvelle fenêtre

Ouvrir
Enregistrer

## Browser

Effacer Oz Panel Relancer Oz

## Console

Effacer

## Glossaire

### A

Abstraction fonctionnelle
  L'utilisation de fonctions pour construire de nouvelles fonctions. Une nouvelle fonction est définie avec d'autres fonctions.
Adjonction
  Une fonction qui définit un nouvel environnement en ajoutant une paire (identificateur, variable) à un environnement existant.
Affectation compatible
  Une tentative de seconde affectation à une variable à affectation unique, dont la valeur est compatible avec la valeur déjà en mémoire. Par exemple, `declare X Y in X=foo(Y) X=foo(1)`, l'affectation `X=foo(1)` est compatible et fera `Y=1`.
Affectation incompatible
  Une tentative de seconde affectation à une variable à affectation unique, dont la valeur n'est pas compatible avec la valeur déjà en mémoire. Par exemple, `declare X=42 X=43`, l'affectation `X=43` est une affectation incompatible. Une affectation incompatible signale une erreur avec une exception.
Affectation multiple
  Une cellule peut être affectée plusieurs fois.
Affectation unique
  Une variable ne peut être affectée qu'à une seule valeur.
Analyseur de jetons
  Un programme qui prend une séquence de caractères et renvoie une séquence de jetons.
Analyseur lexical
  Voir Analyseur de jetons.
Atome
  Une constante qui commence avec une lettre minuscule et qui est suivie de lettres (majuscules ou minuscules), de chiffres ou du caractère de soulignement ('_').

### B

### C

Calcul
  Une séquence d'états d'exécution qui commence par un état initial.
Capacité objet
  Une référence infalsifiable à un objet. Un système basé sur les capacités objet donne une sécurité en profondeur qui permet d'éviter la plupart des problèmes des virus et autres programmes malicieux.
Cellule
  Une paire composée d'une constante, qui est un nom, et d'une référence dans la mémoire à affectation unique. Il existe une opération d'affectation qui permet de changer cette référence. La paire elle-même fait partie de la mémoire à affectation multiple. Les cellules implémentent un état explicite. On peut ajouter les cellules à un modèle de calcul pour donner un modèle avec état.
Classe
  Une fonction qui renvoie un objet avec un nouvel état quand elle est appelée. Un langage de programmation peut donner un soutien syntaxique aux classes.
Combinaison
  Une fonction de deux entiers n et k qui donne le nombre de sous-ensembles de taille k possibles d'un ensemble de taille n.
Complexité temporelle
  Le temps d'exécution d'un programme en fonction de la taille de l'entrée, à un facteur constant près.
Concurrence
  La propriété d'un programme qui contient plusieurs activités indépendantes, chacune s'exécutant à sa propre vitesse.
Cons
  Voir Paire de liste.

### D

Dataflow
  Le comportement d'une exécution d'attendre les informations quand elles ne sont pas disponibles pendant l'exécution et de continuer quand les opérations deviennent disponibles. Par exemple, quand une opération essaie d'utiliser une variable qui n'est pas encore liée. Si l'opération attend qu'une autre opération lie la variable et continue ensuite, nous disons que l'exécution est dataflow.
Développement descendant
  Une méthodologie de construction de programmes qui consiste d'abord à écrire le programme principal en ensuite de le compléter avec les fonctions manquantes. On l'appelle top-down development en anglais.

### E

Entier
  Un nombre qui peut être zéro, négatif ou positif et dont la partie fractionnelle est zéro. Un entier est un type dans le langage Oz.
Environnement
  Une fonction qui prend un identificateur et qui renvoie une variable en mémoire. Cette fonction existe pour comprendre l'exécution d'un programme mais ne fait pas partie des fonctions définies par le programmeur.
État
  Une séquence de valeurs dans le temps qui contient les résultats intermédiaires d'un calcul souhaité.
État d'exécution
  Une paire qui contient (1) une pile d'instructions sémantiques et (2) une mémoire à affectation unique.
État explicite
  Dans une procédure, un état explicite est un état dont l'existence s'étend au-delà d'un appel de la procédure sans être présent dans les arguments de la procédure. Dans un langage noyau, un état explicite est un concept qui permet d'accéder à une mémoire à affectation multiple. Différentes possibilités pour ce concept sont la cellule ou le port.
État implicite
  Un état qui existe dans l'esprit du programmeur mais pas en tant que concept dans le langage de programmation. Par exemple, la séquence des valeurs des arguments lors des appels successifs d'une fonction forment un état implicite.

### F

Factorielle
  Une fonction d'un entier n qui donne le nombre de permutations de n objets, c'est-à-dire, le nombre de manières différentes de les placer dans une séquence où l'ordre est important.
Forme Étendue de Backus-Naur (EBNF)
  Un formalisme pour définir des grammaires formelles, appelée d'après ses inventeurs John Backus et Peter Naur. Le formalisme EBNF distingue des symboles terminaux et des symboles non terminaux. Un symbole terminal est simplement un jeton. Un symbole non terminal est défini avec une règle de grammaire, qui montre comment le convertir en une séquence de jetons.

### G

Grammaire
  Un ensemble de règles qui définit comment construire des « phrases » à partir des « mots ». Les grammaires peuvent être utilisées pour les langages naturels, comme le français ou le suédois, tout comme les langages artificiels, comme les langages de programmation. Pour les langages de programmation, les « phrases » sont appelées des « instructions » et les « mots » sont appelés des « jetons ».
Grammaire hors-contexte
  Une grammaire dans laquelle l'expansion d'un symbole non terminal donne toujours la même séquence de jetons indépendamment de la position du non terminal dans une règle. Voir aussi Grammaire sensible au contexte.
Grammaire sensible au contexte
  Une grammaire qui contient une règle dont l'utilisation dépend du contexte dans lequel il est utilisé. Voir aussi Grammaire hors-contexte.

### H

### I

Identificateur
  Un nom (la chaîne de caractères) qui est dans le texte d'un programme et qui représente une variable en mémoire pendant l'exécution d'un programme.
Identificateur libre
  Un identificateur dans une instruction qui n'est pas déclaré dans cette instruction.
Induction mathématique
  Une technique de preuve mathématique qui permet de prouver qu'une propriété est vraie pour tous les éléments d'un ensemble bien fondé de valeurs. La technique se fait en deux parties. D'abord, on prouve que la propriété est satisfaite pour l'élément le plus petit de l'ensemble. Ensuite, on prouve que la propriété est satisfaite pour un élément donné si elle est satisfaite pour un élément plus petit. Alors, l'induction mathématique dit que la propriété est satisfaite pour tous les éléments de l'ensemble.
Instruction
  Dans une grammaire, une séquence de jetons. Dans un langage de programmation, une instruction définit un ensemble d'actions qui seront faites lors de l'exécution de l'instruction.
Instruction sémantique
  Une paire d'une instruction et d'un environnement, ce qui définit la relation entre l'instruction et ce qu'elle référence en mémoire.

### J

Jeton
  Une séquence de caractères, considérée comme une entité dans une grammaire.

### K

### L

Langage formel
  Un ensemble de mots. Certains langages formels peuvent être définis par des grammaires.
Langage noyau
  Langage simple qui contient tous les concepts d'un langage pratique sans les ajouts syntaxiques.
Liste
  Une séquence d'éléments, avec une syntaxe délimitée à gauche et à droite par des crochets, comme [5 6 7 8]. Dans la mémoire, une liste est, soit une liste vide (écrite nil), soit un élément suivi par une autre liste.

### M

Mémoire à affectation unique
  Un ensemble de variables, qui sont éventuellement liées. Ces variables sont partitionnées en deux groupes : (1) les ensembles de variables qui sont égales mais non liées à une valeur et (2) les variables qui sont liées à un nombre, un enregistrement ou une procédure.

### N

Non-déterminisme
  La propriété de l'exécution d'un programme qui permet le système qui l'exécute de choisir une parmi plusieurs instructions pour faire un pas d'exécution. Un programme non-déterministe peut (mais ne doit pas forcément) donner des résultats différents lors des exécutions différentes, même avec les mêmes entrées.

### O

Objet
  Une fonction avec une mémoire interne (un état explicite) est généralement appelée un objet. Un objet peut avoir d'autres propriétés comme une syntaxe appropriée et une définition par classe.

### P

Paire de liste
  Une paire d'un élément suivi par une liste, qui définit une nouvelle liste. On l'appelle cons en anglais.
Parseur
  Un programme qui prend une séquence de jetons et renvoie un arbre syntaxique qui représente une instruction.
Pas d'exécution
  Une transition d'un état vers l'état suivant dans un calcul.
Pile sémantique
  Une pile d'instructions sémantiques, utilisées pour l'exécution d'une instruction dans la sémantique. Une pile sémantique a trois états possibles pendant l'exécution : exécutable, terminée et suspendue.
Port
  Une paire composée d'une constante, qui est un nom, et d'une référence dans la mémoire à affectation unique. Il existe un flot dont la queue non liée est cette référence. Il existe une opération d'envoi qui permet d'ajouter un élément à ce flot en liant la référence. En même temps, la paire est modifiée pour référencer la nouvelle queue du flot. Un port est donc un canal de communication. Les ports implémentent un état explicite. On peut ajouter les ports à un modèle de calcul pour donner un modèle avec état.
Portée
  La portée d'une occurrence d'un identificateur est la partie d'un programme pour laquelle cet identificateur correspond à la même variable en mémoire. La portée peut être lexicale (aussi appelée portée statique) ou dynamique.
Programmation déclarative
  Un programme est une fonction ou une relation au sens mathématique. L'exécution d'un programme est l'évaluation de cette fonction ou relation sur des arguments qui sont des structures de données.
Portée dynamique
  La portée est déterminée pendant l'exécution du programme. La variable qui correspond à une occurrence d'un identificateur est celle définie dans la déclaration qui contient l'occurrence et qui est la plus récente pendant l'exécution qui mène jusqu'à l'instruction qui contient l'occurrence.
Portée lexicale
  Voir Portée statique.
Portée statique
  La portée est déterminée par une inspection du code d'un programme. La variable qui correspond à une occurrence d'un identificateur est celle définie dans la déclaration qui contient l'occurrence et qui est la plus proche de l'occurrence dans le texte du programme.
Programmation basée objet
  La programmation avec les classes et les objets.
Programmation déclarative
  La programmation avec des fonctions. Un programme est une série de définitions de fonction et son résultat est donné par l'évaluation d'une fonction.
Programmation d'ordre supérieur
  La capacité d'utiliser des fonctions comme des valeurs : de les créer et exécuter à volonté et de les passer comme arguments et résultats à d'autres fonctions.
Programmation orientée objet
  La programmation avec les classes et les objets, où l'on peut définir de nouvelles classes à partir de classes existantes avec l'héritage.
Programmation sans état
  Un paradigme appelé aussi programmation déclarative.

### Q

### R

Restriction
  Une fonction qui définit un nouvel environnement dont le domaine est un sous-ensemble du domaine d'un environnement existant.

### S

Sémantique
  Un modèle mathématique d'un langage de programmation qui définit son comportement lors de l'exécution. On distingue différentes manières de définir la sémantique, dont les plus importantes sont la sémantique opérationnelle, la sémantique axiomatique et la sémantique dénotationnelle.
Sémantique axiomatique
  Un modèle mathématique qui définit le sens d'une instruction comme une relation entre l'état de l'entrée (avant l'exécution de l'instruction) et l'état de la sortie (après l'exécution de l'instruction). Cette relation est donnée comme une assertion logique.
Sémantique dénotationnelle
  Un modèle mathématique qui définit le sens d'une instruction comme une fonction sur un domaine abstrait.
Sémantique opérationnelle
  Un modèle mathématique qui montre comment une instruction s'exécute sur une machine abstraite.
Spécification d'un programme
  Une définition mathématique des entrées dont le programme a besoin et des résultats qu'il calcule.
Syntaxe
  Pour un langage de programmation, la définition des instructions légales, c'est-à-dire, qui peuvent être exécutées. La syntaxe d'un langage est définie par une grammaire.

### T

### U

### V

Variable
  Une entité dans la mémoire du programme qui représente une valeur. Une variable au sens mathématique. Une variable dans ce sens ne peut pas être affectée plus qu'une fois.
Variable en mémoire
  Voir Variable

### W

### X

### Y

### Z

## Web

## Aide

Accès direct aux sections :

Installation
| Pour faire exécuter le code Oz par le Labo interactif vous devez avoir installé les logiciels complémentaires suivants (gratuits) : Mozart Programming System (télécharger) ; Java Plugin (télécharger).
Présentation générale
| Le Labo interactif est constitué de cinq onglets : Exemples Cet onglet propose un ensemble de recettes expliquant les exemples de code Oz du livre Programmation — Concepts, techniques et modèles, ainsi que de nombreux exemples supplémentaires. Vous pouvez les exécuter directement, les modifier, enregistrer vos modifications, charger de nouveaux exemples et vérifier leur fonctionnement. Il se décompose en deux sections principales : Table des matières, Contenu de la recette La `Table des matières` se trouve dans la partie supérieure gauche de l'onglet `Exemples`. Elle propose la liste des exemples de code, organisée sous forme de chapitres et de sections qui correspondent à ceux du livre. La partie supérieure droite de l'onglet `Exemples` affiche le `Contenu de la recette` sélectionnée. Vous y voyez son titre, sa description et son code. Une icône signale les exemples extraits du livre. Zone d'édition, Zone d'exécution La `Zone d'édition` se trouve dans la partie inférieure gauche de l'onglet `Exemples`. C'est ici que le code complet, prêt à être exécuté, de la recette est affiché. Vous pouvez également le modifier ou saisir votre propre code. La partie inférieure droite de l'onglet `Exemples` constitue la `Zone d'exécution`. Les résultats de l'exécution du code de la zone d'édition y sont affichés, tout comme les erreurs potentielles. La barre de redimensionnement qui sépare les deux sections principales vous permet d'ajuster la taille de ces dernières afin de disposer d'un espace plus important pour l'accès aux recettes ou pour l'étude du code. L'onglet `Exemples` comprend également deux sous-onglets : Browser Les résultats de l'exécution du code Oz sont affichés dans cet onglet. Console Si l'exécution du code Oz génère des erreurs, elles sont affichées dans cet onglet. (Voir aussi les sections Tester une recette, Écrire et tester ses propres exemples, Utiliser Oz et Rôles des boutons de l'onglet `Exemples`.) Glossaire Les différents termes employés dans les recettes sont expliqués dans le glossaire. Web Cet onglet affiche une page web offrant des ressources complémentaires pour le Labo interactif. Vous y trouverez notamment de nouveaux exemples de code, des liens vers des pages de cours de programmation et bien d'autres compléments proposés par les auteurs. Aide Vous lisez son contenu. A propos Cette page présente les auteurs de ce Labo interactif.
Tester une recette
| Pour lire le contenu d'une recette et tester son code, procédez de la manière suivante : Activez l'onglet `Exemples`. Dans la `Table des matières`, cliquez sur les intitulés du chapitre et de la section qui vous intéressent. Ensuite, cliquez sur l'intitulé de la recette que vous souhaitez tester. Son contenu s'affiche alors dans la zone `Contenu de la recette`. La recette est constituée du code Oz de l'exemple et de sa description. Certains exemples ne sont pas donnés dans le livre Programmation — Concepts, techniques et modèles et sont alors signalés par un icone. Cliquez sur la partie grisée contenant le code. Sa version complète directement exécutable s'affiche alors dans la `Zone d'édition`. Cliquez sur le bouton `Exécuter` pour demander à Oz d'exécuter le code de la recette. Le résultat de l'exécution s'affiche dans l'onglet `Browser`. Vous pouvez également cliquer sur le bouton `Exécuter la sélection` pour n'exécuter que le code sélectionné. Si vous modifiez le code d'une recette afin de l'adapter à vos besoins, vous pouvez enregistrer vos modifications en cliquant sur le bouton `Enregistrer`. Vous devez alors choisir le fichier et le dossier dans lesquels votre code sera sauvegardé. Pour charger à nouveau vos modifications, cliquez sur le bouton `Ouvrir`.
Écrire et tester ses propres exemples
| Le Labo interactif vous propose d'étudier un ensemble de recettes prédéfinies, mais vous pouvez l'utiliser pour écrire et tester vos propres exemples. Pour cela, procédez de la manière suivante : Activez l'onglet `Exemples`. Cliquez sur le bouton `Effacer` de la `Zone d'édition` afin de disposer d'une zone de saisie vierge. Saisissez votre code, puis testez-le en cliquant sur le bouton `Exécuter`. Une fois votre code au point, enregistrez-le dans un fichier en cliquant sur le bouton `Enregistrer`. Pour reprendre le code que vous avez développé, cliquez sur le bouton `Ouvrir` et choisissez le fichier correspondant. À l'étape 2, au lieu d'effacer la `Zone d'édition`, vous pouvez également choisir le code d'une recette comme base au vôtre ou ouvrir un fichier de code existant.
Utiliser Oz
| Lorsque vous cliquez sur le bouton `Exécuter` ou `Exécuter la sélection`, le code de la `Zone d'édition` est envoyé au moteur Oz. Les résultats de l'exécution sont affichés dans les deux onglets suivants : Browser Pour les messages d'une exécution résussie du code. Console Pour les messages d'erreur générés par un dysfonctionnement du code. Le bouton `Effacer`, présent dans ces deux onglets, permet d'effacer les messages affichés. L'onglet `Browser` dispose également des boutons suivants : Oz Panel Affiche le `Oz Panel` qui permet d'obtenir des informations sur le fonctionnement interne du moteur Oz. Vous pouvoir notamment y voir la création des fils (threads) et l'encombrement mémoire. Pour plus d'informations sur cet outil, consultez la documentation du Oz Panel. Relancer Oz Ce bouton permet de stopper le moteur Oz en cours et d'en démarrer une nouvelle instance. C'est utile quand il y a une erreur dans votre programme qui le fait utiliser trop de temps d'exécution ou trop d'espace mémoire. Par exemple, si votre programme a une boucle infinie.
Rôles des boutons de l'onglet Exemples
| L'onglet `Exemples` comporte de nombreux boutons, dont voici les fonctions : Texte seul, Texte et code, Code seul Ces boutons modifient la présentation de l'onglet `Exemples` afin de l'adapter à l'usage en cours du Labo interactif. En cliquant sur `Texte seul`, la page affiche uniquement la table des matières des exemples ainsi que le contenu de la recette sélectionnée ; vous disposez alors d'un plus grand espace pour la consultation des recettes. Le bouton `texte et code` permet non seulement d'afficher la table des matières et le contenu de la recette sélectionnée, mais également la partie réservée au test du code de l'exemple. Un clic sur le bouton `Code seul` affiche uniquement la portion de la page permettant d'exécuter le code ; vous disposez alors d'un plus grand espace pour l'étude, la modification et l'exécution du code. Nouvelle fenêtre Ce bouton ouvre une nouvelle fenêtre (ou onglet) dans le navigateur. Elle est constituée uniquement de l'onget `Exemples`. Vous pouvez ainsi travailler sur plusieurs recettes ou morceaux de code à la fois. Effacer Les différents boutons `Effacer` permettent d'effacer le contenu de la zone de saisie ou d'affichage associée. (Voir aussi les sections Tester une recette et Utiliser Oz.) Exécuter, Exécuter la sélection Ces deux boutons permettent d'exécuter le code qui se trouve dans la zone de saisie des programmes. `Exécuter` envoie à Oz l'intégralité du code contenu dans cette zone, tandis que `Exécuter la sélection` envoie à Oz uniquement le texte sélectionné. (Voir aussi la section Tester une recette.) Ouvrir, Enregistrer Le bouton `Ouvrir` vous permet de sélectionner un fichier contenant du code Oz et de placer celui-ci dans la zone d'édition ; vous pouvez ensuite tester ce code. Le bouton `Enregistrer` vous permet de stocker le code de la zone de saisie dans un fichier ; vous pouvez ainsi sauvegarder vos modifications ou le code que vous avez créé. Oz Panel, Relancer Oz Le bouton `Oz Panel` affiche une fenêtre éponyme qui donne accès au panneau de contrôle du moteur Oz. Pour plus de détails, consultez la documentation du Oz Panel. Le bouton `Relancer Oz` permet de stopper le moteur Oz en cours et d'en démarrer une nouvelle instance. (Voir aussi la section Utiliser Oz.)

## A propos

Ce Labo interactif est un outil d'apprentissage et d'exploration qui vous permet de compiler et d'exécuter tous les exemples de code publiés dans le livre Programmation — Concepts, techniques et modèles (Dunod Éditeur), ainsi que de nombreux autres. Vous pouvez ainsi comprendre par l'expérience comment fonctionnent les programmes. Au lieu d’utiliser directement le système Mozart, ce qui demande de connaître son interface et d’entrer tous les exemples au clavier, il est beaucoup plus simple d’utiliser le Labo interactif. Il contient tous les exemples dans un environnement interactif qui permet non seulement de les exécuter immédiatement mais également de les modifier et de les enregistrer pour une exécution ultérieure. L’apprentissage de la programmation à l’aide de ces exemples se trouve ainsi facilité. Cet outil pédagogique innovant simplifie, accélère et approfondit, de façon intuitive, la compréhension et la résolution de problèmes complexes. Il est conçu pour soutenir l’auto-apprentissage de la programmation en accompagnement du livre. Il contient beaucoup d’exemples de codes supplémentaires qui ne se trouvent pas dans le livre, ainsi qu’un glossaire complet de tous les termes techniques. Conçu sous forme électronique pour une utilisation interactive, cet outil s’affranchit des contraintes d’apprentissage des techniques de programmation par la lecture de livres. Avec le Labo interactif vous disposez d’un environnement de travail, d’exercice et d’expérimentation équipé et enrichi de toutes les fonctionnalités du système Mozart, renforçant l’apprentissage effectif et immédiat des savoirs dispensés par le présent livre. Vous pouvez exécuter et modifier en temps réel tous les exemples du livre. Vous pouvez aller au-delà du livre pour découvrir tous les paradigmes de programmation. À l’avant-garde de l’innovation dans le domaine de l’édition électronique, ce Labo interactif sera mis à jour continuellement.
Public visé :
Pour les étudiants en informatique (L2, L3), les élèves ingénieurs en informatique et les étudiants en IUT d'informatique c’est l’outil idéal pour apprendre, réviser et explorer la programmation. Pour l’enseignant, le Labo interactif est un outil proactif essentiel pour les cours et les séances de travaux pratiques, permettant de modifier un exemple tiré directement du livre et de l’exécuter sur le champ ou de comparer et de modifier immédiatement différents exemples. Pour le développeur professionnel, le Labo interactif permet de rafraîchir et d’approfondir ses connaissances de la manière la plus facile qui soit.
Auteurs : | Yves Jaradin (yves.jaradin@uclouvain.be) est assistant de recherche au Département d'Ingénierie Informatique de l'Université catholique de Louvain à Louvain-la-Neuve, Belgique. Il est titulaire d'une licence en sciences mathématiques. Il est membre de l'équipe du professeur Peter Van Roy depuis 2004, où il poursuit une thèse en langages de programmation et systèmes répartis.
| Peter Van Roy (peter.vanroy@uclouvain.be) est professeur au Département d'Ingénierie Informatique de l'Université catholique de Louvain à Louvain-la-Neuve, Belgique. Il est titulaire d'un doctorat de l'Université de Californie à Berkeley et d'une habilitation de l'Université Paris 7. Ses recherches concernent les domaines des langages de programmation et des systèmes répartis. Il est auteur avec Seif Haridi du livre Concepts, Techniques, and Models of Computer Programming, reconnu comme un classique du genre. Il est actuellement coordinateur du projet européen SELFMAN dont l'objectif est l'étude des grands systèmes répartis qui se gèrent eux-mêmes.
Version : | 1.00 © 2007 ScienceActive
Éditeur : | ScienceActive (info@scienceactive.com)
ISBN : | 978-2-917398-00-5