OOP Umstieg auf Java

Happy

Mitglied
Hallo Community,

seit einigen Jahren programmiere ich mit Javascript, PHP und hin und wieder in .NET.
Nun möchte ich Java erlernen. Da Java eine stark objektorientierte Sprache ist, habe ich natürlich meine Schwierigkeiten, da ich vorher noch nie objektorientiert programmiert habe.
Mein Problem liegt darin, dass ich mir noch nicht diese objektorientierte Denkweise eingeprägt habe und bisher nur strukturiert programmiert habe.
Ich weiß nicht, wie ich ein Programm schreiben könnte um es "korrekt" aufzuteilen.

Ich habe mir schon so einiges durchgelesen, mir geht es nicht um Grundlagen wie "Was ist eine Klasse, eine Methode, oder Vererbung?", sondern eher, wie ich ein Programm aufteile.

Hättet ihr einige Denkanstöße, die mir helfen können?
Habt ihr Programmideen für mich, die Wert auf Objektorientierung legen und könntet ihr mir, wenn ich meinen Quelltext dann poste, mir zeigen, wo ich etwas besser machen kann?

Ich hoffe, ich habe mich einigermaßen verständlich ausgedrückt, und dass ihr mir helfen könnt.

Mit freundlichen Grüßen
Happy
 
MVC bzw ähnliches ist ne gute frundtrennung, an und für sich sit das einfachste einfach nen programm zu schreiben und dann mal hier zu posten und zu fragen wo man das verbessern könnte (Darf natürlich nicht zu komplex sein). Wenn du eine Aufteilung machst versuche einfach folgendes immer zu überlegen.
Warum Mache ich hierraus eine componente?
Was ist die funktion dieser Componente?
Was ist das minimale was diese Componente wissen muss?

Zudem wenn du es noch nicht kennst guck die das Observer pattern an, da du dies in oop oft brauchen wirst. (Es macht auch ohne oop sinn btw)
 
Geek And Poke: Teaching OO 😀

Ich glaube, recht naheliegend (schon fast ZU nahe liegend) ist es, irgendwas zu schreiben, was irgendwelche Objekte aus der realen Welt modelliert. MVC... Naja... siehe obiger Link: Was sollte man sich in der realen Welt unter einem "Controller" vorstellen? (Ein Buchhalter, der befördert wurde, ja...). Also, irgendwelche Pseudo-Spiele (nicht graphisch, einfach nur das Modell) wo es eben Spieler und Gegner und Waffen und Power-Ups gibt, oder die GANZ üblen Klassiker wie der Zoo (ja, "Hund" ist ein "Tier" und "Tier" ist ein "Lebewesen" ... 😉 ) oder die Lagerverwaltung...
 
Wie wäre es mit Snake?

Ohne Auswahlmenü oder Optionen. Nur, dass man beim Start des Programmes direkt losspielt.

Hättet ihr Vorschläge (eventuell Pseudocode, wenn ihr möchtet), was ich wo und wie unterbringen kann?

Vielen Dank im Voraus
Happy
 
Ein Spiel eignet sich ja mal gar nicht dazu um OO zu lernen. Hier bist du mehr mit iwelchen Berechnungen beschäftigt und nebenbei das in OO.

Mach doch einfach einen kleinen Kalender.
 
verstehe die frage eigentlich nicht ...
grade .NET, oder besser : speziell C#, ist genau so OOP wie java (man kann C# als M$-variante von java sehen, beide haben jedenfalls einen großen einfluss auf den jeweils anderen) ...
auch PHP kann man OOP mäßig schreiben (macht man irgendwie automatisch so bald man eine OOP sprache wie java drauf hat und weis wie man in PHP OOP schreibt) ...

in JS sieht das ganze schon etwas anders aus ... es gibt zwar ganz leichte ansätze ... aber wirklich OOP kann man das nicht nennen ...
 
[OT]
gerade .NET, oder besser : speziell C#, ist genau so OOP wie java (man kann C# als M$-variante von java sehen, beide haben jedenfalls einen großen einfluss auf den jeweils anderen)
:lol: Da fragt man sich doch, ob C# die Reste der damaligen MS-JVM (decased 2007) sind... aus dieser wurde J# und dann C#.[/OT]
So strikt OOP-Programmieren wird man wohl auch in Java nicht hinbekommen, irgendwann kommt man um den Fallback auf statische Objekte und Methoden nicht drum rum, z.B. System.out, -.in und/oder -.err, die Math-Utils usw. Es wird aber deutlich weniger als in PHP und ganz anders als in Javascript. Während es in JS afaik keinen unterschied zwischen statischen und Instanzmethoden gibt, kann man es in Java vergessen, Instanzmethoden auf eine Klasse bezogen aufzurufen.
 
