Anfänger: Wie erzeuge ich einen Zugriff auf diese Klassen?

mysticado

Grünschnabel
Hallo Leute,ich habe eine Anfänger-Frage zu Java. In einer Aufgabe soll ich eine "Datenbank" füllen, sprich ich habe eine Klasse VMDatabase und über die soll ich auf einer anderen Stelle ausgelesene Werte intern (in der Memory) speichern. Am besten ihr schaut euch zuerst die Klassen an:

Java:
public class VMDatabase {
public static List<NetworkEntity> networkEntities = new ArrayList<NetworkEntity>();
}

public class NetworkEntity {
private String ip;
private List<VirtualMachine> virtualMachines;

}

public class VirtualMachine {
private String ip;
private long stressDuration;
private int stressCpuLast;
private int stressRamLast;
private boolean webTraffic;
private int activeUsers;
private String templatePath;

}
Ich habe also NetworkEntitys (Rechner) auf denen jeweils mehrere VirtualMachines (virtuelle Maschinen) und das soll so alles in die Database (Datenbank) eingetragen werden. Ich habe auch schon alle Werte für die jeweiligen Strings und ints, nur habe ich keine Ahnung wie ich das denn jetzt angehen soll? Ich habe eine 4. Klasse, welche eine main-Methode besitzt...doch wie kann ich von dort nun die Werte abspeichern?
Irgendwie so?
Java:
VMDatabase.networkEntities.add(new NetworkEntity("192.168.0.1",new List<VirtualMachine>()))

Please help :)
 
Zuletzt bearbeitet:
Ähm, die Kapitel nützen mir nix?! Wie gesagt, ich habe Werte schon eingelesen (sagen wir mal aus einer .txt-Datei), nun will ich sie einfach in dieses Format bringen, um sie in meiner GUI global leichter aufrufen zu können. Mit Internet und RMI hat meine Frage nichts zu tun...
Trotzdem danke für den Versuch!
 
Java:
VMDatabase.networkEntities.add(new NetworkEntity("192.168.0.1",new List<VirtualMachine>()))

DAS wird so nicht funktionieren da ein entsprechender Konstruktor fehlt der diese Parameter verarbeitet.
Man merkt das du relativ neu in Java bist ... ich würde dir daher empfehlen über das Wochenende mal die JavaInsel komplett durchzuarbeiten *soweit es deine Zeit zulässt*.

Es bringt dir nichts wenn wir dir jetzt für dieses konkrete Beispiel helfen wenn du aber nicht verstehst was dabei dann genau passiert und stellst beim nächsten Problem änliche Fragen.
Wenn du mit der Insel durch bist sollte es dir möglich sein dieses Problem selbst zu lösen.

Denn in Java gilt dasselbe wie in allen anderen Sprachen : learning by doing ...
 
Sagen wir's mal so, so neu bin ich in Java nicht, nur habe ich nie wirklich mit solch verschachtelten Klassen gearbeitet und das bringt mich so durcheinander :(
Und ja, die Java insel habe ich mir (zugegeben: nicht komplett) angeschaut, immer wenn ich bei irgend etwas fest saß. Bei meinem jetzigen Problem finde ich aber nicht wirklich das erlösende Kapitel :)
Ich lerne normalerweise auch immer aus Beispielen und daher hatte ich mir erhofft jemand hilft mir hier weiter - dass ich mein derzeitiges Wissen mit Java-Büchern vertiefen sollte war mir auch so klar, da brauche ich kein Forum dafür um mir die Augen zu öffnen :)
Wärst du so nett und würdest mir mit diesem Konstruktor weiterhelfen? Ich dachte ich brauche keinen wenn die VMDatabase variable static ist?

Edit:
Oh, falls du meintest, dass jede dieser Klassen jeweils noch Konstruktoren braucht, um die dort angegebenen globalen Variablen zu setzen - sowas weiss ich normalerweise. Das Problem welches ich habe ist, dass mir die oben genannten Klassen gegeben wurden und man mir sagte "Okay, so füllst du nun deine Datenbank". Deswegen kam ich auch so durch einander...
 
