Académique Documents
Professionnel Documents
Culture Documents
[FSAB 1402]
Pierre Bouilliez
Dfinitions
complte : sont tous les concepts qui permettent une classe de dfinir une abstraction
de donnes par elle-mme. Il y a 2 sous-groupes : les membres de la classe (mthodes,
attributs et proprits), et les concepts qui exploitent le typage.
incrmentales : sont tous les concept relatifs lhritage.
Lhritage : est un concept qui permet de construire une abstraction de donnes de faon
incrmentale, comme une extension ou une modification dune autre abstraction de donne.
Cela rduit le problme de duplication de code et clarifie les relations entre abstraction de
donnes. Seul les diffrences entre labstraction de donnes et ses anctres doit tre dcrit.
Abstraction fonctionnelle : utilisation de fonctions existantes pour construire de nouvelles
fonctions.
Dveloppement descendant : mthodologie qui consiste dabord crire la fonction principale et ensuite la complter avec dautres fonctions.
Smantique du langage : cest un modle mathmatique simple des oprations du langage
de programmation qui dfinit ce quelles font lors de lexcution de celui-ci.
Spcifiaction du programme : cest une dfinition mathmatique des entres dont le programme a besoin et des rsultats quil calcule. Nous devons dfinir ce que nous voulons
que le programme fasse.
Complexit temporelle : cest le temps dexcution dun programme en fonction de la taille
de lentre, un facteur constant prs.
Complexit amortie : est un principe utilis lorsquon connait la complexit dun ensemble
doprations. Si la complexit de lensemble de n oprations est O(f (n)), alors on dit que
la complexit amortie dune opration est O(f (n)/n).
Programmation dordre suprieur : le fait de passer des fonctions en argument dautres
fonctions. Fait de crer des fonction tout moment et de les utiliser comme des valeurs.
Concurrence : permet plusieurs activits de sexcuter simultanment. Les activits peuvent
communiquer et synchroniser.
Communiquer : linformation passe dune activit une autre.
Synchroniser : une activit attend une autre.
Concurrence cooprative : est une excution dans laquelle les entits travaillent ensemble
pour arriver un mme rsultat.
Concurrence comptitive : est une excution dans laquelle chaque entit un but local
indpendant des autres. La concurrence comptitive est normalement gre par le systme
dexploitation par un concept qui sappelle un processus.
Dataflow : fait quune opration qui comporte des variables non lies attende que celles-ci
soient lies pour sexcuter.
Variable dataflow : variable dclarative qui attend dtre lie avant dtre utilise.
Etat explicite : squence de valeurs calcules progressivement. Fonction qui volue dans le
temps, ayant une mmoire interne qui laide faire son travail. Par exemple par lutilisation
de cellules.
Objet : fonction avec une mmoire interne. (plus de dtail df pp.126-127)
Classe : fonction qui est dfinie selon certaines proprits et peut sinstancier linfini. Une
classe peut tre obtenue par lhritage en la dfinissant de manire incrmentale au moyen
dabstraction de donnes. (plus de dtail df pp.126-127)
Programmation base objet : programmation avec des classes et des objets.
Programmation oriente objet : programmation base objet + le concept dhritage.
2
Non dterminisme : proprit dun programme qui peut donner des rsultats diffrents pour
2 xcutions avec les mmes paramtres. Cela arrive par exemple lorsquon utilise la concurrence et ltat explicite en mme temps.
Programmation dclarative (sans tat) : se base sur le modle dclaratif.
Capacit objet : est une rfrence infalsifiable un objet. Cela peut tre obtenu par lutilisation de noms. Donne une scurit en profondeur.
Langage pratique : est un langage concu pour solutionner des problmes dans le monde rel.
Grammaire : est un ensemble de rgles qui dfinit comment construire des "phrases" partir
de "mots". En informatique : comment construire des instructions partir de jetons.
Jetons : squences de caractres.
Analyseur de jetons (ou analyseur lexical) : programme qui prend une squence de caractres et renvoi une squence de jetons.
Parseur : programme qui prend une squence de jetons et renvoie un arbre syntaxique qui
reprsente une instruction.
Symbole terminal : un jeton.
Symbole non terminal : squence de jetons.
Langage formel : ensemble de mots. Par exemple : lensemble de toutes les instructions gnres par une grammaire et un symbole non terminal font un langage formel.
Langage noyau : Langage simple dans lequel toute opration du langage peut tre traduite. Il
est le langage par lequel tout programme va tre execut aprs avoir t traduit. Il permet
de vrifier manuellement le fonctionnement dun programme par la methode de la machine
abstraite. Il peut tre tendu par les sucres syntaxiques et les abstractions linguistiques
pour obtenir le langage usuel. La syntaxe du langage noyau est un sous ensemble de la
syntaxe du langage complet.
Les abstractions linguistiques : sont des extensions au langage noyau : elles sont dfinies
par des instructions du langage noyau et utilisent un mot clef pour tre appeles. Cest
une partie de code en langage noyau cach sous un mot clef. Par exemple la fonction est
une abstraction linguistique, son mot clef est le mot fun.
Sucre syntaxique : est une expression raccourcie pour certaines expressions idiomatiques (une
courte squence dinstruction souvent utilise).
Machine abstraite : Construction mathmatique modlisant lexcution dun programme.
Mmoire affectation unique : ensemble de variables initialement non lies et dont chacune peut tre lie une valeur (et une seul fois !).
Dfrence : opration invisible par le programmeur consistant suivre les liens des variables
lies pour obtenir leur valeur. (se passe dans la mmoire)
Valeur partielle : structure de donne qui peut contenir des variables non lies. Par exemple
un enregistrment dont un des champs nest pas encore li.
Type de donnes : est un ensemble de valeurs avec un ensemble doprations sur ces valeurs.
Dans le modle dclaratif, il existe les types de base ou primitifs (nombres, enregistrements,
boolens, chiffres(entier et flotant) tuple, liste, chaine et les procdures. Liste complte
p.51) et les types que les programmes peuvent dfinir (les types de donnes abstraits
ADT).
ADT : les types de donnes sont abstraits (ADT) sils sont compltement dfinis par lensemble
de leurs oprations, indpendamment de son implmentation.
3
Typage statique : le type de toutes les variables est connu la compilation. Quelles soient
lies ou non. (ex : JAVA)
Typage dynamique : le type dune variable est connu lorsque celle-ci est lie. (ex : Oz)
La porte dun identificateur : est la portion du code dans lequel celui-ci rfrencie une
valeur en particulier. Elle peut tre controle par linstruction local...in...end. Dans
ce cas, la porte est dite lexicale ou statique puisquune simple inspection du code permet
de la mettre en vidence.
Porte statique : La variable qui correspond une occurence dun identificateur est celle
dfinie dans la dclaration qui contient loccurence et qui est la plus proche de loccurence
dans le texte du programme.
Porte dynamique : La variable qui correspond loccurence dun identificateur est celle
dfinie dans la dclaration qui contient loccurence et qui est la plus rcente pendant
lxecution qui mne jusqu linstruction qui contient loccurence.
Le passage par rfrence : est un procd par lequel une variable est lie une valeur ellemme rfrencie par une deuxime variable, dans une procdure.
Identificateur libre : identificateur non li une variable.
Abstraction procdurale : cration dune procdure en plaant une instruction dans une
dclaration de procdure.
Arguments formels : arguments dune procdure qui seront re-dfinis chaque fois que la
procdure est appele.
Arguments non-formels : arguments qui sont dclars une fois pour toute lors de la dclaration de la mthode et ne changeront jamais de valeur.
Valeur procdurale : le code de la procdure + lenvironnement qui y est associ. Une paire
(proc...end, CE) o CE est lenvironnement contextuel dfini par E {< z1 >, < z2 >
, ..., < zn >} o E est lenvironnement lors de lappel de la procdure et les < zn > sont
les arguments non formels de la procdure.
Instruction smantique : est une paire (< S >, E) o < S > est une instruction et E est
un environnement. Linstruction smantique montre la relation entre une instruction et ce
quelle reprsente en mmoire.
Etat dexcution : est une paire (ST, ) o ST est une pile dinstructions smantiques et
est une mmoire affectation unique.
Un calcul : est une squence dtats dexcution qui commence par un tat initial : (ST 0, 0) >
(ST 1, 1) > (ST 2, 2) > ...
Pas dexcution : transition qui sopre entre chaque tat dexcution dun calcul.
Mmoire active : un moment dune excution, correspond la pile smantique + la mmoire
accessible par la pile smantique.
Mmoire centrale : contient une squence de mots. Cette squence de mots de 32 ou 64 bits
est partitionne en blocs o un bloc est une squence dun ou plusieurs mots.
Ramassage de miette : est un processus par lequel le systme rcupre la mmoire (sous
forme de bloc) qui nest plus utilise pour la librer en vue de lutiliser une autre tche
ultrieurement. Il est gnralement assur par le systme dexploitation et est emprunt
deux types derreurs de manipulation : le pointeur dtach 1 et la fuite de mmoire 2 .
Mozart a un ramasse miette de type local.(p.80 livre)
1. cette erreur arrive quand un bloc est rcupr bien quil soit toujours accessible, et donc utilis.
2. se produit lorsquun bloc nest pas rcupr bien quil ne soit plus utilis.
Lordonnanceur : est la partie du systme qui pour chaque tat choisit le fil qui doit tre
xecut. Celui-ci utilise un ensemble de rgles prcises qui sappelle lalgorithme dordonnancement.
La premption : est larrt forc dun fil qui sexcute.
Un flot : (stream) est une liste potentiellement illimite dont la queue est une variable dataflow
non lie. Un flot est cr incrmentalement en liant la queue un autre flot.
Un producteur : est le fil qui cre le flot.
Les consommateurs : sont les fils qui lisent le flot. Comme la queue est une variable dataflow,
les consomateurs liront le flot au fur et mesure de sa cration.
Un transformateur : est un fil qui lit le flot du producteur et cre un nouveau flot quil envoie
aux consomateurs.
Un pipeline : est une squence dobjets flots dont chacun alimente le suivant.
La modularit : dun programme face un changement dans une partie de son code est dite
leve sil peut tre fait sans changer le reste du programme. Ce ne sera pas ralisable dans
le modle dclaratif. Cest dailleurs une de ses principales limitations.
Un tat : est une squence de valeur dans le temps qui contient les rsultats intermdiaires
dun calcul souhait.
Letat implicite : est un tat qui nexiste que dans lesprit du programmeur, qui est invisible
pour le programme. Cela peut tre obtenu dans le modle dclarartif par exemple par
lutilisation dun accumulateur.
Ltat explicite : dans une procdure est un tat dont lexistence stend au dela dun appel
de la procdure sans tre prsent dans les arguments de la procdure. Cela ne peut tre
obtenu dans le modle dclaratif. Il faut tendre le modle avec le concept de cellule.
Chaque instance de ltat explicite est une paire de deux entits du langage. La premire
est lidentit de linstance et la seconde est son contenu actuel. Lorsquon modifie un tat,
aucune des deux entits nest change, seul la correspondance change.
Une cellule : est une entit qui a un nom, une dure de vie illimite et un contenu qui peut
tre chang. Elle est obtenue par linstruction C = {NewCell <val>}. @C donne accs
son contenu et C:= <val> met un nouveau contenu.
Le modle avec tat : est le modle dclaratif tendu de ltat explicite avec les cellules.
Spcification : une des deux parties de tout systme quelconque. Elle dfinit un contrat qui
dfinit comment le systme doit se comporter.
Limplmentation : est la deuxime partie de tout systme quelconque qui dfinit comment
le reste du monde interagit avec le systme. Elle est la construction du systme, vu de
lintrieur. La spcification est bien plus simple comprendre que limplmentation.
Une classe : est une dfinition incrmentale de composant. Cest une structure de donnes
qui dfinit ltat interne dun objet, son comportement et les classe dont il hrite. Une
classe peut donner lieu un nombre arbitraire dinstance. Dans Oz, une classe est un
enregistrement qui contient un ensemble de noms dattributs (sous forme dune liste) et
un ensemble de mthodes (sous forme dun enregistrement). (voir pp.276-278)
1
2
3
4
5
6
class Account
attr balance :0
meth transfer ( Amt )
balance := @balance + Amt
end
meth getBal ( Bal )
Bal = @balance
end
meth batchTransfer ( AmtList )
for A in AmtList do { self transfer ( A ) } end
end
7
8
9
10
11
12
end
Classe abstraite : classe dans laquelle certaines mthodes ne sont pas dfinies. Une classe qui
hrite de cette classe pourra les implmenter et faire compiler le code. Cest un genre
"dinterface".
Un objet : instance dune classe.
Heritage de classe : manire de construire de nouvelles classes partir des classes existantes.
Il dfinit les mthodes qui sont disponibles dans la nouvelle classe. Il y a 2 conditions pour
quil soit lgal :
1. il doit tre orient et acyclique.
Ex : class A from B ...end
class B from A...end est illgal.
2. Si on barre toutes les mthodes qui ont t redfinies, chaque mthode qui reste doit
avoir une tiquette unique et doit tre dfinie dans une seule classe de la hierarchie.
Diagramme de classe : arbre gnalogique sous forme de schma de lhritage dune classe.
Mmoire affectation multiple : (ou mmoire affectable) est la mmoire qui contient les
cellules. Celles-ci sont reprsentes par une paire x : y o x et y sont des variables dans la
mmoire affectation unique. x est toujours li un nom qui reprsente une cellule et y peut
tre nimporte quelle valeur partielle. Ltat dexcution est alors le triplet (M ST, , ).
Le partage ou aliasing : se produit lorsque deux identificateurs X et Y rfrencient la mme
cellule. Changer le contenu de lun changera le contenu de lautre. Ex :
1
2
3
4
X
Y
Y
%
= { NewCell 0}
= X
:= 10
@X vaut 10.
Egalit de structure : dfini 2 entits gales si elles ont la mme structure. Par exemple :
1
2
3
X = { NewCell 10}
Y = { NewCell 10}
X == Y
% renvoie false
@X == @Y
% renvoie true
Exemples de codes
2.1
Un enregistrement a une tiquette (un atome) et des champs, identifis par un trait (entier
ou atome) auquel correspond un champ qui peut tre une variable ou une valeur quelconque.
1
2
3
4
{ Browse
{ Browse
{ Browse
{ Browse
2.2
4
5
6
{ Browse { IsProcedure P }}
{ Browse { ProcedureArity P }} % ( arit , c - - d . nombre d arguments )
2.3
2.3.1
Exceptions
Leve dexception
En rponse une situation anormale, un programme peut lever un exception. Ici, une fonction
value une expression arithmtique reprsente par un tuple et lve une exception si lopration
nest pas reconnue.
1
2
3
4
5
6
7
8
9
10
11
fun { Eval E }
if { IsNumber E } then
E
else
case E
of plus ( X Y ) then { Eval X }+{ Eval Y }
[] times ( X Y ) then { Eval X }*{ Eval Y }
else raise illFormedExpr ( E ) end
end
end
end
2.3.2
Lorsque lon essaie de donner une nouvelle valeur une variable, une exception est automatiquement leve par le systme. Celle-ci peut tre attrape et traite.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
declare
X
local Y Z in
thread Y ={ OS . rand } mod 2 end
thread Z ={ OS . rand } mod 2 end
try
{ Wait Y }
{ Wait Z }
Y=Z
X=Y
catch failure (...) then
X =2
end
end
{ Browse X }
2.4
Pour insrer un lment dans une liste, il faut parcourir tous les lments qui le prcdent.
1
2
3
4
5
6
7
8
9
fun { Insert L I X }
if I ==0 then X | L
else
case L
of nil then [ X ]
[] H | T then H |{ Insert T I -1 X }
end
end
end
10
11
2.5
2.6
Notion de flot
Un flot est une liste dont la queue est une variable non-lie. Un flot peut tre tendu en liant
sa queue un autre flot.
1
2
declare Xs Xs2 in
Xs =0|1|2|3|4| Xs2
3
4
5
declare Xs3 in
Xs2 =5|6|7| Xs3
2.7
2.7.1
La mmoisation consiste retenir des rsultats prcdents de manire limiter les calculs. Il
nest pas possible de programmer ce concept en utilisant juste les concepts dclaratifs bien que
les fonctions qui en rsultent ont un rsultat tout fait dclaratif.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
declare
local
Cache ={ NewDictionary }
in
fun { Fact N }
fun { FactL N Acc }
if N ==1 then Acc
else
if { Dictionary . member Cache N } then Acc * Cache . N
else { FactL N -1 N * Acc }
end
end
end
R ={ FactL N 1}
in
Cache . N := R
R
end
end
20
21
22
2.7.2
Souvent lorsque plusieurs flots contiennent des commandes pour un mme service, il faut
pouvoir les fusionner en envoyant les commandes au service ds que possible peu importe le
flot sur lequel elles sont arrives. Ce comportement nest pas dclaratif car il introduit un nondterminisme observable.
1
2
3
declare
fun { MergeStream As Bs }
I ={ WaitTwo As Bs } in
10
if I ==1 then
case As
of A | Ar then A |{ MergeStream Ar Bs }
end
else
case Bs
of B | Br then B |{ MergeStream As Br }
end
end
4
5
6
7
8
9
10
11
12
13
end
14
15
16
17
18
19
Xs Ys
{ Browse thread { MergeStream 1|3|5|7|9| Xs 2|4|6| Ys } end }
{ Delay 1000}
Xs =11|13| _
Ys =8|10| _
2.8
On peut en utilisant un tat facilement calculer le produit des lments dune liste.
1
2
3
4
5
6
7
fun { ListProd L }
R ={ NewCell 1} in
for E in L do
R := E * @R
end
@R
end
8
9
2.9
On peut utiliser un tat pour crire la fonction Reverse qui renvoie la liste forme des lments
de la liste passe en argument mais dans lordre inverse.
1
2
3
4
5
6
7
8
fun { Reverse Xs }
C ={ NewCell nil }
in
for E in Xs do
C := E | @C
end
@C
end
9
10
2.10
Extension conservatrice
Une extension est sans danger si toutes les instances de cette classe peuvent tre utilises
dans tous les cas o une instance de la classe parent peut ltre.
11
1
2
3
4
5
6
Complments
3.0.1
Lecture de fichier
Un fichier peut tre lu en donnant simplement son nom (exprim comme chane de carcatres,
atome, ou chane de caractre virtuelle) la fonction File.readList. Cet exemple cre un fichier
foo.txt sur le bureau ou dans votre rpertoire utilisateur selon votre systme dexploitation.
1
2
3
4
5
6
7
3.0.2
Ecriture de fichier
Pour crire dans un fichier, on utilise les oprations suivantes. Cet exemple cre un fichier
foo.txt sur le bureau ou dans votre rpertoire utilisateur selon votre systme dexploitation.
1
2
3
4
12