ModelControlFactory

n.s
Gast

ModelControlFactory

Beitrag von n.s »

hallo,
in der klasse ModelControlFactory gibt es folgendes
package main;

import model.Model;
import controller.IController;....
doch ohne weiters zu machen lässt sich die klasse nicht übersetzen außerdem verstehe ich nicht was damit gemeint ist ,,importieren kann man nur package oder ??
viele grüße

midstar
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 172
Registriert: 29. Dez 2013 17:00

Re: ModelControlFactory

Beitrag von midstar »

Du hast da irgendwas drinstehen das inetwa lautet:

// TODO Create instance of IModel

und das gleiche für IController.

Du sollst an den Stellen IModel und IController instanziieren. Da das mit abstracten Klassen, in dem Fall einer Interface Klasse nicht geht, muss du eine Subklasse erstellen um diese Instanziieren zu können. Sobald du dann die Instanz zurückgibst liefert die Klasse ModelControlFactory nichtmehr den Wert null sondern deine Instanz an die GameWindow weiter.

Edit: Zumindest geh ich davon aus, weils so funktioniert, möchte hier nix falsches als bare münze ausgeben :)

steffen12
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 205
Registriert: 14. Okt 2009 16:28

Re: ModelControlFactory

Beitrag von steffen12 »

Hallo,

@n.s
Die imports der Klasse ModelControlFactory sollten so aussehen:
import main.IController;
import main.IModel;

Es werden die beiden Interfaces (also Klassen) aus dem Package main importiert. Klassen die sich nicht im gleichen Package befinden sind ohne Imports nicht sichtbar und dann können Referenzen darauf nicht aufgelöst werden. Da die beiden Interfaces aber innerhalb der Klasse verwendet werden, müssen sie importiert werden.

PS: Was midstar sagt ist im Prinzip korrekt.

VG

Gast
Gast

Re: ModelControlFactory

Beitrag von Gast »

Die imports der Klasse ModelControlFactory sollten so aussehen:
import main.IController;
import main.IModel;
Muss man nicht auch die Klassen importieren, die die Interfaces IController und IModel implementieren? Man kann ja schließlich nicht die Interfaces selbst instanziieren.

steffen12
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 205
Registriert: 14. Okt 2009 16:28

Re: ModelControlFactory

Beitrag von steffen12 »

@Gast

Die Imports oben waren auf den Orginalzustand der Factory bezogen.
Die Klassen welche die Interfaces implementieren müssen entweder zusätzlich importiert werden, oder es kann auch einfach das Package dem Klassenname vorangestellt werden um sie referenzieren zu können. Etwa so: package.Classname

VG

gast
Gast

Re: ModelControlFactory

Beitrag von gast »

Ich kann doch nur eine Instanz von einer implementierten Klasse erstellen, oder? Also geht doch nur "public Model createNewModelInstance()", oder? Irgendwie verstehe ich nicht, warum der Rückgabewert IModel sein soll... Brauche ich außerdem noch einen Konstruktor für die ModelControlFactory?

Benutzeravatar
5seconds
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 155
Registriert: 27. Apr 2013 10:44

Re: ModelControlFactory

Beitrag von 5seconds »

Weil euer Model das Interface IModel implementiert, kann man das Model zurückgeben und gleichzeitig bleibt der Rückgabedatentyp IModel (denn euer Model ist ein ausgefülltes und erweitertes IModel).
In der ModelControlFactory musst du nur die vorhanden Methoden ausfüllen, also eine Instanz deines Models und Controllers zurückgeben. Sonst ist nichts zu tun.

midstar
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 172
Registriert: 29. Dez 2013 17:00

Re: ModelControlFactory

Beitrag von midstar »

Ich bin ma so dreist und schreib das mal eiskalt um denjenigen zu helfen die absolut nicht klarkommen, was echt mal schnell sein kann:

Einfachste / UNSAUBERSTE / Schrecklichste / Inakzeptable - Möglichkeit:

Du erstellst ne REELLE klasse die IModel implementiert.
Du erstellst ne REELLE klasse die IController implementiert.

Reell müssen sie sein, damit wir sie instanziieren können (im gegensatz zu abstrakten klassen oder interfaces)

Damit die klassen reell sind müssen sie (wie auch die fehlermeldung die sonst kommt besagt) alle einen methodenkörper haben, und die getter methoden (die die was returnen sollen) müssen einen akzeptablen returnwert zurückgeben (bei boolean zb simpel return "true")

