Hi, ich habe mal eine allgemeine Frage bezüglich Java Programme. Es wird immer wieder betont, Methoden und Variablen mit dem größtmöglichen Schutz zu deklarieren (am besten private). Wenn man nun jedoch eine Anwendung mit Java programmiert, ist es dann für außenstehende möglich, die .class datei wieder in eine Java Datei umzuwandeln, bzw. sich in das Programm "einzuhacken", oder ist es im Fall einer abgeschlossenen Anwendung egal wie man die Methoden und Variablen definiert, bzw. kann man sich gegen solche Zugriffsversuche in Java besonders absichern?
Da hast du was völlig falsche verstanden. Bei den Access-Modifiern geht es um Sichtbarkeit nach aussen (Kapselung) und nicht um den Schutz vor bösen Crackern :wink:
Das mit der Sichtbarkeit von Methoden ist nicht als Schutz von Code gedacht. Diese Empfehlung mit dem
"Größtmöglichen Schutz" ist mehr im Design einer Anwendung begründet. Man macht nur Methoden "sichtbar", die
auch dafür gedacht sind, dass sie von Aussen verwendet werden.
Dein Code kann mit Leichtigkeit wiederhergestellt werden, selbst wenn man nur die *.class Dateien hat. Du kannst
es einem aber schwer machen, indem du einen sog. Obfuscator verwendest. Das Ding macht aus deinem
Code unleserliches Zeug, wo man nicht mehr nachvollziehen kann, was sich dahinter verbirgt. Trotzdem gibt es
immer noch eine Möglichkeit das ganze zu analysieren, der Aufwand ist dann aber relativ gross.
Das heißt also: Es ist vollkommen egal wie man das Programm schreibt mit der Sichtbarkeit der Methoden(, Variablen), wichtig ist nur das es funktioniert, kann man das so sagen?
Variablen als private zu deklarieren ist einfach nur ein erprobter und guter Weg, guten Code zu schreiben. Wenn du persönlich deinen Code auf ne andere Weise besser schrieben kannst. dann machs. (gilt für privates Coden, in Firma isses was anderes)
Wieso ist das in der Firma anders, wird dort davon ausgegangen, dass die Programme evtl. noch weiterverarbeitet werden bzw. aus den Programmen Klassen und anderes vlt. noch benötigt werden oder wie verhält sich das? (nur aus Interesse)
Bei diesem Punkt gibt es überhaupt keine Diskussion. So wird in Java programmiert, ohne wenn und aber. Zuhause kannst du deine eigene Suppe kochen (auch wenn sich das nicht empfiehlt), aber im professionellen Umfeld klopft man dir für dreckigen Code auch schnell mal auf die Finger.
Läuft das auf den Punkt hinaus das ab einer bestimmten Projektgröße eine gewisse Ordnung herrschen muss, besonders wenn mehrere Leute an einem Projekt arbeiten?
Das heißt also: Es ist vollkommen egal wie man das Programm schreibt mit der Sichtbarkeit der Methoden(, Variablen), wichtig ist nur das es funktioniert, kann man das so sagen?
Jupp, kann man. Man kann auch sagen, dass es egal ist, ob man seine Haustür abschließt, weil das ja auch nicht davor schützt, dass das Haus abbrennt. Hat nichts miteinander zu tun, und ist auch ziemlich unklug, aber sagen kann man das natürlich.
Mal im ernst: Wenn deine Anwendung mal ein wenig über "Hallo, Welt" hinausgeht, wirst du schnell merken, dass sich Programmierfehler (wie alles public (und am besten noch static :autsch: ) zu machen) sich schnell biiitterr rächen können. Aufs konkrete Beispiel bezogen: Das "Geheimnisprinzip" http://de.wikipedia.org/wiki/Datenkapselung_(Programmierung) gilt nicht für eine bestimmte Sprache, sondern für Objektorientierte Programmierung allgemein.
Naja static muss wirklich nicht sein, das stimmt schon, aber da du gerade die gesamte Objektorientiert Programmierung angsprochen hast... Über welche Porgrammiersprache sollte man denn am besten einsteigen, ist Java dafür geeignet oder unterscheidet sich die Programmiersprach schon ziemlich von den anderen (besonders C++ und C#)?
Natürlich gibt es Unterschiede (die in anderen Threads nicht nur bis zum Erbrechen, sondern weeeiiit darüber hinaus breitgetreten wurden :wink: ) Aber um Objektorierntierte Programmierung zu lernen ist Java IMHO schon gut geeignet. Leichter und bequemer als C++, und nicht so "weltfremd" wie Eiffel :wink:
Ein weiterer Grund Variablen private zu halten ist der Zugriff auf diese Daten. Wenn du den Zugriff nur über deine Funktionen erlaubst kannst du bestimmen wie diese Variablen gesetzt werden.
Mal sehen, sagen wir du willst nicht das eine bestimmte Variable null gesetzt wird und schreibst eine set Methode die das abfängt. Ist die Variable hingegen von außen zugängig kann jeder da reinschreiben was er will.
Das wollte ich nur sagen hat mir bei den bisheriegen Erklärungen gefehlt :bae:
Ja, das mit den privaten Variablen scheint mir so wie eine zweite Ebene zu sein: Man muss Aufpassen das der Nutzer nichts falsches eingibt (über Exceptions, if Schleifen,...) und der Programmierer auch (private Deklaration, Methoden die die Variablen bereit Stellen). Ich hatte nur gedacht, das es vlt. einen Unterschied macht (bezüglich der Deklaration der Variablen), wenn man z.B. eine Anwendung fürs Internet (Kaufabwicklung, etc.) schreib, da dort ja aktiv etwas gemacht wird mit dem Programm, dem ist ist aber nicht so... (Ist halt nur mehr aufwand für jede Variable eine Methode bereit zu Stellen...) wieder was gelernt
:lol: Die Google Trends sind ja mal ziemlich für die Socken, wenn auf einmal ein Erdbeben in Indonesien zur scheinbaren Verbreitung einer bestimmten Programmiersprache beiträgt :lol:
Les dir einfach mal die Eclipse Help durch. Dabei wirst du dann entdecken, dass du noch keine 5% des Funktionsumfangs kennst.
Wenn du mal 60% kennst, kannst du anfangen PlugIns zu installieren :wink: