Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Azasel

unregistriert

1

30.11.2016, 18:08

Mit welcher Programmiersprache sollte ich arbeiten?

Moin, ich lerne derzeit wieder mit Java zu programmieren und irgendwie komme ich nicht mehr weiter.
Ich weiss echt gar nicht wo ich am besten anfangen sollte, ich habe einfach mal paar Stichpunke aufgeschrieben, die mir so eingefallen sind.

Zitat

Mich stört folgendes:

> Dieses lange "public static void main(String[] args)"
anstatt man einfach "void main(wozu ein Parameter?)" sagt
> Es gibt total viele vogefertigte Klassen, wo soll man da blos anfangen?
> Viele Wissenslücken obwohl ich sehr viel Zeit mit dem Lernen verbracht habe
> Viele Tutorials, auch YT Videos sind zu Allgemein und erklären zu einfach und die fortgeschrittenen sind wiederum zu schwer zu verstehen, weil da auf gar nichts eingegangen wird
> Java Docs sind mir allerding zu unverständlich
> OOP nervt, vielleicht weil ich da nicht so ganz durchblicke
>


Wieso ich überhaupt mit Java programmieren möchte?
> Der Programmierung sind wenig Grenzen gesetzt bzw. findt viele Anwendungsmöglichkeiten
> Ist sehr Populär
> Weil ich schon vor etwa 2 Jahren damit angefangen habe
> weil es sich gut für die 2d/3d Programmierung eignet
> um eines Tages mal eine Android App zu entwickeln

Aber ich muss dem wohl ein ende setzten, weil ich einfach nicht mehr voran komme, also suche ich nach etwas neuem.

Zitat

Meine Anforderungen:
> logisch Programmieren lernen(Ich finde Java Klassen unlogisch)
> Performance
> möglichkeit eine Android App mittels grafischer SDK zu programmieren
> soll sich für die 2d/3d Programmierung auch gut eignen, also Spiele


Danke

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

30.11.2016, 18:22

Wenn du nicht weiter kommst, stell doch konkrete Fragen zu den einzelnen Problemen die du hast, z.B. in diesem Forum. Wenn du schon viel Zeit investierst hast, aber nicht das Gefühl hast voran zu kommen, hast du evt. eine falsche Lernmethode. Ein Buch als Führung könnte helfen.

Deine Anforderungen treffen eigentlich genau auf Java zu (und jede Programmiersprache ist "logisch"). Daher würde ich sagen mach damit weiter. Scheiterst du mit dieser, scheiterst du vermutlich auch mit einer anderen.

Anmerkung: eine Sprache anhand ihrer Popularität zu wählen ist nicht unbedingt eine gute Idee. Speziell Java ist imo konzeptionell eher ein Fehlschlag, wird aber trotzdem weiter verwendet weil es weit verbreitet ist (Selbstzweck).

Azasel

unregistriert

3

30.11.2016, 19:00

Ein Buch als Führung könnte helfen.


Damit fing ich auch an, das Buch heist 'Java eine Einführung in die Programmierung' von Hanser Verlag und einmal 'Java für Kids'.
Aber bei den OOP Kapiteln bekomme ich sofort schlechte Laune.
Ich nenne mal paar Beispiele die mich stören:

Quellcode

1
2
3
4
void paint(Graphics g){
//Wieso eine Klasse als Parameter in einer Methode?
//Und wieso ruft sich die paintComponent() Methode von selbst auf?
}

Quellcode

1
2
setLayou(new FlowLayot());
//Ein Objekt wird in einem Parameter erzeugt?

Quellcode

1
2
3
4
5
class Beispiel1{
class Unterklasse{
//Wozu eine unterklasse?
}
}

und Buttons,Bilder,etc. werden erst geladen, nachdem ich die größe des Fensters mit der Maus verändere.

Scheiterst du mit dieser, scheiterst du vermutlich auch mit einer anderen.

Mit Pascal kamm ich bis her super zu recht, möchte damit aber nicht mehr so viel zu tun haben.

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

4

30.11.2016, 19:14

Klingt als sei das problem weniger Java als das Konzept von OOP an sich, du wirst die selben Fragen in jeder anderen Objectorientierten Sprache stellen. OOP ist ein sehr wichtiges Konzept, ohne wirst du nur sehr schwer weiter kommen weil man es ueberall findet und du auf vielen Platformen gezwungen bist es zu verwenden.

