Updated everything. Further explanation in README

main
Philipp3107 2022-12-09 01:38:11 +01:00
parent e43add6605
commit 90d2d53530
36 changed files with 613 additions and 30 deletions

View File

@ -7,5 +7,21 @@
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module-library">
<library name="JUnit5.8.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter/5.8.1/junit-jupiter-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-api/5.8.1/junit-jupiter-api-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-commons/1.8.1/junit-platform-commons-1.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-params/5.8.1/junit-jupiter-params-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-engine/5.8.1/junit-jupiter-engine-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-engine/1.8.1/junit-platform-engine-1.8.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
</component>
</module>

View File

@ -1,5 +1,19 @@
import domain.C3PO;
import roboter.exceptions.RobotException;
public class Main {
public static void main(String[] args) {
//just some testing
/*C3PO Herbert = new C3PO(0, "Herbert");
int[] input = {6,5,4,3,2,1};
Herbert.triggerPowerSwitch();
try{
String asString = Herbert.speak(input);
System.out.println(asString);
}catch(RobotException re){
System.out.println(re);
}
*/
}
}

View File

@ -1,15 +1,8 @@
package domain;
public class C3PO extends RobotBasics {
private int id;
private String name;
private boolean power;
public C3PO(int id, String name){
this.id = id;
this.name = name;
power = false;
super(id, name);
}
}

View File

@ -0,0 +1,47 @@
package domain;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class C3POTest {
C3PO Herbert;
int id = 0;
String name = "Herbert";
@BeforeEach
void setup(){
Herbert = new C3PO(id, name);
}
//Tests for basic functions
@Test
void getId() {
assertEquals(id, Herbert.getId());
}
@Test
void getName() {
assertEquals(name, Herbert.getName());
assertEquals(name,
Herbert.getName());
}
@Test
void triggerPowerSwitch() {
Herbert.triggerPowerSwitch();
assertTrue(Herbert.isPowerOn());
}
@Test
void isPowerOn() {
assertFalse(Herbert.isPowerOn());
Herbert.triggerPowerSwitch();
assertTrue(Herbert.isPowerOn());
}
}

View File

@ -1,19 +1,14 @@
package domain;
public class R2D2 extends RobotBasics {
private int id;
private String name;
private boolean power;
/**
* Constructor
* @param id> int
* @param name> String
*/
public R2D2(int id, String name){
this.id = id;
this.name = name;
power = false;
super(id, name);
}
}

View File

