Forum: PC-Programmierung Factory Methode


von Salome (Gast)


Lesenswert?

Guten Tat,

Ich habe ein Problem und zwar soll ich eine Factory Methode erstellen, 
allerdings komm ich einfach nicht drauf, eclipse gibt mir andauernd die 
Meldung cannot instatiate the type

public class SortFactory {
  public static ISort<Integer> create() {
    ISort<Integer> fabric = new ISort<Integer>();
  }
}

Jemand ne Idee wie ich das hinkriegen könnte? :/


MfG

von Java Experte (Gast)


Lesenswert?

Da fehlt ein return, oder?

von Java Experte (Gast)


Lesenswert?

ach ja, und ISort klingt wie ein Interface - wie heisst denn die 
Implementierung?

von Salome (Gast)


Lesenswert?

public class SortFactory {
  public static ISort<Integer> create() {
    return new ISort<Integer>();
  }
}

?

jo ist ein interface

import java.util.ArrayList;


public interface ISort<T extends Comparable<T>> {

  public ArrayList<T> sort(ArrayList<T> items);
}

von Salome (Gast)


Lesenswert?

keiner eine idee woran das liegen könnte? ich krieg das nicht zum laufen 
:(

von Karl H. (kbuchegg)


Lesenswert?

Wenn ISort ein INterface ist, dann kannst du kein Objekt davon erzeugen

http://www.java-tutorial.org/interface-als-datentyp.html

Ein Interface ist eine abstrakte Beschreibung dessen, was eine Klasse 
die dieses Interface implementiert, alles kann.

von Salome (Gast)


Lesenswert?

Theoretisch müsst ich dann ja aber eine Instanz von Sort machen können, 
oder? die implementiert ja dann das Interface, aber auch das klappt 
nicht

von Karl H. (kbuchegg)


Lesenswert?

Was immer auch ein 'Sort' ist. Ich muss mal wieder meine Kristallkugel 
putzen.

von Salome (Gast)


Lesenswert?

Sort ist die klasse, da soll dann der mergesort rein

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Geht nicht ist natürlich auch eine gute Fehlerbeschreibung. Du mußt in 
der Faktory einfach ein Objekt erzeugen, welches ISort implementiert.

von Klaus W. (mfgkw)


Lesenswert?

Du musst in deiner Klasse alles implementieren, was die enthaltenen 
Interfaces brauchen.
Das ist also hier aus ISort die sort()-Methode, sowie ggf. das, was 
Comparable noch braucht (wird wohl compare() sein).

Ansonsten kann man bei deiner dürftigen Beschreibung nur raten, also 
kommt dann natürlich der beliebte Rat "Hausaufgaben selber machen!"

von Klaus W. (mfgkw)


Lesenswert?

Salome schrieb:
> Sort ist die klasse

Wo steht das?

von Salome (Gast)


Lesenswert?

Wie meinst du das wo das steht?

ich hab ja das Interface ISort, irgendwo muss ich die methode dann ja 
implementieren, also hab ich ne Klasse Sort erstellt die ISort dann 
implementiert

von Udo S. (urschmitt)


Lesenswert?

Wenn ich mal meine Glaskugel auspacke:
Du sollst eine Factory implementieren, die ein Sortierobjekt 
zurückliefert.

Eine Factory benötigt man dann, wenn man abhängig von einem/mehreren 
Parameter(n) unterschiedliche Implementierungen einer Sache erzeugen 
will. In deinem Beispiel also z.B. ein BubbleSort, ein Quicksort, ein 
InsertionSort, ein MergeSort, ....
Damit man diese Sorts universell verwenden kann haben alle die gleiche 
Schnittstelle, nämlich das Interface "ISort"!

Du musst also folgendes implementieren:
Eine MergeSort Klasse die ISort implementiert.
Eine Factoryklasse, die eine (oft statische) Methode hat um abhängig von 
irgendwelchen Kriterien deine gewünschte Sortierklasse erzeugt (Also in 
Ermangelung weiterer Sortklassen eine MergeSort Klasse und zurückgibt, 
und zwar als ISort Objekt.

Jetzt solltest du in der Lage sein dein Problem zu lösen, ansonsten kann 
ich dir "Java ist auch eine Insel" empfehlen, gibts auch als Online 
Buch.

von Salome (Gast)


Lesenswert?

Danke, werds versuchen !

von Udo S. (urschmitt)


Lesenswert?

Nachtrag: Ich würde die Klasse, die den Mergesort implementiert, auch so 
nennen, und nicht "Sort". Präzise Namen sind das A und O, daß man seinen 
Code nach einem Jahr noch selbst versteht, daß ihn andere verstehen, und 
daß man ihn ohne größeres Refactoring erweitern kann und er trotzdem 
verständlich bleibt.

von Robert L. (lrlr)


Lesenswert?

(nur sicherheitshalber)

Geht es um eine "Hausaufgabe"
also ist das erstellen dieses "mergesort" objekte, die Aufgabe ?

wenn nein:


das gibt es doch sicher fix-fertig ?




ps.

return new ISort<Integer>();

wenn man das I weg lässt, musste es doch schon passen ??

von Salome (Gast)


Lesenswert?

Ja ist eine Hausaufgabe, die Methoden hab ich ja implementiert, nur kann 
ich nicht testen obs richtig ist, da der JUnit test nur mit dieser 
Fabrikmethode läuft und die krieg ich einfach nicht hin -.-

und nein

return new Sort<Integer>();

geht leider nicht, dann meckert eclipse: cannot instatiate the type 
Sort<Integer>

^^

von Robert L. (lrlr)


Lesenswert?

das wird wohl an den "Gernerics" liegen (da hab ich aber keine Ahnung 
von, ...)

irgendwie wird es wohl in Richtung SortFactory<integer>
raus laufen müssen ??!?
ca.

von Karl H. (kbuchegg)


Lesenswert?

Salome schrieb:
> Wie meinst du das wo das steht?

Woher sollen wir das denn wissen?
Woher sollen wir wissen, was du alles geschrieben hast und was nicht?
Woher sollen wir wissen, wie diese Klasse aussieht?

Stell dir einfach vor, du hättest von deinem Problem noch nie etwas 
gehört und weißt auch sonst nichts darüber. Lies dir deine 
Beschreibungen durch. Könntest du damit irgendetwas anfangen?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Salome schrieb:
> return new Sort<Integer>();
> geht leider nicht, dann meckert eclipse
Programmieren durch raten oder was? Wie sieht den Sort aus?

Robert L. schrieb:
> das gibt es doch sicher fix-fertig

Ja Collection API...

von Salome (Gast)


Lesenswert?

Wenn die Aufgabe lautet implementieren sie zuerst die Fabrikmethode, 
damit die Junit tests laufen und man die Methoden erst danach erstellen 
soll, damit mans testen kann, dann hab ich am anfang nur das Interface 
und das gerüst der fabrikmethode

nur weil ich das nicht hinbekommen habe, hab ich zuerst die metthode 
gemacht, mein mergesort, nur kann ich sie jetzt halt nicht testen, 
deswegen spielts auch keine rolle, wie mein mergesort aussieht, weil die 
fabrikmethode hätt ich ganz zu anfang erstellen sollen und brauch ich 
nur für den junit test

@Before public void setup()
  {
    sort = SortFactory.create();
  }

die ersten zeilen im test und hier stopps halt auch schon


ausserdem hast du meine Frage komplett aus dem zusammenhang gerissen, 
ist mir auch klar dass ihr keine hellseher seid, aber mehr konnt ich 
nicht liefern, weil mehr wurd nicht vorgegeben.

danke an alle die helfen wollten
ich bin dann mal raus

von Klaus W. (mfgkw)


Lesenswert?

Salome schrieb:
> ausserdem hast du meine Frage komplett aus dem zusammenhang gerissen,

Welchen Zusammenhang?
Den suche ich hier noch.

von Robert L. (lrlr)


Lesenswert?

>damit die Junit tests laufen und man die Methoden erst danach erstellen
>soll,

aber die Sort klasse (mit ISort interface) (mit eben einer leeren 
Methode) wirst brauchen

sonst kannst ja kein objekt instantiieren welches iSort implementiert 
hat

aber nochmal: das problem liegt IMHO bei den Generics...

von Karl H. (kbuchegg)


Lesenswert?

Salome schrieb:

> ausserdem hast du meine Frage komplett aus dem zusammenhang gerissen,

Das was du 'Zusammenhang' nennst, reicht aber nicht um dein wirkliches 
Problem zu beheben.

Eine Analogie:
Natürlich kann man sagen, dass ein Nylonfaden gerissen ist und durch 
eine andere Kordel ersetzt werden muss.
Solange man aber nicht weiß, dass du eine Lokomotive aufhängen willst, 
wird das alles nichts nützen.
Das Problem ist nicht, dass der Nylonfaden einen Materialfehler hatte. 
Das Problem ist die Lokomotive. Du redest hier aber immer nur vom 
Nylonfaden. Ergo: keiner kann dir weiterhelfen und darüber beschwerst du 
dich, anstatt das du einfach mal alle Karten auf den Tisch legst. Oder 
denkst du dein Mergesort wäre so wahnsinnig hi-tech und wir hätten noch 
nie einen gesehen?

von Udo S. (urschmitt)


Lesenswert?

Salome schrieb:
> ich bin dann mal raus

Gut dann muss ich auch nichts mehr schreiben.

Ein offenes Posten von
1. Der Info daß es eine Hausaufgabe ist
2. Was konkret nicht funktioniert
3. Was du schon gemacht hast
4. Der Aufgabenstellung INCLUSIVE dem Testaufruf

hätte gereicht daß wir dir entsprechende Hinweise zum eigenen 
Verständnis hätten geben können.

Aber immer wieder diese 'scheiß Salamitaktik'

von Salome (Gast)


Lesenswert?

Jo, sry dass ich anfänger bin und nicht gleich alles auf anhieb verstehe 
und die zusammenhänge noch nicht immer gleich sofort sehe, hätte ich 
gewusst woran es liegt hätte ich das interface und die methode gleich 
mitgepostet, wollte aber unnötiges weglassen, das hat nix mit 
salamitaktik zu tun, sondern damit, dass ich nicht unnötigerweise alles 
posten wollte wegen einem kleinen fehler (in meinen augen, war ja 
verkehrt, i am sry)...

das man sich deswegen gleich echauffieren muss, das hat mir grad die 
lust geraubt, ich frag ned in nem forum um mich dann anmachen zu lassen 
nur weil ich was falsch gemacht hab

Karl Heinz Buchegger schrieb:
> Ergo: keiner kann dir weiterhelfen und darüber beschwerst du
> dich, anstatt das du einfach mal alle Karten auf den Tisch legst. Oder
> denkst du dein Mergesort wäre so wahnsinnig hi-tech und wir hätten noch
> nie einen gesehen?

genau, deswegen hab ich hier gefrat, weil ich euch ja alle für unfähig 
halte

ausserdem hab ich mich nirgends beschwert, dass man mir nicht hilf, der 
grund weshalb mir die lust vergangen ist, ist dass man gleich angefahren 
wird, weil man n fehler macht, deswegen hab ich geschrieben "ich bin 
dann mal raus" und aus keinem andern grund. einige hinweise hab ich ja 
durchaus bekommen und dafür hab ich mich auch bedankt

wünsch euch trotzdem noch n schönen tag

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Robert L. schrieb:
> aber nochmal: das problem liegt IMHO bei den Generics...

Warum? Wenn Sort nich generisch ist müßte er sich darüber beschweren 
instantiieren kann man das immer es sei den das wäre auch ein Interface 
oder eine abstrakte Klasse.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

1
public class DummySort<T extends Comparable<T>> implements ISort<T>{
2
3
  public ArrayList<T> sort(ArrayList<T> items) {
4
   return new ArrayList<T>();
5
  }
6
}
 so könnte z.B. eine erste Dummy Implementierung aussehen.

von D. I. (Gast)


Lesenswert?

Udo Schmitt schrieb:
> Aber immer wieder diese 'scheiß Salamitaktik'

In diesem Fall wohl eher "Salometaktik" SCNR

von Karl H. (kbuchegg)


Lesenswert?

Salome schrieb:

> das man sich deswegen gleich echauffieren muss, das hat mir grad die
> lust geraubt, ich frag ned in nem forum um mich dann anmachen zu lassen
> nur weil ich was falsch gemacht hab

Deswegen hat dich keiner angemacht.
Aber wenn du auch nach dem 3.ten zarten Hinweis, doch endlich mal den 
kompletten Code zu zeigen, immer noch nicht kapierst, dann ist dir wohl 
wirklich nicht zu helfen.
Du rufst ja auch nicht beim Arzt an und sagst: Es tut weh. Was kann mich 
dagegen tun?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.