Type Concret – Type Abstrait

Slides:



Advertisements
Présentations similaires
Chapitre IV. Structures linéaires (piles, files, listes chaînées)
Advertisements

Structures de données linéaires
La programmation.
Le débogage Semaine 12 Version A15. Plan de leçon - Débogage  Commentaire javadoc  Définition  Fonctionnement  Point d’arrêt  Exécution  Contrôler.
1 Chapitre 2 La numération binaire. 2 Chapitre 2 : La numération binaire Introduction 1 - Le système binaire 2 - La conversion des nombres entiers 2.1.
Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 1 TD 6 IJA Structures de données JAVA.
SQL partie 5 1 LMD create – update – primary key secondary key.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
Introduction. L’injection dans le réseau électrique.
Tableaux en C Mardi 2/05.
Semaine 8 Retour sur les tableaux : fonctions et récursivité
AMUE – SIFAC Intégration Fichier Mouvements BDF
Introduction au Langage Pascal
Pierre Joli Cours de Mathématique Pierre Joli
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Représentation des nombres réels
Chapitre 1 nombres, chaînes de caractères, booléens, et VARIABLES
Se connecter toujours depuis TecfaMoodle
Algorithmiques Abdelbasset KABOU
« Un langage de programmation est une convention pour donner des ordres à un ordinateur. Ce n’est pas censé être obscur, bizarre et plein de pièges subtils.
Algorithme et programmation
Sous menu de l’application «micro» (‘IHM’)
Semaine #1 INF130 par Frédérick Henri.
Algorithmique Avancée et Complexité Chap2:Complexité et Optimalité
Javadoc et débogueur Semaine 03 Version A17.
I21 Algorithmique et programmation II
Algorithmiques Abdelbasset KABOU
Les bases de données et le modèle relationnel
Initiation à la programmation impérative et algorithmique
Un Algorithme , c'est Quoi ?
Initiation à la programmation impérative et algorithmique
POL1803: Analyse des techniques quantitatives
3-Pile et File Définitions Primitives de piles, exemples
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Les interfaces en PHP.
Programmation système
Cours N°9: Algorithmiques Les Tableaux 1
Les tableaux.
Containeurs & Itérateurs
Programmation en C++ C++ de base
Modélisation avec UML 2.0 Partie II Diagramme de classes.
Chapter 12: Structures de données
Synthèse 8 : Langage informatique
Calcul Scientifique Initiation à SCILB
ACP Analyse en Composantes Principales
1 INTRODUCTION. 1.Constitution : Placer les principaux éléments du circuit électrique en face de leur définition.  Elément permettant la liaison électrique.
Bases de données sous Access. Initiation aux bases de données  Structure d’une base de données.
Chapitre2: SGBD et Datawarehouse. On pourrait se demander pourquoi ne pas utiliser un SGBD pour réaliser cette structure d'informatique décisionnelle.
Simulation de robots en MATLAB
Cours 10 : Les Web Services et WSDL Février Version 1.0 -
MINISTÈRE DE L’ENSEIGNEMENT SUPÉRIEUR ET DE LA RECHERCHE SCIENTIFIQUE
1. LE LANGAGE SQL DDL Version 2 - Janvier Le langage SQL-DDL
Les classes et les objets
SYSTèMES à évènements discrets
Programmation Android Les listes
BUFFER CIRCULAIRE Meryem EL BAKRI. PLAN Introduction Buffer circulaire Fonctionnement.
Information, Calcul, Communication
RABAH M ed Ali 2018/2019
Flowchart Itération Cours 04.
Principes de programmation (suite)
Programmation Scratch
LISTES.
Listes Chaînées.
STREAMS (et fichiers).
Tableau de bord d’un système de recommandation
EXPOSE D’UML Licence 2 SI/GL/IM Réalisé par :Demandé par : AYITCHEME Auréane D r HOUNDJI TCHEGNON AlbertRatheil YAYA Hanane ZINSE Bienvenu.
Structure de données Les listes.
PROGRAMMATION SOUS R. PRESENTE PAR : ACHETTOU ISMAIL LAARICH TARIQ ENCADRE PAR : Pr. EXPOSÉ SUR LA PROGRAMMATION SUR R 2.
Boulain Joris, Handouz Yassine, Regnier Fabien, Giraud Antoine
Transcription de la présentation:

Type Concret – Type Abstrait

Type concret Définition : Un type concret est une structure (ou un type) de données spécifiée par la manière dont les objets sont physiquement stockés dans la mémoire de l'ordinateur. Par exemple : un entier un tableau, un réel, etc.