Jetzt muss man in der ModelControlFactory anstatt der //TODO dinger, seine instanzen erzeugen. Klingt verwirrend. bedeutet einfach nur

main.NamedesModels irgendeininstanzenname1 = new NamedesModels;

und bei IController

main.NamedesControllers irgendeininstanzenname2 = new NamedesControllers;


jetzt jeweils bei return einmal reutrn irgendeininstanzename1 und einmal ...2

Und jetzt im package gui rechtsklick auf das gamewindow und das einfach "starten"...


So sollte es in den GRUNDZÜGEN gaaaanz dreckig funktionieren, daran kann man sich zumindest das system verdeutlichen und mal sehen, dass überhaupt was funktioniert.
Natürlich könnt ihr damit weder spielen noch sonstwas, aber der rest ist definitiv machbar.

@admins: Falls das zuviel vorweg nimmt tut es mir leid, dann werde ich es entweder direkt wieder rausnehmen, oder ihr übernehmt das einfach, aber ich dachte mir das würde das funktionieren der MCF endlich mal ins richtige licht rücken, und einen kleinen schubs in die richtige richtung geben. Wenns nicht erwünscht ist: sorry :)

steffen12
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 205
Registriert: 14. Okt 2009 16:28

Re: ModelControlFactory

Beitrag von steffen12 »

Ach midstar,

jetzt tu doch bitte nicht so als hätten wir daraus jemals ein Geheimnis gemacht :wink:
Wer hat dir das verraten?

Ich hoffe das hilft vielen auf die Sprünge.

VG

Gast
Gast

Re: ModelControlFactory

Beitrag von Gast »

Wenn ich midstar richtig verstehe, muss ich also erstmal alle Klassen, die mit Model in Verbindung stehen, implementieren, um die Model-Control-Factory fertig zu stellen? Mein Problem ist nur, dass während des Implementierens das Testen der Methoden dann nicht funktioniert, weil der Debugger schon bei model = new ModelControlFactory().createNewIModelInstance(); anhält. Soll das so sein oder versteh ich etwas vollkommen falsch? Sorry, wenns ne blöde Frage ist :oops:

Benutzeravatar
5seconds
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 155
Registriert: 27. Apr 2013 10:44

Re: ModelControlFactory

Beitrag von 5seconds »

Die ModelControlFactory füllst du am besten aus, sobald du deine Model- und Controllerklasse erstellt hast. Dabei müssen sie noch nicht fertig sein, hauptsache du weißt, wie die Klassen heißen.
Wenn du später merkst, dass du nach der Erstellung noch etwas in der Factory machen musst oder du den Konstruktor von Controller/Model veränderst, passt du die Factory an. Im Normalfall bleibt es aber bei der simplen Model- und Controllererstellung.

Gast
Gast

Re: ModelControlFactory

Beitrag von Gast »

@midstar: ich hab deine anleitung befolgt, leider wird mir immer noch für die-return anweisung "incompatible types" angezeigt :( weißt du, woran das liegen könnte?

das ist echt blöd, dass das nicht klappt, weil so meine Methoden gar nicht erst getestet werden, sondern der Test schon zu Beginn stoppt :cry:

Benutzeravatar
SophiaLi1
Kernelcompilierer
Kernelcompilierer
Beiträge: 542
Registriert: 5. Jan 2014 11:48

Re: ModelControlFactory

Beitrag von SophiaLi1 »

Der Returnwert muss IModel sein, es muss also heißen:

IModel model = new Model();

return model;


und oben musst du import main.Model haben

midstar
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 172
Registriert: 29. Dez 2013 17:00

Re: ModelControlFactory

Beitrag von midstar »

Sophia? Gibst du genau das aus? Wenn ja schlagen wir vllt 2 Fliegen mit einer Klappe...

Der returnWert muss deiner MODELKLASSE entsprechen, IModel ist ein interface das du nicht Instanziieren kannst!

Sprich in der MCF:

public IModel createNewIModelInstance() {
main.Model model = new main.Model();
return model;
}
Zuletzt geändert von midstar am 5. Jan 2014 15:29, insgesamt 1-mal geändert.

Benutzeravatar
SophiaLi1
Kernelcompilierer
Kernelcompilierer
Beiträge: 542
Registriert: 5. Jan 2014 11:48

Re: ModelControlFactory

Beitrag von SophiaLi1 »

Das, was du da gerade geschrieben hast, kann ja gar nicht stimmen,

bei createNewIControllerInstance() erstelle ich doch eine controller-Instanz und bei createNewIModelInstance() eine model-Instanz, oder?

Antworten

Zurück zu „Archiv“