Dynamische Objekte / DB

najjannaj

Aktives Mitglied
Erstmal Hallo an alle,

ich habe folgendes vor:
Ich möchte dem Benutzer die Möglichkeit bieten sich ein "Klasse" selbst gestalten zu können. Dabei geht es nur darum zum Beispiel zu sagen, ich brauche eine Klasse namens "A" und die hat 3 Variablen, 2 sind mit Text und in eins sollen nur Zahlen reinkommen. Um die Validierung etc. möchte ich mir im ersten Schritt mal noch keine Gedanken machen. Instanzen dieser Klasse sollen später natürlich auch gespeichert werden können, am besten in einer Datenbank.

Zur Frage:
Wie würdet Ihr sowas anpacken? Speziell habe ich noch Probleme mir vorzustellen wie ich aus den Informationen zur Laufzeit eine Klasse erzeuge und mit dieser dann weiterarbeiten kann.

Bin für jeden Tipp sehr Dankbar!
Viele Grüße
 
G

Gastredner

Gast
Prinzipiell ließe sich ein solches Verhalten annähernd über eine Map realisieren:
Java:
import java.util.Map;
import java.util.HashMap;

/*
 *  Vielleicht sollte man Generics einsetzen, um bei Bedarf nur bestimmte Arten
 *  von Attributen zuzulassen.
 */
public class DynamicClass {

	private Map<String, Object> attributes;

	public DynamicClass() {
		this(new HashMap<String, Object>());
	}

	public DynamicClass(Map<String, Object> attributes) {
		this.attributes = attributes;
	}

	/*
	 * Allround-Methode zum Abfragen.
	 */
	public Object get(String attr) {
		Object value = attributes.get(attr);
		if (value != null) {
		
		} else {
			// Irgendwie behandeln, z. B. mit einer Exception:
			throw new RuntimeException("This class contains no attribute \'" + attr + "\'");
		}
	}

	/*
	 * Eine spezialisierte Methode - eine solche müsste für jeden primitiven Typ geschrieben werden.
	 * Es könnte auch eine Methode konsturiert werden, die Attribute von nicht-primitiven Typen
	 * durch Übergabe des gewünschten Class-Objects direkt zu casten versucht.
	 */
	public int getInt(String attr) {
		Object value = attributes.get(attr);
		if (value != null) {
			try {
				return Integer.parseInt(value);
			} catch (NumberFormatException e) {
				throw new RuntimeException("The attribute \'" + attr + "\' is no integer-type attribute!");
			}
		} else {
			throw new RuntimeException("This class contains no attribute \'" + attr + "\'");
		}
	}

	public void set(String attr, Object value) {
		if (attributes.keySet().contains(attr)) {
			attributes.put(attr, value);
		} else {
			// Irgendwie behandeln.
			throw new RuntimeException("This class contains no attribute \'" + attr + "\'");
		}
	}

	public void createAttribute(String name, Object initialValue) {
		if (!attributes.keySet().contains(attr)) {
			attributes.put(attr, value);
		} else {
			// Irgendwie behandeln.
			throw new RuntimeException("This class contains already contains an attribute \'" + attr + "\'");
		}
	}
}
Ungetestet und sehr primitiv, aber es sollte halbwegs laufen.
Allerdings frage ich mich, ob dieses Vorgehen sinnvoll ist. Zumindest unter Java wage ich es zu bezweifeln. Python bzw. Jython könnte dir helfen, wenn du Klassen unbedingt zur Laufzeit definieren musst:
Code:
>>> class Empty(object):
...         def __init__(self):
...                 pass
... 
>>> def func(x, y):
...         return x + y
... 
>>> a = 5
>>> no_more_empty = Empty()
>>> setattr(no_more_empty, "a", a)
>>> setattr(no_more_empty, "func", func)
>>> print no_more_empty.a
5
>>> print no_more_empty.func(no_more_empty.a, 10)
15
Das Beispiel stammt aus der interaktiven Jython-Konsole. Alles, was mit >>> oder ... beginnt, sind Benutzereingaben. Zeilen ohne führende Zeichen sind Ausgaben des Codes.
 
Zuletzt bearbeitet von einem Moderator:

najjannaj

Aktives Mitglied
Im Prinzip ist die Idee glaub ich besser als mein Klassenerzeugen zur Laufzeit...

Um einen genauern Überblick zu geben was ich ungefähr damit vorhab, habe ich mir ein passendes Beispiel ausgedacht:

Man möchte zum Beispiel sich eine private Datenbank anlegen für Vokabeln. Ohne Abfrage oder Lernmodus oder sowas.. einfach das anlegen.. Nun kann man hingehen und zum Beispiel in Excel eine Tabelle wie folgt aufbaun:

| Deutsch | English | Spanisch |
| Hallo | Hello | Hola |

oder man hat mehr Ahnung von Computern und legt sich eine solche Datenbank in Access an und bastelt eine Oberfläche dazu um die Eingabe sehr leicht zu gestalten. Dieses Verhalten soll nun automatisch durch das Java-Programm generiert werden. Dazu sagt man am Anfang das man für dieses Beispiel folgende drei Felder benötigt:

