Stylos


Le but de cette partie est de spécifier et implanter un ensemble de classes représentants de stylos-bille et des stylos-plume.

Spécification et implantation d'un stylo-bille

Un stylo-bille est caractérisé par sa couleur. Il dispose d'une méthode ecrire(texte:String) affichant un texte à l'écran. Ce texte devra être précédé de la couleur du stylo-bille, par exemple : "Bleu : je suis un stylo-bille". Donnez la spécification de cette classe avec la syntaxe UML, puis implantez la classe et testez-la.

Spécialisation d'un stylo-bille

Pour tous ces nouveaux stylos-bille, vous ne devez pas utiliser l'instruction System.out.println(String s) : vous devez réutiliser d'une façon ou d'une autre l'instruction ecrire(texte:String) de StyloBille.

Stylos-bille avec mine rétractable :
Les stylos-bille avec mine rétractable possèdent une nouvelle opération, appuyerBouton, qui permet de sortir ou rentrer la mine si elle était rentrée ou sortie respectivement. Lorsque la mine est rentrée, le stylo ne peut pas écrire. Complétez votre spécification UML puis implantez cette nouvelle classe et testez-la. A l'initialisation, la mine est supposée rentrée.


Stylos-bille avec surligneur :
A la différence des stylos-bille classiques, ce nouveau stylo dispose en plus d'une méthode surligner(texte:String) qui affiche le texte passé en paramètres en majuscules. Exemple : "Bleu : JE SURLIGNE CECI". Complétez votre spécification UML puis implantez cette nouvelle classe et testez-la. Doit-on réécrire la méthode ecire(texte:String) ? A-t-on besoin de définir un constructeur pour cette nouvelle classe alors qu'elle ne possède pas d'attributs propres ?
Remarque : pour convertir une chaîne de caractères en majuscules, utilisez la méthode String toUpperCase() de la classe String.


Stylos-bille répéteurs :
Ces stylos écrivent plusieurs fois la même chose. Ils disposent d'une méthode ecrire(texte:String, nb:int). La valeur de nb précise le nombre de fois que le texte est répété. Complétez votre spécification UML puis implantez cette nouvelle classe et testez-la. Lorsque l'on utilise ce nouveau stylo, peut-on encore utiliser la méthode ecrire(texte:String), et si oui, combien de fois cette méthode écrit-elle ?


Stylos-bille doubles avec surligneurs :
Ces stylos ont la particularité d'écrire le texte toujours en double (méthode ecrire(texte:String), idem pour surligner (méthode surligner(texte:String)). Vous devez réutiliser la classe StyloSurligneur. Est-on obligé de ré-écrire la méthode surligner(texte:String) ? Complétez votre spécification UML puis implantez cette nouvelle classe et testez-la.


Stylos doubles :
Les stylos bille doubles ont la particularité de pouvoir écrire le même texte en même temps mais avec deux couleurs différentes. On peut écrire avec la première couleur en haut et la seconde en bas, ou bien en sens inverse. Ces stylos disposent donc d'une méthode ecrire(texte:String,sens:booleen). Si sens==true, la première couleur est utilisée en haut, sinon c'est l'inverse. Vous devez réutiliser la classe StyloBille. Complétez votre spécification UML puis implémentez cette nouvelle classe et testez-la.


Stylos bi-couleur :
Les stylos bille bi-couleur disposent de deux mines de couleur différente. Une méthode changerCouleur() permet d'alterner la mine utilisée. Il y a toujours une mine de sortie. Plusieurs solutions sont posiibles. La première nécessite de modifier la classe StyloBille pour lui ajouter (par exemple) sélecteurs et modificateurs. La seconde fait astucieusement appel à l'une des spécialisations du stylo-bille, le stylo avec mine rétractable. Complétez votre spécification UML puis implantez cette nouvelle classe selon au moins l'une des deux solutions et testez-la.
Question : En utilisant la classe StyloMineRetractable, la méthode appuyerBouton est toujours disponible, et cela peut provoquer un disfonctionnement du stylo bi-couleur si elle est utilisée : les deux mines peuvent êtres rentrées ou sorties en même temps. Peut-on empêcher cela ?

Définition d'un stylo-plume

Un stylo-plume est composé d'un bouchon et éventuellement d'une cartouche d'encre. Le boucon ne peut être associé qu'à un seul stylo auquel il est fortement lié, par contre, la cartouche d'encre peut être insérée dans n'importe quel stylo.

Le bouchon du stylo porte le nom de la marque du stylo, c'est à dire une chaîne de caractères. On utilisera le mot marque pour représenter cet attribut. On peut demander au bouchon sa marque grâce à l'opération getMarque:String qui retroune la valeur de l'attribut marque.

La cartouche d'encre détermine la couleur de l'écriture et le niveau d'encre restant. On utilisera les mots couleur et niveau pour représenter ces deux attributs. On doit pouvoir créer une cartouche en indiquant sa couleur. Le niveau d'encre dans la cartouche est fixé à 3 à sa création. On peut demander à la cartouche sa couleur et s'il reste de l'encre : on utilisera pour cela les opérations getCouleur:String et estVide:boulean. En outre, lorsque l'on écrit, on doit informer la cartouche de la consommation d'encre avec l'opération utiliserEncre qui décrémente le niveau de la cartouche d'une unité.

Un stylo-plume neuf est livré avec un bouchon mais sans cartouche. Pour construire un stylo, on doit passer en paramètre du constructeur sa marque. On y insère une cartouche d'encre en utilisant l'opération insererCartouche(c:Cartouche):boulean. Si une cartouche d'encre était déjà présente, l'opération échoue. On retire une cartouche en utilisant l'opération retirerCartouche:Cartouche qui retourne la cartouche retirée. Pour écrire avec le stylo, on fait appel à l'opération ecrire(texte:String). Le texte s'affiche alors à l'écran précédé de la marque et de la couleur de l'encre contenue dans la cartouche. Exemple : "Waterman - Bleu nuit : Hello World...". A chaque fois que le stylo écrit, sa cartouche se vide d'une unité. Bien entendu, lorsque l'on demande au stylo d'écrire alors qu'il n'y a pas de cartouche à l'intérieur ou que la cartouche est vide, rien ne s'affiche à l'écran.

Travail à réaliser

Spécifiez le classes selon la syntaxe UML : commencez par représenter la classe des stylos-plume, puis intéressez-vous aux cardinalités, navigabilités et aux relations avec le bouchon et la cartouche. Essayez de déterminer toutes les méthodes qui vous seront nécessaires en plus de celles indiquées dans la définition. On ne cherchera pas à vérifier que chacune des cartouches n'est utilisée que par, au plus, un seul stylo.

Implanrtez les trois classes puis effectuez les tests suivants :