TP-programmation-orientee-o.../TP10/editeur-menu.plantuml
2023-06-20 21:02:09 +02:00

158 lines
2.5 KiB
Plaintext

@startuml
skinparam classAttributeIconSize 0
package menu {
class Menu {
- selection: Commande
--
+ estQuitté(): boolean
+ afficher()
+ selectionner()
+ valider()
+ ajouter(txt: String, op: Commande)
}
class Entree {
- texte: String
--
+ afficher(numéro: int)
__constructeurs__
+ Entree(texte: String, op: Commande)
}
interface Commande {
--
+ estExecutable(): boolean
+ executer()
}
Menu *-right-> "*\nentree" Entree: " "
Entree o-right-> "1\noperation" Commande: " "
}
note top of Menu
afficher():
for(int i = 0; i < entrees.size(); i++):
entrees.get(i).afficher(i + 1)
selectionner():
-- demander un entier et
-- initialiser 'selection' avec la commande associée
valider():
if (selection.estExecutable()):
selection.executer()
else:
out.println("Opération impossible")
end note
note top of Entree
afficher(numéro: int):
if (opération.estExecutable):
out.print(numéro)
else:
out.print(" ")
out.print(") " + texte)
end note
package editeur {
class Editeur {
--
+ editer()
__constructeurs__
+ Editeur(l: Ligne)
}
Editeur o-right-> "1\nligne" Ligne : " "
Editeur *--> "1\nmenuPrincipal" Menu
interface Ligne {
}
class LigneTab implements Ligne {
}
class LigneStringBuffer implements Ligne {
}
package commandes {
abstract class CommandeLigne implements Commande {
__constructeurs__
CommandeLigne(l: Ligne)
}
class AvancerCurseur extends CommandeLigne {
+ estExecutable(): boolean
+ executer()
}
class ReculerCurseur extends CommandeLigne {
+ estExecutables(): boolean
+ executer()
}
}
CommandeLigne o-left-> "1\nligne" Ligne
}
note bottom of AvancerCurseur
estExecutable(): boolean:
return ligne.getCurseur() < ligne.getLongueur()
executer():
ligne.avancer()
end note
note bottom of ReculerCurseur
estExecutable(): boolean:
return ligne.getCurseur() > 1
executer():
ligne.reculer()
end note
note as noteEditeur
editer():
do:
ligne.afficher()
menuPrincipal.afficher()
menuPrincipal.sélectionner()
menuPrincipal.valider()
while (! estQuitté())
Editeur(l: Ligne):
this.ligne = l
this.menuPrincipal = new Menu()
this.menuPrincipal.ajouter(
"Avancer curseur",
new AvancerCurseur(l))
this.menuPrincipal.ajouter(
"Reculer curseur",
new ReculerCurseur(l))
end note
Editeur .left. noteEditeur
@enduml
' vim: sw=4 ts=4: