Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

Markus

the one and only Unterstrich!

Posts: 2,571

Date of registration: Oct 9th 2003

21

Monday, July 3rd 2006, 12:16am

Wie wär's mit einer Übung zu Reflectios? (:
Charmant sein? Hab ich längst aufgegeben. Glaubt mir doch eh keiner...

neweb

Erfahrener Schreiberling

  • "neweb" is male

Posts: 496

Date of registration: Jun 16th 2006

Location: Hannover

22

Monday, July 3rd 2006, 9:23am

Naja.... ;) viele Übungen werden es wohl kaum noch werden... Selbst bei 2 Übungen müssten wohl die letzten nach der Klausur vorstellen. Macht das wirklich sinn?

Quoted

Ich hatte damit zwar keine Probleme, als ich das ausprobiert habe, aber bitte, eine Version mehr kann ja nicht schaden. Im übrigen ein interessantes Beispiel dafür, was passiert, wenn man einen Modifier vergisst: durch das fehlende public ist der oben angesprochene Konstruktor implizit "package", also nur innerhalb des Packages sichtbar (was ja grundsätzlich kein Problem wäre, wenn man hier nicht versucht hätte, die main-Klasse aus dem Package zu rupfen - meiner Meinung nach übrigens nicht unbedingt nötig; denke, das ist Ansichtssache). Den Hinweis mit den Umlauten werde ich ab sofort berücksichtigen.


Ich denke schon, dass das Sinn macht. Welcher Anwender eines Programms will schon gerne die einzelnen Lib-Verzeichnisse durchsuchen, bis er seine Programmdatei zum Ausführen findet. Daher ist es eigentlich Standart, dass man seine main-Methode auch da ablegt, wo sie hingehört und nicht versteckt in irgendwelchen Packages. Zudem sind Packages, wie schon gesagt, dafür da um Quellcode möglichst gut wiederverwendbar zu machen und nicht um die Hauptklasse darin zu verstecken.
Aber wie dem auch sei, die Version, die ich gepostet habe, sollte weniger Probleme machen beim Compilieren machen. Wenn man die Originalversion compilieren will (Auf der Konsole) sollte man es am besten aus dem Verzeichnis tun, in das man die Dateien entpackt hat (javac simulation/implementions/SimulatorApplikation.java) oder man setzt den Classpath (javac -classpath ..\..\ SimulatorApplikation.java, bzw. Unix: javac -classpath ../../ SimulatorApplikation.java).

Oder man nimmt gleich seine Lösung zur letzten Aufgabe ;).
Das Wesen der Dinge ist es, dass sie plötzlich verschwinden und dann unerwartet an einem ganz anderen Ort wieder auftauchen.

This post has been edited 1 times, last edit by "neweb" (Jul 3rd 2006, 9:31am)


dluebke

Trainee

  • "dluebke" is male

Posts: 37

Date of registration: Aug 26th 2004

23

Monday, July 3rd 2006, 9:55am

Quoted

Original von neweb
naja... eine Main gehört definitiv nicht in ein Package. So sind Packages nicht gedacht. Packages sind für die Wiederverwendung von Code eingeführt worden.


Packages sind zur Strukturierung des Programmes eingeführt worden. Dies kann Wiederverwendung fördern, aber auch alleine schon die Übersicht erleichtern/ermöglichen. Ich würde niemals(!!!) das default-Package benutzen und auch eine "Main-Klasse" in ein projektspezifisches Verzeichnis tun. Die Namenskonvention für Packages ist ja zuerst die umgedrehte Domain, also z.B.

de.uniHannover

dann nehme ich normalerweise den Projektnamen, also z.B.

de.uniHannover.meinProjekt

und darin liegt dann gleich die Main-Klasse, sofern es nur eine gibt, also

de.uniHannover.meinProjekt.Main

