Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Both sides previous revision Previous revision | |||
basics:programming [2015/04/01 21:15] llandyl [Objektorientierte Programmierung] |
— (aktuell) | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Programmierung ====== | ||
- | Wer ein handfestes Computerspiel entwickeln will, muss früher oder später in irgendeiner Form programmieren. Zwar gibt es Baukastensysteme, in denen man einfache Spiele auch ohne Programmierkenntnisse zusammenklicken kann. Spätestens sobald man aber eigene Gameplay-Features einbauen will, muss man sich mit Skript- und Programmiersprachen und den zugrundeliegenden Entwicklungsparadigmen auseinandersetzen. | ||
- | |||
- | ===== Programmierparadigmen ===== | ||
- | |||
- | ==== Prozedurale Programmierung ==== | ||
- | |||
- | |||
- | ==== Funktionale Programmierung ==== | ||
- | |||
- | ==== Objektorientierte Programmierung ==== | ||
- | |||
- | Ein Großteil der aktuellen Programmiersprachen wie Java, C#, C++, Ruby, u. a. basiert auf dem objektorientierten Programmierparadigma, das heißt der Code eines Programms wird nicht einfach in einem großen Block hintereinander weg geschrieben oder auf einzelne Funktionen verteilt, sondern die Programmlogik entsteht durch die Interaktion von Objekten, die über Eigenschaften und Methoden verfügen. Dadurch wird es einfacher, realweltliche Zusammenhänge zu abstrahieren und in Code zu fassen. Ein einfaches Beispiel für ein Objekt: Ein Hund hat einen Namen und eine Fellfarbe (Eigenschaften), er kann rennen, bellen, fressen und das Bein heben (Methoden). | ||
- | |||
- | In den meisten objektorientierten Sprachen programmiert man sogenannte [[basics:programming:oo:class|Klassen]], die [[basics:programming:oo:object|Objekte]] eines bestimmen [[basics:programming:oo:type|Typs]] beschreiben. Konkrete Objekte werden als [[basics:programming:oo:instance|Instanzen]] einer Klasse erzeugt. Eine Klasse ist dabei sowas wie ein Rezept für einen Schokokuchen, die Instanzen sind die fertigen Schokokuchen, die nach dem Rezept gebacken wurden. Weil sie alle nach dem gleichen Rezept gebacken wurden, haben sie, nachdem sie aus dem Ofen kommen, alle den gleichen Inhalt, den gleichen Geschmack, die gleiche Form und haben gleich viele Stücke. Wenn sie dann aber zur [[basics:programming:runtime|Laufzeit]] der Party auf dem Tisch stehen, können Instanzen der Mensch-Klasse individuell auf jedes Kuchenobjekt individuell zugreifen und sich mal hier, mal da ein Stück holen. Bei jedem Zugriff ändert sich der innere [[basics:programming:oo:state|Zustand]] des jeweiligen Kuchenobjekts; danach hat er ein Stück weniger. Nach einiger Zeit sehen die Kuchen also ziemlich unterschiedlich aus. Wenn man aber den Gastgeber fragt, von welchem Typ eines der Kuchenobjekte ist, wird der trotzdem jedes Mal sagen: "Schokokuchen". | ||
- | |||
- | === Ein Codebeispiel === | ||
- | Angenommen wir wollen ein Spiel schreiben, in dem Kinder virtuelle Haustiere aufziehen können. Der Computer weiß grundsätzlich erstmal nicht, was ein Tier, geschweige denn z. B. ein Hund ist. Damit er welche simulieren kann, müssen wir es ihm sagen, d. h. wir müssen eine Hund-Klasse programmieren. Dazu müssen wir uns erstmal überlegen, was einen Hund ausmacht. Praktischerweise haben wir das schon im ersten Absatz gemacht und dabei auch gleich die Eigenschaften von den Methoden unterschieden. Eine Hundeklasse könnte in Java z. B. so aussehen: | ||
- | |||
- | <code java> | ||
- | public class Hund { | ||
- | | ||
- | private String name; | ||
- | private java.awt.Color fellfarbe; | ||
- | | ||
- | public void bellen() { | ||
- | System.out.println(this.name + " sagt \"Wuff!\""); | ||
- | }; | ||
- | | ||
- | public void rennen() { | ||
- | System.out.println(this.name + " wetzt los."); | ||
- | }; | ||
- | | ||
- | public void fressen() { | ||
- | System.out.println(this.name + " sagt \"OMNOMNOMNOMNOM!\""); | ||
- | }; | ||
- | | ||
- | public void beinHeben() { | ||
- | System.out.println(this.name + " strullt in die Ecke."); | ||
- | } | ||
- | | ||
- | } | ||
- | </code> | ||
- | ===== Programmiersprachen ===== | ||
- | |||
- | Die Programmiersprachen, die am häufigsten bei der Spieleprogrammierung zum Einsatz kommen, sind [[basics:programming:language:c|C]], [[basics:programming:language:c++|C++]], [[basics:programming:language:csharp|C#]], [[basics:programming:language:java|Java]] und [[basics:programming:language:ruby|Ruby]]. Bei den Skriptsprachen sind es [[basics:programming:language:python|Python]], [[basics:programming:language:lua|Lua]], [[basics:programming:language:javascript|JavaScript]] und [[basics:programming:language:actionscript|ActionScript]]. Für die Entwicklung von Browsergames kommt insbesondere [[basics:programming:language:javascript|JavaScript]] für das [[basic:web:client|clientseitige]] Frontend zum Einsatz, für das [[basic:web:server|serverseitige]] Backend vor allem [[basics:programming:language:php|PHP]], [[basics:programming:language:java:javaee|JavaEE]], [[basics:programming:language:csharp|C#]] oder [[basics:programming:language:ruby|Ruby]]. |