Objektorientierte Programmierung: Unterschied zwischen den Versionen

Aus CCWiki
Zur Navigation springen Zur Suche springen
Zeile 36: Zeile 36:


== Klasse ==
== Klasse ==
Eine '''Klasse''' kann man sich wie eine Vorlage vorstellen. Aus dieser Vorlage können '''Instanzen''' erstellt werden.
Eine '''Klasse''' kann man sich wie eine Vorlage vorstellen. Aus dieser Vorlage können '''Instanzen''' mittels des Schlüsselworts '''new''' erstellt werden.
=== Konstruktor ===
=== Konstruktor ===
Jede '''Klasse''' hat einen Konstruktor, ist dieser leer, d.h. er nimmt keine Parameter, muss dieser nicht geschrieben werden. Der Konstruktor heißt immer gleich wie die Klasse selbst.
Jede '''Klasse''' hat einen Konstruktor, ist dieser leer, d.h. er nimmt keine Parameter, muss dieser nicht geschrieben werden. Der Konstruktor heißt immer gleich wie die Klasse selbst.
Zeile 46: Zeile 46:
}
}
...
...
//Instanz von Animal erstellen
Animal a = new Animal();
Animal a = new Animal();
</syntaxhighlight>
</syntaxhighlight>
Zeile 58: Zeile 59:
}
}
...
...
//Instanz von Animal erstellen
Animal a = new Animal("Alfons");
Animal a = new Animal("Alfons");
</syntaxhighlight>
</syntaxhighlight>
=== Attribute ===
Wir unterscheiden hier zwei Varianten von Attributen (Eigenschaften).
==== Instanz Attribute ====
<syntaxhighlight lang='java' line>
public class Animal {
  public String name;
}
</syntaxhighlight>
...
//Korrekter Zugriff
Animal a = new Animal();
System.out.println(a.name);
Jede Instanz verfügt über eigene Instanzvariablen, diese werden nicht untereinander geteilt.
==== Klassen Attribute ====
<syntaxhighlight lang='java' line>
public class Animal {
  public static double PI = 3.14;
}
//Korrekter Zugriff
System.out.println(Animal.name);
</syntaxhighlight>
Attribute die mit dem Schlüsselwort '''static''' gekennzeichnet werden, existieren nur einmal. Vereinfacht gesagt, diese Attribute sind an die Klasse und nicht an die Instanz gebunden.


== Abtsrakte Klasse ==
== Abtsrakte Klasse ==

Version vom 17. Januar 2021, 15:44 Uhr

Objektorientierte Programmierung

Java

Java ist eine Objektorientierte Programmiersprache. In einigen Punkten nimmt Sie die Objektorientierung nicht so streng wie andere Sprachen. Ein Beispiel hierfür wären die primitiven Datentypen. Somit ist in Java nicht alles ein Objekt.

Primitive Datentypen

In Java gibt es eine vielzahl von primitiven Datentypen. Sie unterscheiden sich darin, dass Sie kein Object sind. Sie haben keine Methoden und auch keine Attribute. Wird eine Variable mit einem primitiven Datentyp erstellt und dieser Variable ein Wert zugewiesen, so enthält diese Variable den wirklichen Wert und nicht nur eine Referenz auf das eigentliche Objekt:

//Variable a enthält den Wert 10
int a = 10;
//Variable b enthält nur den Verweis auf das Integer Objekt mit dem Wert 10
Integer b = Integer.valueOf(10);

Zu jedem primitiven Datentyp, gibt es einen entsprechende Klasse:

Entsprechende Klasse für primitive Datentypen
primitiver Datentyp Klasse
int Integer
float Float
double Double
char Character
boolean Boolean

Primitive Datentypen können automatisch in ihr entsprechendes Klassenäquivalent umgewandelt werden und natürlich umgekehrt. Dieser Prozess nennt sich Autoboxing. Dies ist vorallem von Vorteil, wenn mit Collections (Listen,...) gearbeitet wird, da diese nur mit Klassen funktionieren.

//Umwandlung der Zahl 10 in ein Integer Object
Integer b = 10;
//Integer Object wird in primitive Zahl 10 umgewandelt
int c = b;

Klasse

Eine Klasse kann man sich wie eine Vorlage vorstellen. Aus dieser Vorlage können Instanzen mittels des Schlüsselworts new erstellt werden.

Konstruktor

Jede Klasse hat einen Konstruktor, ist dieser leer, d.h. er nimmt keine Parameter, muss dieser nicht geschrieben werden. Der Konstruktor heißt immer gleich wie die Klasse selbst.

public class Animal {
  private String name;

  //Standardkonstruktor wird verwendet.
}
...
//Instanz von Animal erstellen
Animal a = new Animal();

Wollen wir nur beispielsweise garantieren, dass ein Animal bei der Instanzierung einen Namen hat, so könnten wir den Konstruktor verändern.

public class Animal {
  private String name;

  public Animal(String name) {
    this.name = name;
  }
}
...
//Instanz von Animal erstellen
Animal a = new Animal("Alfons");

Attribute

Wir unterscheiden hier zwei Varianten von Attributen (Eigenschaften).

Instanz Attribute

public class Animal {
  public String name;
}

... //Korrekter Zugriff Animal a = new Animal(); System.out.println(a.name); Jede Instanz verfügt über eigene Instanzvariablen, diese werden nicht untereinander geteilt.

Klassen Attribute

public class Animal {
  public static double PI = 3.14;
}
//Korrekter Zugriff
System.out.println(Animal.name);

Attribute die mit dem Schlüsselwort static gekennzeichnet werden, existieren nur einmal. Vereinfacht gesagt, diese Attribute sind an die Klasse und nicht an die Instanz gebunden.

Abtsrakte Klasse

Interface

Vererbung

Implementierung

Instanz vs Klasse

Sichtbarkeit

Multithreading