Ich wuerde empfehlen mit Java weiter zu machen, und OOP zu lernen. Vor allem wenn du in Richtung Android Apps gehen moechtest.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

30.11.2016, 19:18

Ich stimme DeKugelschieber an sich zu. Lern Java aber ruhig weiter. Wie er schon sagt, die Probleme wirst du woanders auch haben.
Mag sein dass Klassen erst mal komisch wirken. Damit kannst du am Ende aber viel cooles Zeug machen. Deine Probleme sind alle etwas unkonkret. Ich kann versuchen darauf einzugehen.
Wieso soll eine Methode eine Klasse als Parameter bekomme?
Also zuerst mal bekommt die Methode keine Klasse als Parameter sondern eine Instanz einer Klasse. Also ein konkretes Objekt vom Typ dieser Klasse. Warum soll man das machen? Dafür gibt es viele viele Gründe. Ich versuche es mal bildlich darzustellen. Du hast eine Methode die Daten in eine Datei schreiben kann. Das kann zum Beispiel ein Savegame sein, von mir aus aber auch andere Daten. Diese Methode bekommt jetzt die Datei als Parameter übergeben. Die Datei ist in deinem Programm eine Instanz einer Klasse die sich um die Behandlung der Datei kümmert. Behandlung der Datei sind so Dinge wie Datei öffnen, Daten schreiben, Datei schließen, und so weiter. Jetzt kann man argumentieren dass man das ganze umstrukturieren könnte und so auf den Parameter verzichten könnte. Das ist soweit auch richtig. OOP bringt einfach Ideen zur Abstraktion deiner Probleme mit sich. Mit der Zeit wird dir das klar. Wenn du also über Klassen ließt sei nicht angenervt sondern versuch dich darauf einzustellen. Am Anfang wird es dir noch schwerer fallen eigene Klassen zu designen und umzusetzen, oder auch nur deinen Code auf Klassen aufzuteilen. Mit der Zeit wird das immer einfacher und logischer für dich werden und dann wirst du auch sicherlich verstehen warum so viele Leute Klassen toll finden ;)

Wieso wird paintComponent aufgerufen?
Keine Ahnung. In deinem Code sehe ich nichts was etwas aufruft. Ich weiß nicht mal wo paintComponent her kommt. Da kann ich also erst mal nichts zu sagen. Ein gutes Buch sollte dir erklären was passiert und warum es passiert. Möglicherweise sind deine Bücher einfach schlecht. Das kann ich aber leider nicht beurteilen. Wenn du zu dem Problem etwas mehr Code zeigst kann ich oder jemand anders das bestimmt erklären.

Ein Objekt wird in einem Parameter erzeugt?
Jap, aber warum auch nicht? Das wirkt erst mal komisch, ist es aber eigentlich gar nicht. Die Instanz die erzeugt wird wird als Parameter in die Funktion hinein gegeben. Wenn du die Instanz jetzt aber nur in der Funktion benötigst kannst du sie ja auch direkt "im Parameter" erzeugen. Anstatt "im" Parameter würde ich eher "als" Parameter sagen. Alternativ könntest du aber auch folgendes machen:

Quellcode

1
2
3
4
{
FlowLayout layout = new FlowLayot();
setLayou(layout );
}

Das wäre quasi gleichwertig.

Wozu eine Unterklasse?
Dafür ist dein Beispiel zu kurz. Das was du da zeigst nennt sich innere Klasse oder auf englisch inner class. Normal benutzt man das wenn man die innere Klasse wirklich nur innerhalb dieser Klasse und nicht außerhalb benötigt. Ich selbst benötige das relativ selten und die Fälle in denen ich es benötige sind vermutlich schwierig zu diesem Zeitpunkt zu erklären. Wenn du solche Dinge nicht verstehst kannst du dir das an sich erst mal an einem konkreten Beispiel erklären lassen. Ansonsten reicht es manchmal aber auch aus wenn du einfach weißt dass es das gibt und sobald du es mal irgendwo siehst (außerhalb von schlechten Lehrbuchbeispielen) dann versuchst du es am konkreten Beispiel noch mal zu verstehen. Möglicherweise fällt das dann einfacher weil du dann mehr Erfahrung hast und viele andere Dinge klarer sind.