Zuletzt bearbeitet:
Hallo Leute,ich habe eine Anfänger-Frage zu Java. In einer Aufgabe soll ich eine "Datenbank" füllen, sprich ich habe eine Klasse VMDatabase und über die soll ich auf einer anderen Stelle ausgelesene Werte intern (in der Memory) speichern. Am besten ihr schaut euch zuerst die Klassen an:

1. Die Werte für die Klasse VirtualMachine kann man über den entsprechenden Konstruktor setzen lassen. Die andere (schlechtere) Variante wäre es, für jedes Feld eine setFeldname() Methode zu schreiben. Damit Du die Werte aus den Feldern wieder lesen kannst, fehlen die entsprechendende Getters.

2. In der Klasse NetworkEntity fehlt noch eine Methode addVM(VirtualMachine vm), welche die Liste mit VirtualMachine füllt.

3. In der Klasse VMDatabase wurde ich einen Konstruktor erstellen, welcher als Parameter eine Referenz des Typs ArrayList<NetworkEntity> akzeptiert.

Sag mir Bescheid, wenn Du Beispiele brauchst. In der HTML-Ausgabe von der Java ist auch eine Insel 9. Auflage findest Du gute Hinweise insbesondere im Kapitel 5.5.1 Konstuktoren schreiben und Kapitel 5.2.6 Getters und Setters nach der JavaBeans-Spezifikation. Und zu Deiner Problemstellung schadet es nicht, Kapitel 10 Architektur, Design und Objektorientierung zu lesen. Fragen kannst Du natürlich hier posten.
 
Zuletzt bearbeitet:
Na wenigstens eine höffliche und konkrete Fragestellung bei der man gerne Hilft soweit man kann ... im Gegensatz zu dem was ich gerade an anderer Stelle hier im Forum gelesen habe ... genug OT.

Dann fangen wir mal an :

1) Das STATIC ist eigentlich unnötig. STATIC bewirkt lediglich das ein Objekt satisch in den Kontext gelinkt wird ... es hat aber nichts damit zu tun ob und wie man es manipulieren kann.
2) Das ganze ist ziemlich verschachtelt ... darum wird ein einfaches networkEntities.add() sehr komplex aussehen.
3) Ja ... die Konstruktoren fehlen hier auf jeden Fall. In der "Datenbank" würde ich mit einem private Objekt arbeiten und es mit Gettern und Settern zugänglich machen ... ansonsten ist es nichts anderes als wenn du deine Liste an irgend einer anderen Stelle im Code hast ...

Wenn ich das ganze mal nach meinen Gewohnheiten strukturieren würde würde ungefähr sowas hier bei raus kommen :

VMDatabase
Java:
public class VMDatabase
{
	private List<NetworkEntity> networkEntities=null;
	public VMDatabase() { networkEntities=new ArrayList<NetworkEntity>() }
	public boolean add(NetworkEntity networkEntity) { return networkEntities.add(networkEntity); }
	public void add(int i, NetworkEntity networkEntity) { networkEntities.add(i, networkEntity); }
	public void clear() { networkEntities.clear(); }
	public boolean contains(Object o) { return networkEntities.contains(o); }
	public NetworkEntity get(int i) { return (NetworkEntity)networkEntities.get(i); }
	public int indexOf(Object o) { return networkEntities.indexOf(o); }
	public boolean isEmpty() { return networkEntites.isEmpty(); }
	public Iterator<NetworkEntity> iterator() { return (Iterator<NetworkEntity>)networkEntities.iterator(); }
	public NetworkEntity remove(int i) { return (NetowrkEntity)networkEntities.remove(i); }
	public boolean remove(Object o) { return networkEntities.remove(o); }
	public NetworkEntity set(int i, NetworkEntity networkEntity) { return (NetworkEntity)networkEntities.set(i, networkEntity); }
	public int size() { return networkEntities.size(); }
	public List<NetworkEntity> subList(int f, int t) { return (List<NetworkEntity>)networkEntities.subList(f, t); }
	public Object[] toArray() { return networkEntities.toArray(); }
	public void setList(List<NetworkEntity> networkEntities) { this.networkEntities=networkEntites; }
	public List<NetworkEntity> getList() { return networkEntities; }
}

