No cache version.

Caching disabled. Default setting for this page:enabled (code LNG204)
If the display is too slow, you can disable the user mode to view the cached version.

Abstraction

abstraction n. f. Opération de l'esprit par laquelle on isole une qualité des êtres ou des choses dont elle est la caractéristique /.../ Faire abstraction d'une chose, ne pas en tenir compte./...
Dictionnaire Larousse

Heu... et en informatique ?

Bon, tu n'as qu'à retenir pour l'instant que l'abstraction, c'est un moyen de cacher les détails (la complexité)... On te donne les grandes lignes, mais pas ce qu'il y a à l'intérieur...

Notion de décomposition

Dans le temps, un programme informatique se présentait sous la forme d'un bloc de code monolithique énorme. Ce type de programmation est totalement dépassée, car le code est extrèmement difficile à comprendre et à modifier.

Nous devons donc veiller à décomposer le code en entité qui ont chacune une fonction bien précise, et qui communiquent entre elles.

Et c'est quoi le but ?

La décomposition réduit la complexitéref 1, permet de travailler en équipes (chaque équipe se focalisant sur une partie bien précise du problème), et permet de modifier sans risque l'implémentation1.

J'vois toujours pas...

OK, utilisons un exemple pour comprendre les principes de l'abstraction.

Nous allons réaliser un programme qui permet de chercher des films sur le disque dur, et d'afficher le résultat sous forme de page Web.

Nous pouvons rapidement dégager deux grandes actions de notre programme :

  • Chercher les films.
  • Afficher les résultats.

Différentes notions sont évoquées, ou implicites :

  • Film
  • Disque dur
  • Fichiers
  • Page Web

Comme nous avons au moins deux modules, nous pouvons grouper les actions similaires dans des classes2 Recherche et Affichage.

Contents Haut

Abstraction par paramètres

Nous pouvons commencer par notre recherche de films. Qu'avons nous besoin de savoir ?

  • A la fin, nous devons avoir une liste de films (fichiers).
  • Nous devons dire où démarrer la recherche. Nous lui donnerons un dossier de départ.
  • Pour le reste, peu importe comment se fait la recherche.

Nous allons donc définir la signature suivante  Liste chercherFilms(Dossier dossierDépart)34

Examinons maintenant notre méthode :

  • Liste4 est le type de retour. Cela signifie qu'après avoir exécuté notre méthode nous aurons une liste d'éléments.
  • chercherFilms est le nom de notre méthode.
  • Dossier est le type de paramètre que va reçevoir notre méthode. Nous devrons donc donner un dossier.
  • dossierDépart est le nom du paramètre de type Dossier que nous devons fournir à la méthode.

Paramètres effectifs et paramètres formels

Dans notre signature de méthode, nous avons définis un paramètre nommé dossierDépart. Il s'agit d'un « paramètre formel » (en anglais, “formal parameter”).

Au moment d'exécuter notre méthode, nous lui fournirons un "vrai" dossier, comme le montre l'exemple suivant :

  1. Liste chercherFilms(Dossier dossierDepart){
  2. }
  3.  
  4. Dossier monDossier := "C:\\test";
  5. Liste resultat := chercherFilms(monDossier);
  6. }

Nous constatons que le paramètre formel dossierDépart est remplacé par une vraie valeur (C:\test) dont la variable porte le nom monDossier. Il s'agit à présent d'un « paramètre effectif » (en anglais, “actual parameter”), parfois aussi nommé paramètre réel.

L'abstraction par paramètres, ou abstraction par paramétrisation permet donc de remplacer des paramètres actuellement inconnus par leur valeur réelle en temps utile.

Contents Haut

Abstraction par spécifications

L'abstraction par paramètres nous permet de prendre du recul par rapport aux données que nous fournirons à notre méthode, mais cela ne suffit pas pour respecter nos propos du début au niveau de la modularité. Nous devons donc veiller à masquer les différentes lignes de codes à l'intérieur de notre méthode.

Ho lui hé... Y veut pas partager son code!

Le but de masquer ce qui se passe au sein de la méthode n'est absolument pas la protection contre la copie (il existe des décompilateurs assez performants, et à moins d'utiliser des obfuscateurs7 il est très difficile de protéger efficacement le code source). En plus, je suis pleinement convaincu que le partage d'information et la mise à disposition du code source est le meilleur moyen de progresser rapidement, et de détecter plus facilement les bugs.

Le fait de masquer l'implémentation est une protection pour l'utilisateur8.

En effet, si ce dernier sait que la méthode chercherFilms utilise un tableau dans la classe Recherche pour éviter de rechercher à nouveau si il n'y a eu aucune modification, il peut être tenté d'utiliser ce tableau.

Si nous modifions le code de notre classe Recherche et que nous n'utilisons plus ce tableau, ou que nous le destinons à un autre usage, le code de la personne qui utilise notre classe ne fonctionne plus, ou entrave le bon fonctionnement de nos méthodes.

C'est pour cette raison, pour cette indépendance que nous fournit l'abstraction, que nous masquons les éléments internes (masquer la représentation).

Mais si je ne sais pas ce qui se passe dans ta méthode, comment je peux l'utiliser ?

C'est pour cette raison que nous devons spécifier dans quelles conditions utiliser la méthode, et ce qu'elle fait. Le fait de spécifier ces informations est la base de l'abstraction par spécification.

L'abstraction par spécification permet donc une compréhension rapide du code sans devoir regarder l'implémentation, et une indépendance d'implémentation puisque nous pouvons modifier la manière dont nous avons codé à l'intérieur (principe de modifiabilité), pour autant que nos spécifications soient respectées.

L'abstraction par spécification nous permet de coder rapidement et sans se tracasser de l'efficacité (mais en atteignant le but demandé), puis par après optimiser le code quand nous en aurons la possibilité.

Nous devrons veiller dans notre spécification de méthode à être indépendant de toute autre spécification, c'est le principe de localité. Le programmeur qui écrit une implémentation pour cette méthode ne doit avoir besoin que de cette spécification pour savoir ce qu'il peut et ce qu'il doit faire.

Nous verrons par la suite comment spécifier les conditions nécessaires (pré-conditions) et les conditions après traitement (post-conditions).

Contents Haut

Abstraction par les données

Une fois que la recherche est effectuée, la méthode nous renvoie une collection de films sous la forme d'un type Liste.

L'abstraction par type de données nous permet une indépendance au niveau de la manière de stocker les données (la représentation). Le fait de masquer cette représentation nous permet de la modifier par exemple en fonction de critères d'optimisation, sans les utilisateurs de notre code doivent modifier quoi que ce soit dans leur propre code.

Seules les méthodes (les constructeurs sont aussi des méthodes) doivent pouvoir accéder à la représentation9. Le moyen en Java pour interdire l'accès aux variables est le mot clé private1011. C'est le principe d'encapsulation.

Un des avantages de travailler avec une abstraction par type de données est que ce type regroupe toute une série d'opérations que nous pouvons effectuer sur cette liste, et les comportements que nous pouvons en attendre.

Abstraction de l'itération

Comme nous utilisons le type abstrait de données Liste, nous pouvons utiliser toutes les fonctionnalités que ce type met à notre disposition, et parmi elles la possibilité d'énumérer les éléments que la liste contient.

Contents Haut

Résumé

Nous avons vu que l'abstraction en programmation peut prendre différentes formes, l'abstraction par paramètres, l'abstraction par spécification.

Nous avons aussi vu qu'il existait certaines techniques avancées comme l'abstraction procédurale, l'abstraction par les données et l'abstraction par hiérarchie de type, et enfin l'abstraction de l'itération, techniques que nous aborderons dans les pages suivantes.

Error Infobrol

Can not display this page of the Infobrol website

Type of error (18-01)

Unknown format specifier "&"

Please try again in a few minutes…

Return to the home page




Steph