1. Feld
Name = Deutsch
Eigenschaft = Text mit maximal 255 Zeichen

2. Feld
Name = English
Eigenschaft = Text mit maximal 255 Zeichen

3. Feld
Name = Spanisch
Eigenschaft = Text mit maximal 255 Zeichen

in diesem Beispiel natürlich recht Simpel. Aus dieser eingegebenen Definition soll Java anschließend ein "Model" erzeugen und dieses Model in einer Datenbank speichern. Aus dem Model erzeugt sich Java dann eine Benutzereingabemaske um die Daten einzugeben. So ungefähr kann man sich das Ziel vorstellen.

Aber ich denke das liese sich mit der Map ganz gut abbilden. Gibts dennoch weitere Vorschläge?
 
S

SlaterB

Gast
die Frage ist ziemlich allgemein, falls man überhaupt eine identifizieren kann,

zur DynamicClass würde ich noch ein DynamicAttribut mit Name, Datentyp, Wert vorschlagen,
dann tut es auch eine Liste der DynamicAttribut statt Map,

in der Datenbank entweder genauso allgemein eine Tabelle für Einträge + eine für Attribute, die einem Eintrag zugeordnet sind,
oder, falls es nur wenige der dynamischen Klassen in Java gibt, dann diese benennen und dynamisch eine zugehörige typechte DB-Tabelle anlegen,
sofern zur Laufzeit CREATE-SQL usw. möglich ist

