alle Eigenschaften eines Objekts per Schleife durchgehen

Statische Methoden sind halt nicht für sowas da. Du könntest aber genausogut eine Instanzmethode nehmen. Auf der anderen Seite halte ich es für einen Grundflaw DB Operationen auf einer Domänenklasse zu implementieren. Schon der Methodenname setDBEigenschaften ist IMHO foo. Du setzt ja keine Eigenschaften einer Datenbank sondern vermutlich die Objekteigenschaften.

Klingt für mich eher nach gruseligem Deign ;).

Gruß
Ollie
 
Is es irgendwie auch, da kommt manchmal halt der phpler aus mir raus.:)
Also ich versuchs mein vorhaben nochmals zu erklären:

Im Grunde ist es ja eine primitivere Art, meine Klassen(und nicht die Objekte) in der Datenbank abzubilden, ähnlich wie die Hibernate hbm.xml Datein.
Dazu wollte ich einfach eine statische HashMap<Spaltenname, ArrayList<SonstigeEigenschaften>> in der Hauptklasse definieren.
Die einzelnen Subklassen würden dann diese Liste einfach erweitern, wobei ich halt darauf achten müsste das die Daten sich nicht überlagerten.
Würde ich jetzt eine neue Subklasse hinzufügen, müsste ich einfach der HashMap gegebenfalls neue Eigenschaften zuweisen.

Eine externe Klasse würde jetzt, sobald ich sie aufrufe, die Eigenschaften aller Klassen zusammenzählen und daraus die Datenbankabbildung zusammenzimmern (zusammengefasst als eine Tabelle, mit Spalte class zur Unterscheidung) und die Tabelle nach den neuen Eigenschaften abändern.
Die Klassen die ich damit abbilden würde, hätten nur primitive Datentypen und sind deswegen leicht abzubilden.

Und hier kommt meine Frage ins Spiel ob man Klassen per Schleife durchgehen kann. Denn für diesen Zweck hätte ich in den Subklassen eine statische Methode aufrufen müssen, damit die statischen Eigenschaften der Subklassen überhaupt initalisiert werden.
Frage ist auch ob es wirklich sinnvoll ist die Eigenschaften verstreut in den einzelnen Klassen zu definieren, oder ob man sie irgend wo zentral definiert. Vielleicht hält sich der Vorteil auch in Grenzen und ich hab mir jetzt unnütz Arbeit gemacht, aber zumindest lern ich so etwas über Java.

Gibt es alternativ eine Möglichkeit statische Eigenschaften einer Klasse zum initaliseren zu bringen ohne das extra auf diese zugegriffen wird?
Ich möchte ja das die Subklassen ihren Senf von sich aus dazugeben, ohne das ich sie dazu überreden muss.
Und auch wenn das keine schöne Programmierung darstellt, für meine Anforderungen reicht es aus^^
lg
 
Is es irgendwie auch, da kommt manchmal halt der phpler aus mir raus.:)
Also ich versuchs mein vorhaben nochmals zu erklären:

Im Grunde ist es ja eine primitivere Art, meine Klassen(und nicht die Objekte) in der Datenbank abzubilden, ähnlich wie die Hibernate hbm.xml Datein.
Eben, warum also nicht richtig?

Dazu wollte ich einfach eine statische HashMap<Spaltenname, ArrayList<SonstigeEigenschaften>> in der Hauptklasse definieren.
Die einzelnen Subklassen würden dann diese Liste einfach erweitern, wobei ich halt darauf achten müsste das die Daten sich nicht überlagerten.
Würde ich jetzt eine neue Subklasse hinzufügen, müsste ich einfach der HashMap gegebenfalls neue Eigenschaften zuweisen.

Frage: hast du Objektorientierung und deren Vorteile verstanden? Du wirfst mit diesem Ansatz jegliche Abstraktion weg. Objekte sind mehr als nur Daten.

Eine externe Klasse würde jetzt, sobald ich sie aufrufe, die Eigenschaften aller Klassen zusammenzählen und daraus die Datenbankabbildung zusammenzimmern (zusammengefasst als eine Tabelle, mit Spalte class zur Unterscheidung) und die Tabelle nach den neuen Eigenschaften abändern.
Die Klassen die ich damit abbilden würde, hätten nur primitive Datentypen und sind deswegen leicht abzubilden.
Ich frag's gern nochmal: warum willst du etwas selbst coden, was es schon gibt und zwar Millionenfach getestet von Leuten die sich über sämtliche Cornercases dieses Themas schon mehr Gedanken gemacht haben als du und ich und alle hier zusammen?

