screamboy14 Geschrieben 9. November 2013 Geschrieben 9. November 2013 huhu ich bin gerade damit fertig geworden ein kleines Programm zum berechnen des korrelationskoefizenten zu schreiben und wollte mal eure Meinung dazu wissen auch im punkto programmierstil ... ich hab das progi auf 2 verschiedene arten geschrieben einmal innerhalb der gui und einmal mit dem versuch gui und logik zu trennen bin für jede positive und auch negative Kretik offen also hier einmal das Projekt progi2.zip Zitieren
Gast runtimeterror Geschrieben 10. November 2013 Geschrieben 10. November 2013 Hi, dann schreib ich mir einfach mal ohne jegliche Priorität frei von der Leber, das mir spontan (ohne das Programm bislang gestartet zu haben) einfällt. Ich habe dein Projekt in mein Eclipse importiert und bekomme direkt folgendes "um die Ohren gehauen": Description Resource Path Location Type The static field JTable.AUTO_RESIZE_OFF should be accessed in a static way Fenster3.java /fachinformatiker.de/src/Korrelation line 254 Java Problem The import javax.swing.JFrame is never used Einlesen.java /fachinformatiker.de/src/Korrelation line 6 Java Problem The static field JFrame.EXIT_ON_CLOSE should be accessed in a static way Fenster3.java /fachinformatiker.de/src/Korrelation line 84 Java Problem The value of the local variable bf is not used Einlesen.java /fachinformatiker.de/src/Korrelation line 16 Java Problem The value of the local variable bf is not used Einlesen.java /fachinformatiker.de/src/Korrelation line 39 Java Problem The value of the local variable mathPowValue is not used Calculation.java /fachinformatiker.de/src/Korrelation line 8 Java Problem The value of the local variable mathPowValue is not used Fenster2.java /fachinformatiker.de/src/Korrelation line 377 Java Problem The method round(double) from the type Fenster2 can potentially be declared as static Fenster2.java /fachinformatiker.de/src/Korrelation line 443 Java Problem Unnecessary semicolon Method.java /fachinformatiker.de/src/Korrelation line 41 Java Problem The static field JFrame.EXIT_ON_CLOSE should be accessed in a static way Fenster2.java /fachinformatiker.de/src/Korrelation line 85 Java Problem The value of the local variable tableValue is not used Fenster2.java /fachinformatiker.de/src/Korrelation line 247 Java Problem The value of the local variable tableValue is not used BtnCheck.java /fachinformatiker.de/src/Korrelation line 10 Java Problem The import javax.swing.JTable is never used Method.java /fachinformatiker.de/src/Korrelation line 4 Java Problem The static field JTable.AUTO_RESIZE_OFF should be accessed in a static way Fenster2.java /fachinformatiker.de/src/Korrelation line 347 Java Problem Unnecessary semicolon Fenster2.java /fachinformatiker.de/src/Korrelation line 368 Java Problem The import javax.swing.table.DefaultTableModel is never used Method.java /fachinformatiker.de/src/Korrelation line 5 Java Problem The import javax.swing.JFrame is never used Ausfueren.java /fachinformatiker.de/src/Korrelation line 3 Java Problem Das meiste davon sind nur Schönheitfehler, weisen aber teilweise auf unbeabsichtigte Fehler hin. Man kann in Eclipse festlegen, was alles angemeckert werden soll. Ich empfehle immer alle Warnungen einzuschalten und nur die wieder abzuschalten, die man explizit für seinen Fall nicht benötigt. (Bei mir ist das meist "localize all strings") Auf jeden Fall alle Warnungen abarbeiten, sonst fängt man an die zu ignorieren und sie helfen nicht mehr. Was mir dann noch auffällt: Ich empfehle ein besonderes Augenmerk auf die Wahl von Bezeichnern zu legen. Mal abgesehen von diversen Rechschreibfehlern mischst du ohne für mich erkennbaren Grund Deutsch und Englisch (Ausfueren vs. Check, New) - ich hätte hier mit Execute gerechnet - oder Fenster statt Window. Ich empfehle immer englische Bezeichner zu wählen, es sei denn es handelt sich um fachliche Begriffe (z.B. Sozialversicherungsnummer). Dann finde ich viele Bezeichner zu kurz geraten: Btn statt Button, bf statt ?? - Eclipse (wie jede andere gute IDE) unterstützt dich durch Autocompletion beim Tippen, so dass es keinen Grund gibt Bezeichner abzukürzen. Gib in Eclipse mal "ISR" ein und drücke dahinter Strg+Space - dann macht das Programmieren doppelt viel Spaß Du hast an vielen Stellen den Bezeichner namens "wert" verwendet. Meistens handelt es sich um den berechneten Rückgabewert einer Methode. In diesen Fällen bietet sich z.B. "result" an, was zumindest ein bisschen was über den Verwendungszweck aussagt - was Treffenderes geht aber in vielen Fällen halt auch nicht. Package-Bezeichner werden in java "traditionell" in Kleinbuchstaben gehalten (also "korrelation" statt "Korrelation") (<- hier hätte ich beinahe "Korellation" geschrieben . Dann ist mir noch die hohe Zahl an static-Methoden aufgefallen. Ohne es im Einzelfall überprüft zu haben, solltest du dafür sorgen, dass static-Methoden die Ausnahme bleiben. Java ist eine objektorientierte Programmiersprache - static ist eher das Gegenteil. Dann noch das leidige Thema Dokumentation. Ich empfehle zumindest jeder Klasse ein Javadoc zu verpassen, damit man weiß worum es geht. Gut ist es, wenn zudem jede public-Methode dokumentiert wird. Sprechende Bezeichner sorgen meist dafür, dass man sich die Inline-Dokumentation sparen kann. Dann habe ich an einigen stellen "catch (Exception e)" gefunden - das heißt für mich als Leser: "Hier können Fehler auftreten, von denen der Autor weder weiß, warum sie auftreten, von welcher Art sie sind noch wie er sinnvoll darauf reagieren soll.". Man sollte ausschließlich Exceptions auffangen, mit denen man rechnet. Zudem befindet sich bei dir in dem catch-Block nur die Ausgabe des Fehlers in der Konsole, nicht aber die Korrektur des Rückgabewertes. In der Fenster2-Klasse ruft du mehrfach hintereinander e.getActionCommand().equals(<other object>) auf. Ich würde e.getActionCommand() in eine eigene Variable speichern, damit die nicht mehrefach angefordert werden muss. Zudem erhöht das die Lesbarkeit und verkürzt die Zeilen. Du verwendest als Zeilentrenner "\n" - System.lineSeparator() liefert dir plattformunabhängig die richtige Zeichenkette hierfür. Zur Not bist du mit "\r\n" auf der sicheren Seite - Alle mir bekannten Betriebssysteme außer Windows sind da tolerant Konstrukte wie errorInfo = errorInfo + " Z" ...; kann man umschreiben zu errorInfo += " Z" ...; Uiii mein Lieblingskonstrukt: if (error == false) { btnCalculate.setEnabled(true); JOptionPane.showMessageDialog(this, checked); } else if (error == true) { JOptionPane.showMessageDialog(this, "Sie Haben in folgenden Zeilen (Z) und Spalten (S) " + "einen falschen Wert eingegeben! " + "\n" + errorInfo); } Man verwendet boolsche Werte, damit man sie nicht mehr mit true oder false vergleichen muss. Folgender Code ist äquivalent: if (error) { JOptionPane.showMessageDialog(this, "Sie Haben in folgenden Zeilen (Z) und Spalten (S) " + "einen falschen Wert eingegeben! " + "\n" + errorInfo); } else { btnCalculate.setEnabled(true); JOptionPane.showMessageDialog(this, checked); } Was mir spontan positiv auffällt (das fällt mir nicht leicht, da ich mittlerweile vieles als selbstverständlich empfinde - aber ich gebe mir Mühe Dein Code ist in viele kleine übersichtliche Einheiten/Methoden gegliedert. Die Code-Formatierung ist schon ganz gut, ich habe kaum fehlende Einrückungen gesehen und du verwendest Leerzeilen als funktionale Trenner. (Drück mal Strg+Shift+F - dann formatiert der dir automatisch den Quelltext anhand vordefinierter (aber anpassbarer) Regeln) Du benutzt packages (das bin ich bei "schaut-mal-meinen-code-an-Posts" nicht gewohnt) Du speicherst Werte, die du an mehreren Stellen benötigst in separaten Variablen, anstatt sie mehrfach anzufragen (leider noch nicht überall, wo es sinnvoll wäre) Du benutzt Annotationen Ich hör hier dann einfach mal auf und hoffe, dass du ein paar brauchbare Vorschläge finden konntest. Ich finde es gut, wenn sich jemand um Code-Qualität kümmert - das machen leider viel zu wenige Viel Erfolg/Spaß! Zitieren
screamboy14 Geschrieben 11. November 2013 Autor Geschrieben 11. November 2013 huhu erstmal ein danke das du dir die Zeit genommen hast, dir das program einmal anzuschauen und diesen txt zu schreiben Ich habe dein Projekt in mein Eclipse importiert und bekomme direkt folgendes "um die Ohren gehauen": Description Resource Path Location Type The static field JTable.AUTO_RESIZE_OFF should be accessed in a static way Fenster3.java /fachinformatiker.de/src/Korrelation line 254 Java Problem The import javax.swing.JFrame is never used Einlesen.java /fachinformatiker.de/src/Korrelation line 6 Java Problem The static field JFrame.EXIT_ON_CLOSE should be accessed in a static way Fenster3.java /fachinformatiker.de/src/Korrelation line 84 Java Problem The value of the local variable bf is not used Einlesen.java /fachinformatiker.de/src/Korrelation line 16 Java Problem The value of the local variable bf is not used Einlesen.java /fachinformatiker.de/src/Korrelation line 39 Java Problem The value of the local variable mathPowValue is not used Calculation.java /fachinformatiker.de/src/Korrelation line 8 Java Problem The value of the local variable mathPowValue is not used Fenster2.java /fachinformatiker.de/src/Korrelation line 377 Java Problem The method round(double) from the type Fenster2 can potentially be declared as static Fenster2.java /fachinformatiker.de/src/Korrelation line 443 Java Problem Unnecessary semicolon Method.java /fachinformatiker.de/src/Korrelation line 41 Java Problem The static field JFrame.EXIT_ON_CLOSE should be accessed in a static way Fenster2.java /fachinformatiker.de/src/Korrelation line 85 Java Problem The value of the local variable tableValue is not used Fenster2.java /fachinformatiker.de/src/Korrelation line 247 Java Problem The value of the local variable tableValue is not used BtnCheck.java /fachinformatiker.de/src/Korrelation line 10 Java Problem The import javax.swing.JTable is never used Method.java /fachinformatiker.de/src/Korrelation line 4 Java Problem The static field JTable.AUTO_RESIZE_OFF should be accessed in a static way Fenster2.java /fachinformatiker.de/src/Korrelation line 347 Java Problem Unnecessary semicolon Fenster2.java /fachinformatiker.de/src/Korrelation line 368 Java Problem The import javax.swing.table.DefaultTableModel is never used Method.java /fachinformatiker.de/src/Korrelation line 5 Java Problem The import javax.swing.JFrame is never used Ausfueren.java /fachinformatiker.de/src/Korrelation line 3 Java Problem Man kann in Eclipse festlegen, was alles angemeckert werden soll. wo kann man das denn einstellen ich war ehrlichgesagt ein wenig verwundert das da sofort Fehler bei dir angezeigt worden Was mir dann noch auffällt: Ich empfehle ein besonderes Augenmerk auf die Wahl von Bezeichnern zu legen. Mal abgesehen von diversen Rechschreibfehlern mischst du ohne für mich erkennbaren Grund Deutsch und Englisch (Ausfueren vs. Check, New) - ich hätte hier mit Execute gerechnet - oder Fenster statt Window. Ich empfehle immer englische Bezeichner zu wählen, es sei denn es handelt sich um fachliche Begriffe (z.B. Sozialversicherungsnummer). ja stimmt ich habs leider nicht so gut mit der englischen sprache und hab eig auch meist deutsch benutzt und wollte jetzt halt englisch schreiben weils halt so festgesetzt ist .... Dann ist mir noch die hohe Zahl an static-Methoden aufgefallen. Ohne es im Einzelfall überprüft zu haben, solltest du dafür sorgen, dass static-Methoden die Ausnahme bleiben. Java ist eine objektorientierte Programmiersprache - static ist eher das Gegenteil. Dann noch das leidige Thema Dokumentation. Ich empfehle zumindest jeder Klasse ein Javadoc zu verpassen, damit man weiß worum es geht. Gut ist es, wenn zudem jede public-Methode dokumentiert wird. Sprechende Bezeichner sorgen meist dafür, dass man sich die Inline-Dokumentation sparen kann. dazu muss ich sagen das ich erst dabei bin so richtig ins OO einzusteigen, vorher hab ich eher immer nur runterprogrammiert und muss mich da erst hineinarbeiten. zu der doku hast du da mal ein paar beispiele ich kann mir da gerade nichts drunter vorstellen ... In der Fenster2-Klasse ruft du mehrfach hintereinander e.getActionCommand().equals(<other object>) auf. Ich würde e.getActionCommand() in eine eigene Variable speichern, damit die nicht mehrefach angefordert werden muss. Zudem erhöht das die Lesbarkeit und verkürzt die Zeilen. Konstrukte wie errorInfo = errorInfo + " Z" ...; kann man umschreiben zu errorInfo += " Z" ...; ich wusste garnicht das man befehle in eigene variablen speichern kann wie funktioniert das denn genau ? zu dem umschreiben die möglichkeit kenne ich bereits allerdings irritiert diese mich persönlich wesswegen ich diese schreibweise ungern verwende. Was mir spontan positiv auffällt (das fällt mir nicht leicht, da ich mittlerweile vieles als selbstverständlich empfinde - aber ich gebe mir Mühe Dein Code ist in viele kleine übersichtliche Einheiten/Methoden gegliedert. Die Code-Formatierung ist schon ganz gut, ich habe kaum fehlende Einrückungen gesehen und du verwendest Leerzeilen als funktionale Trenner. (Drück mal Strg+Shift+F - dann formatiert der dir automatisch den Quelltext anhand vordefinierter (aber anpassbarer) Regeln) Du benutzt packages (das bin ich bei "schaut-mal-meinen-code-an-Posts" nicht gewohnt) Du speicherst Werte, die du an mehreren Stellen benötigst in separaten Variablen, anstatt sie mehrfach anzufragen (leider noch nicht überall, wo es sinnvoll wäre) Du benutzt Annotationen na das hör ich doch mal gerne vorallem den teil mit den übersichtlichen und vielen kleinen Methoden wo man mir schon öfters sagte das man soetwas nicht macht (z.b. buttons als eigene methode etc ...) Die einrückfunktion hab ich irgendwann mal von gehört hab sie aber bis jetzt NIE gebraucht da ich beim programmieren schon versuche eine gewisse ordnung und übersichtlichkeit zu erreichen .. so ein großes danke nochmal an dich und deine mühe zumal wenn ich mir mal die uhrzeit deines postes ansehe Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.