NetworkEntity
Java:
public class NetworkEntity
{
	private String ip="";
	private List<VirtualMachine> virutalMachines=null;
	private NetworkEntity() { }
	public NetworkEntity(String ip, List<VirtualMachine> virtualMachines) { this.ip=ip; this.virtualMachines=virtualMachines; }
	public String getIp() { return ip; }
	public List<VirtualMachine> getMachines() { return virtualMachines; }
}

VirtualMachine
Java:
public class VirtualMachine
{
	private String ip="";
	private long stressDuaration=0L;
	private int stressCpuLast=0;
	private int stressRamLast=0;
	private boolean webTraffic=false;
	private int activeUsers=0;
	private String templatePath="";
	private VirtualMachine() { }
	public VirtualMachine(String ip, long stressDuaration, int stressCpuLast, int stressRamLast, boolean webTraffic, int activeUsers, String templatepath)
	{ this.ip=ip; this.stressDuaration=stressDuaration; this.stressCpuLast=stressCpuLast; this.stressRamLast=stressRamLast; this.webTraffic=webTraffic; this.activeUsers=activeUSers; this.templatePath=templatePath; }
	public String getIp() { return ip; }
	public long getStressDuaration() { return stressDuaration; }
	public int getStressCpuLast() { return stressCpuLast; }
	public int getStressRamLast() { return stressRamLast; }
	public boolean getWebTraffic() { return webTraffic; }
	public int getActiveUsers() { return activeUsers; }
	public String getTemplatePath() { return templatePath; }
}

Zu erkennen sind die privaten NULL-Konstruktoren die verhindern das man ein "leeres" Objekt erzeugen kann.
Auch habe ich nicht alle Methoden von ArrayList übernommen sondern nur einige *die MEINES Erachtens nach wichtigen* und jeweils einen Setter und Getter für die komplette Liste.
Das ganze ist noch recht statisch und kann auf Veränderungen einzelner Objekte nur reagieren in dem die alten Objekte aus der Liste entfernt und neue Objekte mit aktuellen Werten hinzugefügt werden.

Wie gesagt : das ist mein Stil zu programmieren ... und mein Lösungsansatz wie ich die Klassen implementiert hätte. Ich hoffe ich konnte dir damit erstmal halbwegs helfen.
 
Im obigen Code wimmelt es von Tippfehlern. Ich habe diese korrigiert sowie nach dem üblichen Standards für Java-Code formatiert. Die Klassen sind im beiliegenden Zip-File abgelegt und nun auch kompilierbar, da nun auch die Klassen ausserhalb von java.lang importiert werden.
 

Anhänge

  • src.zip
    1,3 KB · Aufrufe: 12
@j2se
Danke für die Mühe ...
Ich habe meinen Code nicht getestet sondern einfach so zusammengeschrieben ... Tippfehler also nicht ausgeschlossen.

Was die Import-Statements angeht habe ich diese der Einfacheit halber weggelassen ... das diese zum Compilen aber notwendig sind sollte eigentlich klar sein.

Zu den Standards : ich würde das eher Stil als Standard nennen ...
Es ist zwar richtig das die Java-Konventionen das eine oder andere vorschreiben ... oder besser : eine Empfehlung geben wie man es machen sollte ... jedoch trifft es nicht ganz meinen persönlichen Geschmack ... und ob man nun
Java:
public <T> someMethod(<T> ...)
{
	<T> someName=<T>;
}
oder
Java:
public <T> someMethod(<T> ...) {
	<T> someName = <T>;
}
schreibt ist ja für die Funktion egal ...
 
Zurück