Vous êtes sur la page 1sur 4

Type abstrait

Avant d'attaquer la définition de type abstrait, examinons ce qu'est un type.


Un type est simplement un ensemble d'objets, le plus souvent apparentés de
façon évidente. Souvent il est facile de donner un nom au type.

Exemple : le type dont le nom est voiture est l'ensemble contenant toutes les
voitures.

Les types ne sont pas définis a priori. N'importe quel type peut être défini s'il a
une utilité dans une situation donnée. Ainsi, un type peut être arbitrairement
général ou arbitrairement spécifique selon les besoins d'une application. Dans
telle application, il sera inutile définir un type voiture, mais utile de distinguer
les objets organiques des objets non organiques. Dans telle autre application,
il sera important de distinguer des voitures de couleurs différentes ; il y aura
par exemple un type voiture rouge.

La définition (informelle) de la notion de type ci-dessus n'est pourtant pas


satisfaisante.

Par exemple, l'ensemble des deux éléments ``Jacques'' et ``le chien de


Jacques'' est, selon cette définition un type. Il s'agit d'un ensemble de deux
objets qui sont clairement apparentés. On a pourtant le sentiment que les
deux objets ne sont pas du même type. Ou alors, les deux sont des
mammifères, mais dans ce cas, l'ensemble devrait contenir les objets ``Anne'',
``Le hérisson qui vient d'être écrasé par la voiture de Jacques'', etc. Il n'est
clairement pas suffisant de déclarer que les objets de l'ensemble doivent être
``apparentés''. Il manque des restrictions supplémentaires sur la relation en
question.

La notion de type abstrait est conçue pour combler ce manque.

Définition 8.1 Un type abstrait est un ensemble d'objets apparentés par


les opérations définies sur ses objets. Les mêmes opérations peuvent
s'appliquer à chacun des objets de l'ensemble.

Les opérations sont choisies par l'informaticien selon les besoins d'une
application.

Exemple : Les opérations permises sur un objet de type voiture peuvent


être : démarrer, arrêter, remplir le réservoir d'essence, déterminer la vitesse,
etc.
D'une application à l'autre, les opérations peuvent être très différentes, même
si les types portent le même nom. Les opérations permises sur un objet de
type ``personne'' peuvent être très différentes dans une application
concernant les impôts de celles d'une application concernant la biologie
cellulaire.
Définition d'algorithme
Le différence entre un algorithme et un programme est souvent une question
de niveau de détail. Un algorithme est souvent exprimé avec une notation
indépendante de tout langage de programmation alors qu'un programme est
écrit dans un langage de programmation particulier.

Une autre différence entre algorithme et programme est que l'exécution d'un
algorithme doit toujours se terminer avec un résultat, alors que celle d'un
programme peut conduire à une boucle infinie (ne jamais s'arrêter).

Un algorithme est donc une méthode pour résoudre un problème particulier


dont on est sûr qu'elle trouve toujours une réponse en un temps d'exécution
fini.

Exemple : Pour déterminer si un entier est premier (à savoir qu'il ne


contient pas de facteur autre que et ), l'algorithme suivant peut être
utilisé :

Pour chaque entier , , vérifier si est un facteur de (en


divisant par puis en vérifiant si le résultat est entier). Si c'est le cas,
arrêter avec la réponse ``non''. Si aucune valeur n'est facteur de , alors
arrêter avec la réponse ``oui''.

Il y a dans cette définition (informelle) d'algorithme un problème majeur.


Prenons l'exemple des nombres premiers. Pourquoi peut-on supposer que
l'on sait comment diviser par et vérifier que le résultat est un entier ? Ne
faudrait-il pas avoir un algorithme pour ça aussi ? Et si jamais on trouve un
algorithme pour cette division, ne faudrait-il pas trouver un algorithme pour
chaque étape de celle-ci ? Et ainsi de suite. Ou, au contraire, pourquoi ne
peut-on pas simplement supposer que ``vérifier si un entier est premier'' est
une opération élémentaire ? Pourquoi est-il nécessaire de trouver un
algorithme pour cette opération ?

En d'autres termes : comment savoir si une opération est élémentaire (et ne


nécessite par conséquent aucun algorithme) ?

La réponse est qu'une opération est élémentaire lorsque un ordinateur peut


l'exécuter très rapidement, en réalité en un nombre relativement faible
de cycles d'horloge.
Le lecteur de ce livre ne sait pas forcément déterminer si une opération est
élémentaire au sens du paragraphe précédent. Heureusement cela ne sera
pas nécessaire. La notion de type abstrait examinée dans la section suivante
nous permettra de savoir si une opération est élémentaire dans le sens ci-
dessus.

Vous aimerez peut-être aussi