An sich können wir also festhalten:
Wir helfen dir gerne bei konkreten Fragen.
Wenn du deine Fragen von oben weiter konkretisierst können wir mehr dazu sagen.
Ein gutes Buch kann dir helfen den richtigen Einstieg zu finden.
Manchmal ist es ok etwas nicht direkt zu verstehen. Am besten andere Leute fragen ob sie es erklären können.

Ich hoffe ich konnte ein wenig weiterhelfen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Tobiking

1x Rätselkönig

  • Private Nachricht senden

6

30.11.2016, 19:49

Das mit den Aufrufen von paintComponent ist der Repaint Mechanismus. Sobald ein Element des Fensters invalide wird (z.B. Ändern der Größe, Überdecken durch andere Fenster etc.) muss sie sich wieder neu in das Fenster zeichnen. Für einen Anfänger kann es durchaus merkwürdig sein, dass die Funktion gefühlt aus dem Nichts aufgerufen wird, da sie über Events getriggert wird. Das ist aber recht üblich wenn man mit GUIs zu tun hat und hat wenig mit der Sprache zu tun. Deswegen würde ich einem Anfänger auch nicht empfehlen direkt an GUI Geschichten zu gehen, wenn davor noch Verständnis fehlt. Sowas wie Nebenläufigkeit/Multithreading sollte zumindest ein Begriff sein, sonst wundert man sich bei der GUI Entwicklung dauernd über merkwürdige Fehler.

Das mit dem Repaint erklärt übrigens auch warum Elemente erst sichtbar werden wenn du das Fenster vergrößerst. Wenn du kein repaint auf dem Element/Fenster aufrufst, wird paintComponent erst aufgerufen wenn eins der oben genannten Events auftritt. Und es wird nur dann gezeichnet wenn paintComponent aufgerufen wird.

Azasel

unregistriert

7

30.11.2016, 19:49

Deine 3 Beispiele sind sehr verständlich erklärt, danke.

Wozu eine Unterklasse?
Dafür ist dein Beispiel zu kurz. Das was du da zeigst nennt sich innere Klasse oder auf englisch inner class. Normal benutzt man das wenn man die innere Klasse wirklich nur innerhalb dieser Klasse und nicht außerhalb benötigt. Ich selbst benötige das relativ selten und die Fälle in denen ich es benötige sind vermutlich schwierig zu diesem Zeitpunkt zu erklären. Wenn du solche Dinge nicht verstehst kannst du dir das an sich erst mal an einem konkreten Beispiel erklären lassen.

Das reiht mir als Begründung vollkommen aus, die Frage war nur allgemein gestellt, ein Beispiel ist dafür nicht notwendig gewesen.

Zu paintComponent()
In meinem Buch wird das so begründt, das Java an sich nicht Schuld daran sei, das die Methode automatisch ausgeführt wird, sondern der Windows Fenster Manager oder wie sich das nennt.

Ich hoffe ich konnte ein wenig weiterhelfen.

Auf jeden fall ^^

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

8

30.11.2016, 19:49

Zu den inneren Klassen in Java sei noch erwähnt, dass du dies nicht nur nicht oft brauchst, sondern auch vermeiden solltest wo es geht (schlechter Stil).

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

9

30.11.2016, 20:01

Zu paintComponent()
In meinem Buch wird das so begründt, das Java an sich nicht Schuld daran sei, das die Methode automatisch ausgeführt wird, sondern der Windows Fenster Manager oder wie sich das nennt.

Da hat Tobiking ja eine schöne und gute Antwort zu abgegeben. Der Fenster Manager ist an sich einfach ein Stück Software welches schon geschrieben wurde. Das du mit so etwas konfrontiert wirst ist auch völlig normal. Du wirst immer Code und Klassen haben die entweder schon mit der Sprache, deren Standardbibliothek oder eben von anderen Entwicklern kommen. Am Anfang mag das erst mal überfordern. Deshalb nimm dir Tobikings Tipp zu herzen. Lass erst mal von GUI und dem Zeug weg und fang leichter an.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

10

30.11.2016, 22:53

Zu den inneren Klassen in Java sei noch erwähnt, dass du dies nicht nur nicht oft brauchst, sondern auch vermeiden solltest wo es geht (schlechter Stil).

Jup, besonders seit es Lambdas gibt sind anonyme und innere Klassen in vielen Fällen überflüssig..
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Werbeanzeige