Java programmieren Unterteilung in Klassen?
Hallo,
Ich bin momentan dabei mir programmieren anzuschauen, mithilfe des ChatGPT. Ich bin auf eine Vereinfachung gestoßen für Anfänger als Ordnungshilfe in Klassen. Nähmlich OAKMS. Ordnung Attribute Konstruktoren Methoden S - Main - Startpunkt(in der Main-Klasse). Stimmt das?
Außerdem steht hier das es Ausnahmen gibt. Würdet ihr aber es trotzdem empfehlen?
4 Antworten
Der Compiler interessiert sich nicht für die Reihenfolge - zumindest in Sprachen wie Java oder C#, es gibt aber auch Sprachen, bei denen ist das nicht egal.
Von OAKMS habe ich noch nie gehört, aber die Richtung setze ich ziemlich genau so um, wie GPT schreibt, allerdings etwas komplexer, unter Anderen weil C# mehr kann.
- Konstanten
- Klassenvariablen (bei Java nennt man das Attribute, bei C# ist ein Attribut was anderes)
- Events
- Properties
- Konstruktoren
- Methoden
In jeder Gruppe sortiere ich dann auch nach Sichtbarkeit, Zusammengehörigkeit, Aufrufreihenfolge, etc. Teilweise baue ich auch diese Gruppierung nochmal für öffentliche statische Inhalte auf, die dann ganz oben steht.
Das Haupt-Ziel ist, dass die Inhalte der Klasse so zusammenstehen, wie man sie intuitiv suchen würde, aber das ist natürlich auch sehr individuell.
was sind Konstante, Events und Properties
Das sind C# spezifische Dinge.
- Konstanten sind - wie der Name sagt - konstante Variablen, unveränderlich und der Compiler ersetzt jede Verwendung mit dem Wert selber. Bei Java ist das vergleichbarste "static final", aber ob der Compiler das genauso behandelt, weiß ich nicht.
- Events sind eine in C# integrierte Implementierung des Observer Patterns - musst Du nach suchen, gibt gute Erklärungen dazu, das würde hier zu weit führen
- Properties sind eine Vereinfachung der get/set-Methoden, wie sie in Java üblich sind, man nutzt sie wie eine Klassenvariable, nur es 1. übersichtlicher ist und man steuern kann, was bei einer Variable nicht geht.
wäre es intelligenter sich Javascript anzusehen
Java und JavaScript ist wie Äpfel und Gurken zu vergleichen. Der Name ist ähnlich, das war's dann aber auch mit den Gemeinsamkeiten.
Was Du machen solltest, hängt davon ab, wo Du hin willst. In der Webentwicklung wirst Du an JavaScript nicht vorbei kommen, aber wenn Du keine Webentwicklung machen willst, ist JavaScript eine blöde Idee. Es gibt zwar Firmen, die das machen, aber die sind mMn. alle fehlgeleitet :D
Java ist nicht falsch, ganz besonders nicht für den Einstieg. Webentwicklung kann schnell sehr komplex werden, das kann schnell überfordern.
Java bei der jetzigen Marktsituation
Wie die Zukunft von Java aussieht (nicht JavaScript, das wird nie sterben), kann ich nicht sagen. Ich sehe einige Probleme im Design von Java und mag die Sprache auch nicht, es gibt sogar eine andere Sprache (Kotlin), die auf Java aufbaut, sich aber deutlich größerer Beliebtheit erfreut. Insofern würde ich erwarten, dass Java langsam aber sicher aussterben wird, allerdings dauert das noch einige Zeit (viele Jahrzehnte), da Java extrem weit verbreitet ist. Ich mein, selbst COBOL gibt es noch und Banken suchen händeringend nach erfahrenen COBOL Entwicklern.
Ich persönlich bleib bei C#, das befindet sich seit 2016 quasi non-stop im Höhenflug, ist allerdings auch komplexer als Java (kann deutlich mehr), was ggf. etwas überfordernd wirken kann.
Webentwicklung kann schnell sehr komplex werden, das kann schnell überfordern.
Wenngleich das für den Einstieg auch sinnvoll sein kann, da man keine Entwicklungsumgebung braucht (läuft in jedem Webbrowser) und man mittels HTML/CSS direkt eine strukturierte Ein/Ausgabe hat.
JavaScript würde ich auf jeden Fall eher als z.B. Python empfehlen für Einsteiger.
Auf dem Papier stimmt das, in der Realität aber nicht.
Die Entwicklungsumgebungen sind keine Hürde, sondern eine Hilfe, sie zeigen Fehler, bieten Autovervollständigung, etc.
Außerdem *braucht* man nie eine Entwicklungsumgebung, man kann alles auch ohne machen, nur will das niemand.
Aber ja, mittels HTML/CSS hat man direkt eine strukturierte Ein/Ausgabe, allerdings ohne Funktion und damit wertlos. Es gehört immer noch mehr dazu, also braucht man CSS, damit's schön ist (und CSS kann echt ätzend sein) und JavaScript oder irgendeine WASM-Sprache, damit mit der Eingabe auch etwas passiert, die muss man dann auch noch lernen.
Und dein Vorteil, dass es in jedem WebBrowser läuft ist gar nicht so dolle. Zwar stimmt das, allerdings muss man dabei auch mit den vielen kleinen subtilen Unterschieden zwischen den Browsern klar kommen - zusätzlich zum Chaos namens CSS.
Eine simple Konsolenanwendung mag zwar nicht so schick aussehen und man kann nicht so viel machen, aber es gibt viel weniger zu beachten. Danach kann man sich dann auf Desktop-Entwicklung konzentrieren, auch da kann man nicht so viel machen, aber es sieht schick aus und man muss immer noch nicht so viel beachten. Und bei beidem arbeitet man in der Regel nur mit einer Sprache und nicht 3 oder manchmal sogar 4 (SQL mal ausgenommen).
JavaScript würde ich auf jeden Fall eher als z.B. Python empfehlen für Einsteiger.
Wie kommst Du jetzt auf Python?
Ich kenne Python nur oberflächlich und von Erzählungen, aber nach dem, was ich gehört habe, hat Python vermutlich die gleichen Probleme wie JavaScript: Auf dem Papier einfach, aber beides lässt zu viele Freiheiten, sodass man leichter Fehler macht und beides hat vielen subtile Fallstricke.
Insofern würde ich Python auf keinem Fall JavaScript vorziehen, aber auch JavaScript ist nicht gut für den Einstieg geeignet.
Java als Einstiegs-Sprache ist keine schlechte Wahl, es ist einfach, wenig komplex und man bekommt von den Tools mehr Hilfe.
Die Entwicklungsumgebungen sind keine Hürde, sondern eine Hilfe, sie zeigen Fehler, bieten Autovervollständigung, etc.
Auch, ja.
Wobei ich Anfängern tatsächlich raten würde, davon nur wenige Features in Anspruch zu nehmen, um das Gelernte besser verinnerlichen zu können.
Außerdem *braucht* man nie eine Entwicklungsumgebung, man kann alles auch ohne machen, nur will das niemand.
Weitestgehend korrekt.
Jedoch bruacht es für vieles einen extra Compiler oder Interpreter, den man sich extra aufsetzen müsste. Browser hat quasi jeder und der funktioniert out-of-the-box.
Es gehört immer noch mehr dazu, also braucht man CSS, damit's schön ist
Wobei das eher zweitranging wäre. Und man tatsächlich auch schon mit wenig CSS viel hinbekommen kann (insbesondere wenn man einen modernen Browser nutzt.)
und JavaScript oder irgendeine WASM-Sprache, damit mit der Eingabe auch etwas passiert, die muss man dann auch noch lernen.
Oder etwas serverseitiges. Dann klappt es aber nicht mehr ohne weitere Software.
Zwar stimmt das, allerdings muss man dabei auch mit den vielen kleinen subtilen Unterschieden zwischen den Browsern klar kommen
Für Einsteiger eher irrelevant.
Wie kommst Du jetzt auf Python?
Python ist ähnlich kaputt wie JavaScript ;-)
Ich würde Einsteigern aber eher sogar eine spezielle Einsteigersprache empfehlen. So etwas wie Scratch oder GLBasic.
Java als Einstiegs-Sprache ist keine schlechte Wahl, es ist einfach, wenig komplex und man bekommt von den Tools mehr Hilfe.
Sobald man sich Objektorientierung antun will ist es definitiv die Sprache, zu der ich Einsteigern raten würde.
Ich würde Einsteigern aber eher nicht direkt zur Objektorientierung raten, da das für manchen wohl zu schwer für den Einstieg sein dürfte.
Wer mit dem Konzept aber zurechtkommt kann mit Java anfangen.
Wobei ich Anfängern tatsächlich raten würde, davon nur wenige Features in Anspruch zu nehmen, um das Gelernte besser verinnerlichen zu können
Sowas wie Copilot? Dem stimme ich zu, wobei unsere Azubis da anderer Meinung sind. Ggf. können auch Features sinnvoll sein, die viel vorweg greifen, WENN die Person die nötige Motivation hat, das ganze auch zu hinterfragen.
Wobei das eher zweitranging wäre.
Eben nicht. Wenn die Oberfläche im Grunde egal ist, dann tut's auch die Konsole.
Meiner Erfahrung nach kommt mit einer Oberfläche aber schnell der Wunsch (besonders bei Anfängern), sie auch schön zu machen und dann stößt man schnell auf Schwierigkeiten. Da kann es hilfreich sein, eine eingeschränkte Technologie zu wählen, das schult auch gleichzeitig das Denken mit vorgegebenen Grenzen.
Oder etwas serverseitiges. Dann klappt es aber nicht mehr ohne weitere Software.
Ich arbeite mit ASP.NET Core Blazor und das ist - auch ohne WASM - eigentlich extrem gut darin, JavaScript überflüssig zu machen, aber auch da kommt man nicht ohne JavaScript aus, manchmal geht es einfach nicht ohne.
Soll heißen: Ja, serverseitig geht auch, aber an JavaScript kommt man in der Regel nicht vorbei, spätestens wenn man an eine schöne UX denkt (und das tun auch Anfänger), wird's schwierig.
Python ist ähnlich kaputt wie JavaScript
Hm - jain.
JavaScript hat eine Daseinsberechtigung, wenn es um kleine abgeschlossene Interaktivität (z.B. etwas auf- und zuklappen) geht, dafür ist es sehr gut geeignet und da stören die Mängel auch nicht. Aber sobald es komplexer wird ... ne danke :D
Insofern würde ich nicht JavaScript an sich kritisieren, sondern eher, dass es Leute gibt, die große komplexe Projekte rein mit JavaScript entwickeln.
Bei Python suche ich die Daseinsberechtigung noch, außer dass irgendwann irgendwer die KI-Entwicklung mit Python begonnen hat und deshalb jetzt mehr KI-Frameworks für Python existieren. Warum es so weitläufig als "beste" Einsteigersprache empfohlen wird, erschließt sich mir nicht.
So etwas wie Scratch oder GLBasic
Ich rate eigentlich immer zu Java oder C# (wobei das mit den letzten Versionen ggf. zu umfangreich geworden ist, um noch als einfach durchzugehen), weil beide Sprachen einen guten Mix an Flexibilität und Möglichkeiten bieten (C# mehr als Java, aber dafür ist C# auch umfangreicher), dabei aber verhältnismäßig wenig fiese vermeidbare Fallstricke haben. Außerdem muss man keine komplett neue Syntax lernen, wenn man sich mit C/C++ befassen will, was vermutlich die wichtigsten Sprachen nach Assembler sind, aber leider auch alles andere als einfach zu verwenden. Und man kann C/C++ aus Java oder C# heraus aufrufen, was die Kombination extrem mächtig für komplexe Anwendungsfälle macht.
Ach ja und beide sind objektorientiert:
Sobald man sich Objektorientierung antun will ist es definitiv die Sprache, zu der ich Einsteigern raten würde.
Das ist aber wichtig. Wer ernsthafte Projekte auf die Beine stellen will, sollte OOP verwenden. Es hat sicher seine Tücken und eine gewisse Einstiegshürde, aber es immer noch das beste, wenn man komplexe Zusammenhänge strukturieren will.
Und sobald man das irgendwann auch beruflich machen will (danach klingt diese Frage hier für mich), führt kaum ein Weg an der OOP vorbei - außer man will hardwarenahe arbeiten, also Robotik, Treiber, Betriebssystem, etc. - aber das ist sowieso nicht für Anfänger geeignet, insofern egal.
Im Grunde rätst Du also dazu, erst mit einer Sprache zu beginnen, während man früher oder später sowieso wieder wechseln muss, man hat in Summe also mehr Lernaufwand. Und für die ersten paar "Minuten" Einstieg (damit meine ich die Sprachgrundlagen wie Variablen, Methoden, etc.) muss man nicht mit OOP arbeiten - solange man bei der Konsole bleibt und nicht von Anfang an nach den Sternen (Benutzeroberfläche, Videospiele, etc.) greift.
Komplexere Möglichkeiten sind vielleicht nicht für einen Anfänger relevant, aber früher oder später wird es das. Mit der Erfahrung kommen auch die komplexeren Ideen und ggf. der Wunsch, es beruflich zu machen. Und so kann man größtenteils bei einem Umfeld bleiben und kann in diesem Umfeld extrem gut werden.
Sowas wie Copilot?
Auch Autovervollständigung würde ich nicht verwenden am Anfang, sonst lernt man womöglich die Begriffe nicht, was für Anfänger aber wichtig wäre, da diese etwas über die Funktion aussagen und in anderen programmiersprachen ähnlich zu finden sind.
Formattierung würde ich anfangs auch nur bedingt raten, damit der Nutzer versteht, wieso es formattierung braucht.
Ist aber Geschmackssache. Heutzutage kann man das eigentlich überall auch automatisieren.
aber auch da kommt man nicht ohne JavaScript aus, manchmal geht es einfach nicht ohne.
Das mag sein. Genauso wie es oftmals ohne serverseitigen Code nicht geht. Hängt am Ende davon ab,w as genau man tun möchte.
Bei Python suche ich die Daseinsberechtigung noch
Mir ist auch nicht ganz klar, wieso Leute das verwenden. Ich habe es slebst zwar verwendet, aber eher, da ich musste (z.B. Pluginentwicklung) oder da es mir geraten wurde (zur Auswertung von Daten).
Ist vielleicht ganz nett, wenn man wirklich nur einS cript schreiben möchte und das plattformunabhängig. Aber da die Performance so mies ist, gibt es eigentlich immer bessere Wahlen, insbesondere wenn man das öfters verwenden möchte.
Warum es so weitläufig als "beste" Einsteigersprache empfohlen wird, erschließt sich mir nicht.
Geht mir ähnlich.
Scriptsprache mag leicht sein, aber da gibt es bessere für den Einstieg.
Das ist aber wichtig.
Sicherlich. Aber eben auch eine Einstiegshürde. Ich würde daher erst im zweiten Schritt zur Objektorientierung gehen.
außer man will hardwarenahe arbeiten, also Robotik, Treiber, Betriebssystem, etc.
Da möge man doch bitte erst recht objektorientiert arbeiten. Ein Graus, wenn das nicht gemacht wird. :-)
Im Grunde rätst Du also dazu, erst mit einer Sprache zu beginnen, während man früher oder später sowieso wieder wechseln muss, man hat in Summe also mehr Lernaufwand.
Man wird früher oder später so oder so auch andere Sprachen ausprobieren. Und klar kann man auch mit etwas objektorientiertem anfangen.
Man sollte aber eben bedenken, dass die Einstiegshürde höher ist, das müsste man abschätzen, ob man das kann.
Für uns mag das einfacher sein, aber für jemanden, der keinen blassen Dunst von Programmierung hat ist das Konzept recht fremd und viel Text da, der nicht verstanden wird.
(Ich frage mich gerade, ob es Javca auch als Scriptsprache oder so ähnlich gibt für den Einstiegt. Vermutlich schon, aber wenig bekannt.)
Was mir auch noch kam, was Einsteigern insbesondere dann wichtig ist, wenn sie Kinder sind: Eine Dokumentation/Tutorials in der Muttersprache.
Ich erinnere mich daran, dass ich PHP damals einfacher fand als Java, sicherlich auch, da man für PHP deutschsprachige Anleitungen fand, für Java allerdings nicht oder nur schwer.
Statische Konstanten ganz oben, ja. Andere statische Variablen und andere Konstanten nicht zwingend.
Darunter dann Typen (z.B. enum-Definitionen) und innere Klassen.
Beides evtl. jeweils einmal für verschiedene Sichtbarkeiten.
Darunter dann Instanzattribute, Konstruktoren und Methoden. Auch jeweils für verschiedene Sichtbarkeiten.
Main-Methode würde ich in eine eigene Klasse/einen eigenen File packen, möglichst ohne viel anders Zeug, damit die quasi nur den Startpunkt deines Programms darstellt und bei der Ausführung auf Methoden anderer Klassen zurückgreift.
(Generell würde ich empfehlen, möglichst viel auf verschiedene Klassen aufzuteilen, damit man einen besseren Überblick hat (und weniger scrollen muss).)
Das ist zumindest nicht falsch 🤷♀️ Dem Compiler ist relativ egal in welcher Reihenfolge du Attribute, Konstruktor und Methoden in deiner Klasse schreibst, das Programm funktioniert so oder so.
Für die Reihenfolge innerhalb der Klassen selbst gibt es verschiedene Konventionen. Die Java Code Conventions von Oracle z.B. gibt vor:
- static-Attribute
- Instanzattribute
- Konstruktoren
- Methoden
Am Ende reine Geschmackssache, welche Reihenfolge/Konvention man bevorzugt.
Würdest du das aber eher als gut bezeichnen bzw. empfehlen oder hast du einen besser Tipp für mich. Kann es mir gut durch Naruto merken, weil Madara mit Hashirama Zellen broken geworden ist. Also du hast gesagt Präferenz, will Spaghetti Code vermeiden. Würde gerne wissen, ob das pratikable und gut ist für Anfänger bzw. auch Fortgeschrittene würde mich gerne immer an eine Reihenfolge halten bin sehr fixiert auf auswendig lernen.
In verschiedenen Popularitätsrankings (z.B. PYPL) dürfte Java immer noch ganz oben dabei sein. Der Markt ist also riesig, wenn auch vielleicht nicht so groß wie früher. JavaScript lernt mittlerweile jeder. Klar findet man auch da viele Jobs, wenn man gut ist, aber aus meiner subjektiven Sicht ist der Markt da übersättigt an Entwicklern. Etliche Systeme in der Wirtschaft (gerade Banken, Versicherungen, etc.) laufen noch auf Java und werden das auch noch für einige Jahrzehnte. Demnach halte ich es für keine dumme Idee, heutzutage Java zu lernen und dort einzusteigen. Meiner Meinung nach super Karriere-Chancen bei tendenziell sinkender Konkurrenz 👌🏻
Vielleicht als kleine Anekdote: Ich selbst habe als erste Programmiersprache JavaScript gelernt, arbeite aber mittlerweile vorwiegend als PHP-Entwickler. PHP gilt heutzutage bei vielen als unbeliebt und altmodisch und es gibt viel weniger Entwickler als früher. PHP hat trotzdem einen enorm hohen Marktanteil mit kritischen Systemen, die weiterentwickelt und gewartet werden müssen. Wenn man da halbwegs was drauf hat, kommt man da an super attraktive Jobs. Meiner Erfahrung nach viel leichter, als z.B. an einen äquivalenten Job, wo man mit JavaScript/React oder sowas arbeitet. Nur weil es modernere/beliebtere Technologien gibt, heißt das nicht, dass der Markt dafür automatisch besser ist.
Als Entwickler würde ich sagen: Insgesamt stimmt alles was da steht, wobei auch alle "Ausnahmen" dort zumindest für mich die Regel sind.
Dürfte ich etwas anderes Fragen, sry das ich jetzt so viel nachhake. Allerdings was sind Konstante, Events und Properties. Kann auch ChatGPT fragen, aber eine Erklärung wäre trotzdem nicht falsch und nett. Muss aber nicht Danke. Overall eine Frage ich schaue mir momentan Java an, wäre es intelligenter sich Javascript anzusehen? Oder Java bei der jetzigen Marktsituation? Hast du eine Ahnung?