Den tredje versjonen av Memory-eksemplet implementerer et enkelt grafisk brukergrensesnitt mot Memory-klassen fra versjon 2, basert på JavaFX.

Som i den første versjonen har vi ett program-objekt som håndterer interaksjon med brukeren og som samhandler med ett Memory-objekt. Siden dette program-objektet skal være en JavaFX-applikasjon, så må den bygge på Application-klassen (i javafx.application-pakken), slik at den får en del ferdiglagd oppførsel. Interaksjonen vi skal implementere er ikke så ulik den fra versjon 1 og 2, ved at applikasjon gir tekstlige meldinger til brukeren, og brukeren svarer ved å skrive inn tekst. Dette betyr at vi må ha referanser til to JavaFX-objekter av typene Text (i javafx.scene.text-pakken) for tekstlig output og TextField (i javafx.scene.control-pakken) for tekstlig input. I tillegg må vi som i versjon 1 og 2 ha et Memory-objekt. Dette gir følgende klasse- og objektdiagrammer:

Applicationabstract void start(Stage)MemoryAppvoid start(Stage)MemoryIntegerInteger nextItem()acceptItem(Integer)TextsetText(String)TextFieldgetText()memorysystemOutputuserInputMemoryAppMemoryTextTextFieldmemorysystemOutputuserInput
MemoryAppMemoryAppMemoryMemoryTextTextTextFieldTextFieldbrukerbrukernextItem()3setText("Element nr. 1 er 3")"Element nr. 1 er 3"setText("Gjenta element nr. 1 av 1")"Gjenta element nr. 1 av 1"3handleSubmitUserInputAction()getText()"3"acceptItem(3)Boolean.TRUEnextItem()

Sekvensdiagrammet viser hvordan Text- og TextField-objektene samhandler med MemoryApp- og Memory-objektene. Sekvensen er omtrent som i versjon 1, med noen viktige forskjeller:

  • Text-objektet har tatt rollen til System.out og tar imot meldinger til brukeren.
  • Istedenfor at MemoryApp leser input fra System.in med Scanner.nextLine()-metoden, så er det TextField-objektet som kaller handleSubmitUserInputAction(...)-metoden på MemoryApp-objektet når brukeren har (skrevet inn et tall og) trykket return-tasten.

Det at program-objektet ikke aktivt henter input, men venter på at et interaktivt JavaFX-objekt sier fra om input er typisk for hendelsesstyrte programmer. På en måte venter program-objektet på alle mulige input på en gang, og må reagere på det som kommer. I dette tilfellet er det jo bare ett interaktivt JavaFX-objekt, men i større programmer er det mye som kan skje på en gang.