mirror of
https://gitlab.com/harald.mueller/aktuelle.kurse.git
synced 2024-11-23 18:21:56 +01:00
Merge branch 'master' of https://gitlab.com/harald.mueller/aktuelle.kurse
This commit is contained in:
commit
8f7dc18773
@ -42,18 +42,20 @@ It should implement the following methods and define the following fields:
|
||||
getUnit(): simply returns the variable unit.
|
||||
|
||||
|
||||
3) Implementation:
|
||||
3) **_Implementation:_**
|
||||
|
||||
Create a child class of PressureSensor Barometric1000PressureSensorImpl that implements the following method:
|
||||
|
||||
doMeasurement(): This should write a value between 0.5 and 1.05 into the measurmentValue variable. Here, in reality, the physical sensor would be addressed via an interface of the sensor. This would be very manufacturer-specific and could change from model to model of the manufacturer. That means you would have to read the manuals of the manufacturer of Barometric1000 to program this method in reality. But let's make it easy and just write a random value into the variable measurmentValue.
|
||||
doMeasurement(): This should write a value between 0.5 and 1.05 into the measurmentValue variable.
|
||||
|
||||
4) Implementation:
|
||||
Here, in reality, the physical sensor would be addressed via an interface of the sensor. This would be very manufacturer-specific and could change from model to model of the manufacturer. That means you would have to read the manuals of the manufacturer of Barometric1000 to program this method in reality. But let's make it easy and just write a random value into the variable measurmentValue.
|
||||
|
||||
4) **_Implementation_**
|
||||
|
||||
Create a child class of PressureSensor Aqualung2021ProDivePressureSensorImpl and implement the method doMeasurment() which returns values between 0 and 10.0. Again, in reality you would need to read the manuals of Aqualung2021Pro.
|
||||
|
||||
|
||||
5) Specification/partial implementation:
|
||||
5) **_Specification/partial implementation:_**
|
||||
|
||||
Create and partially implement one of the following abstract
|
||||
child classes of Sensor analogous to the class PressureSensor:
|
||||
@ -63,21 +65,22 @@ It should implement the following methods and define the following fields:
|
||||
abstract class HumiditySensor
|
||||
abstract class SpeedSensor
|
||||
|
||||
6) Implementation:
|
||||
6) **_Implementation:_**
|
||||
|
||||
Implement 2 concrete classes for two models of the abstract class you specified in task 5.
|
||||
** --> ** Implement 2 concrete classes for two models of the abstract class you specified in task 5.
|
||||
|
||||
|
||||
7) Using polymorphism:
|
||||
7) **_Using polymorphism:_**
|
||||
|
||||
Now write a class CsvWriter that reads readings from one of these sensors at a given time interval and writes them to a file. (File name, interval and sensor should be configurable).
|
||||
** --> ** Now write a class CsvWriter that reads readings from one of these sensors at a given time interval and writes them to a file. (File name, interval and sensor should be configurable).
|
||||
- Tip: Create an object of a child class of Sensor and pass it to the constructor of CsvWriter as a parameter together with the interval and the filename.
|
||||
File format: each line is Comma Separated Value (CSV) i.e. something like _time stamp_,_name of sensor_,_unit_,_measurement_. Each line corresponds to one measurement.
|
||||
- Implement a method "public void run()" which you then call to actually take the measurements and write them to the file.
|
||||
|
||||
|
||||
8) Create the CsvWriter in a main class and allow the user to select the sensor, the interval and the file name.
|
||||
|
||||
8) ** --> ** **_Create the CsvWriter in a main class_** and allow the user to select the sensor, the interval and the file name.
|
||||
|
||||
|
||||
9) Optional: Think about how you would write the same data into a database.
|
||||
9) ** --> ** **_Optional:_** Think about how you would write the same data into a database or into a .json format file.
|
||||
|
||||
|
@ -13,55 +13,77 @@ Erstellen sie eine Klassenhierarchie, die mehrere verschiedene Sensoren enthält
|
||||
Aufgaben
|
||||
-
|
||||
|
||||
1) Spezifikation:
|
||||
1) **_Spezifikation:_**
|
||||
|
||||
Erzeugen sie ein Abstrakte Klasse Sensor mit den folgenden abstrakten Methoden:
|
||||
Erzeugen sie ein Abstrakte Klasse Sensor mit den folgenden abstrakten Methoden:
|
||||
|
||||
getUnit(): Diese soll die Einheit der Messung zurückgeben wie zum Beispiel Grad Celsius
|
||||
getUnit(): Diese soll die Einheit der Messung zurückgeben wie zum Beispiel Grad Celsius
|
||||
|
||||
getValue(): Die Messung in der Einheit, d.h. ein double wie zum Beispiel 17.0
|
||||
getValue(): Die Messung in der Einheit, d.h. ein double wie zum Beispiel 17.0
|
||||
|
||||
getName(): Diese soll nur den Namen des Messwerts zurückgeben, wie zum Beispiel "Aussentemperatur in Baar"
|
||||
getName(): Diese soll nur den Namen des Messwerts zurückgeben, wie zum Beispiel "Aussentemperatur in Baar"
|
||||
|
||||
doMeasurement(): Diese soll die Messung wirklich durchführen, d.h. einen "Sensor auslesen" zum Beispiel indem eine serielle Schnittstelle angesprochen wird oder ein HTTP-Request gemacht wird oder etwas anderes.
|
||||
doMeasurement(): Diese soll die Messung wirklich durchführen, d.h. einen "Sensor auslesen" zum Beispiel indem eine serielle Schnittstelle angesprochen wird oder ein HTTP-Request gemacht wird oder etwas anderes.
|
||||
|
||||
|
||||
2) Spezifikation/Teil-Implementation:
|
||||
2) **_Spezifikation/Teil-Implementation:_**
|
||||
|
||||
Erzeugen sie eine abstrakte Klasse für alle Drucksensoren mit dem Namen PressureSensor. Diese soll Sensor erweitern.
|
||||
|
||||
Diese soll folgende Methoden verwirklichen und folgende Felder definieren:
|
||||
|
||||
private String unit;
|
||||
private String unit;
|
||||
|
||||
protected double measurementValue;
|
||||
protected double measurementValue;
|
||||
|
||||
getValue(): gibt einfach die Variable measurementValue zurück.
|
||||
getValue(): gibt einfach die Variable measurementValue zurück.
|
||||
|
||||
getUnit(): gibt einfach die Variable unit zurück.
|
||||
getUnit(): gibt einfach die Variable unit zurück.
|
||||
|
||||
|
||||
3) Implementation: Erzeugen sie eine Kind-Klasse von PressureSensor Barometric1000PressureSensorImpl die folgende Methode implementiert:
|
||||
doMeasurement(): Diese solle einen Wert zwischen 0.5 und 1.05 in den measurmentValue Variable schreiben. Hier würde in der Realität der physische Sensor über eine Schnittstelle des Sensors angesprochen. Das wäre dann sehr herstellerspezifisch und könnte von Modell zu Modell des Herstellers auch noch ändern. Das heisst, sie müssten die Manuals des Herstellers von Barometric1000 lesen, um diese Methode in der Realität zu programmieren. Aber wir machen es uns einfach und geben schreiben einfach einen Zufallswert in die Variable measurmentValue.
|
||||
3) **_Implementation:_**
|
||||
|
||||
Erzeugen sie eine Kind-Klasse von PressureSensor Barometric1000PressureSensorImpl die folgende Methode implementiert:
|
||||
|
||||
doMeasurement(): Diese solle einen Wert zwischen 0.5 und 1.05 in die measurmentValue Variable schreiben.
|
||||
|
||||
Hier würde in der Realität der physische Sensor über eine Schnittstelle des Sensors angesprochen. Das wäre dann sehr herstellerspezifisch und könnte von Modell zu Modell des Herstellers auch noch ändern. Das heisst, sie müssten die Manuals des Herstellers von Barometric1000 lesen, um diese Methode in der Realität zu programmieren. Aber wir machen es uns einfach und schreiben einfach einen Zufallswert in die Variable measurmentValue.
|
||||
|
||||
|
||||
4) Implementation: Erzeugen sie eine Kind-Klasse von PressureSensor Aqualung2021ProDivePressureSensorImpl und implementieren sie die Methode doMeasurment() die Werte zwischen 0 und 10.0 zurückgibt. Auch hier müssten sie in der Realität die Manuals von Aqualung2021Pro lesen.
|
||||
4) **_Implementation:_**
|
||||
|
||||
5) Spezifikation/Teil-Implementation: Erzeugen und Teil-Implementieren sie eine der folgenden Abstrakten Kind-Klassen von Sensor analog zur Klasse PressureSensor:
|
||||
|
||||
abstract class TemperatureSensor
|
||||
abstract class HumiditySensor
|
||||
abstract class SpeedSensor
|
||||
|
||||
6) Implementation: Implementieren sie 2 Konkrete Klassen für zwei Modelle der von ihnen in Aufgabe 5 spezifizierten Abstrakten Klasse.
|
||||
|
||||
7) Benutzen von Polymorphismus: Schreiben sie jetzt eine Klasse CsvWriter welche von einem dieser Sensoren in einem vorgegeben Zeitintervall Messwerte ausliest und diese dann in ein File schreibt. (Filenamen, Intervall und Sensor soll konfigurierbar sein).
|
||||
• Tipp: Sie erzeugen ein Objekt einer Kind-Klasse von Sensor und übergeben diese an dem Konstruktor von CsvWriter als Parameter zusammen mit dem Intervall und dem Filenamen.
|
||||
Fileformat: jede Zeile ist Comma Separated Value (CSV) d.h. sowas wie <zeitstempel>,<measurment>,<unit>,<name of sensor>. Jede Zeile entspricht einer Messung.
|
||||
• Implementieren sie eine Methode "public void run()" welche sie dann aufrufen um die Messungen wirklich zu machen und diese ins File zu schreiben.
|
||||
|
||||
8) Erzeugen sie den CsvWriter in einer Main-Klasse und ermöglichen sie dem Benutzer den Sensor, das Intervall und den Filenamen auszuwählen.
|
||||
|
||||
9) Optional: Überlegen sie sich, wie sie dieselben Daten in eine Datenbank schreiben würden.
|
||||
Erzeugen sie eine Kind-Klasse von PressureSensor Aqualung2021ProDivePressureSensorImpl und implementieren sie die Methode doMeasurment() die Werte zwischen 0 und 10.0 zurückgibt. Auch hier müssten sie in der Realität die Manuals von Aqualung2021Pro lesen.
|
||||
|
||||
|
||||
5) **_Spezifikation/Teil-Implementation:_**
|
||||
|
||||
Erzeugen und Teil-Implementieren sie eine der folgenden Abstrakten Kind-Klassen von Sensor analog zur Klasse PressureSensor:
|
||||
|
||||
abstract class TemperatureSensor
|
||||
|
||||
abstract class HumiditySensor
|
||||
|
||||
abstract class SpeedSensor
|
||||
|
||||
|
||||
|
||||
6) **_Implementation:_**
|
||||
|
||||
Implementieren sie 2 Konkrete Klassen für zwei Modelle der von ihnen in Aufgabe 5 spezifizierten Abstrakten Klasse.
|
||||
|
||||
|
||||
7) **_Benutzen von Polymorphismus:_**
|
||||
|
||||
**--> ** **_Schreiben sie jetzt eine Klasse CsvWriter_** welche von einem dieser Sensoren in einem vorgegeben Zeitintervall Messwerte ausliest und diese dann in ein File schreibt. (Filenamen, Intervall und Sensor soll konfigurierbar sein).
|
||||
- Tipp: Sie erzeugen ein Objekt einer Kind-Klasse von Sensor und übergeben diese an dem Konstruktor von CsvWriter als Parameter zusammen mit dem Intervall und dem Filenamen.
|
||||
|
||||
Fileformat: jede Zeile ist Comma Separated Value (CSV) d.h. sowas wie _time stamp_,_name of sensor_,_unit_,_measurement_. Jede Zeile entspricht einer Messung.
|
||||
- Implementieren sie eine Methode "public void run()" welche sie dann aufrufen um die Messungen wirklich zu machen und diese ins File zu schreiben.
|
||||
|
||||
|
||||
8) **--> ** Erzeugen sie den CsvWriter in einer Main-Klasse und ermöglichen sie dem Benutzer den Sensor, das Intervall und den Filenamen auszuwählen.
|
||||
|
||||
|
||||
9) **--> ** **_Optional:_** Überlegen sie sich, wie sie dieselben Daten in eine Datenbank schreiben würden.
|
||||
|
||||
|
||||
|
@ -0,0 +1,35 @@
|
||||
package com.doerzbach;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class CsvWriterTest {
|
||||
|
||||
// TODO : Mock this to objects
|
||||
Sensor sensor1;
|
||||
BufferedWriter outBuffer;
|
||||
|
||||
@Test
|
||||
void runTest() throws IOException {
|
||||
// Here we would like to test the CsvWriter and not the sensor or the Filewriter
|
||||
/* TODO: For this we should mocked the sensor1 and the outBuffer to be able to keep track of
|
||||
number of times the sensor1 is called and the outBuffer is called. */
|
||||
CsvWriter w=new CsvWriter(1, outBuffer,sensor1,10);
|
||||
/* TODO: Here we should define the return values for getValue(), getUnit(), getName()
|
||||
of sensor1 */
|
||||
// Now lets run the test
|
||||
w.run();
|
||||
/* TODO: Check how many times the sensors getXXX() methods were called.
|
||||
It should be 10 times */
|
||||
/* TODO: check that the outBuffer is flushed 10 times */
|
||||
/* TODO: check that the outBuffer is written 10 times */
|
||||
}
|
||||
}
|
3
m226ab/2-Unterlagen/03-Vererbung/uebung_vererbung_herdt_verlag_kapitel_8_10/.gitignore
vendored
Normal file
3
m226ab/2-Unterlagen/03-Vererbung/uebung_vererbung_herdt_verlag_kapitel_8_10/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
out
|
||||
.idea
|
||||
*.iml
|
@ -0,0 +1,39 @@
|
||||
package com.doerzbach;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Main {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
// write your code here
|
||||
Zeitformat zeit1=new Zeitformat12(22,10);
|
||||
Zeitformat zeit2=new Zeitformat24(22, 10);
|
||||
Zeitformat zeit3=new Zeitformat12(17,10);
|
||||
Zeitformat zeit4=new Zeitformat24(17, 10);
|
||||
Zeitformat zeit5=new Zeitformat12(12,0);
|
||||
Zeitformat zeit6=new Zeitformat24(12,00);
|
||||
/*zeit1.zeitAusgabe();
|
||||
zeit2.zeitAusgabe();
|
||||
zeit3.zeitAusgabe();
|
||||
zeit4.zeitAusgabe();
|
||||
zeit5.zeitAusgabe();
|
||||
zeit6.zeitAusgabe();*/
|
||||
ArrayList<Zeitformat> zeiten=new ArrayList<>();
|
||||
zeiten.add(zeit1);
|
||||
zeiten.add(zeit2);
|
||||
zeiten.add(zeit3);
|
||||
zeiten.add(zeit4);
|
||||
zeiten.add(zeit5);
|
||||
zeiten.add(zeit6);
|
||||
for (Zeitformat zeit: zeiten){
|
||||
zeit.zeitAusgabe();
|
||||
}
|
||||
Zeit zeit1clone=zeit1.clone();
|
||||
if(zeit1.equals(zeit1clone)){
|
||||
System.out.println("zeit1 und zeit2 sind gleich");
|
||||
} else {
|
||||
System.out.println("zeit1 und zeit2 sind nicht gleich");
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package com.doerzbach;
|
||||
|
||||
public final class Uhrzeit {
|
||||
static boolean entspricht(Zeit zeit1,Zeit zeit2){
|
||||
return zeit1.equals(zeit2);
|
||||
}
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package com.doerzbach;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
public class Zeit {
|
||||
private int hours;
|
||||
private int minutes;
|
||||
|
||||
public int getHours() {
|
||||
return hours;
|
||||
}
|
||||
|
||||
public void setHours(int hours) {
|
||||
this.hours = hours;
|
||||
}
|
||||
|
||||
public int getMinutes() {
|
||||
return minutes;
|
||||
}
|
||||
|
||||
public void setMinutes(int minutes) {
|
||||
this.minutes = minutes;
|
||||
}
|
||||
public Zeit clone() {
|
||||
Zeit clonedobject=new Zeit();
|
||||
clonedobject.hours = this.hours;
|
||||
clonedobject.minutes = this.minutes;
|
||||
return clonedobject;
|
||||
}
|
||||
public boolean equals(Zeit zeit){
|
||||
return zeit.minutes==this.minutes&&zeit.hours==this.hours;
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
package com.doerzbach;
|
||||
|
||||
public abstract class Zeitformat extends Zeit{
|
||||
|
||||
public Zeitformat() {
|
||||
}
|
||||
public abstract void zeitAusgabe();
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package com.doerzbach;
|
||||
|
||||
public class Zeitformat12 extends Zeitformat{
|
||||
|
||||
public Zeitformat12(int hours,int minutes){
|
||||
setHours(hours);
|
||||
setMinutes(minutes);
|
||||
}
|
||||
@Override
|
||||
public void zeitAusgabe() {
|
||||
String pmam;
|
||||
int hours;
|
||||
if(getHours()>12) {
|
||||
pmam = "PM";
|
||||
hours=getHours()-12;
|
||||
} else {
|
||||
pmam = "AM";
|
||||
hours=getHours();
|
||||
|
||||
}
|
||||
System.out.printf("%02d:%02d %s\n",hours,getMinutes(),pmam);
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package com.doerzbach;
|
||||
|
||||
public class Zeitformat24 extends Zeitformat{
|
||||
|
||||
public Zeitformat24(int hours,int minutes){
|
||||
setHours(hours);
|
||||
setMinutes(minutes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void zeitAusgabe() {
|
||||
System.out.printf("%02d:%02d\n",getHours(),getMinutes());
|
||||
}
|
||||
}
|
@ -66,9 +66,10 @@ Thema: Selbstdefinition - Bearbeitungszeit 15-20 Std. (teilweise in Hausarbeit)
|
||||
|
||||
|
||||
<br>
|
||||
<br>
|
||||
**Buch** [./2-Unterlagen/00-Buecher/Java_9_Grundlagen_Programmierung](./2-Unterlagen/00-Buecher/Buch__Java_9_Grundlagen_Programmierung/JAV9.pdf)
|
||||
<br>**dazugehörige(.java)** [./2-Unterlagen/00-Buecher/JAV9_Arbeitsdateien.zip](2-Unterlagen/00-Buecher/Buch__Java_9_Grundlagen_Programmierung/JAV9_Arbeitsdateien.zip)
|
||||
<br>**Buch**
|
||||
[./2-Unterlagen/00-Buecher/Java_9_Grundlagen_Programmierung](./2-Unterlagen/00-Buecher/Buch__Java_9_Grundlagen_Programmierung/JAV9.pdf)
|
||||
<br>**dazugehörige(.java)**
|
||||
[./2-Unterlagen/00-Buecher/JAV9_Arbeitsdateien.zip](2-Unterlagen/00-Buecher/Buch__Java_9_Grundlagen_Programmierung/JAV9_Arbeitsdateien.zip)
|
||||
<br>
|
||||
|
||||
| Tag | Inhalte/Themen, Aufträge/Übungen |
|
||||
|
@ -1,4 +1,4 @@
|
||||
Planung - PräInstruktion.
|
||||
Planung - Vorwissenaktivierung/PräInstruktion.
|
||||
(Jeder für sich, schriftlich.
|
||||
Vermutungen sind auch gut)
|
||||
|
||||
@ -11,4 +11,4 @@ Planung - PräInstruktion.
|
||||
3.) Wenn mehrere Personen beteiligt sind, wie kann man als Projektleiter alle beteiligen?
|
||||
|
||||
|
||||
4.) Warum macht man ein Sitzungsprotokoll?
|
||||
4.) Warum macht man ein Sitzungsprotokoll?
|
||||
|
@ -1,22 +1,17 @@
|
||||
Organisation/Strukturen - PräInstruktion.
|
||||
Organisation/Strukturen - Vorwissenaktivierung/PräInstruktion.
|
||||
(Jeder für sich, schriftlich. Vermutungen sind auch gut)
|
||||
|
||||
|
||||
1.) Wie können viele Leute organisiert werden? Im Betrieb/Firma/Event? Im Projekt?
|
||||
|
||||
|
||||
2.) Was ist eine Linienorganisation?
|
||||
|
||||
|
||||
3.) Was ist eine Stabs-Stelle
|
||||
|
||||
|
||||
4.) Was ist eine Matrixorganisation?
|
||||
|
||||
|
||||
5.) Was gibt es für "Weisungen"?
|
||||
|
||||
|
||||
6.) Was sieht man in einem Organigramm?
|
||||
|
||||
|
||||
7.) Was ist eine Führungsspanne?
|
||||
7.) Was ist eine Führungsspanne?
|
||||
|
@ -1,14 +1,14 @@
|
||||
Führung - PräInstruktion.
|
||||
(Jeder für sich, schriftlich.
|
||||
Vermutungen sind auch gut)
|
||||
|
||||
1.) Wie können viele Leute geführt werden?
|
||||
Führung - Vorwissenaktivierung/PräInstruktion.
|
||||
(Jeder für sich, schriftlich. Vermutungen sind auch gut)
|
||||
|
||||
|
||||
2.) Wie können Sitzungen effizient/er gemacht werden?
|
||||
1.) Was sind die Eigenschaften, die ein guter Projektleiter haben sollte?
|
||||
|
||||
2.) Wie können viele Leute geführt werden?
|
||||
|
||||
3.) Was kann ein Projektleiter tun, wenn sich der End-Termin nicht halten lässt?
|
||||
3.) Wie können Sitzungen effizient/er gemacht werden?
|
||||
|
||||
4.) Wie gehen Sie als Sitzungsleiter mit Teilnehmer um, die vorlaut sind und immer Recht haben wollen?
|
||||
|
||||
5.) Was kann ein Projektleiter tun, wenn sich der End-Termin nicht halten lässt?
|
||||
|
||||
4.) Was sind die Eigenschaften, die ein guter Projektleiter haben sollte?
|
||||
|
@ -8,7 +8,10 @@ Geschätzter Zeitbedarf: 90-120 min
|
||||
|
||||
**Bubble Sort**
|
||||
|
||||
|
||||
|
||||
<https://www.youtube.com/watch?v=XMu1Kq69EhU> (5:32 min)
|
||||
<https://falconbyte.net/blog-java-bubblesort.php>
|
||||
|
||||
Machen Sie zuerst die Kapitel 1-3 (unten) durch und bauen Sie ein Bubble-Sort-Algorithmus. Die Daten lesen Sie über eine Liste von
|
||||
Nummern aus einer Text-Datei ein. Lassen Sie die Veränderungen nach jedem
|
||||
|
@ -61,4 +61,6 @@ Finden Sie weitere Sort-Algorithmen im Internet und implementieren Sie einen,
|
||||
den Sie noch nicht kennen davon und vergleichen Sie ebenfalls die Leistung
|
||||
(Performanz) dieses Algorithmus. (z.B. QuickSort o. a.).
|
||||
|
||||
<https://medium.com/@kamyarg/comparison-sorting-algorithms-and-mystery-of-nlogn-complexity-d7e80c34876>
|
||||
|
||||
**Zeigen Sie die Resultate der Lehrperson**
|
||||
|
Loading…
Reference in New Issue
Block a user