Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

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:

PlantUML Macro
abstract class Application {
	+abstract void start(Stage)
}
class MemoryApp {
	+void start(Stage)
}
class Memory<Integer> {
	+Integer nextItem()
	+acceptItem(Integer)
}

class Text {
	+setText(String)	
}
class TextField {
	+getText()
}
Application <|- MemoryApp
MemoryApp --> Memory: memory
MemoryApp --> Text: systemOutput
MemoryApp --> TextField: userInput
PlantUML Macro
object MemoryApp {
}
object Memory {
}

object Text {
}
object TextField {
}
MemoryApp --> Memory: memory
MemoryApp --> Text: systemOutput
MemoryApp --> TextField: userInput

PlantUML Macro
MemoryApp -> Memory: nextItem()
Memory -> MemoryApp: 3
MemoryApp -> Text: setText("Element nr. 1 er 3")
participant TextField
actor bruker
Text -> bruker: "Element nr. 1 er 3"
MemoryApp -> Text: setText("Gjenta element nr. 1 av 1")
Text -> bruker: "Gjenta element nr. 1 av 1"
bruker --> TextField: 3
TextField -> MemoryApp: handleSubmitUserInputAction()
MemoryApp -> TextField: getText()
TextField --> MemoryApp: "3"
MemoryApp -> Memory: acceptItem(3)
Memory --> MemoryApp: Boolean.TRUE
MemoryApp -> Memory: nextItem()
 

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.