wirklich neues ist das nicht dabei, aber du hast es ja auch schon weitgehend, so einfach bearbeiten und bei echten Problemen konkrete Fragen stellen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D dynamische Objekte erzeugen? Allgemeine Java-Themen 16
Ernesto95 HTTP Mit JavaScript erzeugte dynamische Webseite auslesen und nach einem Schlüsselwort durchsuchen Allgemeine Java-Themen 6
districon Rekursion und Dynamische Programmierung Allgemeine Java-Themen 2
hello_autumn Statistische/dynamische Tests Allgemeine Java-Themen 10
E Socket Dynamische Klasse von ObjectOutputStream lesen. Allgemeine Java-Themen 8
P Erste Schritte Dynamische Anzahl von verschachtelten Schleifen Allgemeine Java-Themen 5
J Dynamische Rückgabewerte Allgemeine Java-Themen 2
K Dynamische Webseiten auslesen Allgemeine Java-Themen 6
S Variablen Dynamische Arrays Allgemeine Java-Themen 2
B dynamische Java Slideshow Allgemeine Java-Themen 4
SuperSeppel13 Dynamische Bibliotheken einbinden Allgemeine Java-Themen 16
B Script Problem "Dynamische Datenstruktur" Allgemeine Java-Themen 13
A Dynamische PDF Erstellung mit iText Allgemeine Java-Themen 4
ModellbahnerTT Dynamische Programmierung, komme nicht weiter.... Allgemeine Java-Themen 15
C dynamische imports? Allgemeine Java-Themen 13
hdi dynamische return-Werte Allgemeine Java-Themen 15
M JUnit und dynamische Tests Allgemeine Java-Themen 11
X dynamische bindung - Typsystem :?: Allgemeine Java-Themen 5
C dynamische variablen Namen! Allgemeine Java-Themen 4
G eigener logger mittels classe (dynamische logfilename) log4j Allgemeine Java-Themen 15
R Dynamische Sorten-Prüfung? Allgemeine Java-Themen 8
F dynamische ArrayListen? Allgemeine Java-Themen 8
C kann man dynamische variablen namen vergeben? Allgemeine Java-Themen 2
H "dynamische Ladegrafik" Allgemeine Java-Themen 2
C Dynamische Varibalen Allgemeine Java-Themen 3
C dynamische Vererbung Allgemeine Java-Themen 6
schegga_B javax.crypto - Cipher Objekte - Sevice Provider matching? Allgemeine Java-Themen 1
berserkerdq2 Weiß jemand wie ich im Scenebuilder das Fenster so darstellen kann, dass beim Vollbildmodus die Objekte so angezeigt werden? Allgemeine Java-Themen 1
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
N einem Array Objekte hinzufügen die ihr Array position gespeichert haben Allgemeine Java-Themen 34
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
L Objekte in Set nicht gefunden Allgemeine Java-Themen 13
Avalon Data Transfer Objekte aus Datenbank erstellen Allgemeine Java-Themen 8
G Objekte mit Strings Aufrufen Allgemeine Java-Themen 8
H Objekte speichern und laden Allgemeine Java-Themen 10
H Objekte speichern und laden Allgemeine Java-Themen 1
MiMa Referenz auf Objekte und deren Inhalte Allgemeine Java-Themen 12
W Objekte reproduzieren Allgemeine Java-Themen 2
W Objekte per Reflexion instanziieren Allgemeine Java-Themen 7
W Unittest - Objekte simulieren Allgemeine Java-Themen 7
T OOP Objekte mit Erweiterung Initialisieren Allgemeine Java-Themen 6
O Erste Schritte Objekte als Datenelemente Allgemeine Java-Themen 14
J Equals Mock Objekte Allgemeine Java-Themen 5
J Mockito - Objekte miteinander vergleichen (equals) Allgemeine Java-Themen 6
N Bei Mouse Events nicht mehrere Objekte erstellen Allgemeine Java-Themen 13
J Zugriff auf erstellte Objekte einer Klasse von einer Klasse ausserhalb Allgemeine Java-Themen 3
J Java Objekte = null, Garbagecollector Allgemeine Java-Themen 12
F Listen - Mehrere Objekte Allgemeine Java-Themen 1
J Verständnis Frage zur Instanz, Objekte, Instanzierung, Referenz Allgemeine Java-Themen 14
F Objekte erzeugen Allgemeine Java-Themen 1
E Threads ThreadPoolExecutor remove mit callable Objekte Allgemeine Java-Themen 3
P mehrer Verschiedene Objekte in einer Klasse erstellen. Allgemeine Java-Themen 4
E OOP Objekte und Methoden Allgemeine Java-Themen 1
@SupressWarnings() Umgebungsvariable Objekte "gekoppelt" Allgemeine Java-Themen 6
S Algorithmus um Objekte auf einer Flaeche mit gleichem Abstand anzuordnen..? Allgemeine Java-Themen 20
C Objekte in Array List speichern? Allgemeine Java-Themen 1
OnDemand Objekte speichern Allgemeine Java-Themen 8
B Objekte anhand von Properties file Allgemeine Java-Themen 41
U Tiefe Objekte schreiben Allgemeine Java-Themen 1
R Abstrakte Basisklasse und instanzierte Objekte der abgeleiteten Klasse als Basisklasse übergeben Allgemeine Java-Themen 2
E 3D Objekte in 2D Bild finden Allgemeine Java-Themen 5
J Daten aus GUI auslesen und in Objekte umwandeln Allgemeine Java-Themen 6
F FileOutput/Input Objekte Allgemeine Java-Themen 6
OnDemand Objekte serialisieren Allgemeine Java-Themen 3
J unterschiedliche Objekte, selbe getter und setter Allgemeine Java-Themen 15
L Lib gesucht: Java-Objekte mit JSON Allgemeine Java-Themen 2
U Set erklären dass objekte gleich sind Allgemeine Java-Themen 12
E Best Practice Verdammt große Objekte Allgemeine Java-Themen 10
B Mehrere Objekte verschlüsselt serialisieren Allgemeine Java-Themen 6
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
N Objekte an eine andere Applikation übergeben Allgemeine Java-Themen 3
N 2 Objekte zu einer Gruppe zusammenfügen Allgemeine Java-Themen 7
M Instanzierte Objekte in XML Dokument speichern Allgemeine Java-Themen 3
B Verschiedene Objekte in Abhängigkeit eines Typs instanziieren. Allgemeine Java-Themen 17
K Input/Output Im Programm instanzierte Objekte Speichern und laden Allgemeine Java-Themen 3
S OOP Objekte als Return-Werte: Einen Klon zurückgeben oder Instanz auf das Feld? Allgemeine Java-Themen 10
H Objekte Serialisiert speichern Allgemeine Java-Themen 10
L MouseListener für viele Objekte erstellen Allgemeine Java-Themen 16
5 Objekte Sortieren lassen Allgemeine Java-Themen 7
N Objekte aus Array Inhalt erzeugen Allgemeine Java-Themen 8
L Input/Output Textdatei in Objekte überführen? Allgemeine Java-Themen 4
R Input/Output Objekte speichern ohne überschreiben Allgemeine Java-Themen 7
A Collections HashMap.containsKey findet keine immutablen Objekte Allgemeine Java-Themen 3
H Threads Thread stirbt aber Objekte in ihm leben weiter?! Allgemeine Java-Themen 9
M Java Objekte in XML mit JAXB Allgemeine Java-Themen 9
C Strings und JSON Objekte so klein wie möglich im Speicher ablegen Allgemeine Java-Themen 5
H COM-Objekte/ AktiveX Objekte Allgemeine Java-Themen 4
C Script für Website mit Objekte Ausblenden Allgemeine Java-Themen 3
M Txt einlesen & Objekte erzeugen Allgemeine Java-Themen 2
X Objekte aus TableModel serialisieren und deserialisieren Allgemeine Java-Themen 4
T ObjectInputStream - Arrayliste, die unbekannte Objekte enthält Allgemeine Java-Themen 9
B class dateien "einlesen" und objekte erzeugen Allgemeine Java-Themen 6
D Grafische Objekte zeichnen Allgemeine Java-Themen 4
A Wie zur Laufzeit auf Objekte zugreifen Allgemeine Java-Themen 7
F Referenzen auf Objekte Allgemeine Java-Themen 5
H Eclipse und Objekte Allgemeine Java-Themen 6
S Objekte die Objekte enthalten: Keine Vererbung Allgemeine Java-Themen 4
E Objekte in einer Liste suchen. Allgemeine Java-Themen 4
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben