Génie Logiciel avec Ada. 4 février 2013

Dimension: px
Commencer à balayer dès la page:

Download "Génie Logiciel avec Ada. 4 février 2013"

Transcription

1 Génie Logiciel 4 février 2013

2 Plan I. Généralités II. Structures linéaires III. Exceptions IV. Structures arborescentes V. Dictionnaires

3 I. Principes II. Notions propres à la POO I. Principes Chapitre I Généralités III. Conception de l objet II. Notions propres à la POO III. Conception de l objet

4 I. Principes II. Notions propres à la POO I. Principes Chapitre I Généralités III. Conception de l objet II. Notions propres à la POO III. Conception de l objet

5 I. Principes II. Notions propres à la POO I. Principes Chapitre I Généralités III. Conception de l objet II. Notions propres à la POO III. Conception de l objet

6 I. Principes II. Notions propres à la POO III. Conception de l objet La programmation structurée est basée sur une décomposition en actions. La programmation orientée objet travaille avec une décomposition en objet. Les instructions élémentaires sont les mêmes, mais leur regroupement est différent.

7 I. Principes II. Notions propres à la POO III. Conception de l objet La programmation structurée est basée sur une décomposition en actions. La programmation orientée objet travaille avec une décomposition en objet. Les instructions élémentaires sont les mêmes, mais leur regroupement est différent.

8 I. Principes II. Notions propres à la POO III. Conception de l objet La programmation structurée est basée sur une décomposition en actions. La programmation orientée objet travaille avec une décomposition en objet. Les instructions élémentaires sont les mêmes, mais leur regroupement est différent.

9 I. Principes II. Notions propres à la POO III. Conception de l objet On trouve dans l approche objet trois principes fondamentaux : l encapsulation : un objet regroupe à la fois ses attributs et ses opérations associées, l indépendance temporelle : le comportement d un objet est indépendant du contexte dans lequel il est appelé, l indépendance spatiale : les informations relatives à une même entité sont physiquement dans le même module.

10 I. Principes II. Notions propres à la POO III. Conception de l objet On trouve dans l approche objet trois principes fondamentaux : l encapsulation : un objet regroupe à la fois ses attributs et ses opérations associées, l indépendance temporelle : le comportement d un objet est indépendant du contexte dans lequel il est appelé, l indépendance spatiale : les informations relatives à une même entité sont physiquement dans le même module.

11 I. Principes II. Notions propres à la POO III. Conception de l objet On trouve dans l approche objet trois principes fondamentaux : l encapsulation : un objet regroupe à la fois ses attributs et ses opérations associées, l indépendance temporelle : le comportement d un objet est indépendant du contexte dans lequel il est appelé, l indépendance spatiale : les informations relatives à une même entité sont physiquement dans le même module.

12 I. Principes II. Notions propres à la POO III. Conception de l objet La programmation orientée objet apporte de nouvelles notions : notion de classe : une classe regroupe des objets ayant des propriétés et comportements communs (factorisation des propriétés) en Ada package, notion d héritage : une sous-classe est définie à partir d une classe avec des propriétés supplémentaires; la sous-classe hérite des propriétés et des opérations de la classe parente, notion de polymorphisme notion de liaison dynamique : capacité à associer le service surchargé correct en fonction de la référence de la classe, notion de généricité : pour décrire des données et des opérations indépendantes d éléments de la classe.

13 I. Principes II. Notions propres à la POO III. Conception de l objet La programmation orientée objet apporte de nouvelles notions : notion de classe : une classe regroupe des objets ayant des propriétés et comportements communs (factorisation des propriétés) en Ada package, notion d héritage : une sous-classe est définie à partir d une classe avec des propriétés supplémentaires; la sous-classe hérite des propriétés et des opérations de la classe parente, notion de polymorphisme notion de liaison dynamique : capacité à associer le service surchargé correct en fonction de la référence de la classe, notion de généricité : pour décrire des données et des opérations indépendantes d éléments de la classe.

14 I. Principes II. Notions propres à la POO III. Conception de l objet La programmation orientée objet apporte de nouvelles notions : notion de classe : une classe regroupe des objets ayant des propriétés et comportements communs (factorisation des propriétés) en Ada package, notion d héritage : une sous-classe est définie à partir d une classe avec des propriétés supplémentaires; la sous-classe hérite des propriétés et des opérations de la classe parente, notion de polymorphisme notion de liaison dynamique : capacité à associer le service surchargé correct en fonction de la référence de la classe, notion de généricité : pour décrire des données et des opérations indépendantes d éléments de la classe.

15 I. Principes II. Notions propres à la POO III. Conception de l objet La programmation orientée objet apporte de nouvelles notions : notion de classe : une classe regroupe des objets ayant des propriétés et comportements communs (factorisation des propriétés) en Ada package, notion d héritage : une sous-classe est définie à partir d une classe avec des propriétés supplémentaires; la sous-classe hérite des propriétés et des opérations de la classe parente, notion de polymorphisme notion de liaison dynamique : capacité à associer le service surchargé correct en fonction de la référence de la classe, notion de généricité : pour décrire des données et des opérations indépendantes d éléments de la classe.

16 I. Principes II. Notions propres à la POO III. Conception de l objet La programmation orientée objet apporte de nouvelles notions : notion de classe : une classe regroupe des objets ayant des propriétés et comportements communs (factorisation des propriétés) en Ada package, notion d héritage : une sous-classe est définie à partir d une classe avec des propriétés supplémentaires; la sous-classe hérite des propriétés et des opérations de la classe parente, notion de polymorphisme notion de liaison dynamique : capacité à associer le service surchargé correct en fonction de la référence de la classe, notion de généricité : pour décrire des données et des opérations indépendantes d éléments de la classe.

17 I. Principes II. Notions propres à la POO III. Conception de l objet on peut voir trois aspects du polymorphisme : il permet des fonctions de même but, donc de même nom mais dans des classes différentes; par exemple afficher; on parle aussi de surcharge, les fonctions se différencient alors par leurs paramètres (nombre et type) il permet aussi de définir une fonctionnalité sans préciser le type des paramètres; par exemple trier; on parle de généricité, il permet d utiliser une fonctionnalité écrite pour un type sur ses sous-types.

18 I. Principes II. Notions propres à la POO III. Conception de l objet on peut voir trois aspects du polymorphisme : il permet des fonctions de même but, donc de même nom mais dans des classes différentes; par exemple afficher; on parle aussi de surcharge, les fonctions se différencient alors par leurs paramètres (nombre et type) il permet aussi de définir une fonctionnalité sans préciser le type des paramètres; par exemple trier; on parle de généricité, il permet d utiliser une fonctionnalité écrite pour un type sur ses sous-types.

19 I. Principes II. Notions propres à la POO III. Conception de l objet on peut voir trois aspects du polymorphisme : il permet des fonctions de même but, donc de même nom mais dans des classes différentes; par exemple afficher; on parle aussi de surcharge, les fonctions se différencient alors par leurs paramètres (nombre et type) il permet aussi de définir une fonctionnalité sans préciser le type des paramètres; par exemple trier; on parle de généricité, il permet d utiliser une fonctionnalité écrite pour un type sur ses sous-types.

20 I. Principes II. Notions propres à la POO III. Conception de l objet conception de l objet On doit tout d abord établir le plus précisément ce que l on veut faire : c est la phase de spécification. spécifier = construire un modèle abstrait du réel et décrire ce modèle en vue d assurer l adéquation entre produit et utilisation requise du produit. pour représenter le réel on utilise une structure de données structure de données = modèle qui décrit le comportement d un ensemble d informations muni de ses propriétés. Une structure de données peut être vue de l extérieur (valeurs + opérations) et de l intérieur (réalisation concrète).

21 I. Principes II. Notions propres à la POO III. Conception de l objet conception de l objet On doit tout d abord établir le plus précisément ce que l on veut faire : c est la phase de spécification. spécifier = construire un modèle abstrait du réel et décrire ce modèle en vue d assurer l adéquation entre produit et utilisation requise du produit. pour représenter le réel on utilise une structure de données structure de données = modèle qui décrit le comportement d un ensemble d informations muni de ses propriétés. Une structure de données peut être vue de l extérieur (valeurs + opérations) et de l intérieur (réalisation concrète).

22 I. Principes II. Notions propres à la POO III. Conception de l objet conception de l objet On doit tout d abord établir le plus précisément ce que l on veut faire : c est la phase de spécification. spécifier = construire un modèle abstrait du réel et décrire ce modèle en vue d assurer l adéquation entre produit et utilisation requise du produit. pour représenter le réel on utilise une structure de données structure de données = modèle qui décrit le comportement d un ensemble d informations muni de ses propriétés. Une structure de données peut être vue de l extérieur (valeurs + opérations) et de l intérieur (réalisation concrète).

23 I. Principes II. Notions propres à la POO III. Conception de l objet conception de l objet On doit tout d abord établir le plus précisément ce que l on veut faire : c est la phase de spécification. spécifier = construire un modèle abstrait du réel et décrire ce modèle en vue d assurer l adéquation entre produit et utilisation requise du produit. pour représenter le réel on utilise une structure de données structure de données = modèle qui décrit le comportement d un ensemble d informations muni de ses propriétés. Une structure de données peut être vue de l extérieur (valeurs + opérations) et de l intérieur (réalisation concrète).

24 I. Principes II. Notions propres à la POO III. Conception de l objet étapes spécification fonctionnelle (ou abstraite) : on fait la liste des opérations (avec leurs définitions et restrictions) qui agiront sur les données. C est le document de référence de l utilisateur, spécification opérationnelle : elle consiste en deux étapes description logique : c est l interface entre les deux vues interne et externe; on organise la structure de données en utilisant des structures informatiques classiques (par exemple des tableaux), représentation physique : c est l implémentation complète faite dans un langage de programmation fixé.

25 I. Principes II. Notions propres à la POO III. Conception de l objet étapes spécification fonctionnelle (ou abstraite) : on fait la liste des opérations (avec leurs définitions et restrictions) qui agiront sur les données. C est le document de référence de l utilisateur, spécification opérationnelle : elle consiste en deux étapes description logique : c est l interface entre les deux vues interne et externe; on organise la structure de données en utilisant des structures informatiques classiques (par exemple des tableaux), représentation physique : c est l implémentation complète faite dans un langage de programmation fixé.

26 I. Principes II. Notions propres à la POO III. Conception de l objet étapes spécification fonctionnelle (ou abstraite) : on fait la liste des opérations (avec leurs définitions et restrictions) qui agiront sur les données. C est le document de référence de l utilisateur, spécification opérationnelle : elle consiste en deux étapes description logique : c est l interface entre les deux vues interne et externe; on organise la structure de données en utilisant des structures informatiques classiques (par exemple des tableaux), représentation physique : c est l implémentation complète faite dans un langage de programmation fixé.

27 I. Principes II. Notions propres à la POO III. Conception de l objet étapes spécification fonctionnelle (ou abstraite) : on fait la liste des opérations (avec leurs définitions et restrictions) qui agiront sur les données. C est le document de référence de l utilisateur, spécification opérationnelle : elle consiste en deux étapes description logique : c est l interface entre les deux vues interne et externe; on organise la structure de données en utilisant des structures informatiques classiques (par exemple des tableaux), représentation physique : c est l implémentation complète faite dans un langage de programmation fixé.

28 I. Principes II. Notions propres à la POO III. Conception de l objet pour spécifier un type de données abstrait on fournira 1 type : les noms des types définis 2 utilise : les types abstraits déjà définis utilisés 3 opérations : les opérations avec leur signature( 1 ) 4 préconditions : les restrictions éventuelles d utilisation des opérations 1. la signature d une opération est sa description syntactique

29 I. Principes II. Notions propres à la POO III. Conception de l objet pour spécifier un type de données abstrait on fournira 1 type : les noms des types définis 2 utilise : les types abstraits déjà définis utilisés 3 opérations : les opérations avec leur signature( 1 ) 4 préconditions : les restrictions éventuelles d utilisation des opérations 1. la signature d une opération est sa description syntactique

30 I. Principes II. Notions propres à la POO III. Conception de l objet pour spécifier un type de données abstrait on fournira 1 type : les noms des types définis 2 utilise : les types abstraits déjà définis utilisés 3 opérations : les opérations avec leur signature( 1 ) 4 préconditions : les restrictions éventuelles d utilisation des opérations 1. la signature d une opération est sa description syntactique

31 I. Principes II. Notions propres à la POO III. Conception de l objet pour spécifier un type de données abstrait on fournira 1 type : les noms des types définis 2 utilise : les types abstraits déjà définis utilisés 3 opérations : les opérations avec leur signature( 1 ) 4 préconditions : les restrictions éventuelles d utilisation des opérations 1. la signature d une opération est sa description syntactique

32 I. Exemple II. Pile Chapitre II Structures linéaires III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation

33 I. Exemple II. Pile Chapitre II Structures linéaires III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation

34 I. Exemple II. Pile Chapitre II Structures linéaires III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation

35 I. Exemple II. Pile Chapitre II Structures linéaires III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation

36 I. Exemple II. Pile Chapitre II Structures linéaires III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation

37 I. Exemple II. Pile Chapitre II Structures linéaires III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation

38 I. Exemple II. Pile Chapitre II Structures linéaires III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation

39 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation Une structure de données est linéaire lorsque les données sont en quelque sorte les unes derrière les autres : chaque donnée a une donnée successeur et une donnée prédécesseur exception faite éventuellement des données qui sont aux extrémités. Une fois les données rangées, la structure sera amenée à évoluer par l ajout de nouvelles données ou la suppression de données appartenant à la structure. Selon la façon de procéder à ces modifications, on distinguera plusieurs types de structures.

40 I. Exemple exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation Un robot piloté à distance reçoit différents types d instructions pour se déplacer : en avant, en arrière, à droite, à gauche. Il est de plus muni d une mémoire linéaire qui enregistre la suite d instructions et ne démarre qu une fois toutes les instructions reçues. Par exemple, en avant, en avant, à droite, en avant, à gauche, à gauche, en arrière. Le choix du déplacement dépendra de la façon dont est gérée la mémoire : il choisit soit la première instruction entrée soit la dernière. Dans le premier cas sa mémoire fonctionne comme une file. Dans ce dernier cas sa mémoire fonctionne comme une pile.

41 Génie Logiciel I. Exemple II. Pile 3 Mémoire pile, départ tourné vers le bas III. Généricité IV. File 2 V. Allocation dynamique et pointeur 1 départ VI. Listes chaînées VII. Sémantique de l affectation 0 arrivée

42 Génie Logiciel I. Exemple II. Pile 3 Mémoire file, départ tourné vers le bas III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation départ -2 arrivée

43 I. Exemple II. Pile 1. spécification fonctionnelle 2. description logique 3. représentation physique 4. description logique 5. représentation physique 6. description logique 7. représentation physique III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation Une pile est donc une structure de données linéaire dans laquelle ajout et suppression se font au même bout de la structure : son sommet. On dit qu on empile lorsque l on ajoute un nouvel élément à la pile et cet ajout se fait au sommet de la pile. On dit qu on dépile lorsque l on supprime un élément de la pile et puisque la suppression se fait aussi au sommet de la pile, l élément supprimé est nécessairement le dernier élément à avoir été empilé. Une pile est aussi désignée par l acronyme anglais LIFO (Last In First Out). Une pile permet par exemple à un navigateur (Firefox, IE...) de gérer le bouton reculer d une page ou pour un logiciel de gérer la fonctionnalité undo.

44 spécification fonctionnelle I. Exemple II. Pile 1. spécification fonctionnelle 2. description logique 3. représentation physique 4. description logique 5. représentation physique 6. description logique 7. représentation physique III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation Elle est donc définie par le type de données abstrait pile suivant : type pile utilise type E, type booléen signature initilialiser : pile empiler : (pile,e) pile dépiler : pile pile sommet : pile E vide : pile booléen

