Create a new directory for this exercise, then download the files
Clock.java and AlarmTest.java into it.
The first of these files contains a slightly modified version of the
Clock
class discussed in Lectures 5 & 6.
Create a new file named AlarmClock.java
in the same directory. In this
file, create a class named AlarmClock
that simulates an alarm clock.
The class should have the features shown on the UML diagram below.
Note, in particular, the relationship here between AlarmClock
and Clock
.
Note that the constructors of AlarmClock
are for setting the time on the
clock, not for setting the alarmHours
and alarmMinutes
fields!
Those fields are given their values by calling the setAlarm()
method.
The values of the fields dictate the time at which the alarm should be
triggered. Your implementation of setAlarm()
should check the values
provided for the two fields, throwing an IllegalArgumentException
with a
message of “invalid alarm hours” or “invalid alarm minutes”, as appropriate.
The isRinging()
method should return true
if the alarm is ringing,
false
if it is not. The alarm switches from a non-ringing state to a
ringing state when the time on the alarm clock reaches the alarm time, and
the alarm clock should remain in the ringing state for a total of 15 seconds.
The display()
method should override the version from Clock
with a new
version providing visual feedback that the alarm is ringing (see below).
It can use the isRinging()
method to determine when this visual feedback
must be provided. As a result of these changes, the output produced by
calling the run()
method will also change. Below is a small sample of the
output generated by this method when the alarm has been set for 7:30.
07:29:58
07:29:59
07:30:00 - WAKE UP!
07:30:01 - WAKE UP!
07:30:02 - WAKE UP!
The output should revert to showing only the time after the alarm has rung
for a total of 15 seconds. You can check whether your code duplicates
this behaviour using the AlarmTest
program that we have provided.
□