Hast du das verlinkte Comic gesehen...!? ???:L Ich weiß ja nicht, ob eine Schlange und Früchte nicht eher OO sind, als eine Woche mit Tagen oder so, aber .... letztlich muss es der TO entscheiden...

Ich sagte ja nicht, dass es nicht OO wäre. Ich sagte nur, dass es sich zum lernen nicht so gut eignet.

Dann lieber etwas, wo die Fachlichkeit gering ist. Und durch den Comic bin ich dann wohl Unterschwällig auf "Kalender" gekommen ^^
 
Ich denke, die Berechnungen in Snake halten sich gering.
Ich habe Snake übrigens schonmal in einer anderen Sprache programmiert, jedoch nicht objektorientiert.

Natürlich gibt es nicht das perfekte Beispiel, an dem man alles relevante der OO lernt.
Ich denke, eine Vielzahl an Beispielen hilft, zu verstehen, wie man etwas in der OOP programmiert.

Marcinek hat gesagt.:
Hier bist du mehr mit iwelchen Berechnungen beschäftigt und nebenbei das in OO.
Nun ja, das ist eventuell auch gar nicht mal so schlecht. Die Berechnungen bei einem Spiel wie Snake halten sich in Grenzen, und dadurch, dass ich Snake schon einmal in einer strukturierten Programmiersprache geschrieben habe, denke ich, könnte ich erkennen, wie man es in der OOP anders macht.
Wahrscheinlich sind das für euch komplett selbstverständliche Sachen, die einem Umsteiger (in diesem Falle mir) jedoch helfen.

Zu tröööt: Natürlich, man kann in PHP und auch .NET objektorientiert programmieren. Mir geht es jedoch nicht um "Ich möchte objektorientiert programmieren, aber mit den Sprachen, die ich kenne, geht es nicht.". Ich habe bisher immer mit diesen Sprachen nicht objektorientiert geschrieben, auch, wenn sie diese Möglichkeiten (größtenteils) bieten. Und nun möchte ich Java erlernen, und mir auch direkt einen guten Programmierstil in dieser Sprache angewöhnen.


Von meiner Seite aus denke ich, dass ein Projekt wie Snake nicht zu klein, jedoch noch überschaubar ist. Wie würdet ihr ein Projekt wie Snake aufbauen? Mir geht es in erster Linie nicht um Java-Code, sondern um den Aufbau, was man wo unterbringt.

Vielen Dank im Voraus
Happy
 
Aus was besteht ein Simples Snake denn?

Spielfeld
Schlange (die vielleicht aus vielen Schlangengliedern besteht)
Früchte

dazu dann im MVC Stil
KeyBoardController der Tastatureingaben verarbeitet
ein View das das Spiel in irgendeiner form dastellt (und wenn es erstmal nur ein haufen zeichen in der console sind)
"Spiel" das alles kontrolliert und zb Früchte generiert, aktuelle Punkte zählt,

schön wären noch
Spieler hat einen Persönlichen Highscore
HighscoreListe hat die besten Highscores
Highscore

sjbrown's Guide To Writing Games
bau einfach das in java nach 🙂
 
Gerade Spiele sind oft nicht normales oop sondern Entity basiert. (was mehr ein sonderfall der oop darstellt)


(Man versucht ehere composition statt inheritance zu nehmen, weil sonst das ganze ausartet)
OOP:
Ich habe nen object.
Ich habe unterklasse brennbares Object
ich habe unterklasse explodierendes Object.
Was würde ich nun tun bei einen brennenden explodierenden object?

Entity:
Ich habe nen object.
Ich habe das verhalten brennenbar.
Ich habe das verhalten explodierend.
Ich erstelle folglich ein normales object und füge das gewünschte verhalten hinzu.

Im normalen oop hat man zwar auch compositionen, aber eigentlich ist nicht das gesamte framework darauf aufgebaut.
 
Gerade Spiele sind oft nicht normales oop sondern Entity basiert. (was mehr ein sonderfall der oop darstellt)


(Man versucht ehere composition statt inheritance zu nehmen, weil sonst das ganze ausartet)
OOP:
Ich habe nen object.
Ich habe unterklasse brennbares Object
ich habe unterklasse explodierendes Object.
Was würde ich nun tun bei einen brennenden explodierenden object?

Entity:
Ich habe nen object.
Ich habe das verhalten brennenbar.
Ich habe das verhalten explodierend.
Ich erstelle folglich ein normales object und füge das gewünschte verhalten hinzu.

Im normalen oop hat man zwar auch compositionen, aber eigentlich ist nicht das gesamte framework darauf aufgebaut.

Aber immerhin ist beides OOP. Was hat man den in nicht OOP-Sprachen? Ich habe ein Programm und verzweige entsprechend?
 

Neue Themen


Zurück
Oben