Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
das ist mein erster Beitrag und ich bin frischer Quereinsteiger was das Programmieren bzw. Java betrifft. Ich habe mir mithilfe von "C" die Grundlagen beigebracht und möchte mich nun für Java interessieren. Würde mich freuen wenn ihr nicht allzu implizite Antworten gebt und nett seid. Danke!
Ich sitze momentan an einem Übungsblatt meiner Uni:
Schreiben Sie eine Klasse "Dragon".
Die Klasse soll sicherstellen, das es nie mehr als drei Instanzen von ihr gibt. Sie soll zwei Methoden anbieten:
die() -> Diese Methode markiert den Drachen als verstorben. Für jeden "verstorbenen" Drachen kann eine neue Instanz erzeugt werden.
isAlive() -> Diese Methode überprüft, ob der Drache noch lebt. Lebt er gibt sie "Still alive!" auf der Standardausgabe aus. Ist er tot, wirft die Methode eine IllegalStateException.
Ich hatte einige Lösungsansätze. Ich habe es mit dem "Singleton Pattern" versucht, nur so umgebastelt das es halt für drei Drachen passt. Ob das möglich/erlaubt/ oder schön ist, hab ich erstmal vorweg gelassen. Das hat nicht funktioniert, wie ich wollte.
Ich hatte von Kommilitonen "Enums" empfohlen bekommen, weswegen ich mich über Enums schlau machte. Leider weiß ich überhaupt nicht wie man mit Enums diese Aufgabe lösen soll.
Ich steh mit leeren Händen da und weiß garnicht wo ich anfangen soll.
Falls ihr mir ein wenig auf die Sprünge helfen könntet wäre das echt toll!
Also Enums halte ich an dieser Stelle nicht für das richtige Mittel.
Ich denke hier wäre das Factory Pattern angebracht.
Anstatt die Instanzen über den Konstruktor zu erzeugen, gibt es eine Factory-Klasse, mit einer statischen Methode, um neue Drachen-Instanzen zu erzeugen. Dragon d = DragonFactory.createInstance();.
Intern kannst du in der Factory-Klasse eine statischen Counter mitzählen lassen um die Anzahl der Drachen zu zählen.
Schreiben Sie eine Klasse "Dragon".
Die Klasse soll sicherstellen, das es nie mehr als drei Instanzen von ihr gibt. Sie soll zwei Methoden anbieten:
die() -> Diese Methode markiert den Drachen als verstorben. Für jeden "verstorbenen" Drachen kann eine neue Instanz erzeugt werden.
isAlive() -> Diese Methode überprüft, ob der Drache noch lebt. Lebt er gibt sie "Still alive!" auf der Standardausgabe aus. Ist er tot, wirft die Methode eine IllegalStateException
Bei dieser Vorgabe sehe ich einen Widerspruch.
1) Es darf nie mehr als 3 Instanzen von Dragon geben.
2) Für jeden verstorbenen Dragon, kann aber eine neue Instanz erzeugt werden. Hier ist der Widerspruch.
Da ja die Methode isAlive() nur Sinn macht wenn ein verstorbener Dragon nicht auf null gesetzt wird.
z.B. Ich habe 3 Dragon. Einer stirbt. Ich kann einen weiteren Dragon erzeugen. -> Es gibt 4 Instanzen von Dragon.
3 lebende und eine tote. Wahrscheinlich meint der Aufgabensteller. Es darf maximal 3 lebende Instanzen geben.
Hier können 6 Instanzen erzeugt werden. Es ist so nicht sicher gestellt, dass es nur 3 Instanzen gibt.
Der Singleton Pattern ist da eher geeignet. Der könnte dann eine DragonFactory liefern, die maximal 3 lebende Drachen erzeugen kann.
Ja für eine Factory, aber jede weiter Factory könnte wieder 3 Instanzen erzeugen. --> Singelton der nur maximal eine Factory erlaubt. Die dann die Anzahl der Instanzen unangefochten verwalten kann.
Okay hab gerade noch mal nach geschaut und verstehe was du meinst. Hatte im Kopf, dass das im FactoryPattern schon mit drin ist .. mein Fehler.
Natürlich sollte es nicht möglich sein, mehrere Instanzen der Factory-Klasse zu erstellen.
Du hattest nicht so ganz unrecht, da der Counter static ist gehen so auch nur 3 Instanzen mein Fehler.
Trotzdem macht ein Singleton hier Sinn, weil beliebig viele Factories bei der Aufgabenstellung keinen Sinn machen.
Hier ist der Widerspruch.
Da ja die Methode isAlive() nur Sinn macht wenn ein verstorbener Dragon nicht auf null gesetzt wird.
z.B. Ich habe 3 Dragon. Einer stirbt. Ich kann einen weiteren Dragon erzeugen. -> Es gibt 4 Instanzen von Dragon.
3 lebende und eine tote. Wahrscheinlich meint der Aufgabensteller. Es darf maximal 3 lebende Instanzen geben.
Vielen Dank, so hatte ich es nämlich auch die ganze Zeit verstanden. Einen Drachen mit beispielsweise alive=false zu "flaggen" ist meilenweit einfacher als aus der Methode "die()" das Drachen Objekt rauszulöschen bzw. auf null zu setzen.
Ich werde meinen Dozenten mal darauf ansprechen. Wäre es möglich aus der Methode Die() das Objekt irgendwie zu löschen?
Ich denke nicht, dass das Objekt gelöscht werden soll. Sonst wäre die Methode isAlive() ja überflüssig.
Wahrscheinlich besteht die Aufgabe darin, dass immer nur maximal 3 Dragon Objekte die am Leben sind existieren dürfen.
Kurz zum Thema Aufgabenstellung und Factory: da steht die Klasse Dragon (und nicht eine Factory) soll sicherstellen, dass es nur drei Instanzen gibt -> static int in Dragon.
Kurz zum Thema Aufgabenstellung und Factory: da steht die Klasse Dragon (und nicht eine Factory) soll sicherstellen, dass es nur drei Instanzen gibt -> static int in Dragon
public class Dragon {
public final static int MAX_ALIVE_DRAGONS = 3;
private boolean isAlive = true;
private static int cnt = 0;
public Dragon() {
if (cnt == MAX_ALIVE_DRAGONS)
throw new IllegalStateException();
cnt++;
}
public void isAlive() throws IllegalStateException {
if (!isAlive)
throw new IllegalStateException("Dragon is death");
System.out.println("Still alive!");
}
public void die() {
if (isAlive)
cnt--;
isAlive = false;
}
@Override
public String toString() {
return isAlive ? "alive" : "death";
}
}
Java:
public class start {
public static void main(String[] args) {
Dragon[] dragons = new Dragon[4];
for (int i = 0; i < Dragon.MAX_ALIVE_DRAGONS; i++)
dragons[i] = new Dragon();
dragons[0].die();
dragons[3] = new Dragon();
for( Dragon d : dragons )
System.out.println(d);
}
Ich halte den FactoryPattern alleine hier nicht für geeignet.
z.B.
Hier können 6 Instanzen erzeugt werden. Es ist so nicht sicher gestellt, dass es nur 3 Instanzen gibt.
Der Singleton Pattern ist da eher geeignet. Der könnte dann eine DragonFactory liefern, die maximal 3 lebende Drachen erzeugen kann.
@Robat spricht doch von einer statischen Factory-Methode, damit gibt es nicht mehrere Factory-Instanzen, sondern eben nur genau die eine statische, die genau drei Instanzen erzeugen kann?