Java
Im Modul 326 - Objektorientiert entwerfen und implementieren haben wir mit der Programmiersprache Java angefangen Objektorientiert zu programmieren.
Java ist eine Objektorientierte Programmiersprache, wie z.B. C# und ist Plattformunabhängig. Das bedeutet jedes Programm, dass mit Java geschrieben wird sollte auf Linux, Microsoft usw. lauffähig sein.
Das Ganze funktioniert so, dass der geschriebene Code in einen Bytecode kompiliert wird, welcher beim Starten des Programms von der Java Virtual Machine gelesen und ausgeführt wird.
Wie üblich lernten wir erst mal grundsätzlich die Syntax kennen, welche sehr ähnlich ist wie die von C#. Auch einige Funktionen wie System.Out.Println() (Gibt eine Zeile aus) und die Entwicklungsumgebung Eclipse lernten wir kennen.
Was jedoch besonders wichtig ist in Java sind die Referenzen, oder zumindest habe ich das Gefühl dass es wichtig ist, erst mal zu verstehen, wie das genau funktioniert. Es kam immerhin bereits in einem Test und weiss man nicht wie das funktioniert, kann einiges schief gehen.
Angenommen ich hätte eine Point-Klasse, welche die Variablen x und y besitzt.
Wenn ich nun ein Objekt über eine Variable instanziiere, ist die Variable nur eine Referenz auf das eigentliche Objekt. Wenn ich nun den Wert dieser Variable einer weiteren Variable zuweise, zeigen diese auf das gleiche Objekt, Sie haben also die gleiche Referenz.
Hier ein kleines Beispiel zur Erklärung:
Point p1 = new Point(10,10) ; // 1Objekt instanziiert, Variable p1 als Referenz zugewiesen
Point p2 = p1; // 2. Variable auf dasselbe Objekt referenziert
p1.x = 5; // Ändert den x-Wert des Objekts
System.Out.Println(p2.x); // Gibt den x-Wert von p2 aus
Hier wird nun 5 Ausgegeben obwohl ich ja den x-Wert von p1 geändert habe.
Das bedeutet dass beide Variablen auf dasselbe Objekt zeigen und ich über p1 die Werte von p2 ändern kann und umgekehrt.
Was genau das bringen soll ist mir eigentlich nicht ganz klar.
Was bringt es, wenn ich die gleichen Werte über 2 Namen ansprechen kann?
Viel sinnvoller würde es mir erscheinen, wenn die beiden Variablen anschliessend nicht dieselbe Referenz haben, damit ich beide einzeln modifizieren könnte, aber das ist nun mal nicht der Fall.
Viel mehr nur Java-Bezogenes lernten wir noch nicht. Dafür begannen wir aber mit der Objektorientierung.
Objektorientierung
Zuerst muss man natürlich wissen, dass alles mit Klassen, Objekten, Eigenschaften und Methoden aufgebaut ist.
Eine Klasse ist eine allgemeingültige Beschreibung von Dingen, die in verschiedenen Ausprägungen vorkommen können, aber alle eine gemeinsame Struktur und ein gemeinsames Verhalten haben. Sie ist also ein Bauplan für die Erzeugung einzelner Ausprägungen. Diese Ausprägungen bezeichnet man als Objekte.
Normalerweise hat eine Klasse nun Eigenschaften und Methoden.
Das ganze zeige ich nun an einem kurzen Beispiel auf:
Ein Auto ist eine Klasse also der allgemeine Bauplan.
Die Klasse Auto hat nun natürlich auch mehrere Eigenschaften wie Lackfarbe, PS, Länge usw.
Ebenfalls hat sie Methoden, also Funktionen welche die Klasse ausführen kann, z.B. Fahren.
Der Sinn hinter dem Objektorientierten Programmmieren ist es nun, alles in solche Objekte zu verschachteln, damit man so die Komplexität von Softwarelösungen in den Griff bekommt.
Hier kommen nun die Stichwörter Vererbung und Abgeleitete(Sub-) bzw. Basis-(Super-)Klasse ins Spiel.
Es geht darum dass es von Klassen wie Autos auch Subklassen gibt, welche zwar die Eigenschaften und Methoden der Klasse Auto haben, diese Jedoch möglicherweise leicht verändert brauchen oder zusätzlich andere Eigenschaften und Methoden haben.
Durch die Vererbung bekommen Subklassen dieselben Eigenschaften und Methoden wie ihre Basisklassen.
Am besten zeige ich das anhand eines Beispiels:
Wir überlegen nur theoretisch, was es braucht, um Figuren wie Dreiecke, Linien, Rechtecke oder Kreise zu zeichnen(natürlich digital).
Zu allererst überlegen wir uns: was haben diese 4 Figuren gemeinsam?
Das einzige was mir hier in den Sinn kommt: sie brauchen eine Position, wo sie gezeichnet werden.
Ebenfalls müssen sie Gezeichnet werden.
Das ist nun unsere erste, also unsere Basis-Klasse: Figur
Sie hat 2 Variablen und zwar die "x" und die "y" Variable. Damit kann man nun die Position angeben.
Zusätzlich habt sie auch eine Methode "Zeichnen", mit der sie gezeichnet wird.
Den ganzen Code werde ich nun natürlich sehr vereinfacht schreiben.
Code:
public class Figur
{
int x;
int y;
public void Zeichnen();
}
Dreick, Linie, Rechteck und Kreis werden nun als Subobjekte vom Objekt Figur erstellt.
Dazu schreibt man hinter den Klassennamen extends "Basisklasse" hin. Beispiel:
public class Dreieck extends Figur{}
Alle Subklassen haben nun ihre eigene Spezialisierung der Basisklasse.
Die Linie braucht z.B. bloss einen weiteren Punkt.
Das Rechteck hingegen braucht eine Länge und eine Breite.
Der Kreis zusätzlich einen Durchmesser.
Das Dreieck 2 weitere Punkte.
Ebenfalls wird in jeder Subklasse die Methode "Zeichnen" der Basisklasse überschrieben.
Dazu muss in der Subklasse bloss eine Methode erstellt werden, welche den exakt selben Namen hat wie die in der Basisklasse.
Natürlich kann man über eine Objekt einer Subklasse immer noch auf die Methoden der Basisklasse zugreifen, jedoch muss ich hier auch mal Schluss machen, da das ein riesiges Thema ist.
Freitag, 30. September 2011
Abonnieren
Posts (Atom)