Séance 11
Programmation Orienté-Objet.
Dans cette séance, on propose un exercice unique de taille plus importante que ceux que vous avez rencontré auparavant. On vous demande de faire cet exercice par groupes de 2. Il vous est demandé :
- de bien comprendre le problème posé;
- d'imaginer un diagramme de classe pouvant résoudre le problème;
- de bien spécifier les différentes classes et en particulier leur interface;
- de répartir la tâche d'implémentation;
- de tester vos différents composants séparément, en cours d'implémentation;
- de tester votre solution dans son ensemble.
Elu par cette crapule
Un palindrome est un texte qui est indépendant du sens de la lecture. Kayak, ici et Elu par cette crapule en sont des exemples. On vous demande de concevoir un système qui, prenant en entrée un fichier de mots (1 mot par ligne), écrit dans un fichier de sortie tous les palindromes présents dans le fichier d'entrée.
Comment reconnaître si un mot m
est un palindrome ?
On pourrait évidemment comparer m
avec m
renversé. C'est un peu simple et cela ne nous convient pas car on aimerait à l'avenir décider si un mot m
est un palindrome à k
anomalies (où une lettre est remplacée par une autre). On vous propose donc une autre idée :
- mettre toutes les lettresdu mot à traiter dans un type abstrait
List
que vous allez implémenter. Ce type abstrait propose les méthodes suivantes :
-
insertFirst(X)
ajoute l'élément X
au debut de List;
-
isEmpty($)
renvoie true
si il est vide, false
sinon.
-
first($)
renvoie son premier élément.
-
last($)
renvoie son dernier élément.
-
removeFirst
retire son premier élément.
-
removeLast
retire son dernier élément.
- d'imaginer à partir de là un algorithme récursif pour décider si un mot donné est un palindrome ou non.
Pour établir un diagramme de classe, pensez à ces quelques questions :
- Quels sont les différents composants indépendants du système ?
- Les classes que vous proposez sont-elles génériques, c'est-à-dire réutilisables ?
- Comment écrire dans un fichier ? Comment lire dans un fichier ? Vous pouvez consulter l'API de oz pour répondre à ces questions.