oder wenn man mehrere hat dann die auch getrennt in verschiedene Packages:

  1. de.unihannover.meinProjekt.client.Main
  2. de.unihannover.meinProjekt.server.Main
    [/list=a]

    Alle anderen Logikklassen liegen nicht in diesen "Hauptpackages"!

    Quoted

    Eine Main verwendet man normalerweise so nicht wieder. Ansonsten baut man eine Unterklasse, in der die Dinge liegen, die wiederverwendet werden sollen.


    Wovon soll das eine Unterklasse sein? Rest s.o.

    Quoted

    Zudem sollte ein Konstruktor immer public sein!

    Quoted


    SimulatorApplikation.java:17: Simulator() is not public in implementation.Simulator; cannot be accessed from outside package
    Simulator meineSimulation = new Simulator();
    ^
    1 error



    Konstruktoren sollen niemals einfach immer nur public sein! Sie sollen dann (und nur dann) public sein, wenn sie von ausserhalb des aktuellen Packages aufgerufen werden. Ansonsten reicht auch default- oder protected-Sichtbarkeit. Gerade im Verbund mit Factories u.ä. kann es manchmal viel mehr Sinn machen, dass eine Klasse nicht instanziierbar ist. Oder private-Konstruktoren für statische Hilfsklassen und Singletons. Leider verlangen viele Frameworks und APIs, dass es einen public Default-Konstruktor gibt. Dies macht leider den Code unsauberer. Dennoch sollte man sich überlegen, unter welchen Umständen es Sinn macht, dass Konstruktoren über Paketgrenzen hinweg aufgerufen werden, da damit zwei Pakete fest aneinander gebunden sind (schlechtes Coupling). Dies unterläuft dann auch Deine Wiederverwendbarkeitsgedanken :-)
    In dem angegebenen Ausschnitt muss der Konstruktor wohl public sein aus dem genannten Grund, aber d.h. auch, dass das SimulatorApplikation-Package (= das Package, wo SimulatorApplikation drin ist) nicht ohne das Simulator-Package auskommt und (wieder)verwendet werden kann.

    Grüße,
    Daniel

This post has been edited 1 times, last edit by "dluebke" (Jul 3rd 2006, 10:26am)


julianr

Erfahrener Schreiberling

Posts: 298

Date of registration: Oct 13th 2005

Location: I live in a giant bucket.

24

Monday, July 3rd 2006, 10:33am

Quoted

Original von neweb
Oder man nimmt gleich seine Lösung zur letzten Aufgabe ;).


Hrmpf, das wollte ich gerade machen, aber wenn man Aufgabe 9 so verstanden hat, dass man nur _allgemein_ das Framework für eine Simulation (und ein beliebiges Testprogramm) schreiben soll, dann geht der Plan nicht auf. Ich hab weder ein IEreignis, noch Ankunfts- und Abgangsklassen, und einen BasicSimulator schon gar nicht. Da müsste ich die Aufgabe schon ganz schön frei interpretieren :/

This post has been edited 1 times, last edit by "julianr" (Jul 3rd 2006, 10:34am)


  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

25

Monday, July 3rd 2006, 10:39am

Quoted

Original von neweb
Welcher Anwender eines Programms will schon gerne die einzelnen Lib-Verzeichnisse durchsuchen, bis er seine Programmdatei zum Ausführen findet.
Um dieses Problem zu umgehen, gibt es ja glücklicherweise JAR-Dateien.
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

sos1981

Alter Hase

  • "sos1981" is male

Posts: 1,562

Date of registration: Oct 28th 2003

Location: Wolfsburg

Occupation: Testentwickler

26

Monday, July 3rd 2006, 11:09am

Hi Leute,
ich hab da so ein Problem, und zwar kieg ich eine Exception, die ich mir nicht wirklich erklären kann. Diese tritt entweder am Anfang, Ende oder ziemlich genau in der Mitte der Simulation auf. Vielleicht weiß ja jemand rat:

Quoted