Und hier kommt meine Frage ins Spiel ob man Klassen per Schleife durchgehen kann. Denn für diesen Zweck hätte ich in den Subklassen eine statische Methode aufrufen müssen, damit die statischen Eigenschaften der Subklassen überhaupt initalisiert werden.
Die Sinnfrage habe ich ja schon gestellt. Sowas kann man Grundsätzlich auch per Reflection tun aber gern nochmal: du willst nicht auf dieser technischen Abstraktion deinen Code schreiben. Vielleicht ein kleiner Exkurs: angenommen die Anforderungen an die Anwendung kommen von einem Fachbereich. Der arbeitet mit Wörtern aus der Domäne, in deinem Fall Autos. Was du jetzt krampfhaft versuchst, ist nicht über Autos zu reden, sondern über Properties und allen Eigenschaften über die man iterieren kann. Da ist ein großer Abstractionsmismatch. Man sollte beim Design von Klassen und Code an sich darauf achten, dass man in der Abstraktion nah an der Domne bleibt, quasi in den Klassen die Sprache des Fachbereichs spricht und nicht zu technisch zu denken. Ich weiß, dass ist schwer, aber nur so kommt man zu wartbaren Programmen.

Vielleicht noch eine Frage um zu unterstreichen wie wenig Sinn das macht, was du vorhast. Stell dir vor, du tust genau das, was du beabsichtigst. Objekteigenschaften in Hashmaps werfen. Dann sind das sicher Strings als Schlüssel. Wir nehmen an, das tut auch beim Entwickeln prima. 3 Monate später soll das Ding jemand änder, anfassen... irgendwas halt. Wie bekommt der denn raus, welche Schlüssel du verwendet hast? Wühlt der im Code? String sind anfällig für Typos wie nichts sonst. Eine saubere Gettermethode hingegen überprüft der Compiler, die ist Typsafe (Rückgabewert) und die IDE gibt dir Codecompletion...

Frage ist auch ob es wirklich sinnvoll ist die Eigenschaften verstreut in den einzelnen Klassen zu definieren, oder ob man sie irgend wo zentral definiert. Vielleicht hält sich der Vorteil auch in Grenzen und ich hab mir jetzt unnütz Arbeit gemacht, aber zumindest lern ich so etwas über Java.
Was heißt verstreuen? Eine Klasse kapselt einen Sachverhalt in einer gewissen Abstraktionsstufe. Man wird zu dieser Abstraktionsstufe passende Eigenschafte finden, die dann eben genau da hin gehören: in diese Klasse. Im Übrigen sind Klassen nicht nur Daten. Klassen haben Zustand UND Verhalten ergo Methoden. Wie arbeiten die denn dann in deinem Entwurf? Mit getProperty("reifen")? Gibt das eine Liste von Reifen oder einen einzelnen?

Gibt es alternativ eine Möglichkeit statische Eigenschaften einer Klasse zum initaliseren zu bringen ohne das extra auf diese zugegriffen wird?
Ich möchte ja das die Subklassen ihren Senf von sich aus dazugeben, ohne das ich sie dazu überreden muss.
Und auch wenn das keine schöne Programmierung darstellt, für meine Anforderungen reicht es aus^^
lg
Was reitest du denn auf dieser statischen Methode herum? Vor allem im Zusammenhang mit Vererbung macht das gar keinen Sinn, da statische Methoden nicht vererbt werden. Ich seh jedenfalls (selbst wenn man ein so problematisches Design wirlich umsetzt) nirgendwo ne zwingende Notwendigkeit irgendwas mit statischen Methoden erledigen zu müssen.

Gruß
Ollie
 
Ok du hast Recht, wollt das es für mich im vorstellbaren Rahmen abläuft, ohne mir jetzt unbedingt neues Wissen aneigenen zu müssen.

Eigentlich hat ich ja schon beschlossen das auf meine Art zu machen, nach 3maligen lesen deines letzten Beitrags, hab ich mir Hibernate ein bisschen weiter angeschaut und das kann wirklich einiges, mehr noch als ich eigentlich benötig hätte. Was vielleicht auch mit ein Grund war für mich andersweitig zu überlegen.
Jedenfalls, vielen dank für deine Mühe und Überzeugsungsarbeit^^

lg,
Michael
 
Kein Problem, hoff das klang nicht zu harsch ;). Ein Tipp noch: schau dir im Zusammenhang mit dem OR Mapping JPA an. Da gibt es standarisierte Annotationen, um Objekte auf Tabellen zu mappen. Die API ist auch ein wenig einfacher als die reine HIbernate API. DU kannst da trotzdem im Hintergrund Hibernate verwenden. Bei Fragen dazu... raus damit! (evtl. in einen neuen Thread)

REINHAUN!
 

Neue Beiträge

Zurück