Skip to content
Snippets Groups Projects
Commit aa9ce373 authored by Torstein Strømme's avatar Torstein Strømme
Browse files

La til noe forklarende kommentarer til koden fra forelesning 24.01

parent 4228225f
Branches master
No related tags found
No related merge requests found
/**
* En abstraksjon av en fysisk alarm. Er ansvarlig for kommunikasjon
* med en eventuell fysisk alarm; men i vårt eksempel skriver den bare
* ut beskjeder til output.
*
* @author Torstein Strømme
*/
public class Alarm {
boolean isActive;
/**
* Sett alarmen av (<code>false</code>) eller på (<code>true</code>)
* @param value <code>true</code> slår alarmen på, <code>false</code> slår den av.
*/
void setActive(boolean value) {
isActive = value;
System.out.println("Set alarm to active: "+value);
......
import java.util.HashSet;
/**
* Et FireProctectionSystem -objekt har til hensikt å koordinere
* sensorer og alarmer, slik at alle alarmer er aktivert dersom én
* eller flere sensorer detekterer røyk.
*
* @author Torstein Strømme
*/
class FireProtectionSystem {
// Feltvariabler (én kopi av hver av disse for hvert objekt)
HashSet<Sensor> sensors = new HashSet<>();
HashSet<Alarm> alarms = new HashSet<>();
/**
* Installer en eller flere sensorer i systemet.
* @param mySensors en sensor som skal installerse
*/
public void installSensor(Sensor... mySensors) {
for (Sensor sensor : mySensors) {
this.sensors.add(sensor);
......@@ -11,16 +23,26 @@ class FireProtectionSystem {
}
}
/**
* Installer en alarm i systemet.
* @param myAlarm
*/
public void installAlarm(Alarm myAlarm) {
this.alarms.add(myAlarm);
}
/**
* Gir beskejed til systemet at røyk er oppdaget
*/
void smokeDetected() {
for (Alarm alarm : alarms) {
alarm.setActive(true);
}
}
/**
* Gir beskjed til systemet at en sensor har sluttet å detektere røyk
*/
void stoppedDetectingSmoke() {
if (allSensorsAreOff()) {
for (Alarm alarm : alarms) {
......@@ -29,6 +51,11 @@ class FireProtectionSystem {
}
}
/**
* Sjekker om alle sensorer er av (ikke detekterer røyk).
* @return <code>true</code> dersom ingen installerte sensorer detekterer røyk,
* <code>false</code> hvis én eller flere sensorer detekterer røyk.
*/
private boolean allSensorsAreOff() {
for (Sensor sensor : this.sensors) {
if (sensor.smokeDetected) {
......
class Main {
/**
* Main -metode for å teste FireProtectionSystem -classen
* Det som foregår her simulerer alle "input" til
* systemet.
*
* @param args
*/
public static void main(String[] args) {
// Oppretter et nytt objekt
FireProtectionSystem system = new FireProtectionSystem();
// Installere sensorere
Sensor[] mySensors = new Sensor[4];
// Installere sensorer
// Lager en array { null, null, null, null }
Sensor[] mySensors = new Sensor[4];
for (int i = 0; i < mySensors.length; i++) {
// Oppretter nytt Sensor -objekter og putter det inn i arrayen
mySensors[i] = new Sensor();
}
system.installSensor(mySensors);
// Installere alarmer
Alarm myAlarm = new Alarm();
Alarm myAlarm = new Alarm(); // Oppretter et nytt Alarm -objekt
system.installAlarm(myAlarm);
// Oppdag røyk
......@@ -20,6 +29,7 @@ class Main {
mySensors[1].setSmokeDetected(true);
// Fjern røyk
mySensors[0].setSmokeDetected(false);
mySensors[0].setSmokeDetected(false); // Alarmen skal ikke gå av enda, men
mySensors[1].setSmokeDetected(false); // Nåå forventer vi at alarmen går av
}
}
\ No newline at end of file
/**
* En abstraksjon av en fysisk sensor. Er ansvarlig for kommunikasjon
* med en eventuell fysisk sensor; i vårt tilfelle gjør vi istedet
* tilgjengelig en metode <code>setSmokeDetected</code> for testing.
*/
public class Sensor {
boolean smokeDetected;
FireProtectionSystem system;
/**
* Setter hvorvidt røyk er oppdaget.
* @param smokeDetected
*/
public void setSmokeDetected(boolean smokeDetected) {
this.smokeDetected = smokeDetected;
if (smokeDetected) {
......@@ -14,6 +21,11 @@ public class Sensor {
}
}
/**
* Installer et brannvarslingssystem denne sensoren rapporterer til
* når den oppdager røyk.
* @param system
*/
void installSystem(FireProtectionSystem system) {
this.system = system;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment