Bin ich zu dumm fürs programmieren?

11 Antworten

Kommt auf deinen Lerntyp an. Wenn du dir Dinge eher verbildlichst, dann stell dir Klassen etc. einfach als Dinge des realen Lebens vor.

Klasse Auto, hat Methoden fahren und parken. In der Familie gibt es zwei Autos, Auto 1 und Auto 2. Das sind jeweils "Instanzen", also "Produkte aus Auto". Nach diesem Schema kannst du versuchen, dir andere Bereiche der OOP anzueignen.

Woher ich das weiß:Studium / Ausbildung – Masterstudium Elektrotechnik - Schwerpunkt Embedded Systems

Niemand ist zu dumm fürs Programmieren. Wenn du trotz Bemühungen nichts verstehst, liegt das wahrscheinlich daran, dass du aus einer falschen Quelle lernst. Ich selbst hatte anfangs das gleiche Problem wie du, weil ich zum lernen nur Youtube-Tutorials verwendet habe, die mich nicht ẃeiterbrachten.

 

Ich hoffe, du hast durch das Lernen mit einem Buch mehr Erfolg. Bei mir hat es jedenfalls geklappt. Das Buch, mit dem ich  Java (meine erste Sprache) gelernt habe, ist übrigens "Programmieren lernen mit Java" vom Rheinwerk-Verlag.

Naah. Das muss nur einmal richtig klick machen. Die Antwort von Peter lustig ist super.

Ich stelle mir Klassen ähnlich vor. Sie beschreiben quasi Dinge. Und diese Dinge können was. (Methoden) 

Ich geb dir noch ein zweites Beispiel: nehmen wir das Spiel Schiffe versenken.

Wir haben 2 Spieler. 2 Spielfelder und Schiffe.

Spieler Spielfeld und Schiff kann man als Klassen definieren.

Jeder Spieler hat ein eigenes Spielfeld. (Eine Instanz der Klasse in der Spieler Klasse. 

Spielfeld owngameboard = New Spielfeld() )

In meinem Beispiel kennt der Spieler auch das Gegner Spielfeld.

Spielfelder haben Schiffe 

(z.b. ArrayList<Ship> Schiffe = New arraylist<ship>() )

Hier als Liste gespeichert. 

Die Schiffe selbst haben eine Eigenschaft trefferpunkte. 

Und eine Liste von x,y Koordinaten welche die Position darstellen.

Spieler können Auf dem Spielfeld Schiffe platzieren und einen Schuss auf das Spielfeld abgeben.

Z.b. die Methoden placeShip(x,y) und shootAt(x,y)

Diese Methoden über nehmen jeweils das platzieren und die entsprechende Logik dahin ter und saß Schüssen auf eine Koordinate des Spielfeldes.

Nur mal so als kleineres ausführliches Beispiel.

Man kann schön sehen das jede Klasse quasi eine Aufgabe über nimmt.

Zusätzlich kann man Klassen auch spezialisieren. Auch ableiten genannt.

Nehmen wir an wir haben eine Ship Klasse. Und wir wollen ein Schiff mit besonderen Eigenschaften. Z.b. battleship

Das battleship hat durch die Ableitung alle Eigenschaften eines Schiffes. In unserem Beispiel die trefferpunke.

Und sagen wir einen spezialskill oder einen Effekt der beim zerstören ausgeführt wird.

Z.b. die zusätzliche Methode: fireFooCannons.

In dem array auf dem Spielfeld kann man die battleships einfach reinpacken weil das array Schiffe hält.

Es sind halt selbst bei einem einfachen Java-Programm sehr viele anspruchsvolle Konzepte auf einmal, die allesamt erklärungsbedürftig sind und deren Notwendigkeit sich nicht auf Anhieb erschließt.

Da reicht es nicht, dass es einmal "Klick" macht. Das muss mindestens 20 mal "Klick" machen, bis es einmal "Klack" macht und man sich an diese Konzepte halbwegs gewöhnt hat.

Ich kenne viele - vor allem ältere - Entwickler, die sich nie mit der objektorientierten Programmierung angefreundet haben. Sie nutzen zwar Klassen, aber die Programmstruktur ist klassisch prozedural und bestenfalls als modularisiert zu bezeichnen.

Gut, was soll man empfehlen? Vielleicht tatsächlich erst mal mit einer einfachen Skriptsprache beginnen, wie MonkeyKing empfiehlt. Dann kann man sich zunächst auf die Basics konzentrieren: Variablen, Schleifen, Bedingungen, Ein-/Ausgaben, Modularisierung in Unterprogramme und Funktionen. Und erst in einem zweiten Schritt den objektorientierten Ansatz erlernen.

Oder den anderen Weg gehen und die ganzen "modernen" Konzepte einfach mal anzuwenden, ohne sie groß zu hinterfragen. Und erst in einem zweiten Schritt tiefer eintauchen und wirklich verstehen, warum das im Vergleich mit anderen denkbaren Alternativen sinnvoll ist.

Bei mir hatte es nicht lange gedauert, bis ich Java drauf hatte, da ich zuvor C und C++ sowie Python konnte. Das Prinzip der Objektorientierung ist gar nicht so kompliziert, wie man denkt. Man braucht nur eine gute Erklärung. Im Grunde simpel.

Eine Klasse ist ein Bauplan, der festlegt, was ein Objekt dieser Klasse kann und hat. Attribute und Methoden werden durch die Klasse festgelegt. Ein Objekt ist im Grunde nur eine Entität, die nach diesem Bauplan erstellt wurde. Sie besitzt für die durch die Klasse festgelegten Attribute Werte, die nicht denen eines anderen Objekts der gleichen Klasse ähneln müssen. Eine Methode ist eine Art und Weise, mit dem Objekt der Klasse zu interagieren und das Objekt zu manipulieren.

Nehmen wir ein Beispiel. Die Klasse Auto legt Attribute fest, die jedes Objekt der Klasse hat, solche Dinge wie den Verbrauch, die Motorleistung, was weiß ich, ich kenne mich nicht sonderlich gut mit Autos aus. Das Auto kann fahren, beschleunigen, oder bremsen, das wären also die Methoden. Ein Porsche, der ein Objekt dieser Klasse Auto ist, wird vermutlich andere Attributwerte haben, als ein älterer VW, trotzdem sind beides Objekte, die dem Bauplan "Auto" entsprechen.

Gruß

Woher ich das weiß:Berufserfahrung – Hauptberuflich IT-Consultant, Informatikstudium