Programmübersetzung: Binden und Laden Programmausführung: Interpreter Binder und Lader: • Zusammenfassen verschiedener Maschinencode-Fragmente (mit relativen Adressen) zu einem ausführbaren Programm (z.B. Code aus Bibliotheken und eigener Code) • Umwandeln relativer in absolute Adressen und Laden des Programms an eine geeignete Stelle im Hauptspeicher • Ein Interpreter analysiert wie ein Compiler den Quelltext, führt aber keine vollständige Übersetzung in Maschinensprache durch, sondern führt das Programm aus – Programmtext wird entweder unmittelbar ausgeführt oder – in einen Zwischencode übersetzt, der den Programmtext interpretiert. • Beispiele – Perl, Basic, Skriptsprachen Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 46 Programmausführung von Java-Programmen: – plattformunabhängiges Code-Format – kann auch über das Netz transportiert werden übersetzt prog.java Java-Compiler Java-Bytecode prog.class • JVM interpretiert Bytecode – auf verschiedenen Plattformen (Windows, Linux, PDA, Handy, …) 47 Grundbegriffe objektorientierter Programmierung Java-Programm • Compiler erzeugt Bytecode Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) • • • • Objektorientierte Programmierung Erste Java-Programme Java als Programmiersprache Imperativ, objektorientiert JVM1 JVM2 interpretiert JVM3 % java prog arg1 arg2 … Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 48 Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 49 Objektorientierte Programmierung (OOP) Ein erstes Java-Programm und seine Bestandteile • Ziele – Verkürzung der Entwicklungszeit – Senkung der Fehlerrate (Verbesserung der Qualität) – verbesserte Erweiterbarkeit und Anpassungsfähigkeit public class HelloWorld { public static void main(String[] args) { Speaker sprecher; sprecher = new Speaker(); sprecher.say("Hello, " + args[0]); } } • Hauptmerkmale – Kapselung • genau definierte Schnittstellen • Verbergen von Implementierungsdetails – Vererbung • einfache Modifikation und Erweiterung von bereits vorhandenen Komponenten – Polymorphie class Speaker { public void say(String what) { System.out.println(what); } } • gleichartige Funktionalität für verschiedene Datentypen • Datentypabhängige Bedeutung von Operatoren und Funktionen Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 50 Ein erstes Java-Programm und seine Bestandteile • class – Definieren einer Klasse • new – Anlegen eines Objektes (Instanzierung einer Klasse) • public – bestimmt die Sichtbarkeit • 51 Ein erstes Java-Programm und seine Bestandteile public class HelloWorld { public static void main(String[] args) { Speaker sprecher; sprecher = new Speaker(); sprecher.say("Hello, " + args[0]); } } Wir beschreiben die Programmbestandteile, indem wir angeben, class Speaker { public void say(String what) { System.out.println(what); } } • welche Wörter (Bestandteile) zum Schreiben von Java-Programmen existieren, • wie sie zusammengesetzt werden können, main – sog. Klassenmethode (auch: statische Methode, static) – benötigt keine Instanzierung der Klasse, um ausführbar zu sein • Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) Zugriff auf Methoden (und Attribute) fremder Objekte: Syntax • welche Bedeutung diese haben, und Semantik • wie und wozu sie sinnvoll eingesetzt werden Pragmatik – <Objekt>.<Methodenname> (<arg1>, …, <argn>) – <Objekt>.<Attributname> – Beispiele: sprecher.say("Hello, " + args[0]) oder System.out Dateiname = Name der Hauptklasse: HelloWorld.java Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 52 Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 53 Java-Programmbestandteile: eine kleine Übersicht Die Programmiersprache Java: Der imperative Kern • Der imperative Kern • Ausdrücke, Anweisungen, Kontrollstrukturen Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 54 Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 55 Einfache Datentypen und Operatoren Grundlegende Sprachelemente Zeichensatz Quellcode – 16-Bit-Zeichensatz: Unicode • Orientiert an C, einfache Variante von C++, imperativer Kern Bezeichner • Einfache Datentypen – Groß- und Kleinschreibung ist signifikant – Erstes Zeichen muss Buchstabe, $ oder _ sein byte, short, int, long, boolean, char, float, double Schlüsselwörter – sind reservierte Wörter und dürfen nicht für eigene Bezeichner verwendet werden Operatoren – Zusammengesetzte Ausdrücke sind durch Operatoren verbunden. Literale (Konstanten) – 12, -123.45, true, "string", ‘c‘ Kommentare • Operatoren ==, !=, <, <=, >, >=, +, -, *, / % (Modulo) ++, -- (Autoinkrement, -Dekrement) &, | (bitweise UND, ODER auf Ganzzahlen) !, &&, ||, ^ (logisch auf boolschen Operanden) – vom Compiler ignoriert, /* <comment> */ oder Zeilen, die mit // beginnen Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 56 Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 57 Einfache Datentypen und Standardwerte (default values) Einfache Datentypen und initiale Werte • Einfache Datentypen • Einfache Datentypen byte, short, int, long, boolean, char, float, double byte, short, int, long, boolean, char, float, double • Implizite Typumwandlung Auswertung eines Ausdrucks liefert Typ B, aber Typ A wird erwartet (implizite) Typanpassung wird versucht (entlang der Pfeile) double float long int short byte char float g = 2 / 5; float h = 2 / 5.0; float j = 2F / 5; Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 58 Operatoren und ihre Präzedenzen Beschreibung Bezeichnung (Ausdruck) Literale Methodenaufrufe Arrayzugriffe new this Pre/Postfix ++ -- + - (unär) Unär ~ ! cast-Ausdrücke (Typ) Multiplikativ * / % Additiv + - (binär) Shift << >> >>> Relational < > <= >= instanceof (Un)Gleichheit == != Und & Exklusiv-Oder ^ Oder | Logisches Und && Logisches Oder || Conditional ? : Assignment = Assignment-Op. *= /= %= += -= <<= >>= >>>= &= ^= |= Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 59 Literatur (Internet, Java) Prio. 1 Primary 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // g = 0.0, d.h. zuerst die Division // h = 0.4 // j = 0.4 Dokumentationen und Spezifikationen – Java Development Kit (JDK) Documentation – Java API Specification – Java-Tutorial – Christian Ullenboom: Java ist auch eine Insel https://rz-static.uni-hohenheim.de/anw/programme/prg/java/tutorials/javainsel4/ Java ist auch eine Insel 60 Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 61