Informatik Studiengang Chemische Technologie Michael Roth [email protected] Hochschule Darmstadt -Fachbereich Informatik- WS 2012/2013 Inhalt Teil VIII Einstieg in Java II Michael Roth (h_da) Informatik (CT) WS 2012/2013 2 / 34 Inhalt Inhalt 1 Objekte 2 Java VM 3 Evaluation 4 Java - Rahmenprogramm 5 Ein- und Ausgabe in Java Michael Roth (h_da) Informatik (CT) WS 2012/2013 3 / 34 Objekte Objekte Michael Roth (h_da) Informatik (CT) WS 2012/2013 4 / 34 Objekte Übersicht Bislang wurde das imperative Programmierparadigma behandelt Neben diesem existieren weitere: Deklarativ Objektorientiert Begriffe aus dem imperativen Programmierparadigma: Programmablauf Prozeduren und Funktionen Anweisungen, die nacheinander ausgeführt werden Kontrollstrukturen Michael Roth (h_da) Informatik (CT) WS 2012/2013 5 / 34 Objekte Übersicht Bislang wurde das imperative Programmierparadigma behandelt Neben diesem existieren weitere: Deklarativ Objektorientiert Begriffe aus dem imperativen Programmierparadigma: Programmablauf Prozeduren und Funktionen Anweisungen, die nacheinander ausgeführt werden Kontrollstrukturen Michael Roth (h_da) Informatik (CT) WS 2012/2013 5 / 34 Objekte Übersicht Bislang wurde das imperative Programmierparadigma behandelt Neben diesem existieren weitere: Deklarativ Objektorientiert Begriffe aus dem imperativen Programmierparadigma: Programmablauf Prozeduren und Funktionen Anweisungen, die nacheinander ausgeführt werden Kontrollstrukturen Michael Roth (h_da) Informatik (CT) WS 2012/2013 5 / 34 Objekte Übersicht Bislang wurde das imperative Programmierparadigma behandelt Neben diesem existieren weitere: Deklarativ Objektorientiert Begriffe aus dem imperativen Programmierparadigma: Programmablauf Prozeduren und Funktionen Anweisungen, die nacheinander ausgeführt werden Kontrollstrukturen Michael Roth (h_da) Informatik (CT) WS 2012/2013 5 / 34 Objekte Übersicht Der Begriff Programmierparadigma Ein Paradigma in der Programmierung beschreibt einen Programmierstil Bestimmte Paradigmen werden von bestimmten Sprachen besser unterstützt Es gibt also spezielle Programmiersprachen, die sich auf ein Paradigma festlegen, und allgemeinere Sprachen, die Konstrukte für mehrere Paradigmen anbieten (z.B. C++, oder auch Java) Hinter einem Paradigma steht immer ein gedankliches Modell, wie ein Programm auszusehen hat Michael Roth (h_da) Informatik (CT) WS 2012/2013 6 / 34 Objekte Imperatives Paradigma . . .in der Hamsterwelt Die Charakteristika der imperativen Hamsterwelt sind: Es existiert nur ein Hamster (der Standardhamster ) Der Hamster ist namenlos Der Hamster ist von Beginn bis Ende des Programms da Er hat 4 Grundbefehle und 3 Testbefehle Er besitzt 4 Eigenschaften (Attribute / Zustände) • • • • Aktuelle Reihe Aktuelle Spalte Blickrichtung Anzahl der Körner im Maul Ein Hamsterprogramm besteht aus einer Abfolge von Anweisungen, incl. dem Aufruf selbst definierter Funktionen Michael Roth (h_da) Informatik (CT) WS 2012/2013 7 / 34 Objekte Objektorientiertes Paradigma . . .in der Hamsterwelt Die Erzeugung weiterer Hamster ist möglich • Ein neues Hamsterobjekt wird dabei durch new erzeugt • Den new Operator kennen Sie bereits vom Erzeugen von Arrays: 1 int [] feld = new int [100]; Jeder neu erzeugte Hamster kennt die 4 Grundbefehle und die 3 Testbefehle Jeder Hamster besitzt darüber hinaus eigene Eigenschaften (Attribute): • Reihe und Spalte (aktuelle Position) • Blickrichtung • Anzahl der Körner im Maul Die Attribute werden nicht mehr über den Terraineditor gesetzt, sondern im Programm angegeben Michael Roth (h_da) Informatik (CT) WS 2012/2013 8 / 34 Objekte Objektorientiertes Java-Hamster-Modell (2) Objektorientierte Hamsterwelt Objektorientiertes Hamster-Modell (Voraussetzungen): ¾ Zuordnung Namen Hamstern Zuordnung vonvon Namen zuzu Hamstern ¾ Anweisung Erzeugung von Hamstern Anweisung zurzur Erzeugung von Hamstern ¾ Notation, welcher Hamster bestimmten Befehl ausführen soll Welcher Hamster soll welcheeinen Befehle ausführen? ¾ Koordinatensystem fürTerritoriums das Territorium Koordinatensystem des 0 1 2 7 0 neuer Hamster Reihe: 0 Spalte: 6 Blickrichtung: SUED Körner: y Standard-Hamster (blau)1 Reihe: 1 Spalte: 1 Blickrichtung: OST Körner: x 4 Reihe Programmierkurs Java Michael Roth (h_da) Spalte UE 20 (Hamster-) Objekte Informatik (CT) Dietrich Boles WS 2012/2013 Seite 5 9 / 34 Objekte Erzeugung von Objekten Sie kennen bereits das Erzeugen/Anlegen von Variablen: 1 2 int i = 17; double d = 23.5; Bei der Erzeugung von Arrays und Objekten wird der new Operator verwendet: 1 2 3 int [] feld = new int [100]; // bekannt Integer i = new Integer (17) ; // int i = 17; als Objekt Double d = new Double (23.5) ; // double b = 23.5; als Objekt Warum hat Java sowohl int als auch Integer? Java unterstützt mehrere Programmierparadigma Folglich gibt es einen Datentyp int, und eine Klasse Integer Michael Roth (h_da) Informatik (CT) WS 2012/2013 10 / 34 Objekte Erzeugung von Objekten Sie kennen bereits das Erzeugen/Anlegen von Variablen: 1 2 int i = 17; double d = 23.5; Bei der Erzeugung von Arrays und Objekten wird der new Operator verwendet: 1 2 3 int [] feld = new int [100]; // bekannt Integer i = new Integer (17) ; // int i = 17; als Objekt Double d = new Double (23.5) ; // double b = 23.5; als Objekt Warum hat Java sowohl int als auch Integer? Java unterstützt mehrere Programmierparadigma Folglich gibt es einen Datentyp int, und eine Klasse Integer Michael Roth (h_da) Informatik (CT) WS 2012/2013 10 / 34 Objekte Erzeugung von Objekten Anatomie 1 Integer i = new Integer (5) ; Integer: Bezeichner der Klasse, von der ein Objekt erzeugt werden soll. Auch Datentyp des Objektes genannt i: Der Name des Objektes, bekannt aus der Variablendeklaration new: new Operator, der ein Objekt der angegebenen Klasse erzeugt Integer(5): Die Attribute eines Integer-Objektes können durch die Parameter des Konstruktoraufrufes festgelegt werden Michael Roth (h_da) Informatik (CT) WS 2012/2013 11 / 34 Objekte Erzeugung von Objekten . . .in der Hamsterwelt Die Zeile: 1 Hamster paul = new Hamster (0 , 6 , Hamster . SUED , 0) ; . . .legt ein neues Objekte des Typs Hamster an. Die Parameter sind: 1 Reihe 2 Spalte 3 Blickrichtung 4 Körner im Maul Michael Roth (h_da) Informatik (CT) WS 2012/2013 12 / 34 Objekte Erzeugung von Objekten . . .in der Hamsterwelt Die Zeile: 1 Hamster paul = new Hamster (0 , 6 , Hamster . SUED , 0) ; . . .legt ein neues Objekte des Typs Hamster an. Die Parameter sind: 1 Reihe 2 Spalte 3 Blickrichtung 4 Körner im Maul Michael Roth (h_da) Informatik (CT) WS 2012/2013 12 / 34 Objekte Hamsterobjekte Um einem bestimmten Hamster einen Befehl zu geben, wird der . Operator auf das betreffender Objekt der Klasse Hamster angewendet: 1 2 3 4 5 6 7 8 9 10 11 // Syntax : < name >. < befehl > // Erzeuge 2 Hamster Hamster paul = new Hamster (0 , 6 , Hamster . SUED , 0) ; Hamster peter = new Hamster (2 , 6 , Hamster . OST , 0) ; paul . vor () ; // bewege Paul ein Feld nach Sueden peter . vor () ; // bewege Peter ein Feld nach Osten while ( paul . vornFrei () ) paul . vor () ; Michael Roth (h_da) Informatik (CT) WS 2012/2013 13 / 34 Demo Demo Michael Roth (h_da) Informatik (CT) WS 2012/2013 14 / 34 Demo Objektorientiertes Paradigma Begriffe Klasse Eine Klasse ist eine Art Bauplan für gleichartige Dinge (meist der realen Welt). Klassen beinhalten Daten und verfügen über Funktionen, um diese Daten in irgendeiner Form zu verarbeiten. Klassen sind ein Grundbestandteil der objektorientierten Welt. Attribute Ein Klasse definiert intern Variablen, die den jeweiligen Zustand eines Objektes exakt beschreiben. Ein Objekt definiert sich allein durch seine eigenen Attribute. Jedes Objekt verfügt über eigene Attribute. Das bedeutet, dass verschiedene Objekte der gleichen Klasse verschiedene Werte für ihre jeweiligen Attribute haben können. Michael Roth (h_da) Informatik (CT) WS 2012/2013 15 / 34 Demo Objektorientiertes Paradigma Begriffe Klasse Eine Klasse ist eine Art Bauplan für gleichartige Dinge (meist der realen Welt). Klassen beinhalten Daten und verfügen über Funktionen, um diese Daten in irgendeiner Form zu verarbeiten. Klassen sind ein Grundbestandteil der objektorientierten Welt. Attribute Ein Klasse definiert intern Variablen, die den jeweiligen Zustand eines Objektes exakt beschreiben. Ein Objekt definiert sich allein durch seine eigenen Attribute. Jedes Objekt verfügt über eigene Attribute. Das bedeutet, dass verschiedene Objekte der gleichen Klasse verschiedene Werte für ihre jeweiligen Attribute haben können. Michael Roth (h_da) Informatik (CT) WS 2012/2013 15 / 34 Demo Objektorientiertes Paradigma Begriffe Objekte Objekte sind Instanzen einer Klasse. Variablen verhalten sich zu Datentyp wie Objekte zu Klasse Methoden Methoden einer Klasse sind in der Klasse definierte Funktionen. Diese können mittels des . Operators auf Objekte dieser Klasse aufgerufen werden. Typischerweise verarbeiten Methoden (unter anderem) die Attribute einer Klasse. Konstruktor Eine spezielle Methode, die beim Erzeugen eines Objektes aufgerufen wird. Ein Konstruktor kann, wie jede andere Methode oder Funktion auch, Parameter besitzen. Oftmals werden diese Parameter zum initialisieren von Attributen verwendet. Michael Roth (h_da) Informatik (CT) WS 2012/2013 16 / 34 Demo Objektorientiertes Paradigma Begriffe Objekte Objekte sind Instanzen einer Klasse. Variablen verhalten sich zu Datentyp wie Objekte zu Klasse Methoden Methoden einer Klasse sind in der Klasse definierte Funktionen. Diese können mittels des . Operators auf Objekte dieser Klasse aufgerufen werden. Typischerweise verarbeiten Methoden (unter anderem) die Attribute einer Klasse. Konstruktor Eine spezielle Methode, die beim Erzeugen eines Objektes aufgerufen wird. Ein Konstruktor kann, wie jede andere Methode oder Funktion auch, Parameter besitzen. Oftmals werden diese Parameter zum initialisieren von Attributen verwendet. Michael Roth (h_da) Informatik (CT) WS 2012/2013 16 / 34 Demo Objektorientiertes Paradigma Begriffe Objekte Objekte sind Instanzen einer Klasse. Variablen verhalten sich zu Datentyp wie Objekte zu Klasse Methoden Methoden einer Klasse sind in der Klasse definierte Funktionen. Diese können mittels des . Operators auf Objekte dieser Klasse aufgerufen werden. Typischerweise verarbeiten Methoden (unter anderem) die Attribute einer Klasse. Konstruktor Eine spezielle Methode, die beim Erzeugen eines Objektes aufgerufen wird. Ein Konstruktor kann, wie jede andere Methode oder Funktion auch, Parameter besitzen. Oftmals werden diese Parameter zum initialisieren von Attributen verwendet. Michael Roth (h_da) Informatik (CT) WS 2012/2013 16 / 34 Demo Objektorientiertes Paradigma Zusammenfassung Beim objektorientierten Programmieren wird das Arbeiten mit Objekten in den Vordergrund gestellt Funktionalität, die sich beim imperativen Programmieren in Funktionen befindet, wird hier in Methoden der dazugehörigen Klassen implementiert Dadurch wird das Programm übersichtlicher, da Funktionen logisch den jeweiligen Klassen zuzuordnen sind Auch die Interaktion verschiedener Objekter (bzw. verschiedener Klassen) steht im Vordergrund Objektorientierung ist in Java sehr stark vertreten Michael Roth (h_da) Informatik (CT) WS 2012/2013 17 / 34 Java VM Java VM Michael Roth (h_da) Informatik (CT) WS 2012/2013 18 / 34 Java VM Übersicht Im Gegensatz zu rein kompilierten Sprachen wird ein Java Programm teilweise interpretiert Bei anderen Sprachen (wie z.B. C++) übersetzt der Compiler den Quellcode in Maschinensprache, welche direkt von der CPU des Computers ausgeführt wird Zu Java existiert der Compiler javac, der den Quellcode zu Java Bytecode kompiliert Dieser Bytecode kann von einer Java Laufzeitumgebung (engl. Runtime) ausgeführt werden Die Laufzeitumgebung wird häufig auch virtuelle Maschine genannt → JVM = Java Virtual Machine Michael Roth (h_da) Informatik (CT) WS 2012/2013 19 / 34 Java VM Java VM Arbeitsweise Java-Quell-Programm Java-Compiler Java-Bytecode Java VM für WinNT WinNT Ausführbares Programm Java VM für Linux Java VM für Explorer ... Ausführbares Applet Explorer Linux Ausführbares Programm Programmierkurs Java Michael Roth (h_da) ... UE 11 Informatik (CT) Einführung in Java Dietrich Boles Seite 8 WS 2012/2013 20 / 34 Java VM Java VM Vor- und Nachteile Vorteile Plattformunabhängig . . .das bedeutet, dass ein und das selbe Programm auf unterschiedlichen Systemen (Soft- wie Hardware) lauffähig ist Sicherheitsaspekte, da kein direkter Zugriff auf die Hardware erfolgt Nachteile Die Performanz kann niedriger sein als bei direkt kompilierten Sprachen Michael Roth (h_da) Informatik (CT) WS 2012/2013 21 / 34 Java VM Java VM Vor- und Nachteile Vorteile Plattformunabhängig . . .das bedeutet, dass ein und das selbe Programm auf unterschiedlichen Systemen (Soft- wie Hardware) lauffähig ist Sicherheitsaspekte, da kein direkter Zugriff auf die Hardware erfolgt Nachteile Die Performanz kann niedriger sein als bei direkt kompilierten Sprachen Michael Roth (h_da) Informatik (CT) WS 2012/2013 21 / 34 Evaluation Evaluation Michael Roth (h_da) Informatik (CT) WS 2012/2013 22 / 34 Java - Rahmenprogramm Java - Rahmenprogramm Michael Roth (h_da) Informatik (CT) WS 2012/2013 23 / 34 Java - Rahmenprogramm Übersicht Ein neu erzeugtes, imperatives Hamsterprogramm sieht wie folgt aus: 1 2 3 void main () { } Ein minimales, lauffähiges Java Programm sieht so aus: 1 2 3 4 5 6 7 // Name der Datei : World . java class World { public static void main ( String [] args ) { } } Es ist wichtig, dass die Klasse Main in einer Datei gleichen Namens abgespeichert wird! Michael Roth (h_da) Informatik (CT) WS 2012/2013 24 / 34 Java - Rahmenprogramm Übersicht Ein neu erzeugtes, imperatives Hamsterprogramm sieht wie folgt aus: 1 2 3 void main () { } Ein minimales, lauffähiges Java Programm sieht so aus: 1 2 3 4 5 6 7 // Name der Datei : World . java class World { public static void main ( String [] args ) { } } Es ist wichtig, dass die Klasse Main in einer Datei gleichen Namens abgespeichert wird! Michael Roth (h_da) Informatik (CT) WS 2012/2013 24 / 34 Java - Rahmenprogramm Übersicht Ein neu erzeugtes, imperatives Hamsterprogramm sieht wie folgt aus: 1 2 3 void main () { } Ein minimales, lauffähiges Java Programm sieht so aus: 1 2 3 4 5 6 7 // Name der Datei : World . java class World { public static void main ( String [] args ) { } } Es ist wichtig, dass die Klasse Main in einer Datei gleichen Namens abgespeichert wird! Michael Roth (h_da) Informatik (CT) WS 2012/2013 24 / 34 Java - Rahmenprogramm Programmerstellung 1 Erstellen des Programmcodes mittels eines Editors 2 Abspeichern in einer Datei <NameDerKlasse>.java Kompilieren des Quellcodes: 3 • javac <NameDerKlasse>.java • z.B. javac World.java 4 Falls Fehlermeldungen auftreten: • Fehler beseitigen • Zurück zu Punkt 2 5 Der Compiler erzeugt eine nicht ausführbare Datei <NameDerKlasse>.class 6 Das Programm kann mittels Ausführung der JVM gestartet werden: • java <NameDerKlasse> • z.B. java World Michael Roth (h_da) Informatik (CT) WS 2012/2013 25 / 34 Java - Rahmenprogramm Zusammenfassung Alle Java-Programme sind Klassen 1 2 3 4 5 6 7 8 9 class < Klassenname > { < Funktionen und globale Variablen > public static void main ( String [] args ) { < Anweisungen > } } Die Hamsterbefehle gibt es nicht mehr. . . Vor globalen Variablen und Funktionen: static Michael Roth (h_da) Informatik (CT) WS 2012/2013 26 / 34 Ein- und Ausgabe in Java Ein- und Ausgabe in Java Michael Roth (h_da) Informatik (CT) WS 2012/2013 27 / 34 Ein- und Ausgabe in Java Übersicht Dieses Kapitel behandelt die Ein- und Ausgabe bei Java über die Konsole Java bietet umfangreiche Möglichkeiten, grafische Benutzeroberflächen (GUIs) zu erstellen . . .die wir allerdings nicht nutzen werden Bei Ein/Ausgabe über die Konsole werden folgende Begriffe verwendet: Standardeingabe (engl. Standard input ): Eingaben über die Tastatur Standardausgabe (engl. Standard output ): Ausgabe auf dem Monitor Michael Roth (h_da) Informatik (CT) WS 2012/2013 28 / 34 Ein- und Ausgabe in Java Übersicht Dieses Kapitel behandelt die Ein- und Ausgabe bei Java über die Konsole Java bietet umfangreiche Möglichkeiten, grafische Benutzeroberflächen (GUIs) zu erstellen . . .die wir allerdings nicht nutzen werden Bei Ein/Ausgabe über die Konsole werden folgende Begriffe verwendet: Standardeingabe (engl. Standard input ): Eingaben über die Tastatur Standardausgabe (engl. Standard output ): Ausgabe auf dem Monitor Michael Roth (h_da) Informatik (CT) WS 2012/2013 28 / 34 Ein- und Ausgabe in Java Ausgabe Ausgaben werden mittels der Funktion System.out.println(x) getätigt System.out ist ein Objekt, welches mit der Standardausgabe verbunden ist println() ist eine Methode dieses Objektes x kann jede beliebige Variable oder fester Wert sein: 1 2 3 4 System . out . println (5) ; System . out . println ( " Hallo , Welt ! " ) ; double d = 17.3; System . out . println ( d ) ; Sie können zwei Variablen des Typ String bzw. zwei Literale des Stringtyps mittels des Operators + verketten: 1 2 3 4 5 System . out . println ( " Ergebnis : " + 5) ; // Ergebnis : 5 String s = " Hallo " ; String t = " Welt " ; System . out . println ( s + " " + t ) ; // Hallo Welt System . out . println (3 + 4) ; // 7 , nicht 34 Michael Roth (h_da) Informatik (CT) WS 2012/2013 29 / 34 Ein- und Ausgabe in Java Ausgabe Ausgaben werden mittels der Funktion System.out.println(x) getätigt System.out ist ein Objekt, welches mit der Standardausgabe verbunden ist println() ist eine Methode dieses Objektes x kann jede beliebige Variable oder fester Wert sein: 1 2 3 4 System . out . println (5) ; System . out . println ( " Hallo , Welt ! " ) ; double d = 17.3; System . out . println ( d ) ; Sie können zwei Variablen des Typ String bzw. zwei Literale des Stringtyps mittels des Operators + verketten: 1 2 3 4 5 System . out . println ( " Ergebnis : " + 5) ; // Ergebnis : 5 String s = " Hallo " ; String t = " Welt " ; System . out . println ( s + " " + t ) ; // Hallo Welt System . out . println (3 + 4) ; // 7 , nicht 34 Michael Roth (h_da) Informatik (CT) WS 2012/2013 29 / 34 Ein- und Ausgabe in Java Ausgabe print() und println() Die Funktion print() gibt in einer Zeile aus Die Funktion println() gibt aus, und geht anschlieÿend in eine neue Zeile 1 2 3 4 5 6 7 8 9 10 11 12 13 System . out . print (1) ; System . out . print (2) ; System . out . print (3) ; System . out . print (4) ; // Ausgabe : 1234 System . out . println (1) ; System . out . println (2) ; System . out . println (3) ; System . out . println (4) ; /* Ausgabe : 1 2 3 4 */ Michael Roth (h_da) Informatik (CT) WS 2012/2013 30 / 34 Ein- und Ausgabe in Java Eingabe Analog zu System.out gibt es ein Objekt System.in, welches mit der Standardeingabe verbunden ist Zum Lesen der Standardeingabe gibt es eine Klasse Scanner, die folgende Methoden anbietet: • nextInt() extrahiert den nächsten Integer Wert • nextDouble() extrahiert den nächsten Double Wert • nextLine() liest eine ganze Zeile ein (als String) Die Methoden lesen dabei maximal bis zum nächsten ENTER Zeichen ein Passt das jeweils nächste Token im Strom der Standardeingabe nicht zu dem gewünschten Zeichen, so wird ein Laufzeitfehler (Exception) ausgelöst . . .Sie kennen das bereits vom Hamster Michael Roth (h_da) Informatik (CT) WS 2012/2013 31 / 34 Ein- und Ausgabe in Java Eingabe Beispiel 1 2 3 4 5 6 7 8 import java . util . Scanner ; public class J a v a A p p l i c a t i o n 1 { public static void main ( String [] args ) { // Erzeugen eines neuen Scanner Objektes , welches mit der S ta nd a rd e in ga b e verbunden wird Scanner scan = new Scanner ( System . in ) ; int i = scan . nextInt () ; double d = scan . nextDouble () ; System . out . println ( " Sie haben getippt : " + i + " und " + d); 9 10 11 12 13 14 15 } } Michael Roth (h_da) Informatik (CT) WS 2012/2013 32 / 34 Demo Demo Michael Roth (h_da) Informatik (CT) WS 2012/2013 33 / 34 Fragen? Fragen? Michael Roth (h_da) Informatik (CT) WS 2012/2013 34 / 34