Preliminary Object-Oriented Design
Clickermatic Software Clicker
Client Software
Summary View of Client Architectural Design
ClientController Timer
UserInterface
Historian
NetworkInterface
DefaultProtocol
Question
ConnectionManager
Protocol <<interface>>
Historian.Record
TimerListener <<interface>>
1
1
1
1
1
1
1
1
1
1
1
1
1
0..n
1
1
1
1
Question
- number: int- text: string- reference: string- timeToAnswer: int+ QUESTION_TYPE_MULTIPLE_CHOICE: int+ QUESTION_TYPE_NUMERIC: int+ QUESTION_TYPE_SHORT_ANSWER: int
Detail View: Question Class Diagram
Historian
- NUMBER_OF_QUESTIONS_TO_TRACK: int- numberOfQuestionsAnsweredCorrectly: int- numberOfQuestionsAnsweredIncorrectly: int- records: list<Historian.Record>
+ resetTallies(): void+ addQuestionAnswerRecord(questionNumber: int, clientAnswer:
string, answerIsCorrect: boolean, timeTakenToAnswerQuestion: int, correctAnswer: string)
Detail View: Historian Class Diagram
Historian.Record
- questionNumber: int- clientAnswer: Answer- answerIsCorrect: boolean- timeTakenToAnswerQuestion: int- correctAnswer: Answer
Detail View: Historian.Record Class Diagram
Detail View: Connection State Diagram
Connecting ConnectedNot
Connected
Connection receives user’s name and
server’s IP address
connection attempt fails (for example,
times out)
connection ends
Connection sends or receives data
server forms TCP connection with
Connection
ConnectionManager
- networkInterface: NetworkInterface- protocol: Protocol- serverIPAddress: string- serverPortNumber: int
+ logIn(name: string): void+ sendAnswerChoice(questionNumber: int, answer: string)+ close(): boolean+ isOpen(): boolean
Detail View: ConnectionManager Class Diagram
NetworkInterface
Attributes are implementation-dependent.
+ openConnection(name: String, address: string, portNumber: int): void
+ sendBytes(bytesToSend: byte[]): void+ closeConnection(): void+ connectionIsOpen(): boolean
Detail View: NetworkInterface Class Diagram
Protocol <<interface>>
+ toNetworkBytes(questionNumber: int, answer: string): byte[]+ getQuestionNumberFromNetworkBytes(bytes: byte[]): int+ getQuestionTypeFromNetworkBytes(bytes: byte[]): int+ getAnswerChoicesFromNetworkBytes(bytes: byte[]): list<string>+ getTimeLimitFromNetworkBytes(bytes: byte[]): int
Detail View: Protocol Class Diagram
DefaultProtocol
+ toNetworkBytes(questionNumber: int, answer: string): byte[]+ getQuestionNumberFromNetworkBytes(bytes: byte[]): int+ getQuestionTypeFromNetworkBytes(bytes: byte[]): int+ getAnswerChoicesFromNetworkBytes(bytes: byte[]): list<string>+ getTimeLimitFromNetworkBytes(bytes: byte[]): int
Detail View: DefaultProtocol Class Diagram
Detail View: Timer State Diagram
Counting Down
ExpiredNot
Running
time limit set
timer started
countdown stopped
timer reset
time = zero
Timer
- time: int- running: boolean- timerListeners: set<TimerListener>
+ expired(): boolean+ addTimerListener(newListener: TimerListener): void+ updateTimerListeners(): void
Detail View: Timer Class Diagram
TimerListener <<interface>>
+ setTimeRemaining(time: int): void
Detail View: TimerListener Class Diagram
ConnectionManager
Get Answer Choice for Question
Detail View: ClientController Inter-Class Use-Case Diagram
Timer
Update Time Remaining
UserInterface
Inform of Answer Choice
Update User Interface
UserInterface
Log In
ConnectionManagerSubmit Answer
Choice
ClientController
- connection: Connection- userInterface: UserInterface- timer: Timer- inTallyMode: boolean- currentQuestion: Question
+ askQuestion(question: Question): void+ setTimeRemaining(time: int): void+ submitAnswerChoice(string): void+ main(args: string[]): void
Detail View: ClientController Class Diagram
UserInterface
- clientController: ClientController
Operations have yet to be determined. They will likely be only update-UI-with-data-from-the-ClientController operations.
Detail View: UserInterface Class Diagram
Server Software
Summary View of Server Architectural Design
0..500Controller
Timer
UserInterface
QuestionSet
Question
Connection
Protocol
Server
Statistics
SetStatistics
ConnectionHandler1 1
1
QuestionHandler1
1
1
1
1
1
0..n
1
1
1
1
1
1
1
1
1
Server
- main()
Detail View: Question Class Diagram
Controller
- connection: Connection- userInterface: UserInterface- timer: Timer- questionSet: QuestionSet
-establishConnections();-loadQuestions();
Detail View: Controller Class Diagram
QuestionSet
-questions[] Question
Detail View: QuestionSet Class Diagram
UserInterface
-questions[] Question
-getInstanceOf-displayIntroScreen-displayX-displayY-update
Detail View: UserInterface Class Diagram
UserInterface
-runningTotal
Detail View: Statistics Class Diagram
Detail View: Controller State Diagram
Determining Detials
Showing Question
Waiting forQuestion Set
User load’s a Question Set
User or Timer requests a switch to a different Question (aka: Question ends)
User starts server
Editing Question Set
User opens Question Editor
User exits Question Editor
User closes serverUser closes current Question Set
Question Set Ends With Set Statistic Disabled
Showing Set Statistics
Question Set Ends With Set Statistic Enabled
User exits set statisticsController called by
main()
User exits Server
Program
Question ends with Question
Statistic Enabled
Showing Question and
Statistics
User Exits Statistics (and it is not a Poll)
User starts a Live Poll
User exits Live Poll
(Version 2)
Top Related