Différencier l'interfaçage de l'implémentation
- Fiche de cours
- Quiz
- Profs en ligne
- Videos
- Application mobile
- Distinguer interfaçage et implémentation.
- Spécifier une structure de données par son interfaçage.
- Écrire plusieurs implémentations d’une même structure de données.
- L’interfaçage permet de spécifier la représentation d’une structure de données qui ne serait pas présente nativement et que l’on souhaite utiliser pour construire un programme.
- Interfacer, c’est décrire de façon formelle les opérations et propriétés que les données doivent respecter, afin de pouvoir utiliser ces données dans un environnement théorique de développement.
- Une fois que l’interfaçage est effectué, on est en mesure de choisir l’implémentation suivant le langage.
- Notion d’implémentation
- Types de données : listes, tableaux, dictionnaires
Lorsqu’on construit un programme, on peut avoir besoin d’un type de données non présent nativement, la représentation n’est pas encore fixée, on va alors procéder à l’interfaçage.
Un environnement théorique de développement permet de s’affranchir d’un langage.
Une fois que l’interfaçage est effectué, on est en mesure de choisir l’implémentation.
Dans l’interfaçage, on réfléchit à une notation pour représenter des données, puis les opérations que l’on pourra appliquer et les propriétés de ces différentes opérations. On parle alors d’un type de données abstrait (en abrégé TAD).
- Notation : séquence de chiffres précédés d’un signe + ou –.
- Primitives : opérations arithmétiques de base : +, –, * et /.
- Sémantique : propriétés habituelles de ces opérations.
- On ne se soucie pas de la représentation en binaire de ces nombres.
L’implémentation consiste à choisir une représentation en fonction du langage de programmation choisi.
L’interfaçage est donc différente de l’implémentation car l’interfaçage permet d’obtenir les méthodes abstraites que doivent respecter les données.
Un type de données abstrait (TAD) peut ainsi avoir différentes implémentations, en Python ou en langage C par exemple.
On veut construire une séquence ordonnée d’éléments qui ont un même type (entier, chaine de caractères (string en anglais), etc.).
Si on connait un élément, on doit pouvoir connaitre le suivant, on doit donc disposer d’une fonction qui permette d’accéder au successeur. On vient de construire une première primitive (opération obligatoire) pour spécifier l’interfaçage de cette structure de données de type liste.
On peut ajouter d’autres primitives pour compléter l’interfaçage de cette structure de données.
- Création d’une liste vide : créer()
- Ajouter un élément a au début de L : ajout_debut(a,L)
- Ajouter un élément a à la fin de L : ajout_fin(a,L)
- Supprimer le premier élément de la liste L que l’on appelle « en-tête » : supp(L)
- Obtenir l’en-tête de la liste L : entete(L)
- Obtenir la longueur d’une liste L : longueur(L)
Les primitives ne sont pas à connaitre par cœur.
Ces primitives permettent de programmer dans un environnement théorique de développement sans s’occuper de l’implémentation.
Une fois l’interfaçage de la liste réalisé, on peut l’implémenter dans un langage de programmation.
Python | Explication |
L=[ ] | On crée la liste vide L. |
L.append(x) | On ajoute x à la fin de la liste L. |
len(L) | On obtient la longueur de la liste L. |
Python | Explication |
def creer(): return None |
On crée une liste vide. |
def
ajout_debut(a,L): return (a,L) |
On ajoute au début de la liste l’élément a. |
def ajout_fin(a,L): return (L,a) |
On ajoute à la fin de la liste l’élément a. |
Il existe d’autres types abstraits de données : les structures de données linéaires (piles, files, listes), les structures de données séquentielles (tableaux, dictionnaires) et les structures de données relationnelles (arbres et graphes).
Vous avez obtenu75%de bonnes réponses !