45 I. Exemple II. Pile 1. spécification fonctionnelle 2. description logique 3. représentation physique 4. description logique 5. représentation physique 6. description logique 7. représentation physique III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation préconditions axiomes dépiler(p) est défini si et seulement si vide(p)= Faux sommet(p) est défini si et seulement si vide(p)= Faux vide(initilialiser)= Vrai vide(empiler(p,e))=faux dépiler(empiler(p,e))=p sommet(empiler(p,e))= E remarques : les préconditions précisent la restriction du domaine de définition des deux opérations dépiler et sommet les axiomes assurent le fonctionnement LIFO.

46 description logique I. Exemple II. Pile 1. spécification fonctionnelle 2. description logique 3. représentation physique 4. description logique 5. représentation physique 6. description logique 7. représentation physique III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées Pour représenter une pile on utilisera tout d abord un tableau pour stocker les valeurs de type E. Il nous faut de plus un moyen de repérer le sommet de la pile : on utilisera donc un index sur le tableau qui contiendra l indice de la dernière valeur empilée. Pour ne pas avoir deux objets à gérer pour définir une pile, on regroupera ces deux données tableau + index dans une structure d article. VII. Sémantique de l affectation

47 description logique I. Exemple II. Pile 1. spécification fonctionnelle 2. description logique 3. représentation physique 4. description logique 5. représentation physique 6. description logique 7. représentation physique III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées Pour représenter une pile on utilisera tout d abord un tableau pour stocker les valeurs de type E. Il nous faut de plus un moyen de repérer le sommet de la pile : on utilisera donc un index sur le tableau qui contiendra l indice de la dernière valeur empilée. Pour ne pas avoir deux objets à gérer pour définir une pile, on regroupera ces deux données tableau + index dans une structure d article. VII. Sémantique de l affectation

48 description logique I. Exemple II. Pile 1. spécification fonctionnelle 2. description logique 3. représentation physique 4. description logique 5. représentation physique 6. description logique 7. représentation physique III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées Pour représenter une pile on utilisera tout d abord un tableau pour stocker les valeurs de type E. Il nous faut de plus un moyen de repérer le sommet de la pile : on utilisera donc un index sur le tableau qui contiendra l indice de la dernière valeur empilée. Pour ne pas avoir deux objets à gérer pour définir une pile, on regroupera ces deux données tableau + index dans une structure d article. VII. Sémantique de l affectation

49 description logique I. Exemple II. Pile 1. spécification fonctionnelle 2. description logique 3. représentation physique 4. description logique 5. représentation physique 6. description logique 7. représentation physique III. Généricité IV. File V. Allocation dynamique et pointeur On va réaliser une pile d entiers de façon à ce qu elle soit réutilisable. Pour cela on utilisera la notion de paquetage qui représente une unité de bibliothèque utilisable par la clause with que l on utilise par exemple pour appeler les procédures d entrée-sortie. Ada nous permet de séparer spécification fonctionnelle et spécification opérationnelle. VI. Listes chaînées VII. Sémantique de l affectation

50 I. Exemple II. Pile 1. spécification fonctionnelle 2. description logique 3. représentation physique 4. description logique 5. représentation physique 6. description logique 7. représentation physique III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation Dans un fichier toto.ads (de suffixe ads pour Ada Specification) sont déclarés les types implémentant la structure de données les procédures et fonctions de la signature puis dans un fichier toto.adb (de suffixe adb pour Ada Body) seront précisés les corps des procédures et fonctions déclarées dans le fichier toto.ads. Un utilisateur du paquetage toto pourra utiliser tout ce qui est présent dans toto.ads (type et opérations). remarque : le fichier toto.adb peut contenir d autres déclarations servant à la réalisation des opérations de la spécification mais ces opérations n ont pas pour but d être utilisées par un utilisateur du paquetage toto.

51 le fichier pileentier.ads I. Exemple II. Pile 1. spécification fonctionnelle 2. description logique 3. représentation physique 4. description logique 5. représentation physique 6. description logique 7. représentation physique III. Généricité IV. File V. Allocation dynamique et pointeur package pileentier is type contenant is array ( positive range <>) of integer ; type pile is record tabpile : contenant (1..256) ; top : natural ; end record ; procedure initpile (p : out pile ) ; procedure empiler (p : in out pile ; e : in integer ) ; procedure depiler (p : in out pile ) ; function sommet (p : pile ) return integer ; function pilevide (p : pile ) return boolean ; end pileentier ; VI. Listes chaînées VII. Sémantique de l affectation

52 I. Exemple II. Pile 1. spécification fonctionnelle 2. description logique 3. représentation physique 4. description logique 5. représentation physique 6. description logique 7. représentation physique III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées le fichier pileentier.adb package body pileentier is procedure initpile (p : out pile ) is begin p. top := 0; end initpile ; procedure empiler (p : in out pile ; e : in integer ) is begin p. tabpile (p. top+1) := e ; p. top := p. top+1 ; end empiler ; procedure depiler (p : in out pile ) is begin p. top := p.top 1 ; end depiler ; function sommet (p : pile ) return integer is begin return (p. tabpile (p. top )) ; end sommet ; function pilevide (p : pile ) return boolean is begin return (p. top=0) ; end pile vide ; end pileentier ; VII. Sémantique de l affectation

53 I. Exemple II. Pile 1. spécification fonctionnelle 2. description logique 3. représentation physique 4. description logique 5. représentation physique 6. description logique 7. représentation physique III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation Cette version pose certains problèmes : 1 elle ne fonctionne que pour des piles d entiers alors que le mécanisme de la pile est indépendant du type des valeurs qu elle contient 2 empiler(p,e) provoque une erreur si p.top = sommet(p) ou depiler(p) provoque une erreur si p.top = 0 4 la déclaration d une pile ne l initialise pas et donc on ne peut appeler aucune procédure ou fonction si l on n a pas initialisé préalablement la pile. Pour le point 3, l utilisateur à qui on a fourni les spécifications doit connaître les préconditions et donc un usage impropre de sommet ou depiler est de sa responsabilité (d autant qu il a le moyen de tester si une pile est vide). Pour le point 4, l existence de initpile doit s accompagner d un commentaire pour faire comprendre que son usage est indispensable pour toute pile déclarée.

54 I. Exemple II. Pile 1. spécification fonctionnelle 2. description logique 3. représentation physique 4. description logique 5. représentation physique 6. description logique 7. représentation physique III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation Cette version pose certains problèmes : 1 elle ne fonctionne que pour des piles d entiers alors que le mécanisme de la pile est indépendant du type des valeurs qu elle contient 2 empiler(p,e) provoque une erreur si p.top = sommet(p) ou depiler(p) provoque une erreur si p.top = 0 4 la déclaration d une pile ne l initialise pas et donc on ne peut appeler aucune procédure ou fonction si l on n a pas initialisé préalablement la pile. Pour le point 3, l utilisateur à qui on a fourni les spécifications doit connaître les préconditions et donc un usage impropre de sommet ou depiler est de sa responsabilité (d autant qu il a le moyen de tester si une pile est vide). Pour le point 4, l existence de initpile doit s accompagner d un commentaire pour faire comprendre que son usage est indispensable pour toute pile déclarée.

55 I. Exemple II. Pile 1. spécification fonctionnelle 2. description logique 3. représentation physique 4. description logique 5. représentation physique 6. description logique 7. représentation physique III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation Cette version pose certains problèmes : 1 elle ne fonctionne que pour des piles d entiers alors que le mécanisme de la pile est indépendant du type des valeurs qu elle contient 2 empiler(p,e) provoque une erreur si p.top = sommet(p) ou depiler(p) provoque une erreur si p.top = 0 4 la déclaration d une pile ne l initialise pas et donc on ne peut appeler aucune procédure ou fonction si l on n a pas initialisé préalablement la pile. Pour le point 3, l utilisateur à qui on a fourni les spécifications doit connaître les préconditions et donc un usage impropre de sommet ou depiler est de sa responsabilité (d autant qu il a le moyen de tester si une pile est vide). Pour le point 4, l existence de initpile doit s accompagner d un commentaire pour faire comprendre que son usage est indispensable pour toute pile déclarée.

56 I. Exemple II. Pile 1. spécification fonctionnelle 2. description logique 3. représentation physique 4. description logique 5. représentation physique 6. description logique 7. représentation physique III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation Cette version pose certains problèmes : 1 elle ne fonctionne que pour des piles d entiers alors que le mécanisme de la pile est indépendant du type des valeurs qu elle contient 2 empiler(p,e) provoque une erreur si p.top = sommet(p) ou depiler(p) provoque une erreur si p.top = 0 4 la déclaration d une pile ne l initialise pas et donc on ne peut appeler aucune procédure ou fonction si l on n a pas initialisé préalablement la pile. Pour le point 3, l utilisateur à qui on a fourni les spécifications doit connaître les préconditions et donc un usage impropre de sommet ou depiler est de sa responsabilité (d autant qu il a le moyen de tester si une pile est vide). Pour le point 4, l existence de initpile doit s accompagner d un commentaire pour faire comprendre que son usage est indispensable pour toute pile déclarée.

57 I. Exemple II. Pile 1. spécification fonctionnelle 2. description logique 3. représentation physique 4. description logique 5. représentation physique 6. description logique 7. représentation physique III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation Cette version pose certains problèmes : 1 elle ne fonctionne que pour des piles d entiers alors que le mécanisme de la pile est indépendant du type des valeurs qu elle contient 2 empiler(p,e) provoque une erreur si p.top = sommet(p) ou depiler(p) provoque une erreur si p.top = 0 4 la déclaration d une pile ne l initialise pas et donc on ne peut appeler aucune procédure ou fonction si l on n a pas initialisé préalablement la pile. Pour le point 3, l utilisateur à qui on a fourni les spécifications doit connaître les préconditions et donc un usage impropre de sommet ou depiler est de sa responsabilité (d autant qu il a le moyen de tester si une pile est vide). Pour le point 4, l existence de initpile doit s accompagner d un commentaire pour faire comprendre que son usage est indispensable pour toute pile déclarée.

58 I. Exemple II. Pile 1. spécification fonctionnelle 2. description logique 3. représentation physique 4. description logique 5. représentation physique 6. description logique 7. représentation physique III. Généricité IV. File V. Allocation dynamique et pointeur Pour le point 2 (dual du 3), on peut enrichir les spécifications avec en plus dans la signature pilepleine : pile booléen et la précondition supplémentaire empiler(p,e) est défini si et seulement si pilepleine(p)= faux. Enfin pour le point 1, on utilisera le principe de généricité VI. Listes chaînées VII. Sémantique de l affectation

59 Utilisation du paquetage I. Exemple II. Pile 1. spécification fonctionnelle 2. description logique 3. représentation physique 4. description logique 5. représentation physique 6. description logique 7. représentation physique III. Généricité IV. File with pileentier ; use pileentier ; with Ada. Integer Text Io ; use Ada. Integer Text Io ; procedure essaipile is p : pile ; begin initpile (p); for i in loop empiler (p, i ); end loop ; depiler (p); put(sommet(p)); end essaipile ; V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation

60 I. Exemple II. Pile 1. spécification fonctionnelle 2. description logique 3. représentation physique 4. description logique 5. représentation physique 6. description logique 7. représentation physique III. Généricité retour sur le point 4 : exercice 1 : : modifier le paquetage de façon à ce que toute pile déclarée soit initialisée (donc vide). Prévoir alors la possibilité de vider (ou réinitialiser) une pile. IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation

61 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation Les piles fonctionnent de la même façon quelque soit l objet qu elles contiennent. Ada a un mécanisme d abstraction qui permet de définir des paquetages génériques qui seront paramétrés par un certain nombre d informations. En particulier un type peut être générique et c est ce qui nous intéresse en ce qui concerne le fonctionnement des piles et des files. On va définir un type privé d objet. Ce paramétrage permet donc une réutilisation du paquetage générique par instanciation du type d objet que contient la pile. On va rajouter au début de notre fichier pilegenerique.ads les lignes suivantes :

62 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation generic type item is private ; package pilegenerique is.... generic indique que le paquetage est générique le paramètre item est générique et il a le role du type E il est privé et le paquetage ne le connaît pas on réécrit le code en remplaçant integer par item pilegenerique est le nom de ce paquetage

63 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation generic type item is private ; package pilegenerique is.... generic indique que le paquetage est générique le paramètre item est générique et il a le role du type E il est privé et le paquetage ne le connaît pas on réécrit le code en remplaçant integer par item pilegenerique est le nom de ce paquetage

64 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation generic type item is private ; package pilegenerique is.... generic indique que le paquetage est générique le paramètre item est générique et il a le role du type E il est privé et le paquetage ne le connaît pas on réécrit le code en remplaçant integer par item pilegenerique est le nom de ce paquetage

65 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation generic type item is private ; package pilegenerique is.... generic indique que le paquetage est générique le paramètre item est générique et il a le role du type E il est privé et le paquetage ne le connaît pas on réécrit le code en remplaçant integer par item pilegenerique est le nom de ce paquetage

66 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation generic type item is private ; package pilegenerique is.... generic indique que le paquetage est générique le paramètre item est générique et il a le role du type E il est privé et le paquetage ne le connaît pas on réécrit le code en remplaçant integer par item pilegenerique est le nom de ce paquetage

67 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation Pour utiliser de tels paquetages il faudra instancier ce qui est générique soit ici le type de la façon suivante : with pilegenerique ; procedure essaipile gen is package mapiledentier is new pilegenerique ( integer ) ; on instancie le type générique item par integer package mapiledeflottant is new pilegenerique ( float ) ; on instancie le type générique item par float use mapiledentier ; use mapiledeflottant ; Ipile : mapiledentier. pile ; on doit préfixer le type générique pile par le paquetage voulu Fpile : mapiledeflottant. pile ; begin initpile ( Ipile ) ; initpile ( Fpile ) ; i l est inutile de préfixer les fonctionnalités car le compilateur fera la distinction grâce au type du paramètre empiler ( Ipile, 3) ; empiler ( Ipile, 1) ; depiler ( Ipile ) ; empiler ( Fpile, 2.0) ; put (sommet( Ipile)+ integer (sommet( Fpile ))) ; end essaipile gen ;

68 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation On a toujours le problème de limitation de la taille de la pile. De plus le type item étant utilisé dans un tableau de type contenant doit être contraint; on ne peut donc pas instancier le type item à un type tableau ou chaîne de caractères. Enfin, dernière contrariété, l utilisateur connaissant la construction du type pile peut contourner les fonctionnalités proposées par le paquetage et créer ses propres sous-programmes par exemple utiliser le champ top de la pile pour connaître le nombre d éléments de la pile. Le problème viendra alors lorsque la version du paquetage pile sera modifiée. L utilisateur devra alors changer tout son programme.

69 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation Pour les exercices 1 et 2 suivants vous envisagerez deux points de vue : l utilisateur qui se sert uniquement des fonctionnalités fournies par le paquetage le concepteur qui inclut dans le paquetage une nouvelle fonctionnalité (et donc est en droit d utiliser la représentation physique de la pile). exercice 2 : : 1 Ecrire une procédure qui inverse une pile (la pile passée en paramètre doit être dans le même état après exécution de cette procédure) 2 Ecrire une procédure qui copie une pile (la pile passée en paramètre doit être dans le même état après exécution de cette procédure) 3 Ecrire une procédure qui trie une pile d entiers (le plus petit étant au sommet) à l aide d une autre pile.