Type abstrait Définition: Un type abstrait est un triplet composé : d'un nom, d'un ensemble de valeurs, d'un ensemble d'opérations (souvent appelé primitives) définies sur ces valeurs. D'un point de vue complexité, on considère que les primitives (à part celle d'initialisation si elle existe) ont une complexité en temps et en mémoire en O(1). Les primitives devront préciser le comportement de la structure (ce qui se passe), et la signature (paramètres d'entrée et valeurs ou effet en sortie), et parfois des pré-conditions.

Exemple 1 : Containeur Définition : Un containeur est un type abstrait permettant de représenter des collections d'objets ainsi que les opérations sur ces objets. Les collections que l'on veut représenter peuvent être ordonnées ou non, numériques ou non. L'ordre est parfois fourni par un évènement extérieur. Les collections d'objets peuvent parfois contenir des éléments identiques.

Exemple 1 : Containeur Primitives : Accès Modification valeur : containeur → objet Modification creerContaineur: containeur → vide ajouter : containeur X objet → vide supprimer : containeur X objet → vide detruireContaineur : containeur → vide

Exemple 2 : Nombre complexe Les nombres complexes ne sont pas des types de bases. On peut les définir comme un type abstrait : nom : nombreComplexe ensemble de valeur : réel×réel primitives : Lesquelles ?

Exemple 2: Nombre complexe nom : nombreComplexe ensemble de valeur : réel×réel primitives : multiplication : (nombreComplexe × nombreComplexe) → nombreComplexe addition : module : nombreComplexe → réel etc

Implémentation Définition: L'implémentation consiste à choisir une structure de données et les algorithmes associés pour réaliser un type abstrait La structure de données utilisée pour l'implémentation peut elle-même être un type abstrait. L'implémentation doit respecter la complexité des primitives à part celle d'initialisation (celle-ci ne s'exécutera qu'une fois).

Implémentation : nombres complexes Le type abstrait nombreComplexe peut être implémenté de la manière suivante : nombreComplexe=structure r:réel; i:réel; Finstructure var c : nombreComplexe; nombre Complexe Nom Type r réel i Nom variable Type c nombreComplexe c.r réel c.i

Implémentation : container Un containeur de nombreComplexe peut être implémenté par un tableau de nombreComplexe. containeur d'objet=tableau[1..N]de structure v: nombreComplexe; b: booleen; Finstructure T 1 2 3 4 5 6 N v nombre Complexe b booléen

Implémentation : container Primitive de Modification fonction creerContaineur(ref C:containeur de nombreComplexe):vide; var i:entier; debut pour i allant de 1 à N faire C[i].b=faux; finPour; fin C 1 2 3 4 5 … N v nombreComplexe b F F…F booléen Complexité : ?

Implémentation : container Primitive de Modification : fonction ajouter(ref C: containeur de nombreComplexe;val x:nombreComplexe):vide var i:entier; debut i=1; tant que i<=N et C[i].b faire i=i+1; fintantque si i<=N alors C[i].v=x; C[i].b=vrai finsi fin C 1 2 3 4 5 … N v c1 c21 c5 c2 nombreComplexe b V F F…F booléen Complexité : ?

Implémentation : container Primitive de Modification fonction supprimer(ref C: containeur de nombreComplexe;val x:nombreComplexe):vide var i:entier; debut i=1; tant que i<=N et C[i].v!=x faire i=i+1; fintantque si i<=N alors C[i].b=faux finsi fin Solution si pas de doublons dans le container. C 1 2 3 4 5… N v c1 c21 c5 c2 nombreComplexe b V F F…F booléen Complexité : ?

Implémentation : container Primitive de Modification fonction detruireContaineur(ref C : containeur de nombreComplexe):vide debut pour i allant de 1 à N faire C[i].b=faux; finPour; fin Complexité : ?

Implémentation : container Primitives d’accès fonction valeur(ref C : containeur de nombreComplexe):nombreComplexe; /* retourne le 1er nombre complexe présent/* var i:entier; debut i=1; tant que i<=n et !C[i].b faire i=i+1; fintantque si i<=n alors retourner(C[i].v) sinon retourner(NULL) finsi fin 2 conditions d’arrêt Test en sortie de boucle Complexité : ?

Conclusion Sans plus de précisions un container ne permet pas d’implémenter des primitives en O(1) En ajoutant des spécifications on peut implémenter des primitives en O(1) : Listes chainées Files Piles etc

Conclusion On peut voir le programmeur qui développe une bibliothèque informatique comme le concepteur du type abstrait : Il dévoile dans la documentation ce qu'on peut attendre de la structure (comportement, stockage, accès, etc.) sans dévoiler comment elle est physiquement construite. Alors que le programmeur qui importe une bibliothèque dans son code est l'utilisateur du type abstrait : il voit la documentation comme une garantie de performances pour certaines opérations. Vous serez à tour de rôle concepteur et/ou utilisateur.