Dienstag, 8. September 2015

August 2015 - Java

Im neuen Semester behandeln wir in der Schule das Modul 226 "Objektorientiert entwerfen und implementieren". Momentan geht es in diesem Modul um die Java Programmierung. Als IDE verwenden wir Eclipse.


Java

Java ist eine objektorientierte Programmiersprache, die 1995 von Sun Microsystems entwickelt wurde. 2010 wurde die Firma von Oracle aufgekauft. Die Java Technologie besteht grundsätzlich aus dem Java-Entwicklungswerkzeug (JDK) zum Erstellen von Programmen und der Laufzeitumgebung (JRE), für die Ausführung der Programme. JRE umfasst sowohl die Bibliotheken als auch die virtuelle Maschine (JVM).  Zweck der Virtualisierung ist die Plattformunabhängigkeit. Das erstellte Programm soll so ohne weitere Änderungen auf jeder unterstützten Rechnerarchitektur laufen können. Von Oracle selbst unterstützte Betriebssysteme sind: Windows, OS X, Linux und Solaris. Andere Hersteller lassen eigene Java-Laufzeitumgebungen für ihre Plattform zertifizieren.
Beim Ausführungsvorgang kann die JVM den Code interpretieren und ihn bei Bedarf kompilieren und auch optimieren.
Java gehört zu den populärsten Programmiersprachen nach C.

Grundkonzepte

Die hauptsächlichen Ziele beim Entwurf von Java waren:
- einfache, objektorientierte Programmiersprache
- robust und sicher
- architekturneutral und portabel
- sehr leistungsfähig
- interpretierbar und dynamisch


Syntax

Die Syntax von Java ist leicht verständlich und ist in der "Java Language Specification" von Oracle dokumentiert.

Beispiel eines einfachen "Hallo Welt"-Programms, das den Text auf der Konsole ausgibt:

 public class HalloWelt {
     public static void main(String[] args) {
         System.out.println("Hallo Welt!");
     }
 }

Datentypen

In Java gibt es zwei Datentyparten: - primitive Datentypen
                                                    - Referenzen


Primitive Datentypen:
Es gibt acht verschiedene primitive Datentypen. Sie unterscheiden sich in Grösse und Eigenschaften. Alle diese Datentypen verfügen über eine fest definierte Grösse, die für alle Plattformen gleich ist.










Typumwandlung:

Alle numerischen Datentypen lassen sich verlustfrei in den nächstgrösseren Datentyp umrechnen. So kann zum Beispiel ein "int" ohne speziellen Operator in ein "long" umgewandelt werden:

        int   i = 255;
        long l = i;



Umgekehrt funktioniert dies jedoch nicht einfach so. Um beispielsweise einen "long" in einen "int" umwandeln zu können, benötigt man den Typumwandlungsoperator. Dabei können jedoch auch Informationen verloren gehen:

        long l = 12345678901;
        int   i =  (int) l;


"boolean" kann in keinen anderen Datentypen umgewandelt werden. Datentypen vom Typ "char" können in jeden ganzzahligen Typ ab "int" umgewandelt werden.


Referenzen:
Alle Objekte und Felder werden über eine Adresse referenziert. In Java ist der Objektzugriff über Referenzen implementiert. In der Sprachdefinition werden sie als "Reference Values" bezeichnet. Das soll verdeutlichen, dass sie durch "Call-by-Value" übergeben werden.

Beispiel:

Object a = new Object() 

Ein neues Objekt wird erstellt, auf das die Referenz "a" referenziert.

Object b = a;            

Eine neue Referenz "b" wird erstellt und referenziert auf dasselbe Objekt wie "a".


Methoden

Das eigentliche Verhalten von Objekten wird in Methoden definiert. Die Methodensignatur besteht aus ihrem Namen und den Typen ihrer Parameter. Zusätzlich hat jede Methode einen bestimmten Rückgabetyp oder es wird "void" verwendet, wenn sie nichts zurückgeben soll.


Beispiel einer Methode:

 public static double summe(double a, double b)
    {
        return a + b;
    }


"a" und "b" sind hier die Parameter, die übergeben werden. Die Methode addiert die übergebenen Parameter und gibt das Resultat als "double" zurück.


Arrays

In Java ist ein Array ein eigenständiges Objekt. Dieses kann Elemente eines bei der Deklaration festgelegten Datentyps aufnehmen. Dazu muss die Länge des Arrays angegeben werden, die beschreibt, wie viele Elemente das Feld besitzen kann. Die Grösse eines Arrays ist fix und kann nach der Instanziierung nicht mehr geändert werden. In Java gibt es eigentlich keine mehrdimensionalen Arrays, es ist jedoch möglich, mehrdimensionale Arrays zu erstellen, indem man Arrays in Arrays verschachtelt.

Beispiel zur Deklaration:

int[] array = new int[3];

Auf der linken Seite des "=" wird die Objektreferenz deklariert und auf der rechten Seite wird das Feld mit der angegebenen Grösse initialisiert.

Um das Array nun mit Elementen zu füllen, macht man folgendes:

int[] array = new int[3];
array[0]=1;
array[1]=2;
array[2]=3;


Die Werte in den eckigen Klammern sind die jeweiligen Indexe. Der Index muss angegeben werden, um auf den gewünschten Wert zugreifen zu können.



Verzweigung

Wie in vielen anderen Sprachen gibt es auch in Java eine if/else-Verzweigung. Die Bedingung muss in Java ein boolescher Wert (true oder false) sein, was bei anderen Sprachen wie etwa C nicht unbedingt der Fall sein muss. Des Weiteren gibt es in Java das Schlüsselwort "then" nicht. Das Schlüsselwort "else" ist, wie in den meisten Programmiersprachen üblich, nur optional.

Syntax:


if (<Bedingung>)
    <Anweisung>;
else
    <Anweisung>;


Eine weitere Möglichkeit, eine Verzweigung in ein Programm einzubauen, ist die Fallunterscheidung mit "switch" und "case". Die Syntax ist folgende:

switch (''Ausdruck'') {
   case ''Konstante1'': ''Anweisung1''; break;
   case ''Konstante2'': ''Anweisung2''; break;
   default: ''Anweisung3'';
}

Trifft eines der "case" zu, wird die Anweisung darin ausgeführt. Danach folgt ein "break", da sonst der weitere Code auch noch ausgeführt werden würde.
"default" wird ausgeführt, falls keines der "case" zutreffen sollte.





Keine Kommentare:

Kommentar veröffentlichen