@ -20,7 +20,7 @@ class R2D2Test {
//Tests for basic functions
@Test
void getId() {
assertEquals(0, Herbert.getId());
assertEquals(id, Herbert.getId());
}
@Test

View File

@ -1,6 +1,9 @@
/* (c) 2012 Thomas Smits */
//package tpe.exceptions.roboter;
package domain;
import roboter.RobotInstructions;
/**
* Interface für Roboter.
*

View File

@ -1,10 +1,18 @@
package domain;
public abstract class RobotBasics implements Robot {
import roboter.exceptions.RobotException;
import roboter.exceptions.RobotIllegalStateException;
public class RobotBasics implements Robot {
private int id;
private String name;
private boolean power;
public RobotBasics(int id, String name){
this.id = id;
this.name = name;
this.power = false;
}
/**
* @see domain.RobotControl
*/
@ -26,7 +34,11 @@ public abstract class RobotBasics implements Robot {
*/
@Override
public void triggerPowerSwitch() {
toggle(power);
if(power == false){
power = true;
}else{
power = false;
}
}
/**
@ -38,13 +50,26 @@ public abstract class RobotBasics implements Robot {
}
/**
* @see domain.RobotControl
* @see roboter.RobotInstructions
*/
public static void toggle(boolean b){
if(b == false){
b = true;
@Override
public String speak(int[] zahlen) throws RobotException {
if(power == true){
String array = "";
for(int i = 0; i < zahlen.length; i++){
array += zahlen[i] + " ";
}
return array;
}else{
b = false;
throw new RobotIllegalStateException("The Robot is turned off.");
}
}
/**
* @see roboter.RobotInstructions
*/
@Override
public int[] think(int[] zahlen) throws RobotException {
return new int[0];
}
}

View File

@ -14,5 +14,5 @@ update_all:
update_domain:
git add domain/
git commit -m "Updated domain. Further erxplanation in README"
git commit -m "Updated domain. Further explanation in README"
git push -u origin main

View File

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module-library">
<library name="JUnit5.8.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter/5.8.1/junit-jupiter-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-api/5.8.1/junit-jupiter-api-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-commons/1.8.1/junit-platform-commons-1.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-params/5.8.1/junit-jupiter-params-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-engine/5.8.1/junit-jupiter-engine-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-engine/1.8.1/junit-platform-engine-1.8.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
</component>
</module>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_18" default="true" project-jdk-name="openjdk-18" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/Robot_Factory_PR.iml" filepath="$PROJECT_DIR$/.idea/Robot_Factory_PR.iml" />
</modules>
</component>
</project>

View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

Binary file not shown.

View File

@ -0,0 +1,276 @@
# Robot Factory for PR2
* [Teilnehmer](#teilnehmer)
* [Overview](#overview)
* [Packages](#packages)
* [Sidefiles](#sidefiles)
* [Aufgabe](#aufgabe)
## Teilnehmer:
- Philipp Kotte Matr. : 2211945;
- Cedric Hermann Matr. : 2210943;
- XXXXXXX XXXXX Matr. : XXXXXXX;
# Overview
## Packages
* [Domain](#domain)
* [R2D2](#-klasse-r2d2-)
* [R2D2Test](#-testklasse-r2d2test-)
* [C3P0](#-klasse-c3po-)
* [Robot](#-interface-robot-)
* [RobotControl](#-interface-robotcontrol-)
* [RobotControl](#-interface-robotinstructions-)
* [Facade](#facade)
* [Factrory](#-klasse-factory-)
* [Infrastructure](#infratructure)
* [Persistenz](#-klasse-persistenz-)
* [UI](#ui)
## Sidefiles
* [Main](#-klasse-main-)
* [makefile](#-makefile-for-Git-updates-)
## Domain
<h2 align="center"> Klasse R2D2 </h2>
### Variables:
```
private int id
private String name
private boolean power
```
___
### Methods:
```
public R2D2():R2D2
//implemented from interface Robotcontrol
public getId():int
public getName():String
public triggerPowerSWitch():void
public isPowerOn():boolean
```
<h2 align="center"> TestKlasse R2D2Test </h2>
### Variables:
```
public int id
public String name
public R2D2 Herbert
```
___
### Methods:
```
@BeforeEach
setup():void
@Test
getId():void
getName():void
triggerPowerSwitch():void
iPowerOn():void
```
<h2 align="center"> Klasse C3PO </h2>
### Variables:
```
--not set yet--
```
___
### Methods:
```
--not set yet--
```
<h2 align="center"> Interface Robot </h2>
### Methods:
```
--not set yet--
```
<h2 align="center"> Interface RobotControl </h2>
### Methods:
```
--not set yet--
```
<h2 align="center"> Interface RobotInstructions </h2>
### Methods:
```
--not set yet--
```
## facade
<h2 align="center"> Klasse Factory </h2>
### Variables:
```
--not set yet--
```
___
### Methods:
```
--not set yet--
```
## Infrastructure
<h2 align="center"> Klasse Persistenz </h2>
### Variables:
```
--not set yet--
```
___
### Methods:
```
--not set yet--
```
## UI
<h2 align="center"> Klasse UI </h2>
### Variables:
```
--not set yet--
```
___
### Methods:
```
--not set yet--
```
<h2 align="center"> Klasse Main </h2>
### Variables:
```
--not set yet--
```
___
### Methods:
```
--not set yet--
```
<h2 align="center"> makefile for Git updates </h2>
### Variables:
```
--not set yet--
```
___
### Methods:
```
update_readme:
update_make:
update_all:
```
## Aufgabe
PR2-Aufgabe Roboterfabrik
(ursprüngliche Autoren: Sebastian Tschirpke und Steffen Hennhöfer; mit Erweiterungen von Oliver Hummel)
Nach Abschluss Ihres Bachelorstudiums sind Sie auf Jobsuche. In einem Zeitungsartikel
lesen Sie, dass die Firma ASDF123-Roboter AG, junge und kreative Mitarbeiter für den
Aufbau einer Roboterfabrik sucht. Von der Stellenausschreibung ganz hingerissen, machen
Sie sich sofort auf den Weg und reichen Ihre Bewerbungsunterlagen ein. Tatsächlich
meldet sich die Firma kurz darauf bei Ihnen und lädt Sie zu einem Bewerbungsgespräch ein.
Für Sie läuft scheinbar alles perfekt und Sie können es kaum erwarten Ihren zukünftigen
Arbeitgeber von Ihren Qualitäten zu überzeugen. Jedoch zeigt dieser keinerlei Interesse an
Ihren Zeugnissen, sondern knüpft vielmehr Ihre Einstellung an die Lösung folgender Aufgabe
für die Sie Klassen auf der Domänenebene implementieren und testen sollen:
Die Firma möchte eine neue Roboterfabrik aufbauen und benötigt dazu ein Softwaremodell,
welches den Produktionsprozess und die Roboter simuliert. Es handelt sich nur um eine
einzige Fabrik mit einer Fabrikmethode, die flexibel auf Bestellungen der Kunden reagieren
kann. Die Roboterfabrik bietet ihren Kunden zunächst zwei verschiedene Modelle an, beide
aus der Star-Wars-Produktreihe: die Modelle heißen C3PO und R2D2 und sollen gemeinsam
genutzte Funktionalität von einer Superklasse erben. Alle Roboter haben eine einfache
Schnittstelle Robot, mit der sie gesteuert werden können. Diese Schnittstelle besteht insgesamt
aus den folgenden Dateien:
* Robot.java
* RobotControl.java
* RobotInstructions.java
Die Fabrik ist von ihren Fertigungsanlagen her so konzipiert, dass jeder Roboter einzeln
gefertigt wird. Übergeben wird lediglich das gewünschte Roboter-Modell und der Name und
schon erhält der Kunde den von ihm gewünschten Roboter (also in der Simulation eine Instanz).
Der Unterschied zwischen den angebotenen Modellen liegt in der Ausführung der Befehle aus
dem Interface RobotInstructions. Während R2D2 Arrays immer aufsteigend sortiert und bei der
Umwandlung in ein Array den Inhalt durch Kommas trennt (z.B. 1, 2, 3, 4, 5, 6), sortiert C3PO
Arrays stets absteigend und wandelt deren Inhalt in einen String mit Semikolon als Trennzeichen
um (z.B. 6; 5; 4; 3; 2; 1). R2D2 soll für die Sortierung der Daten einen selbst implementierten
SelectionSort-Algorithmus verwenden, C3PO InsertionSort. Die Zusammenstellung des Strings für
die Rückgabe soll in einer privaten Methode der Roboter- Basisklasse mit Hilfe eines Streams und
Lambda-Ausdrücken erfolgen.
Programmieren Sie zwei Klassen R2D2 und C3PO, die beide das Interface Robot implementieren.
Lesen Sie bitte sorgfältig die Dokumentation der Interfaces, damit Sie die beschriebene Semantik
in Ihrer Implementierung einhalten. Die Seriennummern der R2D2- Modelle bewegen sich im Bereich
von 09999, die der C3PO-Modelle von 1000019999. Schreiben Sie ferner die in den Interfaces
referenzierten Klassen für die Ausnahmen. Sorgen Sie dafür, dass die Ausnahmen den Namen des
Roboters tragen, in dem sie entstanden sind und dass man diesen Namen über die Methode getRobotName()
wieder auslesen kann.
Auch für die Implementierung der Exceptions kann daher eine gemeinsame Superklasse hilfreich sein.
Entwickeln Sie eine Klasse RobotFactory mit deren Hilfe man Instanzen der beiden Roboter- Typen
erzeugen kann. Eine Enumeration mit dem Namen RobotType dient dazu, bei der Erzeugung anzugeben,
ob man einen R2D2- oder einen C3PO-Roboter haben möchte.
Vergessen Sie nicht, dass jeder Roboter eine Seriennummer aus dem jeweiligen Bereich benötigt und
dass er bei der Erzeugung seinen unveränderlichen Namen bekommt. Verbergen Sie die Implementierung
der Roboter vor dem Verwender und erlauben Sie nur Zugriff auf die Factory, die Interfaces und
die Ausnahmen. Wählen Sie entsprechende Pakete gemäß ihrem Schema, um dies zu realisieren.
Zusätzlich zu den beiden produzierten Roboter-Modellen R2D2 und C3PO steht in der Firma noch ein
alter Nexus-6-Roboter mit dem Namen “Pris“ (Seriennummer 19281982)herum, der leider seit einer
Begegnung mit einem Blade-Runner irreparabel defekt ist und nicht eingeschaltet werden kann (man kann
den Schalter zwar drücken, dies hat aber keine Wirkung). Da es nur dieses eine Exemplar gibt, können
auch keine weiteren Nexus-6- Modelle hergestellt werden. Implementieren Sie daher den Nexus-6-Roboter
(Klassenname Nexus6) als Singleton. Beachten Sie, dass die speak- und think-Methoden nicht funktionieren
sollen, sondern grundsätzlich eine Ausnahme Robot"-Illegal"-State"-Exception werfen.
Schreiben Sie automatisierte JUnit-Tests mit denen Sie die korrekte Funktionsweise der Implementierungen
und der Factory-Klasse überprüfen. Denken Sie daran, auch die Ausnahmen zu testen.
Angenommen, Ihre Firma möchte eine weitere Produktlinie eröffnen und in Zukunft auch noch T1000-Roboter
herstellen, die natürlich auch das Robot-Interface implementieren: Welche Änderungen müssten Sie an Ihrem
Projekt durchführen? Sie brauchen keine Implementierung dafür zu erstellen, legen Sie dafür bitte eine
Textdatei in Ihr Projekt, in der Sie die notwendigen Erweiterungen und evtl. Änderungen kurz erläutern.
* Mit Ihrer Implementierung sollten folgende Begrifflichkeiten abgedeckt sein:
* Singleton-Pattern,
* Factory-Pattern,
* Exceptions,
* Interfaces,
* abstrakte Klassen,
* JUnit- Tests,
* Enumerationen,
* Sortieralgorithmen,
* Streams & Lambdas.
* Achten Sie bei Ihrer Implementierung auf die Konsistenz der Sprache (Englisch/Deutsch).
* Kommentieren Sie Ihre Methoden ausführlich mit Javadoc-Kommentaren,
* wie in den Interfaces gezeigt (googlen Sie ggf. nach weiteren Details dafür).
* Bei der Implementierung von Methoden aus den Interfaces, dürfen Sie mit @see... auf deren Javadocs verweisen und müssen die Dokumentation nicht duplizieren.
* Sie müssen kein UML-Diagramm anfertigen, können dies aber gerne tun.
* Testen Sie Ihre Implementierung möglichst umfangreich. Wir werden es auf jeden Fall tun. !
* Nutzen Sie für die gemeinsame Arbeit an der Implementierung ein Git-Repository und nutzen Sie regelmäßig.
* Es müssen von allen Team-Mitgliedern jeweils mindestens fünf Commits mit substanziellem Inhalt auf den main-Branch gepusht werden.

View File

@ -0,0 +1,18 @@
update_readme:
git add README.md
git commit -m "updated README"
git push -u origin main
update_make:
git add makefile
git commit -m "updated makefile"
git push -u origin main
update_all:
git add --all
git commit -m "Updated everything. Further explanation in README"
git push -u origin main
update_domain:
git add domain/
git commit -m "Updated domain. Further explanation in README"
git push -u origin main

Binary file not shown.

View File

@ -1,9 +1,9 @@
//package tpe.exceptions.roboter;
package roboter;
//import tpe.exceptions.roboter.exceptions.RobotException;
//import tpe.exceptions.roboter.exceptions.RobotIllegalStateException;
import roboter.exceptions.RobotException;
import roboter.exceptions.RobotIllegalStateException;
//import tpe.exceptions.roboter.exceptions.RobotMagicValueException;
package domain;
/**
* Das Interface repräsentiert den Befehlssatz eines einfachen Roboters.
@ -35,7 +35,7 @@ public interface RobotInstructions {
* @throws RobotException wenn der Roboter in einem ungültigen Zustand ist,
* oder das Array nicht seinen Vorstellungen entspricht.
*/
//public String speak(int[] zahlen) throws RobotException;
public String speak(int[] zahlen) throws RobotException, RobotIllegalStateException;
/**
* Sortiert ein Array von Zahlen. Die Reihenfolge hängt von dem Typ des
@ -46,5 +46,5 @@ public interface RobotInstructions {
* @throws RobotException wenn der Roboter in einem ungültigen Zustand ist,
* oder das Array nicht seinen Vorstellungen entspricht.
*/
//public int[] think(int[] zahlen) throws RobotException;
public int[] think(int[] zahlen) throws RobotException;
}

View File

@ -0,0 +1,8 @@
package roboter.exceptions;
public class RobotException extends Exception{
public RobotException(String errorMessage){
super(errorMessage);
}
}

View File

@ -0,0 +1,7 @@
package roboter.exceptions;
public class RobotIllegalStateException extends RobotException{
public RobotIllegalStateException(String errormessage){
super(errormessage);
}
}

View File

@ -0,0 +1,7 @@
package roboter.exceptions;
public class RobotMagicValueException extends Exception{
public RobotMagicValueException(String errormessage){
super(errormessage);
}
}