Dies ist die Aufgabe, die gestern schon diskutiert wurde. http://www.java-forum.org/java-basics-anfaenger-themen/119919-singleton-parametern-konstruktor.html
Ich habe mittlerweile auch erkannt, dass das Kompositum Muster gut anwendbar ist. Allerdings hänge ich an einem Detail.
Der Code sieht bis jetzt so aus.
Wobei die Teamleiter und Abteilungsleiter noch nutzlos sind. Diese Klassen existieren damit ich hier hänge ich) den Objekten eine Hierarchie aufzwingen kann. Und zwar soll der Geschaeftsfuehrer ausschließlich Abteilungsleiter verwalten, der Abteilungsleiter ausschließlich Teamleiter, der Teamleiter ausschließlich Mitarbeiter. Wärend das nicht realitätsnah ist habe ich dieses Verhalten im Orginalcode ausgemacht und glaube das beizubehalten ist Teil der Übung. Mein Code erlaubt auch noch beliebig tiefe abstiege in der Hierarchie, bei Tiefe 3 sollte aber Schluss sein.
Nun kann ich natürlich nicht in den Abteilungsleiter schreiben:
Da alle Klassen von einander Erben macht es auch keinen Sinn, in Person
zu schreiben.
Ist es eine Gute Idee die Vererbungshierarchie Umzukehren, So, dass der Geschaeftsfuehrer ganz unten steht. Dann sollten die beiden Ansätze funktionieren. Es erscheint mir konterintuitiv.
Ich habe mittlerweile auch erkannt, dass das Kompositum Muster gut anwendbar ist. Allerdings hänge ich an einem Detail.
Der Code sieht bis jetzt so aus.
Java:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
abstract public class Geschaeftsfuehrer extends Person{ //Kompositum
protected List<Person> komp = new ArrayList<Person>();
public Geschaeftsfuehrer(String vname, String nname) {
super(vname, nname);
}
public boolean fuegeHinzu(Person komp) {
this.komp.add(komp);
return true;
}
public boolean entferne(Person komp) {
try {
this.komp.remove(this.komp.indexOf(komp));
} catch(IndexOutOfBoundsException e) {
//could only be -1, lets ignore this case
}
return true;
}
public Iterator<Person> erzeugeIterator(){
return komp.iterator();
}
}
Java:
import java.util.Iterator;
import java.util.NoSuchElementException;
abstract public class Person { //Komponente
// bei uns verdienen erst einmal alle gleich viel ...
int gehalt = 42;
String vorname = null;
String nachname = null;
public Person(String vname, String nname) {
vorname = vname;
nachname = nname;
}
public String gibName() {
return vorname + " " + nachname;
}
public boolean fuegeHinzu(Person komp) {
return false;
}
public boolean entferne(Person komp) {
return false;
}
//return a null iterator
public Iterator<Person> erzeugeIterator() {
return new Iterator<Person>() {
@Override
public boolean hasNext() {
return false;
}
@Override
public Person next() {
throw new NoSuchElementException();
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
};
}
}
Java:
public class Mitarbeiter extends Person{//Blatt
public Mitarbeiter(String vname, String nname) {
super(vname, nname);
}
}
Java:
public class Teamleiter extends Abteilungsleiter {
public Teamleiter(String vname, String nname) {
super(vname, nname);
}
}
Java:
public class Abteilungsleiter extends Geschaeftsfuehrer {
public Abteilungsleiter(String vname, String nname) {
super(vname, nname);
}
}
Wobei die Teamleiter und Abteilungsleiter noch nutzlos sind. Diese Klassen existieren damit ich hier hänge ich) den Objekten eine Hierarchie aufzwingen kann. Und zwar soll der Geschaeftsfuehrer ausschließlich Abteilungsleiter verwalten, der Abteilungsleiter ausschließlich Teamleiter, der Teamleiter ausschließlich Mitarbeiter. Wärend das nicht realitätsnah ist habe ich dieses Verhalten im Orginalcode ausgemacht und glaube das beizubehalten ist Teil der Übung. Mein Code erlaubt auch noch beliebig tiefe abstiege in der Hierarchie, bei Tiefe 3 sollte aber Schluss sein.
Nun kann ich natürlich nicht in den Abteilungsleiter schreiben:
Java:
@Override
public boolean fuegeHinzu(Teamleiter tl) {
komp.add(tl);
return true;
}
Java:
public boolean fuegeHinzu(Teamleiter komp) {
return false;
}
Ist es eine Gute Idee die Vererbungshierarchie Umzukehren, So, dass der Geschaeftsfuehrer ganz unten steht. Dann sollten die beiden Ansätze funktionieren. Es erscheint mir konterintuitiv.