www.mikrocontroller.net

Forum: PC-Programmierung Factory Methode


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Salome (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Java Experte (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Da fehlt ein return, oder?

Autor: Java Experte (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
ach ja, und ISort klingt wie ein Interface - wie heisst denn die 
Implementierung?

Beitrag #2675927 wurde vom Autor gelöscht.
Autor: Salome (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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);
}

Autor: Salome (Gast)
Datum:

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

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Salome (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Was immer auch ein 'Sort' ist. Ich muss mal wieder meine Kristallkugel 
putzen.

Autor: Salome (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Sort ist die klasse, da soll dann der mergesort rein

Autor: Läubi .. (laeubi) (Moderator) Benutzerseite
Datum:

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

Autor: Klaus Wachtler (mfgkw)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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!"

Autor: Klaus Wachtler (mfgkw)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Salome schrieb:
> Sort ist die klasse

Wo steht das?

Autor: Salome (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Udo Schmitt (urschmitt)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Salome (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Danke, werds versuchen !

Autor: Udo Schmitt (urschmitt)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Robert L. (lrlr)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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 ??

Autor: Salome (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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>

^^

Autor: Robert L. (lrlr)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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?

Autor: Läubi .. (laeubi) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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...

Autor: Salome (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Klaus Wachtler (mfgkw)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Salome schrieb:
> ausserdem hast du meine Frage komplett aus dem zusammenhang gerissen,

Welchen Zusammenhang?
Den suche ich hier noch.

Autor: Robert L. (lrlr)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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...

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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?

Autor: Udo Schmitt (urschmitt)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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'

Autor: Salome (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Läubi .. (laeubi) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Läubi .. (laeubi) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
public class DummySort<T extends Comparable<T>> implements ISort<T>{

  public ArrayList<T> sort(ArrayList<T> items) {
   return new ArrayList<T>();
  }
}
 so könnte z.B. eine erste Dummy Implementierung aussehen.

Autor: D. I. (grotesque)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Udo Schmitt schrieb:
> Aber immer wieder diese 'scheiß Salamitaktik'

In diesem Fall wohl eher "Salometaktik" SCNR

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net