Bonsoir!
Je suis toujours en plein apprentissage du langage Java avec le système LIFO comme exemple de départ:
La classe Maillon
c'est la réalisation Java d’un maillon.
Elle comprend un attribut element qui est l’élément mis dans la pile et un attribut next qui référence le maillon suivant.
La classe Maillon n’est visible que par les classes de son espace de noms.
Elle est définie dans le même fichier que la classe Stack.
La classe Maillon a deux constructeurs :
1. un constructeur qui admet un élément passé en argument, dans ce cas le maillon suivant est établi à null lors de la déclaration des attributs.
2. un constructeur qui admet un élément passé en argument et le maillon suivant.
La classe Maillon a trois méthodes ayant une visibilité par défaut :
- Object getElement() retourne l'élément associé au maillon courant
- Object next() retourne le maillon suivant
- boolean hasNext() retourne true s’il existe un maillon suivant, false sinon
Les méthodes de réalisation sont:
•void setNext(Maillon next) affecte l’attribut next avec le maillon passée en argument
•void setElement(Object o) affecte l’attribut element avec l’objet o passé en argument
La classe Stack
La classe Stack est publique, elle a un attribut top qui référence le premier maillon.
Elle a deux constructeurs:
1.un constructeur vide dans ce cas l’élément sommet est égal à null et la pile est vide et de taille zéro.
2. un constructeur qui admet un élément passé en argument de type Object, dans ce cas, il y a création d’un maillon (instance de la classe Maillon) avec l’élément suivant à null.
La classe Stack admet les quatre méthodes publiques suivantes :
- void push(Object object) place au sommet de la pile l’objet passé en argument
- Object pop() retourne l’élément qui se trouve au sommet de la pile et place l’élément suivant au sommet de la pile.
- Object first() accède au premier élément de la pile sans modifier la pile boolean
- isEmpty() retourne true si la pile est vide
Méthodes de réalisation de la classe Stack:
•void setTop(Object o) établit le sommet de la pile avec le maillon passé en argument
• Maillon getTop() retourne le sommet de la pile
• Maillon next() retourne le maillon suivant
je souhaite désormais que ma classe Stack réalise une interface, l'interface StackAbility qui comprend les quatre opérations suivantes:
- voidPush(Object object),
- Object pop(),
- Object first
- et boolean is empty
Je souhaite aussi que ma classe Maillon réalise l'interface non publique MaillonAbility qui comprends les trois opérations suivantes:
- Object getElement()
- Maillon next()
- boolean hasNext()
et modifier le code en conséquence.
J'ai au départ pensé qu'il fallait mettre toutes ses méthodes dans les classes et rajouter implements plus l'interface. Erreur. Seulement certaines des méthodes de l'interface sont ajoutées. Mais pourquoi?
Les codes qui suivent ne sont pas de moi mais de mon professeur.
Par contre j'ai du mal à comprendre comment je dois modifier mon code en conséquence.
Pourquoi est on obligé de reformuler tous les arguments avec le nom de l'interface en plus?
I. Dans la classe Maillon par quoi se traduit l'utilisation d'une interface non publique MaillonAbility?
Seulement deux méthodes sont à changer? pas setElement? Aucune conséquence sur toString?
pourtant toString contient element qui est susceptible d'avoir le nom de l'interface ajouté avant?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class Maillon implements maillonAbility{ private MaillonAbility next = null; Maillon (Object o; MaillonAbility next){ this(o); //tout seul? this.next=next; } private void SetNext(MaillonAbility m){ next = n; } }
II. dans la classe Stack, lorsqu'on implémente l'interface, seulement une seule des méthode est ajoutée...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public String toString() { if( next==null ) { return String.valueOf( element ); } else { return element + " -> " + next; // implicement ça va faire String.valueOf(element) + " -> " + String.valueOf(next); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 public class Stack implements Maillon { private MaillonAbility top; public Stack(){} public Stack(Object element){ setTop(new MaillionAbility(element)); } private void setTop(Object o){ this.top = (maillonAbility); //tout seul? } private MaillonAbility getTop(){ return top; } private void push(Object o){ MaillonAbility m =new Maillon (o,getTop()){ setTop(m); } private MaillonAbility next(){ return setTop.next() } } }
Partager