Simulationszeit: 30,63 Laenge der Warteschlange: 3
Simulationszeit: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at simulation.implementation.EreignisArray.naechstesEreignis(EreignisArray.java:106)
at simulation.implementation.Simulator.run(Simulator.java:76)
at simulation.implementation.SimulatorApplikation.main(SimulatorApplikation.java:19)
32,11 Laenge der Warteschlange: 2
Simulationszeit: 33,12 Laenge der Warteschlange: 3


Danach läuft die Simulation ohne Probleme weiter und der Abbruch funzt dann auch....

Gruss
Florian
Der Einzigste ist noch viel einziger als der Einzige!

neweb

Erfahrener Schreiberling

  • "neweb" is male

Posts: 496

Date of registration: Jun 16th 2006

Location: Hannover

27

Monday, July 3rd 2006, 11:09am

Quoted


Konstruktoren sollen niemals einfach immer nur public sein! Sie sollen dann (und nur dann) public sein, wenn sie von ausserhalb des aktuellen Packages aufgerufen werden. Ansonsten reicht auch default- oder protected-Sichtbarkeit.


Okay... es ging mir auch eher darum, dass man nicht komplett auf Modifier verzichtet. Klar... alles, was man von außen nicht nutzt sollte gekapselt werden.
Das Wesen der Dinge ist es, dass sie plötzlich verschwinden und dann unerwartet an einem ganz anderen Ort wieder auftauchen.


Warui

Turner, Serveradmin & Workaholic

  • "Warui" is male
  • "Warui" started this thread

Posts: 717

Date of registration: Apr 25th 2006

Location: Südstadt

Occupation: (iter (B.Sc. Inf, 8)) \n (be-a-slave ("SRA", "Bachelor Thesis")) \n (be-a-programmer-slave ("Freelancer", "Programming"))

28

Monday, July 3rd 2006, 2:49pm

Quoted

Original von sos1981
Hi Leute,
ich hab da so ein Problem, und zwar kieg ich eine Exception, die ich mir nicht wirklich erklären kann. Diese tritt entweder am Anfang, Ende oder ziemlich genau in der Mitte der Simulation auf. Vielleicht weiß ja jemand rat:

Quoted

Simulationszeit: 30,63 Laenge der Warteschlange: 3
Simulationszeit: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at simulation.implementation.EreignisArray.naechstesEreignis(EreignisArray.java:106)
at simulation.implementation.Simulator.run(Simulator.java:76)
at simulation.implementation.SimulatorApplikation.main(SimulatorApplikation.java:19)
32,11 Laenge der Warteschlange: 2
Simulationszeit: 33,12 Laenge der Warteschlange: 3


Danach läuft die Simulation ohne Probleme weiter und der Abbruch funzt dann auch....

Gruss
Florian


Das heißt im Prinzip nur, dass deine Methode naechstesEreignis() in Zeile 106 einen ungültigen Zugriff versucht. Ich nehme mal an, dass du deine EreignisListe als Array implementiert hast ;)
sag mal der Methode, dass sie einen Extension wirft (throws) und fang sie in Simulator.run() ab mit try-catch .... und gib dort mal die Warteliste aus und den Wert, auf den versucht wurde, zuzugreifen ... oder so ... :)
Und der Eclipse-eigene Debugger ist auch ganz gut ;)

Mata ne
Warui
Erwachsenwerden? Ich mach ja viel Scheiß mit, aber nicht jeden!

sos1981

Alter Hase

  • "sos1981" is male

Posts: 1,562

Date of registration: Oct 28th 2003

Location: Wolfsburg

Occupation: Testentwickler

29

Monday, July 3rd 2006, 2:57pm

Der Eclipse-eigene Debugger findet an der Stelle nichts, was nicht rechtens sein soll. Außerdem benutze ich die Musterlösung, und an der entsprechenden Stelle findet nichts anderes statt, als dass der Array-Index um 1 heruntergesetzt wird. Nur findet dieser Fehler meist mitten in der Ausgabe statt, und dann geht es ohne Probleme weiter...als wenn da ein Loch im Array existiert.
Der Einzigste ist noch viel einziger als der Einzige!