70 file I. Exemple II. Pile III. Généricité IV. File 1. description logique 2. représentation physique V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation Une file est une structure de données linéaire dans laquelle l ajout se fait à une extrémité la fin (ou queue) et la suppression se fait au début de la structure la tête. On dit qu on enfile lorsque l on ajoute un nouvel élément à la file et on défile lorsque l on supprime un élément de la file. Pour une file vide, après ajout d un élément celui-ci est à la fois début et fin; un deuxième élément viendra derrière lui et il sera la fin de la file. Puisque la suppression se fait au début de la file, l élément supprimé est nécessairement le premier élément à avoir été enfilé. Une file est aussi désignée par l acronyme anglais FIFO (First In First Out). Une file sert à gérer une politique d accès pour laquelle la priorité est donnée par l ordre d arrivée.

71 I. Exemple II. Pile III. Généricité IV. File 1. description logique 2. représentation physique V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation spécification fonctionnelle Elle est donc définie par le type de données abstrait File suivant : type file utilise type E, type booléen signature initilialiser : file enfiler : (file,e) file défiler : file file premier : file E vide : file booléen préconditions défiler(f) est défini si et seulement si vide(f)= Faux premier(f) est défini si et seulement si vide(f)= Faux

72 I. Exemple II. Pile III. Généricité IV. File 1. description logique 2. représentation physique V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation axiomes vide(initilialiser)= Vrai vide(enfiler(f,e))=faux { E si vide(f) premier(enfiler(f,e)) = premier(f) sinon { initilialiser(f) si vide(f) défiler(enfiler(f,e))= enfiler(défiler(f),e) sinon

73 description logique I. Exemple II. Pile III. Généricité IV. File 1. description logique 2. représentation physique V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation Pour représenter une file on utilisera tout d abord un tableau pour stocker les valeurs de type E. Il nous faut de plus un moyen de repérer le début et la fin de la file; on utilisera donc deux index sur le tableau qui contiendront respectivement l indice de la valeur au début de la file et l indice de la dernière valeur enfilée. Pour ne pas avoir trois objets à gérer pour définir une file, on regroupera ces trois données tableau + index + index dans une structure d article.

74 représentation physique I. Exemple II. Pile III. Généricité IV. File 1. description logique 2. représentation physique V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation x x x... x en rouge le début de la file, en bleu la fin. Ici il y a eu 253 ajouts et 2 suppressions. Assez naturellement on peut définir idébut comme l indice de la valeur en début de file. Et à chaque suppression cet indice est incrémenté. ifin comme l indice de la valeur en fin de file. Et à chaque insertion cet indice est incrémenté. Que se passe-t-il s il y a 4 ajouts? solution : on utilise le tableau en anneau pour utiliser les cellules qui ont été libérées par des suppressions.

75 I. Exemple II. Pile III. Généricité IV. File 1. description logique 2. représentation physique V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation x x x x... x x x x On continue par 254 suppressions : x... idébut et ifin sont identiques comme pour une file initialisée alors que cette file n est pas vide. Donc un test de file vide n est pas immédiat.

76 I. Exemple II. Pile III. Généricité IV. File 1. description logique 2. représentation physique V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation Maintenant on supprime la dernière valeur idébut et ifin se sont croisés et la file est vide. Maintenant on ajoute 256 valeurs.

77 I. Exemple II. Pile III. Généricité IV. File 1. description logique 2. représentation physique V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation x x x x x... x x x x idébut et ifin se sont croisés et la file est pleine. Les choses se compliquent. solution : on utilise soit un champ supplémentaire pour la longueur soit une case tampon qui ne pourra pas contenir de valeur

78 I. Exemple II. Pile III. Généricité IV. File 1. description logique 2. représentation physique V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation le fichier filegenerique.ads generic type item is private ; package filegenerique is type contenant is array ( positive range <>) of item ; nb element : constant positive := 256 ; taille : constant positive := nb element +1 ; type file is record tabfile : contenant (1.. taille ) ; top : natural ; bottom : natural ; end record ; procedure i n i t f i l e ( f : out file ) ; procedure enfiler ( f : in out file ; e : in item) ; procedure defiler ( f : in out file ) ; function premier ( f : file ) return item ; function filevide ( f : file ) return boolean ; function filepleine ( f : f ile ) return boolean ; end filegenerique ;

79 I. Exemple II. Pile III. Généricité IV. File 1. description logique 2. représentation physique V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation le fichier filegenerique.adb package body filegenerique is function suivant ( f : file ; n : natural ) return natural is begin if n= taille then return 1 ; else return (n+1) ; end if ; end suivant ; procedure i n i t f i l e ( f : out file ) is begin f. top := 1; f.bottom := 0; end i n i t f i l e ; procedure enfiler ( f : in out file ; e : in item) is begin f. tabfile ( suivant (f, f. bottom)) := e ; f. bottom := suivant (f, f. bottom) ; end enfiler ; procedure defiler ( f : in out file ) is begin f. top := suivant (f, f. top) ; end defiler ; function premier ( f : file ) return item is begin return ( f. tabfile ( f. top )) ; end premier ; function filevide ( f : file ) return boolean is begin return ( f. top=suivant ( f. bottom)) ; end filevide ; function filepleine ( f : file ) return boolean is begin return ( f. top=suivant ( suivant (f, f. bottom ))) ; end filepleine ; end filegenerique ;

80 Allocation dynamique et pointeur I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur 1. pointeur 2. un autre paquetage de pile VI. Listes chaînées VII. Sémantique de l affectation L allocation dynamique de la mémoire permet de réserver ou libérer des zones de mémoire selon les besoins au cours de l exécution d un programme. Pour accéder à ces zones de mémoire on utilisera une référence ou pointeur qui jouera le rôle d une adresse.

81 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur 1. pointeur 2. un autre paquetage de pile VI. Listes chaînées VII. Sémantique de l affectation En Ada, le type associé à ces références est le type access. exemple type integerref is access integer; type floatref is access float; pint : integerref; pflot : floatref; La variable pint contiendra une référence à un entier. Après déclaration cette référence sera vide et vaudra null puisqu aucun espace mémoire n a été référencé. Pour allouer une zone mémoire de référence pint, on fait appel à new : exemple pint : = new integer; Un espace mémoire est réservé pour pouvoir contenir un entier et il sera accessible par la référence pint.

82 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur 1. pointeur 2. un autre paquetage de pile VI. Listes chaînées VII. Sémantique de l affectation remarque : une référence sur un type non contraint est possible mais au moment de l utilisation de new il faudra fixer les contraintes car le compilateur doit connaître la taille de la zone mémoire à réserver. Maintenant pour accéder la zone mémoire dont on connaît la référence par l identifiant id on utilise id.all. L affectation peut aussi être faite au moment de l appel à new. pint. all := 3; pfloat : = new float (2.5);

83 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur 1. pointeur 2. un autre paquetage de pile VI. Listes chaînées VII. Sémantique de l affectation Pour libérer une zone mémoire dont on n a plus besoin, Ada fournit un paquetage générique de libération de la mémoire Ada.Unchecked Deallocation; ses paramètres génériques sont le type des données référencées le type access qui en contient les références. On doit d abord utiliser la clause with puis instancier le paquetage : with Ada. Unchecked Deallocation ; procedure liberer is new Ada. Unchecked Deallocation( integer, integerref ); procedure liberer is new Ada. Unchecked Deallocation( float, floatref ) ;

84 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur 1. pointeur 2. un autre paquetage de pile VI. Listes chaînées VII. Sémantique de l affectation remarques : l identificateur est le même pour tous les types de références mais le compilateur distinguera par le type du paramètre la bonne procédure liberer l appel à liberer(id) aura pour effet d affecter à id l adresse null et de rendre à nouveau disponible l espace mémoire utilisé précédemment par id

85 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur 1. pointeur 2. un autre paquetage de pile VI. Listes chaînées VII. Sémantique de l affectation exemple with Ada. Unchecked Deallocation ; procedure exemple is type integerref is access integer ; procedure liberer is new Ada. Unchecked Deallocation( integer, integerref ); p, q, r, s : integerref ; begin p := new integer (3); q := new integer (5); r := p; r. all := 0; r:= new integer (7); s:= q; liberer (s ); q:= new integer (p. all ); p. all := p. all+4 ; end exemple ;

86 un autre paquetage de pile I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur 1. pointeur 2. un autre paquetage de pile VI. Listes chaînées VII. Sémantique de l affectation On profite de la possibilité de définir une référence sur un type nom contraint pour résoudre le problème du contenant des piles (ou des files) Pour cela on va changer le type générique item en le déclarant non contraint et le type pile contiendra alors des références au type item. C est seulement au moment des appels à empiler que la contrainte devra être définie.

87 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur 1. pointeur 2. un autre paquetage de pile VI. Listes chaînées VII. Sémantique de l affectation piletabgen.ads generic type item(<>) is private ; package piletabgen is type itemref is access item ; type contenant is array ( positive range <>) of itemref ; type pile is record tabpile : contenant (1..256); top : natural ; end record ; procedure initpile (p : out pile ) ; procedure empiler (p : in out pile ; e : in item) ; procedure depiler (p : in out pile ) ; function sommet (p : pile ) return item ; function pile vide (p : pile ) return boolean ; end piletabgen ;

88 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur 1. pointeur 2. un autre paquetage de pile VI. Listes chaînées VII. Sémantique de l affectation piletabgen.adb with Ada. Unchecked Deallocation ; package body piletabgen is procedure initpile (p : out pile ) is begin p. top := 0; end initpile ; procedure empiler (p : in out pile ; e : in item) is begin p. tabpile (p. top+1) := new item ( e) ; p. top := p. top+1 ; end empiler ; procedure depiler (p : in out pile ) is procedure liberer is new Ada. Unchecked Deallocation(item, itemref ); begin liberer (p. tabpile (p. top )) ; p. top := p.top 1 ; end depiler ; function sommet (p : pile ) return item is begin return (p. tabpile (p. top ). all ) ; end sommet ; function pilevide (p : pile ) return boolean is begin return (p. top=0) ; end pilevide ; end piletabgen ;

89 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur 1. pointeur 2. un autre paquetage de pile VI. Listes chaînées VII. Sémantique de l affectation essaipiletabgen.adb with Ada. Text IO ; use Ada. Text IO ; with piletabgen ; procedure essaipiletabgen is package Mapile2Chaine is new piletabgen ( string ) ; use M apile2chaine ; p : Mapile2Chaine. pile ; begin initpile (p); for i in loop empiler (p, integer image( i )); end loop ; put(sommet(p)); for i in loop depiler (p); end loop ; put(sommet(p)); end essaipiletabgen ;

90 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées 1. Déclaration 2. un exemple 3. encore une autre pile! 4. une autre file! 5. d autres structures chaînées 6. types privés VII. Sémantique de l affectation L implémentation précédente a résolu le problème du contenant des piles et des files. Mais nos piles et files restent d une taille fixée. On va donc se servir de l allocation dynamique pour construire piles (et files) de façon à n utiliser que la mémoire nécessaire et suffisante : on empile sur une nouvelle zone de mémoire qui est libérée lors de son dépilement. Pour cela les références de ces zones de mémoire seront stockées dans une zone de mémoire allouée dynamiquement : c est le principe des structures chaînées, on stocke en même temps une valeur et une (des) référence(s) qui permettent l accès à d autres données du même type. On aura une structure que l on peut illustrer ainsi : p v 4 v 3 v 2 v 1

91 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées 1. Déclaration 2. un exemple 3. encore une autre pile! 4. une autre file! 5. d autres structures chaînées 6. types privés VII. Sémantique de l affectation Déclaration En Ada pour construire ce type on fait une déclaration circulaire : type cellule ; type pcell is access cellule ; type cellule is record v : item ; s : pcell ; end record ; Ici le type item peut être générique. Le type cellule est tout d abord déclaré de façon incomplète car il nécessite une référence au type cellule. La déclaration de ce type access est donc faite de façon elle aussi incomplète puis le type cellule est entièrement déclaré.

92 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées 1. Déclaration 2. un exemple 3. encore une autre pile! 4. une autre file! 5. d autres structures chaînées 6. types privés VII. Sémantique de l affectation Donc une variable de type pcell est une référence à une cellule qui est un article à deux champs, l un contenant une valeur et l autre une référence à une autre cellule. On peut utiliser les structures chaînées pour un usage comparable aux tableaux mais sachant que l on n a pas d accès direct aux valeurs stockées.

93 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées 1. Déclaration 2. un exemple 3. encore une autre pile! 4. une autre file! 5. d autres structures chaînées 6. types privés VII. Sémantique de l affectation with Ada. Numerics. Discrete Random procedure creerhasard is subtype TValeur is integer range ; subtype Tlong is natural range ; package HasardValeur is new Ada. Numerics. Discrete Random (TValeur ) ; package Hasardlong is new Ada. Numerics. Discrete Random (Tlong) ; use HasardValeur ; use Hasardlong ; type cellule ; type pcell is access cellule ; type cellule is record v : TValeur ; s : pcell ; end record ; G : HasardValeur. Generator ; Gg : HasardHauteur. Generator ; long : Tlong ; l ist : pcell ; begin l ist :=null ; Reset (G) ; Reset (Gg) ; long :=Random(Gg) ; for k in 1.. long loop list := new cellule ( v => Random(G), s=> l ist ) ; end loop ; end creerhasard ;

94 des piles sans limite! I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées 1. Déclaration 2. un exemple 3. encore une autre pile! 4. une autre file! 5. d autres structures chaînées 6. types privés VII. Sémantique de l affectation On peut remarquer que dans la procédure creerhasard les valeurs ajoutées dans la structure chaînée le sont en tête de structure à la façon d une pile. On va donc réécrire un paquetage générique pile en utilisant les structures chaînées et un paramètre générique non contraint. Attention : aucune précaution ne sera prise pour un usage incorrect de la fonction sommet ou de la procédure depiler.

95 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées 1. Déclaration 2. un exemple 3. encore une autre pile! 4. une autre file! 5. d autres structures chaînées 6. types privés VII. Sémantique de l affectation pile.ads generic type item(<>) is private ; package pile is type itemref is access item ; type cellulep ; type pile is access cellulep ; type cellulep is record v : itemref ; suiv : pile ; end record ; procedure initpile (p : in out pile ) ; procedure empiler (p : in out pile ; x : in item ) ; procedure depiler ( l : in out pile ) ; function sommet (p : pile ) return item ; function pile vide (p : pile ) return boolean ; end pile ;

96 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées 1. Déclaration 2. un exemple 3. encore une autre pile! 4. une autre file! 5. d autres structures chaînées 6. types privés VII. Sémantique de l affectation pile.adb with Ada. Unchecked Deallocation ; package body pile is procedure initpile (p : in out pile ) is begin p := null ; end initpile ; procedure empiler (p : in out pile ; x : in item ) is begin iref := new item ( x ); p := new cellulep ( iref,p) ; end empiler ; procedure depiler (p : in out pile ) is procedure liberer is new Ada. Unchecked Deallocation( cellulep, pile ) ; procedure liberer is new Ada. Unchecked Deallocation(item, itemref ) ; temp : pile := p; begin p := p. suiv ; liberer (temp.v) ; liberer (temp) ; end depiler ; function sommet (p : pile ) return item is begin return (p.v). all ; end sommet ; function pilevide (p : pile ) return boolean is begin return (p=null ) ; end pile vide ; end pile ;

97 et les files alors?! I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées 1. Déclaration 2. un exemple 3. encore une autre pile! 4. une autre file! 5. d autres structures chaînées 6. types privés VII. Sémantique de l affectation Pour les files, on a besoin de gérer les deux extrêmités : le début et la fin de la file. On peut concevoir un paquetage file avec un définition à trois champs : v pour la valeur, debut et fin pour les extrêmités. La difficulté est que lorsque la file est vide les deux champs debut et fin sont égaux à null. Et lorsque la file contient un unique élément alors de nouveau les deux champs debut et fin sont égaux. Il faut donc soigneusement implémenter le fonction vide. Une autre idée, simplifiant le type file utilise une liste chaînée en rond de façon à ce que la dernière valeur pointe sur la première; la file sera alors caractérisée par la référence à la dernière cellule permettant l accès à la première.

98 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées 1. Déclaration 2. un exemple 3. encore une autre pile! 4. une autre file! 5. d autres structures chaînées 6. types privés VII. Sémantique de l affectation enfiler procedure enfiler ( f : in out file ; x : in item ) is temp : file ; iref : itemref ; begin iref := new item ( x ); if f=null then f := new cellulef ( irerf, f ) ; f. suiv := f ; else temp := new cellulef ( iref, f. suiv ) ; f. suiv := temp ; f := temp ; end if ; end enfiler ; exercice 3 : : 1 compléter file.ads et file.adb 2 problème de Joséphus 3 tester les procédures inverser, copier et trier avec le paquetage pile écrites par l utilisateur.

99 listes doublement chaînées I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées 1. Déclaration 2. un exemple 3. encore une autre pile! 4. une autre file! 5. d autres structures chaînées 6. types privés VII. Sémantique de l affectation On peut construire des structures doublement chaînées en ajoutant un champ pred au type cellule. On peut aussi fermer circulairement cette structure double.

100 types privés I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées 1. Déclaration 2. un exemple 3. encore une autre pile! 4. une autre file! 5. d autres structures chaînées 6. types privés VII. Sémantique de l affectation Dans les exercices, on a envisagé les deux points de vue : concepteur et utilisateur. Mais en réalité, dans nos implémentations précédentes rien n empêche l utilisateur d utiliser la représentation physique du type pile (conçue par le concepteur) pour créer ses propres fonctions ou procédures. Par exemple, une fonction qui renvoie la hauteur d une pile avec le type du paquetage pile. function hauteur (p : pile ) return integer is temp : pile := p; c : integer :=0; begin loop exit when temp = null ; c :=c+1 ; temp := temp. s ; end loop ; return c ; end hauteur ;

101 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées 1. Déclaration 2. un exemple 3. encore une autre pile! 4. une autre file! 5. d autres structures chaînées 6. types privés VII. Sémantique de l affectation Évidemment sa réalisation dépend du paquetage choisi et ne sera pas réutilisable avec l autre paquetage pileentier. Il se peut aussi qu il veuille enrichir le type pile pour l associer à un entier qui représentera le nombre d éléments de la pile. Pour éviter ces utilisations hasardeuses, Ada permet la déclaration de types privés dont la réalisation est cachée. Ainsi, les variables de ce type ne seront manipulables qu avec les fonctionnalités fournies par le paquetage.

102 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées 1. Déclaration 2. un exemple 3. encore une autre pile! 4. une autre file! 5. d autres structures chaînées 6. types privés VII. Sémantique de l affectation pile.ads generic type item(<>) is private ; package pile is type pile is private ; procedure initpile (p : in out pile ) ; procedure empiler (p : in out pile ; x : in item ) ; procedure depiler ( l : in out pile ) ; function sommet (p : pile ) return item ; function pile vide (p : pile ) return boolean ; private type itemref is access item ; type cellulep ; type pile is access cellulep ; type cellulep is record v : itemref ; suiv : pile ; end record ; end pile ;

103 danger I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées 1. Déclaration 2. un exemple 3. encore une autre pile! 4. une autre file! 5. d autres structures chaînées 6. types privés VII. Sémantique de l affectation Le corps du paquetage est inchangé. Néanmoins il reste une utilisation possible et potentiellement dangereuse de ces piles. Quelle serait la conséquence de cette suite d instructions? package mapile is new pile ( integer ); p1, p2 : mapile. pile ; begin initpile (p1 ); empiler (p1,2); p2 := p1 ; depiler (p2 ); put(sommet(p1 ));...

104 Sémantique de l affectation I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation 1. Deux sémantiques 2. paquetage avec fonctions 3. type limité 4. Itérateur Dans l affectation précédente p2 := p1, la référence à p1 a été recopiée dans p2. Donc p1 et p2 donnent l accès à la même zone mémoire. On parle alors de sémantique de référence. Lorsque l affectation copie des données on parle de sémantique de copie. Dans le paquetage pile toutes nos procédures modifient le paramètre de type pile à travers une référence. Si, par exemple, il existe plusieurs références à la même pile, l usage de la procédure depiler sur une de ces références rendra inutilisable les autres références. On dit que notre structure de piles est mutable car il existe des primitives qui la modifient.

105 Solutions possibles I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation 1. Deux sémantiques 2. paquetage avec fonctions 3. type limité 4. Itérateur 1 Une première solution consiste à modifier notre paquetage pour que les structures soient non mutables. On veut donc des primitives qui ne modifient pas leurs paramètres effectifs, c est-à-dire uniquement des fonctions. 2 Une deuxième solution nous est proposée en Ada : on peut restreindre un type en le déclarant comme type limité qui empêche l affectation et la comparaison entre des valeurs de ce type.

106 Solutions possibles I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation 1. Deux sémantiques 2. paquetage avec fonctions 3. type limité 4. Itérateur 1 Une première solution consiste à modifier notre paquetage pour que les structures soient non mutables. On veut donc des primitives qui ne modifient pas leurs paramètres effectifs, c est-à-dire uniquement des fonctions. 2 Une deuxième solution nous est proposée en Ada : on peut restreindre un type en le déclarant comme type limité qui empêche l affectation et la comparaison entre des valeurs de ce type.

107 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation 1. Deux sémantiques 2. paquetage avec fonctions 3. type limité 4. Itérateur pilefct.ads generic type item(<>) is private ; package pilefct is type pile is private ; function initpile return pile ; function empiler (p : pile ; x : item ) return pile ; function depiler (p : pile ) return pile ; function sommet (p : pile ) return item ; function pilevide (p : pile ) return boolean ; private type itemref is access item ; type cellulep ; type pile is access cellulep ; type cellulep is record v : itemref ; suiv : pile ; end record ; end pilefct ; Avantage : la structure n est plus mutable Inconvénient : on ne récupère pas de mémoire lorsqu on dépile. exercice 4 : : écrire le fichier pilefct.adb

108 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation 1. Deux sémantiques 2. paquetage avec fonctions 3. type limité 4. Itérateur Dans le fichier pile.ads, il suffit d écrire type pile is limited private ; type limité L affectation et la comparaison restent utilisables là où la structure du type limité est visible, en particulier dans le corps du paquetage. Mais, lorsqu on utilise le paquetage contenant un type limité on ne peut ni affecter ( := ) ni comparer (= ou / =) des variables de ce type. Il est alors nécessaire de rajouter dans les spécifications, donc dans le paquetage ces opérations redéfinies : affectation procedure copier (p: in pile ; pcop : out pile ); comparaison function = (p1,p2 : pile ) return boolean ; En ce qui concerne la deuxième fonction on dit que l on a surchargé l égalité et une comparaison p1=p2 sera traduite par Ada en =(p1,p2).

109 Astuce I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation 1. Deux sémantiques 2. paquetage avec fonctions 3. type limité 4. Itérateur Attention : toutes les comparaisons entre les variables de type pile seront interprétées par la fonction surchargée, y compris la comparaison avec null!!! On aurait donc un problème pour définir la fonction pilevide en particulier. Pour pouvoir comparer deux références à une cellule, on peut dériver le type pile d un type refcell qui lui, ne sera pas limité, mais dans la partie privée pour servir d intermédiaire au type privé limité.

110 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation 1. Deux sémantiques 2. paquetage avec fonctions 3. type limité 4. Itérateur pilelim.ads generic type item is private ; package pilelim is type pile is limited private ; procedure initpile (p : in out pile ) ; procedure empiler (p : in out pile ; x : in item ) ; procedure depiler (p : in out pile ) ; function sommet (p : pile ) return element ; function pilevide (p : pile ) return boolean ; procedure copier (p : in pile ; pcop : out pile ) ; function = (p1,p2 : pile ) return boolean ; private type itemref is access item ; type cellule ; type refcell is access cellule ; type cellule is record v : itemref ; suiv : refcell ; end record ; type pile is new refcell ; end pilelim ; exercice 5 : écrire le fichier pilelim.adb.

111 Itérateur I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation 1. Deux sémantiques 2. paquetage avec fonctions 3. type limité 4. Itérateur Dans les structures de données que nous avons vu nous n avons pas permis à l utilisateur du paquetage avec un type privé de parcourir toute la structure pour en connaître les éléments. Or il se peut que ce besoin se fasse sentir : par exemple pour limiter la longueur d une file d attente ou bien faire passer une requête se trouvant au milieu de la file en tête de file... Or les primitives fournies ne permettent pas directement ce travail. Un itérateur est un mécanisme réutilisable qui permet de traverser toute la structure en étant paramétré par le traitement que l on veut appliquer aux éléments de la structure.

112 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation 1. Deux sémantiques 2. paquetage avec fonctions 3. type limité 4. Itérateur On écrira generic type item is private ; package... is type structure is private ; generic with procedure process (each : in out item) ; procedure Iterateur (Over : in structure ) ; A l instanciation on aura alors la possibilité suivante : procedure traiteritem (Each : in out item) is... procedure traitertout is new instanciation. iterateur ( process => traiteritem ) ;

113 exemple I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation 1. Deux sémantiques 2. paquetage avec fonctions 3. type limité 4. Itérateur Dans pilelim.ads generic with procedure process (Each : in out item) ; procedure Iterateur (Over : in pile ) ; Dans pilelim.adb procedure Iterateur (Over : in pile ) is Temp : refpile := refpile (Over) ; begin loop exit when Temp=null ; process (temp.v) ; Temp :=Temp. suiv ; end loop ; end iterateur ;

114 I. Exemple II. Pile III. Généricité IV. File V. Allocation dynamique et pointeur VI. Listes chaînées VII. Sémantique de l affectation 1. Deux sémantiques 2. paquetage avec fonctions 3. type limité 4. Itérateur exemple (suite) with pilelim ; with ada. integer text io ; use ada. integer text io ; with ada. text io ; use ada text io ; procedure essaiiterateur is package piledentier is new pilelim ( integer ); use piledentier ; procedure decrementer (x : in out inetger ) is begin x:=x 1; end decrementer ; procedure afficher (x : in out integer ) is begin put(x, 5); end afficher ; procedure toutdecrementer is new piledentier. Iterateur ( proce procedure toutafficher is new piledentier. Iterateur ( process p : pildentier. pile ; begin for i in loop empiler (p,x); end loop ; toutafficher (p); new line ; toudecrementer (p); toutafficher (p); new line ; end essaiiterateur ;

115 I. Exemple II. Exceptions prédéfinies I. Exemple Chapitre III Exceptions III. Déclarer une exception IV. Traitement d une exception II. Exceptions prédéfinies III. Déclarer une exception IV. Traitement d une exception

116 I. Exemple II. Exceptions prédéfinies I. Exemple Chapitre III Exceptions III. Déclarer une exception IV. Traitement d une exception II. Exceptions prédéfinies III. Déclarer une exception IV. Traitement d une exception

117 I. Exemple II. Exceptions prédéfinies I. Exemple Chapitre III Exceptions III. Déclarer une exception IV. Traitement d une exception II. Exceptions prédéfinies III. Déclarer une exception IV. Traitement d une exception

118 I. Exemple II. Exceptions prédéfinies I. Exemple Chapitre III Exceptions III. Déclarer une exception IV. Traitement d une exception II. Exceptions prédéfinies III. Déclarer une exception IV. Traitement d une exception

119 I. Exemple Exceptions II. Exceptions prédéfinies III. Déclarer une exception IV. Traitement d une exception Lors de la compilation ou de l exécution d un programme, certaines instructions ne peuvent être exécutées et la compilation ou l exécution est stoppée accompagnée d un message d erreur, par exemple static expression raises constraint error. On dit qu une exception est levée.

120 I. Exemple II. Exceptions prédéfinies III. Déclarer une exception IV. Traitement d une exception Exemple type arcenciel is ( violet, indigo, bleu, vert, jaune, orange, rouge ) ; couleur : arcenciel := rouge ; nuance : arcenciel ; begin nuance := arcenciel succ( couleur ); end ; L appel à arcenciel succ(couleur); provoque une erreur puisque dans le type arcenciel, rouge n a pas de successeur. Il y a différentes exceptions selon les règles du langage qui ne sont pas respectées et un programme peut envisager les erreurs possibles et ainsi prendre en compte ces éventuelles exceptions. bloc couleur : begin nuance := arcenciel succ( couleur ); exception when constraint error => arcenciel first ; end bloc couleur ;

121 exceptions prédéfinies I. Exemple II. Exceptions prédéfinies III. Déclarer une exception IV. Traitement d une exception constraint error : lorsqu on sort des bornes ou bien lorsqu on exécute une opération arithmétique non valide comme une division par zéro program error : lorsqu on ne respecte pas une structure de contrôle comme un appel à un sous-programme non encore élaboré storage error : lorsqu on manque d espace mémoire data error : lorsqu on a lu une valeur ne correspondant pas au type déclaré; elle est contenue dans le paquetage Text IO tasking error : cela concerne les tâches qui sont hors de notre propos

122 I. Exemple II. Exceptions prédéfinies III. Déclarer une exception IV. Traitement d une exception déclarer une exception Pour déclarer une exception on utilise le type exception. On peut déclarer une exception par un identificateur dans un bloc et ainsi définir la portée de cette exception limitée au bloc. La syntaxe est la suivante : monbloc : declare monexception : exception ; begin instructions end monbloc ;

123 lever une exception I. Exemple II. Exceptions prédéfinies III. Déclarer une exception IV. Traitement d une exception 1. lever 2. traiter 3. exemple Les exceptions prédéfinies sont levées implicitement à l exécution. Pour les exceptions déclarées par le programmeur, il faut les lever explicitement par l instruction : raise identificateur exception;

124 traiter une exception I. Exemple II. Exceptions prédéfinies III. Déclarer une exception IV. Traitement d une exception 1. lever 2. traiter 3. exemple traiter une exception c est prendre en compte et gérer cette exception là où elle peut être levée. Dès qu une exception est levée, les instructions de traitement correspondant à l exception levée prennent la main. Le bloc des instructions qui gèrent l exception est introduit par l instruction : exception when identificateur exception1 =>...; when identificateur exception2 =>...;... when others =>...;

125 traiter une exception (suite) I. Exemple II. Exceptions prédéfinies III. Déclarer une exception IV. Traitement d une exception 1. lever 2. traiter 3. exemple L exécution de l unité de programme est donc abandonnée là où est levée l exception au profit de son traitement. Une exception prédéfinie peut être propagée si elle n est pas correctement traitée dans l unité où elle a été levée; elle devra alors être traitée dans une unité appelant la précédente. Une exception déclarée et levée dans un bloc (ou un sous-programme) devra être traitée dans ce bloc (ou ce sous-programme) : elle ne peut être attrapée en dehors. Dans tous les cas si une exception levée n est pas traitée alors l exécution du programme est arrêtée avec un message d erreur.

126 exemple I. Exemple II. Exceptions prédéfinies III. Déclarer une exception IV. Traitement d une exception 1. lever 2. traiter 3. exemple loop bloc saisie : declare borne : exception ; begin put ( donner un entier entre 1 et 10 ) ; get (n) ; new line ; if not (1<=n and n<=10) then raise borne ; end if ; exit ; exception when data error => skip line ; put line ( ce n est pas un entier ; recommencez ) ; when borne => skip line ; put line ( entre 1 et 10! recommencez! ); end bloc saisie ; end loop ;

127 I. Exemple II. Exceptions prédéfinies III. Déclarer une exception IV. Traitement d une exception 1. lever 2. traiter 3. exemple L exception data error est levée à l exécution de get si autre chose qu un entier est saisi au clavier. L exception borne est levée à l exécution de if si l entier saisi n est pas compris entre 1 et 10. L instruction skip line permet de vider le buffer d entrée c est-à-dire le fichier dans lequel sont momentanément stockées les valeurs saisies au clavier. Remarquez bien que l instruction exit n est pas exécutée si une exception est levée; par conséquent la boucle loop se poursuit jusqu à ce qu il n y ait plus d exception levée.

128 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL I. Structure abstraite Chapitre IV Structures de données arborescentes II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL

129 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL I. Structure abstraite Chapitre IV Structures de données arborescentes II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL

130 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL I. Structure abstraite Chapitre IV Structures de données arborescentes II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL

131 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL I. Structure abstraite Chapitre IV Structures de données arborescentes II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL

132 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL I. Structure abstraite Chapitre IV Structures de données arborescentes II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL

133 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL I. Structure abstraite Chapitre IV Structures de données arborescentes II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL

134 I. Structure abstraite Structures de données arborescentes II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL De façon informelle, on parlera de structure de données arborescente lorsqu une donnée a plusieurs successeurs mais un seul prédécesseur, sauf pour exactement une donnée qui est sans prédécesseur et appelée racine. On s interessera tout d abord aux arbres binaires dans lesquels chaque donnée a au plus deux successeurs : un fils droit et un fils gauche.

135 I. Structure abstraite 1. définition 2. fonctions sur les arbres binaires 3. dénombrement des arbres binaires 4. numérotation hiérarchique des arbres binaires II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche Arbres binaires : définition Définition L ensemble AB des arbres binaires est défini inductivement par la formule suivante AB = + r,ab,ab Un arbre binaire α est donc un triplet α = (x,g,d) où x est une valeur à la racine de α et g et d sont deux arbres binaires appelés respectivement sous-arbre gauche et sous-arbre droit de α que l on notera g(α) et d(α). g(α) et d(α) auront eux-mêmes chacun une racine qui sera alors un noeud (dit interne) de α. VI. les arbres AVL

136 I. Structure abstraite 1. définition 2. fonctions sur les arbres binaires 3. dénombrement des arbres binaires 4. numérotation hiérarchique des arbres binaires II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche fonctions On définit inductivement sur AB les fonctions suivantes taille : t( ) = 0 et t(r,g,d) = 1+t(g)+t(d) hauteur : h( ) = 1 et h(r,g,d) = 1+max{h(g),h(d)} feuille : f( ) = 0, f(r,, ) = 1 et f(r,g,d) = f(g)+f(d) si (g,d) (, ) La taille d un arbre est égale au nombre de ses noeuds. La hauteur d un arbre est égale au nombre de ses étages. La fonction feuille calcule le nombre de feuilles d un arbre. VI. les arbres AVL

137 propriétes I. Structure abstraite 1. définition 2. fonctions sur les arbres binaires 3. dénombrement des arbres binaires 4. numérotation hiérarchique des arbres binaires II. Spécification fonctionnelle propriétes t(α) 2 h(α)+1 1 f(α) 2 h(α) Il y a égalité lorsque l arbre est complet. III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL

138 propriétes I. Structure abstraite 1. définition 2. fonctions sur les arbres binaires 3. dénombrement des arbres binaires 4. numérotation hiérarchique des arbres binaires II. Spécification fonctionnelle III. Représentation physique des arbres binaires propriétes t(α) 2 h(α)+1 1 f(α) 2 h(α) Il y a égalité lorsque l arbre est complet. exemple : IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL

139 I. Structure abstraite 1. définition 2. fonctions sur les arbres binaires 3. dénombrement des arbres binaires 4. numérotation hiérarchique des arbres binaires II. Spécification fonctionnelle III. Représentation physique des arbres binaires propriété dénombrement Le nombre b n d arbres binaires de taille n est b n = 1 n+1 Cn 2n. exemple : pour n = 3, b 3 = 5 (à dessiner) IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL

140 I. Structure abstraite 1. définition 2. fonctions sur les arbres binaires 3. dénombrement des arbres binaires 4. numérotation hiérarchique des arbres binaires II. Spécification fonctionnelle numérotation hiérarchique On numérote tous les noeuds à partir de la racine, niveau par niveau, de gauche à droite sur un niveau. Ainsi le fils gauche (c est-à-dire la racine du sous-arbre gauche) d un noeud de numéro n est le noeud numéro 2n et son fils droit a le numéro 2n+1. III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL exemple :

141 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL spécification fonctionnelle On définit le type de données abstrait Arbre Binaire suivant : type Arbre Binaire utilise type E, type booléen signature initilialiser : Arbre Binaire faire arbre : (E,Arbre Binaire,Arbre Binaire) Arbre Binaire fils gauche : Arbre Binaire Arbre Binaire fils droit : Arbre Binaire Arbre Binaire valnoeud : Arbre Binaire E feuille : Arbre Binaire booléen vide : Arbre Binaire booléen

142 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL préconditions valnoeud(a) est défini si et seulement si vide(a)= Faux fils gauche(a) est défini si et seulement si vide(a)= Faux fils droit(a) est défini si et seulement si vide(a)= Faux axiomes vide(initilialiser)= Vrai vide(faire arbre(e,ag,ad))= Faux valnoeud(faire arbre(e,ag,ad))= E fils gauche(faire arbre(e,ag,ad)) = ag fils droit(faire arbre(e,ag,ad)) = ad feuille(faire arbre(e,vide,vide)) = Vrai feuille(vide) = Faux

143 Représentation physique : tableau I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires 1. tableau 2. pointeur IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL On fixe une hauteur maximale h D après la numérotation hiérarchique, on peut pour utiliser un tableau de longueur 2 h(a)+1 1. exemple : h = 3 pour l arbre A B le tableau sera C A B C remarque : ce n est pas économique en mémoire et il est délicat de gérer les indices pour lesquels il n y a pas de valeur.

144 Représentation physique : pointeur I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires 1. tableau 2. pointeur IV. Parcours d un arbre binaire V. Arbres binaires de recherche On crée un nouveau paquetage arbre binaire dans lequel la structure arbre ne sera pas mutable par l usage exclusif de fonctions. On fournira plusieurs itérateurs, selon la façon que l on a de parcourir un arbre binaire. VI. les arbres AVL

145 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires 1. tableau 2. pointeur IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL ab.ads generic type item is private ; package ab is type ab is private ; generic with procedure process (Each : in out item) ; procedure Iterateur (Over : in ab) ; function initarbre return ab ; function fairearbre ( x : element ; ag, ad : ab ) return ab ; function filsgauche ( a : ab ) return ab ; function filsdroit ( a : ab ) return ab ; function valnoeud (a : ab) return item ; function feuille (a : ab) return boolean ; function vide (a : ab) return boolean ; private type noeud ; type ab is access noeud ; type noeud is record v : item ; fg, fd : ab ; end record ; end ab ;

146 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires 1. tableau 2. pointeur IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL ab.adb package body ab is procedure Iterateur (Over : in ab) is... end Iterateur ; function initarbre return ab is begin return ( null ) ;end initarbre ; function fairearbre ( x : item ; ag, ad : ab ) return ab is temp : ab ; begin temp := new noeud (x, ag, ad) ; return (temp) ; end fairearbre ; function filsgauche ( a : ab ) return ab is begin return a. fg ; end filsgauche ; function filsdroit ( a : ab ) return ab is begin return a. fd ; end fils droit ; function valnoeud (a : ab) return item is begin return a.v ; end valnoeud ; function feuille (a : ab) return boolean is begin return ( vide (a. fg ) and vide (a. fd )) ; end feuille ; function vide (a : ab) return boolean is begin return (a = null ) ;end vide ; end ab ;

147 fonctions supplémentaires I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires 1. tableau 2. pointeur IV. Parcours d un arbre binaire V. Arbres binaires de recherche exercice 6 : écrire les fonctions suivantes function h(a : ab) return integer ; calcule la hauteur de l arbre a function taille (a : ab) return natural ; calcule le nombre de noeuds de l arbre a function nbrefeuille (a : ab) return natural ; calcule le nombre de feuilles de l arbre a VI. les arbres AVL

148 parcours d un arbre binaire I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire 1. parcours en profondeur 2. parcours en largeur 3. itérateur hiérarchique V. Arbres binaires de recherche On envisagera deux façons de parcourir tous les noeuds d un arbre : le parcours dit en profondeur à main gauche le parcours niveau par niveau de gauche à droite sur chaque niveau dit parcours en largeur. VI. les arbres AVL

149 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire 1. parcours en profondeur 2. parcours en largeur 3. itérateur hiérarchique V. Arbres binaires de recherche VI. les arbres AVL parcours en profondeur Ce parcours part de la racine de l arbre et va toujours le plus à gauche possible. Lorsque le sous-arbre gauche d un noeud est vide on passe alors sur la racine du sous-arbre droit s il existe et on reprend le chemin le plus à gauche possible. Sinon on remonte sur le père de ce noeud, on passe alors à la racine du sous-arbre droit pour reprendre à partir de là le chemin le plus à gauche possible. Si on remonte sur le père d un noeud en venant de son sous-arbre droit, c est que tous les noeuds de l arbre dont ce père est racine ont été visités. Ce principe est donc récursif, puisque l on applique sur chaque noeud la même procédure.

150 visite des noeuds I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire 1. parcours en profondeur 2. parcours en largeur 3. itérateur hiérarchique V. Arbres binaires de recherche VI. les arbres AVL Dans ce parcours, chaque noeud est vu trois fois, dans l ordre suivant : 1 en descente 2 en montée gauche 3 en montée droite Ce parcours donne lieu à trois itérateurs selon que l on considère chaque noeud au premier, deuxième ou troisième passage. On parlera d itérateurs respectivement préfixe, infixe et suffixe.

151 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire 1. parcours en profondeur 2. parcours en largeur 3. itérateur hiérarchique V. Arbres binaires de recherche procedure iterateurp (a : in ab) is begin if not ( vide (a)) then process (valnoeud(a)) ; iterateurp ( filsgauche (a)) ; iterateurp ( filsdroit (a)) ; end end iterateurp ; procedure iterateuri (a : in ab) is begin if not ( vide (a)) then iterateuri ( filsgauche (a)) ; process (valnoeud(a)) ; iterateuri ( filsdroit (a)) ; end if ; end iterateuri ; procedure iterateurs (a : in ab) is begin if not ( vide (a)) then iterateurs ( filsgauche (a)) ; iterateurs ( filsdroit (a)) ; process (valnoeud(a)) ; end if ; end iterateuri ; VI. les arbres AVL

152 parcours en largeur I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire 1. parcours en profondeur 2. parcours en largeur 3. itérateur hiérarchique V. Arbres binaires de recherche VI. les arbres AVL On parcourt l arbre binaire selon sa numérotation hiérarchique; si un arbre est représenté par un tableau alors le parcours en largeur se réduit à une lecture du tableau depuis le premier jusqu au dernier élément. Si l arbre est représenté par un type pointeur, il faut alors pour chaque noeud visiter ses deux fils (dans l ordre gauche - droite) seulement après avoir vu tous les autres noeuds du même niveau que lui et tous les noeuds du niveau de ses fils qui se trouvent à leur gauche. Pour pouvoir conserver cet ordre de visite, on utilisera une file de noeuds dans laquelle on enfilera successivement les fils de l élément de tête juste avant de le défiler.

153 itérateur hiérarchique I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire 1. parcours en profondeur 2. parcours en largeur 3. itérateur hiérarchique V. Arbres binaires de recherche VI. les arbres AVL Ne pas oublier la clause with file; procedure iterateurhierar (a : in ab) is package filedarbre is new file (ab) ; use filedarbre ; f : filedarbre. f ile ; aa : ab ; begin i n i t f i l e ( f ) ; if not ( vide (a)) then enfiler (f,a) ; loop exit when filevide ( f ) ; aa := premier( f ) ; defiler ( f ) ; process (valnoeud(aa)) ; if not ( vide ( filsgauche (aa))) then enfiler (f, filsgauche (aa)) ; end if ; if not ( vide ( fildroit (aa))) then enfiler (f, filsdroit (aa)) ; end if ; end loop ; end iterateurhierar ;

154 arbres binaires de recherche I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL Un arbre binaire de recherche est une structure d arbre binaire dont les noeuds contiennent des valeurs totalement ordonnables : cela permet de ranger ces informations selon leur ordre respectif dans un arbre binaire.

155 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL Définition Définition Un arbre binaire de recherche est un arbre binaire dans lequel, pour chaque noeud contenant une valeur v, les valeurs contenues dans son sous-arbre gauche sont inférieures à v et les valeurs contenues dans son sous-arbre droit sont supérieures à v. On peut faire plusieurs remarques le parcours infixe d ABR fournit la liste des valeurs triées en ordre croissant la plus petite valeur est nécessairement sur le premier noeud du parcours infixe qui n a pas de sous-arbre gauche soit le noeud qui est le plus à gauche. de même, la plus grande valeur est nécessairement sur le dernier noeud du parcours infixe qui n a pas de sous-arbre droit soit le noeud qui est le plus à droite.

156 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL Définition Définition Un arbre binaire de recherche est un arbre binaire dans lequel, pour chaque noeud contenant une valeur v, les valeurs contenues dans son sous-arbre gauche sont inférieures à v et les valeurs contenues dans son sous-arbre droit sont supérieures à v. On peut faire plusieurs remarques le parcours infixe d ABR fournit la liste des valeurs triées en ordre croissant la plus petite valeur est nécessairement sur le premier noeud du parcours infixe qui n a pas de sous-arbre gauche soit le noeud qui est le plus à gauche. de même, la plus grande valeur est nécessairement sur le dernier noeud du parcours infixe qui n a pas de sous-arbre droit soit le noeud qui est le plus à droite.

157 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL Définition Définition Un arbre binaire de recherche est un arbre binaire dans lequel, pour chaque noeud contenant une valeur v, les valeurs contenues dans son sous-arbre gauche sont inférieures à v et les valeurs contenues dans son sous-arbre droit sont supérieures à v. On peut faire plusieurs remarques le parcours infixe d ABR fournit la liste des valeurs triées en ordre croissant la plus petite valeur est nécessairement sur le premier noeud du parcours infixe qui n a pas de sous-arbre gauche soit le noeud qui est le plus à gauche. de même, la plus grande valeur est nécessairement sur le dernier noeud du parcours infixe qui n a pas de sous-arbre droit soit le noeud qui est le plus à droite.

158 exemple I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires 7 IV. Parcours d un arbre binaire 4 11 V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL

159 Implémentation I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL On utilisera le même type que dans les paragraphes précédents mais la manipulation des ABR nécessite le maintien de leur caractérisation et l insertion ou la suppression d une valeur ne peut pas se faire simplement. Pour profiter de la manipulation des arbres binaires et spécialiser l usage des ABR on va créer un paquetage enfant du paquetage ab.

160 abr.ads I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL generic package ab. recherche is subtype abr is ab ; generic with function compare (un, deux : item) return boolean function ajouterfeuille (X : Element ; A : abr ) return abr ; generic with function compare (un, deux : item) return boolean function supprimer (X : Element ;A : abr) return abr ; generic with procedure process (Each : in out Element ) ; procedure Iterateuri (Over : in abr ) ; end ab. recherche ;

161 utilisation I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL Pour l instanciation il faudra tout d abord instancier le paquetage parent arbre binaire avec le type effectif du type générique element, par exemple package mesarbres is new ab(item => integer ); use mesarbres ; puis instancier le paquetage enfant avec l instanciation de son père package mesabr is new mesarbres. recherche ; use mesabr ;

162 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL pour utiliser les procedures il faut instancier la fonction compare, par exemple function Comparerentier (Un,Deux : integer ) return boolean is begin return (Un<Deux) ; end Comparerentier ; function AjoutAbr is new mesabr. ajouterfeuille (Compare=>Comparerentier ) ; function SuppAbr is new mesabr. Supprimer (Compare=>Comparerentier ) ; pour utiliser la procedure iterateuri il faut instancier la fonction process, par exemple procedure affiche (x : in out integer ) is begin put (x,4) ; end affiche ; procedure affichageinfixe is new mesabr. iterateuri ( process=>affiche ) ;

163 insertion d une valeur I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL Pour insérer une nouvelle valeur x, il faut créer un noeud pour la recevoir. On peut choisir de créer une feuille, ou bien de mettre la valeur à la racine ou à n importe quel niveau. Dans ces deux derniers cas la remise en ordre de l ABR nécessite de nombreuses manipulations. On choisira de créer une feuille : c est une procédure récursive qui descend dans l arbre jusqu à la feuille virtuelle qui contiendra la valeur x, puis on crée cette feuille.

164 exemple I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire On veut insérer la valeur 3 : V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL

165 exemple I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire On a inséré la valeur 3 : V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL

166 fonction d insertion I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL function ajouterfeuille (x : in item ; a : abr) return abr is begin if vide (a) then return ( fairearbre (x,a,a)) ; elsif compare (x, valnoeud(a)) then a. fg := ajouterfeuille (x,a.g) ; return a ; else a. fd := ajouterfeuille (x,a.d) ; return a ; end if ; end ajouterfeuille ;

167 suppression d une valeur I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL Il faut tout d abord trouver le noeud qui contient la valeur à supprimer : si c est une feuille, on la supprime sinon on envisage les deux cas suivants : ce noeud n a qu un fils, alors on le remplace par son fils; ce noeud a deux fils, alors, pour conserver la structure d ABR on peut le remplacer soit par celui qui lui est immédiatement inférieur soit le plus grand élément de son sous-arbre gauche soit celui qui lui est immédiatement supérieur soit le plus petit élément de son sous-arbre droit.

168 exemple I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires On veut supprimer la valeur 12 : 7 IV. Parcours d un arbre binaire 4 11 V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL

169 exemple I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire On a supprimé la valeur 12 : V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL

170 exemple I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire On veut supprimer la valeur 7 : V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL

171 exemple I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire On a supprimé la valeur 7 : V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL

172 I. Structure abstraite suppression du maximum dans un ABR II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL function Max(a : abr ) return item is begin if not vide (a) then if vide ( filsdroit (a)) then return valnoeud(a) ; else return Max( filsdroit (a)) ;end if ;end if ; end Max ; procedure supprimermax (a : in out abr ) is begin if vide ( filsdroit (a)) then a :=filsgauche (a) ; else supprimermax ( filsdroit (a)) ;end if ; end supprimermax ;

173 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL suppression d une valeur dans un ABR function supprimer (x : item ;a : abr) return abr is begin if vide (a) then return initarbre ; x est à gauche elsif compare(x, valnoeud(a)) then a. fg :=supprimer (x, filsgauche (a)) ; return (a) ; x est à droite elsif x/ = valnoeud(a) then a. fd :=supprimer (x, filsdroit (a)) ; return a ; x est la racine de a a est une feuille elsif feuille (a) then return initarbre ; a n a qu un f i l s droit elsif vide ( filsgauche (A)) then return filsdroit (A) ; a n a pas qu un f i l s gauche elsif vide ( filsdroit (A)) then return filsgauche (A) ; a possède 2 f i l s else a.v :=max( filsgauche (A)) ; supprimermax (a. fg ) ; return a ; end if ; end supprimer ;

174 recherche I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL La recherche s effectue récursivement comme une recherche dichotomique function rechabr (a : abr ; x : item) return boolean is begin if vide (a) then return false ; elsif x = valnoeud(a) then return true ; elsif compare(x, valnoeud(a)) then return rechabr (a.g); else return rechabr (a.d) ; end if ; end rechabr ;

175 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche 1. Définition 2. Implémentation 3. insertion d une valeur 4. suppression d une valeur 5. recherche 6. avantages et inconvénients des ABR VI. les arbres AVL avantages et inconvénients des ABR Si les arbres sont bien équilibrés alors la sturture d ABR est avantageuse : en effet la recherche se fait en un temps proportionnel à la hauteur et un arbre de hauteur 10 par exemple peut contenir jusqu à 2000 valeurs environ. Mais si on se contente de nos procédures d ajout aux feuilles on peut engendrer un arbre en peigne qui est presque l équivalent d une structure linéaire. On a donc besoin de maintenir un certain équilibre après une insertion ou une suppression dans un ABR : ce sont les arbres équilibrés ou arbres AVL.

176 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL Figure: Georgy Maximovich Adelson Velski et Evgueni Mikhailovitch Landis

177 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires Définition On définit la fonction d équilibre δ d un arbre par si α est vide alors δ(α) = 0 sinon δ(α) = h(g(α)) h(d(α)) IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL

178 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL Définition On définit la fonction d équilibre δ d un arbre par si α est vide alors δ(α) = 0 sinon δ(α) = h(g(α)) h(d(α)) Définition Un arbre AVL a α est un ABR tel que pour tout noeud β de α, δ(β) { 1,0,1}. a. Addelson-Velski, Landis

179 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL Définition On définit la fonction d équilibre δ d un arbre par si α est vide alors δ(α) = 0 sinon δ(α) = h(g(α)) h(d(α)) Définition Un arbre AVL a α est un ABR tel que pour tout noeud β de α, δ(β) { 1,0,1}. a. Addelson-Velski, Landis

180 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL Définition On définit la fonction d équilibre δ d un arbre par si α est vide alors δ(α) = 0 sinon δ(α) = h(g(α)) h(d(α)) Définition Un arbre AVL a α est un ABR tel que pour tout noeud β de α, δ(β) { 1,0,1}. a. Addelson-Velski, Landis

181 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche Propriété soit un AVL à n noeuds de hauteur h; on a l inégalité suivante log 2 (1+n) 1+h 1,44log 2 (2+n) remarque si h est codé sur un octet (0 h 255) alors on peut représenter des AVL ayant jusqu à noeuds. VI. les arbres AVL

182 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche Propriété soit un AVL à n noeuds de hauteur h; on a l inégalité suivante log 2 (1+n) 1+h 1,44log 2 (2+n) remarque si h est codé sur un octet (0 h 255) alors on peut représenter des AVL ayant jusqu à noeuds. VI. les arbres AVL

183 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL Pour implémenter un AVL, le même type que pour les ABR sera utilisé. On utilisera donc les fonctionnalités des ABR auxquelles on ajoutera ces deux procédures de rééquilibrages (des rotations) ainsi qu une fonction de test d équilibre. Cees procédures de rééquilibrages seront utilisées après chaque insertion d une valeur sur le sous-arbre qui ne sera plus équilibré du fait de cette insertion. On disposera deux types de rotations : rotation gauche et rotation droite.

184 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL Dans l arbre ABR ci-dessous on a d < b < e < a < c et le déséquilibre provient de la différence de hauteur entre le sous-arbre droit de a et son sous-arbre gauche. d b On va donc effectuer une rotation droite qui va faire monter b d un niveau et baisser a d un niveau. b a e c a d e c

185 I. Structure abstraite exemple de rotation droite II. Spécification fonctionnelle III. Représentation physique des arbres binaires 12 IV. Parcours d un arbre binaire 9 15 V. Arbres binaires de recherche VI. les arbres AVL 3 7

186 I. Structure abstraite exemple de rotation droite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL

187 I. Structure abstraite exemple de rotation droite II. Spécification fonctionnelle III. Représentation physique des arbres binaires 12 IV. Parcours d un arbre binaire 5 15 V. Arbres binaires de recherche VI. les arbres AVL

188 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche procédure rotation droite procedure rd(a : in out avl ) is ad, agg, agd : avl ; begin ad := filsdroit (a ); agg := filsgauche ( filsgauche (a )); agd := filsdroit ( filsgauche (a )); faireavl (agd, valnoeud(a),agd,ad) ; faireavl (a, valnoeud( filsgauche (a)),agg,agd) ; end rd ; VI. les arbres AVL

189 I. Structure abstraite II. Spécification fonctionnelle III. Représentation physique des arbres binaires IV. Parcours d un arbre binaire V. Arbres binaires de recherche VI. les arbres AVL procédure d ajout On suppose écrites les fonctions h (qui renvoie la hauteur d un arbre), avlvide (qui teste si l arbre est vide), avl (qui teste si l arbre est bien équilibré). procedure ajoutavl (x : in integer ; a : in out avl ) is begin if avlvide (a) then faireavl (a,x,a,a) ; else if (x < valnoeud(a)) then ajoutavl (x,a.g) ; else ajoutavl (x,a.d) ; end if ; end if ; if avl (a) then null ; elsif h(a.g)>h(a.d) then rd(a) ; else rg (a) ; end if ; end ajoutavl ;

190 I. Spécification fonctionnelle II. Description logique Chapitre V Dictionnaires I. Spécification fonctionnelle II. Description logique

191 I. Spécification fonctionnelle II. Description logique Chapitre V Dictionnaires I. Spécification fonctionnelle II. Description logique

192 I. Spécification fonctionnelle II. Description logique Dictionnaires On a vu des structures de données pour stocker et ranger des données selon certains critères : critères d accès pour les piles et les files et critères d ordre pour les ABR. On va s intéresser maintenant à la notion de dictionnaire Définition un dictionnaire est un ensemble de couples (clef, valeur) tel que, pour une clef donnée, il existe au plus un élément du dictionnaire. Un élément du dictionnaire est formé d une clef et d un certain nombre d informations qui constituent la valeur de l élément. Ce dictionnaire peut évoluer par insertion, suppression, modification d une valeur de clef donnée et enfin on doit pouvoir rechercher un élément par sa clef.

193 I. Spécification fonctionnelle II. Description logique type table utilise type Clef, type Valeur signature vide : table Spécification fonctionnelle insérer : (table,clef, valeur) table retirer : (table, Clef) table modifier : (table, Clef, valeur) table existe : (table, Clef) booléen informer : (table, Clef) Valeur préconditions insérer(t,c,v) est défini si et seulement si existe(t,c)= Faux retirer(t,c) est défini si et seulement si existe(t,c)= Vrai modifier(t,c,v) est défini si et seulement si existe(t,c)= Vrai informer(t,c) est défini si et seulement si existe(t,c)= Vrai

194 I. Spécification fonctionnelle II. Description logique axiomes existe(vide,c)= Faux existe(insérer(t,c,v),c) = Vrai existe((insérer(t,c,v),c )= existe(t,c ) si c c retirer(insérer(t,c,v),c)= t retirer(insérer(t,c,v),c )= insérer( retirer(t,c ),c,v) si c c modifier(insérer(t,c,v),c,v )= insérer(t,c,v ) modifier(insérer(t,c,v),c,v )= insérer(modifier(t,c,v ),c,v) si c c informer(insérer(t,c,v),c) = v informer(insérer(t,c,v),c ) = informer(t,c ) si c c

195 Description logique I. Spécification fonctionnelle II. Description logique Plusieurs solutions peuvent être envisagées pour représenter un dictionnaire; les principales sont : 1 listes chaînées de (clef, valeur) 2 arbres binaires de recherche de (clef, valeur) ordonnés selon les clefs 3 tables de hachage la première solution n est pas efficace pour retirer, modifier ou informer puisqu on peut être amener à parcourir toute la liste. La deuxième solution ne sera efficace que si l on sait équilibrer les ABR et classer les clefs. On va s intéresser à la troisième solution.

196 I. Spécification fonctionnelle II. Description logique Tables de hachage Une table de hachage est un tableau indexé par des entiers (en général) contenant les couples clef-valeur. L indexation est réalisée par une fonction de hachage qui associe à chaque clef un index. Cette fonction doit être injective pour éviter une collision (deux clefs différentes ont le même indices). Elle doit de plus assurer une bonne dispersion des valeurs dans le tableau. Par exemple en Java il existe une fonction de hachage standard des chaînes de caractères : function Hash (S : in String ; M : in Positive ) return Natural is type Hashed is mod Natural Last ; H : Hashed := 0; begin for I in S Range loop H := 31 H + Hashed(Character Pos(S( I ))); end loop ; return Natural (H) mod M; end Hash;

197 I. Spécification fonctionnelle II. Description logique Hashed est un type modulaire qui contient les entiers compris entre 0 et Natural Last 1 et dont les opérations arithmétiques ramènent le résultat à cet intervalle par opération de modulo (circulairement). Cela évite des dépassements de capacité et la levée de l erreur Constraint Error qui peut s en suivre. Character Pos(S(I)) renvoie le code ASCII de la (I 1)-ème lettre de la chaîne S. La somme finale est ramenée modulo M de façon à l utiliser dans un tableau indexé de 0 à M-1. exemple : Hash( hi,100) = 101+( ) = 37, Hash( ho,100) = 101+( ) = 43

198 I. Spécification fonctionnelle II. Description logique Difficultés En pratique il est difficile de trouver des fonctions de hachage qui évitent toute collision, en particulier lorsque les clefs appartiennent à des ensembles potentiellement infinis comme les chaînes de caractères. Pour éviter ces collisions on peut prévoir un tableau trop grand : c est gourmand en mémoire et pas toujours possible transférer dans un tableau plus grand au moment d une collision : c est gourmand en temps changer la fonction de hachage : il faut tout recalculer en admettant qu on trouve une fonction de hachage meilleure utiliser des dictionnaires secondaires : on aura alors un dictionnaire de dictionnaires La dernière solution nécessite un bon équilibre dans la répartition dans les dictionnaires secondaires qui eux-même doivent être exempts de collision.

199 I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique

200 I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique Chapitre VI Files de priorité I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique

201 I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique Chapitre VI Files de priorité I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique

202 I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique Chapitre VI Files de priorité I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique

203 I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique Chapitre VI Files de priorité I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique

204 I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique Nous avons déjà vu des files dont le fonctionnement s apparente à la polotique de priorité : premier arrivé premier servi. Plus globalement on va s intéresser à des files de priorité qui sont des ensembles de données surlequel est définie une fonction de priorité. Cette fonction permet alors le retrait de l élément le plus prioritaire. Les spécifications fonctionnelles d une file de priorité va ressembler à celles des files, mais la suppression et la consultation seront conditionnées par la fonction de priorité. Cela revient à supposer que les éléments de cette file de priorité sont classées.

205 I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique type file de priorité utilise type Booléen, type Elément signature Spécifications fonctionnelles init : file de priorité insérer : (file de priorité, Elément) file de priorité supprimer : file de priorité file de priorité premier : file de priorité Elément vide : file de priorité booléen préconditions supprimer(f) est défini si et seulement si vide(f)= Faux premier(f) est défini si et seulement si vide(f)= Faux

206 I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique axiomes vide(initilialiser)= Vrai vide(insérer(f,e))=faux { premier(insérer(f,e)) = E si vide(f) ou E a priorité sur premier(f) premier(f) sinon supprimer(insérer(f,e))= f si vide(f) ou E a priorité sur premier(f) insérer(supprimer(f), E) sinon

207 I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique Description logique On peut utiliser une liste chaînée ou bien un tableau en classant les éléments mais dans un tableau une insertion peut couter cher et dans une liste la recherche de l emplacement où insérer peut aussi coûter cher. On va donc introduire une structure de donnée d arbre binaire ayant deux caractéristiques, l une permettant de minimiser le coût d une insertion par rapport à une structure linéaire et l autre de ne pas avoir de trou dans l arbre. De façon informelle, ces arbres seront presque complétement remplis et triés de haut en bas.

208 Tas I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique Définition Un tas est un arbre binaire ayant les deux caractéristiques suivantes : arbre parfait : c est un arbre binaire dont tous les niveaux hiérarchiques sont remplis, sauf éventuellement le dernier dans lequel toutes les feuilles sont le plus à gauche possible. arbre tournoi : c est un arbre binaire dont toutes les valeurs sont croissantes depuis la racine vers les feuilles. Un tas (heap en anglais) est un arbre binaire parfait et tournoi.

209 I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique exemple Remarque : on peut aussi décider que les valeurs seront décroissantes depuis la racine vers les feuilles, selon la fonction de priorité considérée. Exemple :

210 I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique 1. Suppression 2. Insertion Représentation physique Le gros avantage d un arbre parfait est sa compacité qui permet d utiliser la numérotation hiérarchique pour représenter cet arbre dans un tableau dont l indexage correspond au numéro hiérarchique. Exemple : L arbre ci-dessus est représenté par le tableau suivant : i t(i)

211 Remarques I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique 1. Suppression 2. Insertion la valeur prioritaire d un tas est toujours à la racine, d indice 1 le fils gauche d un noeud k a le numéro 2k le fils droit d un noeud k a le numéro 2k +1 le père d un noeud k, pour k > 1 a le numéro k/2

212 Remarques I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique 1. Suppression 2. Insertion la valeur prioritaire d un tas est toujours à la racine, d indice 1 le fils gauche d un noeud k a le numéro 2k le fils droit d un noeud k a le numéro 2k +1 le père d un noeud k, pour k > 1 a le numéro k/2

213 Remarques I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique 1. Suppression 2. Insertion la valeur prioritaire d un tas est toujours à la racine, d indice 1 le fils gauche d un noeud k a le numéro 2k le fils droit d un noeud k a le numéro 2k +1 le père d un noeud k, pour k > 1 a le numéro k/2

214 Remarques I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique 1. Suppression 2. Insertion la valeur prioritaire d un tas est toujours à la racine, d indice 1 le fils gauche d un noeud k a le numéro 2k le fils droit d un noeud k a le numéro 2k +1 le père d un noeud k, pour k > 1 a le numéro k/2

215 Implémentation I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique 1. Suppression 2. Insertion Pour représenter un tas on choisira donc un enregistrement à deux champs : un champ tableau un champ entier qui indiquera l indice de la dernière feuille

216 Suppression I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique 1. Suppression 2. Insertion On sait qui va être supprimer puisque c est l élément qui a priorité, ici dans le tas c est le premier élément du tableau. Mais cette suppression doit se faire en maintenant la structure de tas : on doit 1 supprimer la dernière feuille (au dernier niveau, la plus à droite) pour maintenir un arbre parfait 2 remplacer la racine de l arbre par l élément restant le plus prioritaire.

217 Suppression I. Spécifications fonctionnelles II. Description logique III. Tas la valeur 2 doit être supprimée : IV. Représentation physique 1. Suppression 2. Insertion

218 Suppression I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique 1. Suppression 2. Insertion on supprime la dernière feuille en échangeant la valeur 2 avec la valeur de la dernère feuille

219 Suppression I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique 1. Suppression 2. Insertion On rétablit l ordre de haut en bas par des échanges

220 Suppression I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique 1. Suppression 2. Insertion On rétablit l ordre de haut en bas par des échanges entre la valeur du noeud et le plus petit de ces deux fils

221 Insertion I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique 1. Suppression 2. Insertion Pour l insertion, on procède de même en deux étapes principales : 1 on crée une nouvelle feuille au dernier niveau juste à droite de la dernière feuille avec la valeur insérée pour maintenir un arbre parfait, 2 on rétablit l ordre de haut en bas par échanges depuis la dernière feuille en remontant vers la racine

222 Insertion I. Spécifications fonctionnelles II. Description logique III. Tas On veut insérer la valeur 3 : IV. Représentation physique 1. Suppression 2. Insertion

223 Insertion I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique 1. Suppression 2. Insertion on crée une feuille au dernier niveau pour y mettre la valeur

224 Insertion I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique 1. Suppression 2. Insertion on échange la valeur 3 avec son noeud père s il est supérieur

225 Insertion I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique 1. Suppression 2. Insertion On rétablit l ordre de haut en bas par des échanges

226 Efficacité I. Spécifications fonctionnelles II. Description logique III. Tas IV. Représentation physique 1. Suppression 2. Insertion On sait que pour un arbre α, t(α) 2 h(α)+1 1. Ici pour un arbre parfait de hauteur h on a 2 h 1 < t 2 h+1 1 Sacahnt que les opérations d insertion et de suppression prennent au maximum un temps proportionnel à la hauteur du tas, on peut conclure que pour un tas de n valeurs les deux opérations prennent un temps en log 2 n. Par exemple pour de valeurs une opération de suppression ou d insertion prend un temps de l ordre de 20.

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Arbres binaires de recherche

Arbres binaires de recherche 1 arbre des comparaisons 2 recherche dichotomique l'arbre est recalculé à chaque recherche 2 5 3 4 7 9 1 6 1 2 3 4 5 6 7 9 10 conserver la structure d'arbre au lieu de la reconstruire arbre binaire de

Plus en détail

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement des objets d'une classe Utilisation d'une classe Droit

Plus en détail

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin 2010. Algorithmique 1

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin 2010. Algorithmique 1 Algorithmique 1 Durée : 2h Machines électroniques interdites Tous documents papiers autorisés Il est conseillé de traiter les deux parties dans l ordre du sujet. Veuillez respecter les notations introduites

Plus en détail

Programmer en JAVA. par Tama ([email protected]( [email protected])

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama ([email protected]( [email protected]) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

Algorithmique & programmation

Algorithmique & programmation Algorithmique & programmation Type structuré Article, Enregistrement, Structure Définition de nouveaux types!! On a vu les types simples "! entier, booléen, caractère, chaîne de caractères!! Comment gérer

Plus en détail

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets. Encapsulation L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets. La visibilité dépend des membres : certains membres peuvent être visibles et d'autres

Plus en détail

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation : Algorithmique et programmation : STRUCTURES DE DONNÉES A. Structure et enregistrement 1) Définition et rôle des structures de données en programmation 1.1) Définition : En informatique, une structure de

Plus en détail

Programmation Orientée Objet

Programmation Orientée Objet Université de Pau et des Pays de l Adour Institut Universitaire de Technologie des Pays de l Adour Département Réseaux et Télécommunications 371, rue du Ruisseau BP 201 40004 Mont-de-Marsan Cedex tél :

Plus en détail

as Architecture des Systèmes d Information

as Architecture des Systèmes d Information Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes

Plus en détail

Programmation Objet - Cours II

Programmation Objet - Cours II Programmation Objet - Cours II - Exercices - Page 1 Programmation Objet - Cours II Exercices Auteur : E.Thirion - Dernière mise à jour : 05/07/2015 Les exercices suivants sont en majorité des projets à

Plus en détail

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. [email protected] www.cril.univ-artois.fr/~jabbour

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr www.cril.univ-artois.fr/~jabbour LMI 2 Programmation Orientée Objet POO - Cours 9 Said Jabbour [email protected] www.cril.univ-artois.fr/~jabbour CRIL UMR CNRS 8188 Faculté des Sciences - Univ. Artois Février 2011 Les collections

Plus en détail

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Polymorphisme, la classe Object, les package et la visibilité en Java... 1 Polymorphisme, la classe Object, les package et la visibilité en Java. Polymorphisme, la classe Object, les package et la visibilité en Java.... 1 Polymorphisme.... 1 Le DownCast... 4 La Classe Object....

Plus en détail

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications P.-A. Sunier, HEG-Arc Neuchâtel avec le concours de J. Greub [email protected] http://lgl.isnetne.ch/

Plus en détail

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

Plus en détail

Recherche dans un tableau

Recherche dans un tableau Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6

Plus en détail

Traduction des Langages : Le Compilateur Micro Java

Traduction des Langages : Le Compilateur Micro Java BARABZAN Jean-René OUAHAB Karim TUCITO David 2A IMA Traduction des Langages : Le Compilateur Micro Java µ Page 1 Introduction Le but de ce projet est d écrire en JAVA un compilateur Micro-Java générant

Plus en détail

Auto-évaluation Programmation en Java

Auto-évaluation Programmation en Java Auto-évaluation Programmation en Java Document: f0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INTRODUCTION AUTO-ÉVALUATION PROGRAMMATION EN

Plus en détail

Objets et Programmation. origine des langages orientés-objet

Objets et Programmation. origine des langages orientés-objet Objets et Programmation origine des langages orientés-objet modularité, encapsulation objets, classes, messages exemples en Java héritage, liaison dynamique G. Falquet, Th. Estier CUI Université de Genève

Plus en détail

OCL - Object Constraint Language

OCL - Object Constraint Language OCL - Object Constraint Language Laëtitia Matignon [email protected] Département Informatique - Polytech Lyon Université Claude Bernard Lyon 1 2012-2013 Laëtitia Matignon SIMA - OCL - Object

Plus en détail

Chapitre VI- La validation de la composition.

Chapitre VI- La validation de la composition. Chapitre VI- La validation de la composition. Objectifs du chapitre : Expliquer les conséquences de l utilisation de règles de typage souples dans SEP. Présenter le mécanisme de validation des connexions

Plus en détail

Une introduction à Java

Une introduction à Java Une introduction à Java IFT 287 (Semaine 1) UNIVERSITÉ DE SHERBROOKE 1 Java - Historique Développé par Sun Microsystems en 1994 Inventeur James Gosling (canadien!) Objectif langage sûr (fortement typé)

Plus en détail

Introduction à MATLAB R

Introduction à MATLAB R Introduction à MATLAB R Romain Tavenard 10 septembre 2009 MATLAB R est un environnement de calcul numérique propriétaire orienté vers le calcul matriciel. Il se compose d un langage de programmation, d

Plus en détail

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2 Langage et Concepts de Programmation Objet Travaux Dirigés no2 Pôle Informatique École Nationale Supérieure des Mines de St-Etienne Vous trouverez plus de détails sur les concepts abordés lors de ce TD

Plus en détail

Plan du cours 2014-2015. Cours théoriques. 29 septembre 2014

Plan du cours 2014-2015. Cours théoriques. 29 septembre 2014 numériques et Institut d Astrophysique et de Géophysique (Bât. B5c) Bureau 0/13 email:[email protected] Tél.: 04-3669771 29 septembre 2014 Plan du cours 2014-2015 Cours théoriques 16-09-2014 numériques pour

Plus en détail

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004 Questionnaire d'examen final INF1101 Sigle du cours Nom : Signature : Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004 Professeur(s)

Plus en détail

Classes et Objets en Ocaml.

Classes et Objets en Ocaml. Classes et Objets en Ocaml. Didier Rémy 2001-2002 http://cristal.inria.fr/ remy/mot/2/ http://www.enseignement.polytechnique.fr/profs/informatique/didier.remy/mot/2/ Cours Exercices Slide 1 1. Objets 2.

Plus en détail

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2 Débuter avec EXPRESS Alain Plantec Table des matières 1 Schema 2 2 Entité 2 2.1 Attributs simples................................................ 2 2.2 Attributs collection...............................................

Plus en détail

Initiation à JAVA et à la programmation objet. [email protected]

Initiation à JAVA et à la programmation objet. raphael.bolze@ens-lyon.fr Initiation à JAVA et à la programmation objet [email protected] O b j e c t i f s Découvrir un langage de programmation objet. Découvrir l'environnement java Découvrir les concepts de la programmation

Plus en détail

Premiers Pas en Programmation Objet : les Classes et les Objets

Premiers Pas en Programmation Objet : les Classes et les Objets Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.

Plus en détail

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB www.enseirb.fr/~legal Olivier Augereau Formation UML

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB www.enseirb.fr/~legal Olivier Augereau Formation UML basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB www.enseirb.fr/~legal Olivier Augereau Formation UML http://olivier-augereau.com Sommaire Introduction I) Les bases II) Les diagrammes

Plus en détail

Héritage presque multiple en Java (1/2)

Héritage presque multiple en Java (1/2) Héritage presque multiple en Java (1/2) Utiliser deux classes ou plus dans la définition d'une nouvelle classe peut se faire par composition. class Etudiant{ int numero; Diplome d; float passeexamen(examen

Plus en détail

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. [email protected]

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr . Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 [email protected] LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le

Plus en détail

Structure fonctionnelle d un SGBD

Structure fonctionnelle d un SGBD Fichiers et Disques Structure fonctionnelle d un SGBD Requetes Optimiseur de requetes Operateurs relationnels Methodes d acces Gestion de tampon Gestion de disque BD 1 Fichiers et Disques Lecture : Transfert

Plus en détail

4. Groupement d objets

4. Groupement d objets Conception objet en Java avec BlueJ une approche interactive 4. Groupement d objets Collections et itérateurs David J. Barnes, Michael Kölling version française: Patrice Moreaux Rédigé avec 1.0 Principaux

Plus en détail

TP1 : Initiation à Java et Eclipse

TP1 : Initiation à Java et Eclipse TP1 : Initiation à Java et Eclipse 1 TP1 : Initiation à Java et Eclipse Systèmes d Exploitation Avancés I. Objectifs du TP Ce TP est une introduction au langage Java. Il vous permettra de comprendre les

Plus en détail

Langage Java. Classe de première SI

Langage Java. Classe de première SI Langage Java Table des matières 1. Premiers pas...2 1.1. Introduction...2 1.2. Mon premier programme...2 1.3. Les commentaires...2 2. Les variables et les opérateurs...2 3. La classe Scanner...3 4. Les

Plus en détail

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40 Déroulement du cours Introduction Concepts Java Remarques Langage et Concepts de Programmation Orientée-Objet Gauthier Picard École Nationale Supérieure des Mines de Saint-Étienne [email protected]

Plus en détail

Cours de Programmation 2

Cours de Programmation 2 Cours de Programmation 2 Programmation à moyenne et large échelle 1. Programmation modulaire 2. Programmation orientée objet 3. Programmation concurrente, distribuée 4. Programmation monadique 5. Les programmes

Plus en détail

Cours 1: Java et les objets

Cours 1: Java et les objets Ressources Les interface homme-machine et le langage Java DUT première année Henri Garreta, Faculté des Sciences (Luminy) Cyril Pain-Barre & Sébastien Nedjar, IUT d Aix-Marseille (Aix) Cours 1: infodoc.iut.univ-aix.fr/~ihm/

Plus en détail

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Structure d un programme et Compilation Notions de classe et d objet Syntaxe Cours1 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction sur les types

Plus en détail

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL Cours PL/SQL Langage propre à Oracle basé sur ADA Offre une extension procédurale à SQL PL/SQL permet d utiliser un sous-ensemble du langage SQL des variables, des boucles, des alternatives, des gestions

Plus en détail

UML et les Bases de Données

UML et les Bases de Données CNAM UML et les Bases de Données UML et les Bases de Données. Diagramme de classes / diagramme d objets (UML)...2.. Premier niveau de modélisation des données d une application...2.2. Les éléments de modélisation...2.2..

Plus en détail

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski [email protected]

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski [email protected] Mars 2002 Pour Irène et Marie Legal Notice Copyright c 2002 Patrick Cégielski Université

Plus en détail

Licence Bio Informatique Année 2004-2005. Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Licence Bio Informatique Année 2004-2005. Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose... Université Paris 7 Programmation Objet Licence Bio Informatique Année 2004-2005 TD n 1 - Correction Premiers pas Exercice 1 Hello World parce qu il faut bien commencer par quelque chose... 1. Enregistrez

Plus en détail

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e P r o b l é m a t i q u e OCL : O b j e c t C o n s t r a i n t L a n g u a g e Le langage de contraintes d UML Les différents diagrammes d UML permettent d exprimer certaines contraintes graphiquement

Plus en détail

Définitions. Numéro à préciser. (Durée : )

Définitions. Numéro à préciser. (Durée : ) Numéro à préciser (Durée : ) On étudie dans ce problème l ordre lexicographique pour les mots sur un alphabet fini et plusieurs constructions des cycles de De Bruijn. Les trois parties sont largement indépendantes.

Plus en détail

A QUOI SERVENT LES BASES DE DONNÉES?

A QUOI SERVENT LES BASES DE DONNÉES? BASE DE DONNÉES OBJET Virginie Sans [email protected] A QUOI SERVENT LES BASES DE DONNÉES? Stockage des informations : sur un support informatique pendant une longue période de taille importante accès

Plus en détail

LES TYPES DE DONNÉES DU LANGAGE PASCAL

LES TYPES DE DONNÉES DU LANGAGE PASCAL LES TYPES DE DONNÉES DU LANGAGE PASCAL 75 LES TYPES DE DONNÉES DU LANGAGE PASCAL CHAPITRE 4 OBJECTIFS PRÉSENTER LES NOTIONS D ÉTIQUETTE, DE CONS- TANTE ET DE IABLE DANS LE CONTEXTE DU LAN- GAGE PASCAL.

Plus en détail

F. Barthélemy. 17 mai 2005

F. Barthélemy. 17 mai 2005 Typage de la généricité en Java F. Barthélemy 17 mai 2005 1 Le shéma général La g én éricit é en Java est un ajout r éalis é sur un langage existant depuis d éjà une dizaine d ann ées, avec des contraintes

Plus en détail

Programmation Objet Java Correction

Programmation Objet Java Correction INSA - 4 AE 2007 2008 Durée : 1H00 Contrôle Programmation Objet Java Correction Consignes Tous les documents sont autorisés, mais ils seront peu utiles. Indiquez vos nom et prénom sur chaque feuille. Le

Plus en détail

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa www.degenio.com Novembre 2008

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa www.degenio.com Novembre 2008 Introduction Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa www.degenio.com Novembre 2008 Forms 10g permet l utilisation du JAVA côté client et côté application

Plus en détail

Université de Bangui. Modélisons en UML

Université de Bangui. Modélisons en UML Université de Bangui CRM Modélisons en UML Ce cours a été possible grâce à l initiative d Apollinaire MOLAYE qui m a contacté pour vous faire bénéficier de mes connaissances en nouvelles technologies et

Plus en détail

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1 Chap 4: Analyse syntaxique 1 III- L'analyse syntaxique: 1- Le rôle d'un analyseur syntaxique 2- Grammaires non contextuelles 3- Ecriture d'une grammaire 4- Les méthodes d'analyse 5- L'analyse LL(1) 6-

Plus en détail

TD/TP PAC - Programmation n 3

TD/TP PAC - Programmation n 3 Université Paris Sud Licence d informatique/iup-miage2 Année 2004-2005 Auteur : Frédéric Vernier Semaine : 11-16 octobre 2004 Conditions : sur machine avec les outils standards java web: http://vernier.frederic.free.fr/indexpac.html

Plus en détail

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java Langages objets Introduction M2 Pro CCI, Informatique Emmanuel Waller, LRI, Orsay présentation du module logistique 12 blocs de 4h + 1 bloc 2h = 50h 1h15 cours, 45mn exercices table, 2h TD machine page

Plus en détail

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ; CNAM NFP121 TP 10 19/11/2013 (Séance 5) Objectif Manipuler les exceptions ; 1 Entrées/sorties Exercice 1 : Lire un entier à partir du clavier Ajouter une méthode readint(string message) dans la classe

Plus en détail

Programmation par composants (1/3) Programmation par composants (2/3)

Programmation par composants (1/3) Programmation par composants (2/3) Programmation par composants (1/3) La programmation par composant vise le développement de logiciel par aggrégation de briques logicielles existantes est indépendante de la POO La programmation par composant

Plus en détail

Manuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2

Manuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2 éducalgo Manuel d utilisation 26 juin 2011 Table des matières 1 Tâche à effectuer : écrire un algorithme 2 2 Comment écrire un algorithme? 3 2.1 Avec quoi écrit-on? Avec les boutons d écriture........

Plus en détail

Cours Bases de données 2ème année IUT

Cours Bases de données 2ème année IUT Cours Bases de données 2ème année IUT Cours Bilan : Des vues à PL/SQL corrigé Anne Vilnat http://www.limsi.fr/individu/anne/cours Plan 1 Cas exemple 2 Les tables... 3 Vues et index 4 Privilèges 5 Fonctions

Plus en détail

Algorithmique et programmation : les bases (VBA) Corrigé

Algorithmique et programmation : les bases (VBA) Corrigé PAD INPT ALGORITHMIQUE ET PROGRAMMATION 1 Cours VBA, Semaine 1 mai juin 2006 Corrigé Résumé Ce document décrit l écriture dans le langage VBA des éléments vus en algorithmique. Table des matières 1 Pourquoi

Plus en détail

IFT2255 : Génie logiciel

IFT2255 : Génie logiciel IFT2255 : Génie logiciel Chapitre 6 - Analyse orientée objets Section 1. Introduction à UML Julie Vachon et Houari Sahraoui 6.1. Introduction à UML 1. Vers une approche orientée objet 2. Introduction ti

Plus en détail

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles Types d applications pour la persistance Université de Nice Sophia-Antipolis Version 0.9 28/8/07 Richard Grin Toutes les applications n ont pas une complexité qui nécessite une architecture n- tiers Ce

Plus en détail

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3. 1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this

Plus en détail

Cours 1 : La compilation

Cours 1 : La compilation /38 Interprétation des programmes Cours 1 : La compilation Yann Régis-Gianas [email protected] PPS - Université Denis Diderot Paris 7 2/38 Qu est-ce que la compilation? Vous avez tous déjà

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

Présentation du PL/SQL

Présentation du PL/SQL I Présentation du PL/ Copyright Oracle Corporation, 1998. All rights reserved. Objectifs du Cours A la fin de ce chapitre, vous saurez : Décrire l intéret du PL/ Décrire l utilisation du PL/ pour le développeur

Plus en détail

Styler un document sous OpenOffice 4.0

Styler un document sous OpenOffice 4.0 Mars 2014 Styler un document sous OpenOffice 4.0 Un style est un ensemble de caractéristiques de mise en forme (police, taille, espacement, etc.) qui sert à structurer un document en l organisant de manière

Plus en détail

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes PLAN CYCLE DE VIE D'UN LOGICIEL EXPRESSION DES BESOINS SPÉCIFICATIONS DU LOGICIEL CONCEPTION DU LOGICIEL LA PROGRAMMATION TESTS ET MISE AU POINT DOCUMENTATION CONCLUSION C.Crochepeyre Génie Logiciel Diapason

Plus en détail

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object) Quelques patterns pour la persistance des objets avec DAO Ce cours présente des modèles de conception utilisés pour effectuer la persistance des objets Université de Nice Sophia-Antipolis Version 1.4 30/8/07

Plus en détail

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION) CLASSE RACINE Object ancêtre de toutes les classes RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION) définit donc des méthodes héritées par toutes

Plus en détail

Bases Java - Eclipse / Netbeans

Bases Java - Eclipse / Netbeans Institut Galilée PDJ Année 2014-2015 Master 1 Environnements Java T.P. 1 Bases Java - Eclipse / Netbeans Il existe plusieurs environnements Java. Il est ESSENTIEL d utiliser la bonne version, et un environnement

Plus en détail

Chapitre VIII. Les bases de données. Orientées Objet. Motivation

Chapitre VIII. Les bases de données. Orientées Objet. Motivation Chapitre VIII Motivation Le modèle relationnel connaît un très grand succès et s avère très adéquat pour les applications traditionnelles des bases de données (gestion) Les bases de données Orientées Objet

Plus en détail

Introduction à la programmation concurrente

Introduction à la programmation concurrente Introduction à la programmation concurrente Moniteurs Yann Thoma Reconfigurable and Embedded Digital Systems Institute Haute Ecole d Ingénierie et de Gestion du Canton de Vaud This work is licensed under

Plus en détail

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2 Anne Tasso Java Le livre de premier langage 10 e édition Avec 109 exercices corrigés Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2 Table des matières Avant-propos Organisation de l ouvrage..............................

Plus en détail

3. UML - Unified Modeling Language Diagrammes statiques

3. UML - Unified Modeling Language Diagrammes statiques 3. UML - Unified Modeling Language Diagrammes statiques Laëtitia Matignon [email protected] Département Informatique - Polytech Lyon Université Claude Bernard Lyon 1 2012-2013 Laëtitia Matignon

Plus en détail

Java Licence Professionnelle CISII, 2009-2010. Cours 2 : Classes et Objets

Java Licence Professionnelle CISII, 2009-2010. Cours 2 : Classes et Objets Licence Professionnelle CISII, 2009-2010 Cours 2 : Classes et Objets 1 Classes et Objets Objectifs des LOO : - Manipuler des objets - Découper les programmes suivant les types des objets manipulés - Regrouper

Plus en détail

Sage 100 CRM - Guide de la Fusion Avancée Version 8. Mise à jour : 2015 version 8

Sage 100 CRM - Guide de la Fusion Avancée Version 8. Mise à jour : 2015 version 8 Sage 100 CRM - Guide de la Fusion Avancée Version 8 Mise à jour : 2015 version 8 Composition du progiciel Votre progiciel est composé d un boîtier de rangement comprenant : le cédérom sur lequel est enregistré

Plus en détail

Université Bordeaux 1, Licence Semestre 3 - Algorithmes et struct...

Université Bordeaux 1, Licence Semestre 3 - Algorithmes et struct... Université Bordeaux 1 table des matières Licence Semestre 3 - Algorithmes et structures de données 1 Dernière mise à jour effectuée le 23 Octobre 2013 Piles et Files Déitions Primitives de piles, exemples

Plus en détail

INITIATION AU LANGAGE JAVA

INITIATION AU LANGAGE JAVA INITIATION AU LANGAGE JAVA I. Présentation 1.1 Historique : Au début des années 90, Sun travaillait sur un projet visant à concevoir des logiciels simples et performants exécutés dans des PDA (Personnal

Plus en détail

Le langage VHDL. Eduardo Sanchez EPFL

Le langage VHDL. Eduardo Sanchez EPFL Le langage VHDL Eduardo Sanchez EPFL Livres conseillés: John F. Wakerly Digital design (4th edition) Prentice Hall, 2005 Peter J. Ashenden The designer's guide to VHDL (3rd edition) Morgan Kaufmann, 2008

Plus en détail

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet Programmation VBA Pierre BONNET 21 La programmation VBA Historiquement, la programmation sous Excel avait comme fonction d'automatiser une succession d'actions faites dans la feuille à l'aide de la souris.

Plus en détail

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7 Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Introduction au Langage Java Master Informatique 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin

Plus en détail

Information utiles. [email protected]. webpage : Google+ : http://www.ibisc.univ-evry.fr/ digiusto/

Information utiles. cinzia.digiusto@gmail.com. webpage : Google+ : http://www.ibisc.univ-evry.fr/ digiusto/ Systèmes de gestion de bases de données Introduction Université d Evry Val d Essonne, IBISC utiles email : [email protected] webpage : http://www.ibisc.univ-evry.fr/ digiusto/ Google+ : https://plus.google.com/u/0/b/103572780965897723237/

Plus en détail

.NET - Classe de Log

.NET - Classe de Log .NET - Classe de Log Classe permettant de Logger des données Text Dans tous les projets, il est indispensable de pouvoir stocker de l'information textuelle : Pour le suivi des erreurs Pour le suivi de

Plus en détail

ACTIVITÉ DE PROGRAMMATION

ACTIVITÉ DE PROGRAMMATION ACTIVITÉ DE PROGRAMMATION The purpose of the Implementation Process is to realize a specified system element. ISO/IEC 12207 Sébastien Adam Une introduction 2 Introduction Ø Contenu Utilité de l ordinateur,

Plus en détail

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

Plateforme PAYZEN. Définition de Web-services

Plateforme PAYZEN. Définition de Web-services Plateforme PAYZEN Définition de Web-services Ordre de paiement Version 1.1 Rédaction, Vérification, Approbation Rédaction Vérification Approbation Nom Date/Visa Nom Date/Visa Nom Date/Visa Lyra-Network

Plus en détail

Le langage C. Séance n 4

Le langage C. Séance n 4 Université Paris-Sud 11 Institut de Formation des Ingénieurs Remise à niveau INFORMATIQUE Année 2007-2008 Travaux pratiques d informatique Le langage C Séance n 4 But : Vous devez maîtriser à la fin de

Plus en détail

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE Une application se construit par étapes 1) CAHIER DES CHARGES + ANALYSE FONCTIONNELLE = organisation fonctionnelle (QUE FAIRE) 2) ANALYSE OPERATIONNELLE

Plus en détail

Algorithmique, Structures de données et langage C

Algorithmique, Structures de données et langage C UNIVERSITE PAUL SABATIER TOULOUSE III Algorithmique, Structures de données et langage C L3 IUP AISEM/ICM Janvier 2005 J.M. ENJALBERT Chapitre 1 Rappels et compléments de C 1.1 Structures Une structure

Plus en détail

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview. ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview. Sciences et Technologies de l Industrie et du Développement Durable Formation des enseignants parcours : ET24 Modèle de

Plus en détail

Diagramme de classes

Diagramme de classes Diagramme de classes Un diagramme de classes décrit les classes et leurs relations (associations, généralisation/spécialisation, ). classe association méthodes attributs héritage Diagramme de classes :

Plus en détail

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme Rappel Ralf Treinen Université Paris Diderot UFR Informatique Laboratoire Preuves, Programmes et Systèmes [email protected] 6 mai 2015 Jusqu'à maintenant : un petit langage de programmation

Plus en détail

T. A. D. pile. Chapitre 7 (suite) Listes particulières. T. A. D. file. représentation chaînée de la file algorithmique. Files

T. A. D. pile. Chapitre 7 (suite) Listes particulières. T. A. D. file. représentation chaînée de la file algorithmique. Files Chapitre 7 (suite) Listes particulières Pile : liste particulière T. A. D. pile insertion et suppression au sommet de la pile extraction Files queue Listes doublement chaînées insertion file : liste particulière

Plus en détail

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Cours de Programmation Impérative: Zones de mémoires et pointeurs Cours de Programmation Impérative: Zones de mémoires et pointeurs Julien David A101 - [email protected] Julien David (A101 - [email protected]) 1 / 1 Z`o n`e s `d`e m`é m`o i r`e Julien

Plus en détail

Alfstore workflow framework Spécification technique

Alfstore workflow framework Spécification technique Alfstore workflow framework Spécification technique Version 0.91 (2012-08-03) www.alfstore.com Email: [email protected] Alfstore workflow framework 2012-10-28 1/28 Historique des versions Version Date

Plus en détail

Java c est quoi? Java pourquoi?

Java c est quoi? Java pourquoi? Grandes lignes du cours Cours JAVA : Le bases du langage Java. Version 3.02 Julien Sopena 1 1 [email protected] Équipe REGAL - INRIA Rocquencourt LIP6 - Université Pierre et Marie Curie Licence professionnelle

Plus en détail

Service On Line : Gestion des Incidents

Service On Line : Gestion des Incidents Service On Line : Gestion des Incidents Guide de l utilisateur VCSTIMELESS Support Client Octobre 07 Préface Le document SoL Guide de l utilisateur explique comment utiliser l application SoL implémentée

Plus en détail

UML. Diagrammes de classes (suite) Delphine Longuet. [email protected]

UML. Diagrammes de classes (suite) Delphine Longuet. delphine.longuet@lri.fr Polytech Paris-Sud Formation initiale 3 e année Spécialité Informatique Année 2014-2015 UML Diagrammes de classes (suite) Delphine Longuet [email protected] Opérations Opérations Service qui peut

Plus en détail