INE2 Java Einführung ■ Programmierparadigmen ■ Objektorientierte Programmierung ■ Java: Überblick und Beispiel ■ Programmieren in Java 1 Programmierparadigmen School of Engineering © G. Burkert, K. Rege, ZHAW 2 von 58 Programmierparadigmen 1 Imperative Programmierparadigmen ■ prozedurale Programmierung 1.1 Strukturierte Programmierung ■ objektorientierte Programmierung 1.2 Prozedurale Programmierung ■ Die meisten heutigen Programmiersprachen unterstützen mehrere Programmierparadigmen 1.3 Modulare Programmierung 1.4 Programmierung mit abstrakten Datentypen 2 Deklarative Programmierparadigmen 2.1 Funktionale Programmierung 2.2 Logische Programmierung 2.3 Constraintprogrammierung 3 Objektorientierte Programmierparadigmen ■ Info: http://de.wikipedia.org/wiki/Programmierparadigma http://en.wikipedia.org/wiki/Programming_paradigm 4 Komponentenorientierte Programmierparadigmen 5 Andere 5.1 Agentenorientierte Programmierung 5.2 Aspektorientierte Programmierung 5.3 Generative Programmierung 5.4 Generische Programmierung 5.5 Datenstromorientierte Programmierung School of Engineering © G. Burkert, K. Rege, ZHAW 3 von 58 Software-Entwicklung ■ Hauptproblem der Softwareentwicklung: Mit zunehmender Computerleistung können immer komplexere Programme entwickelt werden (OS, DBMS, CAD, etc.) ■ Dadurch entstehen einige Probleme: ■ Überblick behalten ■ Programm testen ■ Programm warten (Fehlerbehebung, Erweiterung) ■ Bestehende Software wieder verwenden ■ Wie kann die Komplexität gemeistert werden? School of Engineering © G. Burkert, K. Rege, ZHAW 4 von 58 Abstraktion ■ Alle Programmiersprachen unterstützen Abstraktionen, allerdings in unterschiedlichem Ausmass ■ Je nach Art und Qualität der Abstraktionsmöglichkeiten lassen sich Probleme geringerer oder höherer Komplexität lösen ■ Assemblersprachen bieten nur eine geringe Abstraktion der jeweiligen Maschinensprachen ■ Sprachen wie Fortran, BASIC, und C sind Abstraktionen von Assemblersprachen School of Engineering © G. Burkert, K. Rege, ZHAW 5 von 58 Imperative Programmierung ■ Folge von Anweisungen, die den Programmzustand verändern ■ Wichtige Bestandteile: Zuweisungen und Berechnungen, globale Variablen, Datenstrukturen, Sprungbefehle ■ Beispiel in C: int x = 10; double y; x = 23; y = 32.4; School of Engineering © G. Burkert, K. Rege, ZHAW 6 von 58 Strukturierte Programmierung ■ Beschränkter Satz von Ablaufstrukturen ■ Darstellung: Text (eingerückt), Flussdiagramme, Struktorgramme Sequenz School of Engineering Verzweigung © G. Burkert, K. Rege, ZHAW Schleife 7 von 58 Prozedurale Programmierung ■ Die Verarbeitung der Daten wird in verschiedene Schritte aufgeteilt ■ Die einzelnen Schritte werden an separate Einheiten (Prozeduren) delegiert ■ Ein Hauptprogramm steuert den ganzen Ablauf School of Engineering © G. Burkert, K. Rege, ZHAW 8 von 58 Prozedurale Programmierung ■ Typische Elemente prozeduraler Programmiersprachen ■ Anweisungen a = b * (c + d/sin(5*x)) ■ Schleifen for x = 1 to 20 do ... ■ Verzweigungen if a = 5 then ... else ■ Programmstruktur ■ Variablen integer i, k, n; double x,y; ■ Prozeduren /Funktionen printLine(text, position); ■ Hauptroutine main() School of Engineering © G. Burkert, K. Rege, ZHAW 9 von 58 Objektorientierte Programmierung ■ Die Daten und Funktionen (Verarbeitung der Daten) werden in Objekten zusammengefasst ■ Das gewünschte Verhalten des Programms entsteht durch das Zusammenspiel dieser Objekte InInCCals alsFunktionen Funktionen bezeichnet bezeichnet OOP PPG Function Function11 Function Function22 Daten Daten Objekt 1 Objekt 2 Daten Daten Methoden Function Function33 School of Engineering © G. Burkert, K. Rege, ZHAW Im ImOO OOKontext Kontextals als Methoden Methoden bezeichnet bezeichnet Methoden 10 von 58 Objekte School of Engineering © G. Burkert, K. Rege, ZHAW 11 von 58 Was ist ein Objekt? ■ Wir kennen Objekte aus der realen Welt Beispiele: Auto, Hammer, Bank, Kunde ■ Diese Objekte haben verschiedene Eigenschaften (Attribute) Auto: Farbe, Preis, Anzahl Gänge ■ Diesen Eigenschaften wird dann zu einem konkreten Wert in den Objekte. Sie haben einen Zustand, der a) konstant oder b) veränderlich ist: Auto: aktulle Geschwindigkeit, Tankinhalt, aktueller Gang, Position Steuerrad ■ Schliesslich haben Objekte auch ein Verhalten: Auto: es fährt, beschleunigt, bremst Ziel: Objekte im Programm analog zu realen Objekten aufgebaut School of Engineering © G. Burkert, K. Rege, ZHAW 12 von 58 Objektorientierte Programmierung die Grundidee: die Struktur der Software spiegelt die Realität wieder: klar unterscheidbare Einheiten (Objekte), die untereinander Meldungen austauschen Elektrik Elektrik Steuerrad Steuerrad Motor Motor Lampe Lampe Lampe Lampe Rad Rad School of Engineering Im ImOO OOKontext Kontextals als Meldungsaustausch Meldungsaustausch bezeichnet bezeichnet Rad Rad © G. Burkert, K. Rege, ZHAW 13 von 58 Objektorientierte Programmierung ■ Heute wichtigstes Programmierparadigma: ■ analog einem technischen System, z.B. Auto: ■ Antriebssystem (Motor, Kupplung, Räder,...) ■ Bremssystem (Bremsen, Bremspedal, Bremsflüssigkeit,...) ■ Lichtanlage (Lichter, Batterie,...) Softwaresystem aus Einzelteilen aufbauen ■ Die Einzelteile sind die Objekte ■ Haben einen Zustand ■ Haben ein Verhalten ■ Der gewünschte Programmablauf ergibt sich durch das Zusammenspiel der Objekte ■ Prinzip der Objektorientierten Programmierung ■ Java, C++, C# Special Version School of Engineering © G. Burkert, K. Rege, ZHAW © codedcarkeys 14 von 58 Objektorientierte Programmierung ■ Prozeduren/Funktionen in OOP-Jargon (z.B. Java)Æ Methoden ■ ■ In Java werden alle Variablem und Methoden Objekten zugeordnet Objekt vereinigt in sich Zustände Zustände und und Verhalten Verhalten Æ Konsequenzen: ■ ■ Alle Funktionen in OOP-Programmen gehören zu irgendeinem Objekt Aufruf mit objektName.methodenName(Parameter…) Bsp.: ■ myAuto.bremsen(); Schon in einfachen Programmen werden viele davon gebraucht School of Engineering © G. Burkert, K. Rege, ZHAW 15 von 58 Begriff Objekte ■ Objekte erlauben in OOP-Programmen die Wirklichkeit im Programm direkt zu modellieren ■ Beispiel: Programm für Simulation von Autos Objekt 1: rotesAuto Objekt 2: grünesAuto Objekt Objekt1:1:rotesAuto rotesAuto Objekt Objekt2:2:grünesAuto grünesAuto Farbe: Farbe:rot rot Preis: 20'000 Preis: 20'000 Geschwindigkeit: Geschwindigkeit:300 300 Tankinhalt: 100 Tankinhalt: 100 Farbe: Farbe:grün grün Preis: 10'000 Preis: 10'000 Geschwindigkeit: Geschwindigkeit:80 80 Tankinhalt: 17 Tankinhalt: 17 beschleunigen beschleunigen bremsen bremsen tanken tanken links linksabbiegen abbiegen rechts rechtsabbiegen abbiegen beschleunigen beschleunigen bremsen bremsen tanken tanken links linksabbiegen abbiegen rechts rechtsabbiegen abbiegen School of Engineering © G. Burkert, K. Rege, ZHAW Zustand Verhalten 16 von 58 Klassen School of Engineering © G. Burkert, K. Rege, ZHAW 17 von 58 Objektorientierte Programmierung: Klasse ■ Objekte werden zur Laufzeit des Programms bei Bedarf erzeugt ■ Dazu braucht es eine "Beschreibung der Objekte" ■ Diese werden als Klassen bezeichnet ■ Vorlage, Bauplan für Objekte (wie Plan bei einem Auto) ■ Beschreibt die Daten (Namen und Datentypen) und ■ Methoden der Objekte ■ Aus einer Klasse können beliebig viele Objekte erzeugt (instanziert) werden ■ Diese Objekte haben das identische Verhalten ■ Sie unterscheiden sich nur in den Zustand School of Engineering © G. Burkert, K. Rege, ZHAW 18 von 58 … Klassen("Baupläne") und ihre Instanzierung Klasse: Klasse: Auto Auto Farbe: Farbe: Preis: Preis: Geschwindigkeit: Geschwindigkeit: Tankinhalt: Tankinhalt: beschleunigen beschleunigen bremsen bremsen tanken tanken linksAbbiegen linksAbbiegen rechtsAbbiegen rechtsAbbiegen Zustandswertebereiche (sog. Attribute) Verhalten (sog. Methoden) Die Baupläne kennen mögliche Namen und Zuständswertebereiche (= Datentypen) Attribute und Methoden für deren Veränderung Ein konkretes Objekt (= Instanz einer Klasse) kann wie folgt im Programm kreiert und verwendet werden: Initialer Zustand rotesAuto = new Auto(rot, 20000, 300, 100); rotesAuto.linksAbbiegen(); // Methodenaufruf School of Engineering © G. Burkert, K. Rege, ZHAW Initialer Zustand 19 von 58 Klassen vs. Objekte ■ Von einer Klasse können mehrere Objekte (zur Laufzeit) mittels new erzeugt werden ==Instanz (instanzieren) Instanzeiner einer Klasse Klasse ==instanzieren instanzieren Objekt: rotesAuto Klasse: Auto Klasse: Klasse: Auto Auto Objekt Objekt: :rotesAuto rotesAuto Farbe: Farbe: Preis: Preis: Geschwindigkeit: Geschwindigkeit: Tankinhalt: Tankinhalt: Farbe: Farbe:rot rot Preis: 20'000 Preis: 20'000 Geschwindigkeit: Geschwindigkeit:300 300 Tankinhalt: 100 Tankinhalt: 100 beschleunigen beschleunigen bremsen bremsen tanken tanken linksAbbiegen linksAbbiegen rechtsAbbiegen rechtsAbbiegen School of Engineering Namen und Zustandswertebereiche (sog. Attribute) Verhalten (sog. Methoden) (Attribut-) Werte beschleunigen beschleunigen bremsen bremsen tanken tanken links linksabbiegen abbiegen rechts rechtsabbiegen abbiegen © G. Burkert, K. Rege, ZHAW 20 von 58 Eine Klasse ist (auch) ein Datatyp ■ "A class [...] defines a Data Type. Yet this fact is typically not mentioned in beginners textbooks. Lacking an accurate description of a data type, the best a textbook (or an instructor) can do is say something like: A class is a template, blueprint, or pattern of an object. ■ I.m. known data types: int, double, struct (user defined datatype) ■ data types determine the operations: e.g. int-division is different to double-division ■ These characterizations suggest how a class can be viewed, not what a class is, much less what a class can do, thus making it difficult to learn the true nature of a userdefined data type." ■ Chenglie Hu. Just Say 'A Class Defines a Data Type'. ACM Communications, Vol.51, No.3, March 2008, p. 19–21. © http://www.swisseduc.ch/informatik/ School of Engineering © G. Burkert, K. Rege, ZHAW 21 von 58 Datentypen, typengebundene Funktionen ■ Bisher angetroffene Datentypen int, double, char ■ Selber definierte Datentypen in C: struct typedef struct { char[20] name; } Competitor void setRank(Competitor c, int r){…} ■ In Java: typengebundene Funktion = Methode class Competior { String name; void setRank(int r) {…} } School of Engineering © G. Burkert, K. Rege, ZHAW 22 von 58 Vererbung School of Engineering © G. Burkert, K. Rege, ZHAW 23 von 58 Objektorientiertes Programmieren (OOP) ■ Das Programmieren eines OO-Programms besteht im Wesentlichen aus dem Schreiben von Klassen ■ Aus diesen werden dann zur Laufzeit die notwendigen Objekte erzeugt ■ Das Zusammenspiel der Objekte erzeugt das gewünschte Programmverhalten ■ Beim Schreiben von Klassen kann man bereits bestehende Klassen wieder verwenden durch Vererbung School of Engineering © G. Burkert, K. Rege, ZHAW 24 von 58 Vererbung/Instanzierung original Bauplan spezialisieren Rote Lackierung 3.8L Motor vererben erweitern instanzieren School of Engineering © G. Burkert, K. Rege, ZHAW 25 von 58 Der Grad der Flexibilität ■ Baupläne können erweitert werden ■ das Fahrzeug bekommt eine Schaufel (->Bagger) ■ "weisse Stellen" im Bauplan können ausgefüllt werden: der Plan kann spezialisiert werden Motorfahrzeug PKW Bill's Ferrari School of Engineering Bus Bus 69 Bagger Sergio's Bagger © G. Burkert, K. Rege, ZHAW 26 von 58 Die Vererbung, die UML Notation Mittels der Vererbung können bestehende Klassen erweitert und spezialisiert werden ■ Beim Schreiben eine Klasse kann dadurch das Bestehende wiederverwendet werden Oberklasse graphisches Zeichen für Vererbung Unterklasse ■ Begriffe: ■ ■ Oberklasse (Superklasse): Klasse von der geerbt wird Unterklasse (Subklasse): Klasse, die erbt School of Engineering © G. Burkert, K. Rege, ZHAW 27 von 58 Die Vererbung ■ (erbende) Unterklasse kann (von der geerbten) Oberklasse : ■ Attribute ■ erweitern: zusätzliche Attribute hinzufügen ■ Verhalten / Methoden ■ ■ erweitern: zusätzliche Methoden hinzufügen spezialisieren: Methoden mit gleichem Namen wie in Oberklasse definieren -> neues Verhalten definieren Obige Mechanismen werden als Vererbung zusammengefasst. School of Engineering © G. Burkert, K. Rege, ZHAW 28 von 58 Die Vererbung (andere Sicht) ■ Oberklasse: Klasse die vererbt (Superclass/Baseclass) ■ Unterklasse: Klasse die erbt (Subclass/abgeleitete Klasse) ■ von Oberklasse werden in Unterklasse werden übernommen ■ alle Attribute ■ alle Methoden ■ die Unterklasse kann ■ zusätzliche Attribute definieren ■ zusätzliche Methoden definieren ■ geerbte Methoden überschreiben,d.h. ihre Funktionalität anpassen School of Engineering © G. Burkert, K. Rege, ZHAW 29 von 58 Vererbungsbeispiel: Fahrzeuge Klassenname Attribute Oberklasse Methoden Unterklasse + + Fahrzeug farbe preis geschwindigkeit bremsen beschleunigen links rechts MotorFahrzeug tankinhalt tanken rueckwaerts Personenwagen anzTueren + Fahrrad anzGaenge schalten beschleunigen ElektroFahrzeug batterieLadung laden entladen Lastwagen ladegewicht laden entladen School of Engineering © G. Burkert, K. Rege, ZHAW 30 von 58 Objektorientiertes Software Engineering ■ Vorteile objektorientierter Software-Entwicklung: ■ Nähe zum Problembereich: erleichtert Kommunikation zwischen Entwicklern und Experten ■ Methodische Durchgängigkeit (s.o.) ■ Objektorientierte Modelle sind oft änderungsfreundlicher, da Änderungen häufig lokal begrenzt möglich sind ■ Abstraktionsmöglichkeiten ermöglichen bessere Wiederverwendbarkeit Aber: Auch mit diesem Ansatz ist es problemlos möglich, sehr schlechte Ergebnisse zu erzielen © swisseduc, Raimond Reichert School of Engineering © G. Burkert, K. Rege, ZHAW 31 von 58 Objektorientierte Programmierung: Wer erbt hier von wem? ■ Bsp: Sie entwickeln eine Schulsoftware ■ gegeben die beiden Klassen Student und Professor ■ Erbt nun Student von Professor oder umgekehrt? ■ Lösung: es wird eine dritte Klasse "Person" eingeführt Person Student Professor © swisseduc, Raimond Reichert School of Engineering © G. Burkert, K. Rege, ZHAW 32 von 58 Andere richtige Lösung wäre ... Person Mortal God Student Professor School of Engineering © G. Burkert, K. Rege, ZHAW 33 von 58 OOP: Objekte identifizieren ist schwierig ■ Ein kleines Beispiel aus der Studie ■ "design an authorization system that routes users as follows: ■ An existing user will login into the system. ■ A new user will register and receive authorization." ■ Was sind hier die Objekte? User? Login? Register? Authorization? Für Anfänger schwierige Fragen! ■ Hadar, Irit; Leron, Uri (2008). How intuitive is object-oriented design? Communications of the ACM, Vol. 51, No. 5, pp. 41–46. © swisseduc, Raimond Reichert School of Engineering © G. Burkert, K. Rege, ZHAW 34 von 58 Objektorientierte Programmierung: Wie naheliegend sind OO-Modelle? ■ „[…] claims regarding the ‘‘naturalness, ease of use, and power’’ of the OO approach. […] ■ The papers reviewed do not support this position. They show that identifying objects is not an easy process, ■ that objects identified in the problem domain are not necessarily useful in the program domain, ■ that the mapping between domains is not straightforward, and that novices need to construct a model of the procedural aspects of a solution in order to properly design objects/classes. ■ Anthony Robins, Janet Rountree, and Nathan Rountree. Learning and Teaching Programming: A Review and Discussion, Computer Science Education, 2003, Vol. 13, No. 2, pp. 137–172. © swisseduc, Raimond Reichert School of Engineering © G. Burkert, K. Rege, ZHAW 35 von 58 Objektorientierung: Objects First? ■ Der Ansatz "Objects First" gerät in einer zunehmenden Anzahl von Publikationen in die Kritik. Wie wurde der Ansatz überhaupt begründet? ■ Durch ein Paper von Kölling, in dem steht: "It is now almost consensus among OO teachers that object orientation is best taught by teaching about objects from the start, rather than starting with a small scale, structured programming approach and adding objects later. While there is very little scientific evidence to support this, the anecdotal evidence is so strong that the great majority of teachers and textbooks now follow this approach." There Thereisisjust justone one! ! vom vomHörensagen Hörensagen ■ Das Paper hat 6 Referenzen (3 davon auf Kölling selber) ■ Kölling, Michael; Rosenberg, John (2001). Guidelines for Teaching Object Orientation with Java. In Conference on Information Technology in Computer Science Education, pp. 33–36. © swisseduc, Raimond Reichert School of Engineering © G. Burkert, K. Rege, ZHAW 36 von 58 Java: Überblick und Beispiel School of Engineering © G. Burkert, K. Rege, ZHAW 37 von 58 Geschichte von Java ■ 1991 wurde bei Sun Microsystems eine Projektgruppe ins Leben gerufen ■ Ziel des Projektes war es, die kommenden Trends der Computer- und Softwareindustrie aufzuspüren. ■ Die Gruppe wurde von James Gosling geleitet. ■ Das Team entschied sich dafür, einen Prototyp eines programmierbaren Geräts für die Steuerung und Integration von Haushaltsgeräten (Toaster, Videorecorder, Fernseher usw.) zu bauen. Es entstand auch ein Palm ähnliches Gerät namens Prototyp "#7" ■ Die an C++ angelehnte Sprache, hiess zunächst OAK (Object Application Kernel) ■ benannt nach einer Eiche, die vom Bürofenster eines Entwicklers aus zu sehen war. ■ 1994 entstand mit "WebRunner" ein erster Browser, der kleine Java-Programme (Applets) aus dem World Wide Web laden und innerhalb des Browsers ausführen konnte. "WebRunner" wurde in "HotJava" umbenannt; in Netscape Browser integriert ■ 1996 wurde die erste Version des Java Development Kit (JDK 1.0) veröffentlicht. School of Engineering © G. Burkert, K. Rege, ZHAW 38 von 58 Plattform-unabhängig ■ Problem: jeder Prozessor hat seine eigene Maschinensprache ■ Ein Programm muss für jeden Prozessor in die entsprechende Maschinensprache übersetzt (kompiliert) werden ■ Java simuliert einen Prozessor mit einem Programm, der Java Virtual Machine (JVM) ■ Machinensprache der JVM ist der so genannte Bytecode © Oracle ■ Java-Programme werden in Bytecode übersetzt ! School of Engineering © G. Burkert, K. Rege, ZHAW 39 von 58 Write once, run everywhere ■ Lediglich die JVM ist plattform abhängig ■ Es existieren © Oracle School of Engineering © G. Burkert, K. Rege, ZHAW 40 von 58 … run (really) everywhere ■ Java wird auf Smartwatches bis auf "Big Irons" eingesetzt ■ JSE: Standard Edition ■ JEE: Enterprise Edition School of Engineering © G. Burkert, K. Rege, ZHAW 41 von 58 Java Bibliotheken ■ JRT: nur die für die Laufzeit benötigten Bibliotheken ■ JDK: Java Development Kit: + Compiler, Tools, © Oracle School of Engineering © G. Burkert, K. Rege, ZHAW © Google 42 von 58 Java Applikationen ■ Java-Applikationen sind eigenständige Programme ■ Sie brauchen – ausser der Java Virtual Machine – keine anderen Programme, um laufen zu können ■ Java-Applikationen sind vergleichbar mit den C-Programmen, die wir in INE1 entwickelt haben ■ Sie können direkt durch Doppelclick oder Kommandoaufruf vom Betriebssystem gestartet werden School of Engineering © G. Burkert, K. Rege, ZHAW 43 von 58 Java Applets R.I.P. ■ Applets sind nicht eigenständig, sondern normalerweise Bestandteil einer Web-Seite ■ Sie laufen innerhalb eines Web-Browsers oder Applet-Viewers ■ Applets werden bei Bedarf geladen und gestartet ■ Ein Applet kann irgendwo im Internet als .class-Datei gespeichert sein ■ Sie sind eine hersteller- und plattformunabhängige Form der Apps ■ Java Applets werden heute nicht mehr verwendet TocTacToe TocTacToe Applet Applet School of Engineering © G. Burkert, K. Rege, ZHAW 44 von 58 Zur Erinnerung: Hello World in C ■ Bibliothek einbinden, main() als Startfunktion #include <stdio.h> int main (void) { printf("Hello World in C"); return 0; } $ gcc –o hello hello.c $ ls hello hello.c $ ./hello Hello World in C $ School of Engineering © G. Burkert, K. Rege, ZHAW 45 von 58 Your First Cup of Java ■ Eine einfach, vollständige Java-Applikation: Greeting.java public class Greeting { public static void main (String args[]) { System.out.println("Hello you"); } } $ javac Greeting.java $ ls Greeting.class Greeting.java $ java Greeting Hello you $ School of Engineering © G. Burkert, K. Rege, ZHAW 46 von 58 Your First Cup of Java ■ Eine einfach, vollständige Java-Applikation: Greeting.java Kopf Kopfder derKlasse Klasse Die Main Methode der Klasse Die Main Methode der Klasse public class Greeting { public static void main (String args[]) { System.out.println("Hello you"); } Aufruf Aufrufder derprintln printlnMethode Methodedes desout outObjekts Objekts der Klasse System der Klasse System } Ende Endeder derKlasse Klasse School of Engineering © G. Burkert, K. Rege, ZHAW 47 von 58 Textuelle Ausgabe in Java ■ Häufig angetroffene Anweisungen ■ System.out.println("Hello World"); ■ System.out.print("Hello"); ■ System.out.println(); ■ Ab Java 5 auch printf (wie bei C) unterstützt ■ System.out.printf("%9.2f cm is %10d inch\n", 2.54,1); http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax School of Engineering © G. Burkert, K. Rege, ZHAW 48 von 58 Textuelle Eingabe in Java ■ Mittels der Klasse Scanner kann von der Kommandozeile gelesen werden package javaapplication1; import java.io.*; import java.util.*; Paket Paketder derKlasse Klasse Import Importanderer andererPakete Pakete public class ReadInputScannerExample { public static void main(String args[]) throws IOException Scanner scanner = new Scanner(System.in); scanner.useLocale(Locale.ENGLISH); System.out.print("enter name: "); String name = scanner.next(); System.out.print("enter age: "); int age = scanner.nextInt(); System.out.printf("Hello %s you are %d\n",name,age); } { } School of Engineering © G. Burkert, K. Rege, ZHAW 49 von 58 Datumsausgabe in Java ■ Datum wird zuerst in String umgewandelt: Klassen: SimpleDateFormat, String Variable Variablevon vonKlasse Klasse== Object Object Klasse Klasse Initialisierungswerte Initialisierungswerte Erzeuge ErzeugeInstanz Instanz GregorianCalendar date = new GregorianCalendar(2016,2,24); SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy"); String string = format.format(date); System.out.printf("The date: %s", string); Aufruf Aufrufder derMethode Methode"format" "format" ■ Dafür muss aber noch das "Package" java.text importiert werden (am Anfang des Programms) Import Importbenötigter benötigterPakete Pakete import java.text.*; import java.util.*; School of Engineering © G. Burkert, K. Rege, ZHAW 50 von 58 Programmieren in Java School of Engineering © G. Burkert, K. Rege, ZHAW 51 von 58 Java-Applikation erstellen Editor Programm Datei Greeting.java Compiler Greeting.class JVM javac Greeting.java Weitere Klassen java Greeting Java Virtual Machine School of Engineering © G. Burkert, K. Rege, ZHAW 52 von 58 Tools ■ Java-Compiler: javac ■ übersetzt Java-Programm in Byte-Code. ■ überprüft grammatikalische Korrektheit des Programms ■ Java Virtual Machine: java ■ lädt <fn>.class File ■ interpretiert Byte-Code ■ ruft main auf School of Engineering © G. Burkert, K. Rege, ZHAW 53 von 58 Java-Applikation erstellen ■ Java Compiler compiliert .java (Sourcecode) und erzeugt .class (Bytecode): javac javaapplication1\Greeting.java → Greeting.class ■ Damit kann die Applikation ausgeführt werden: java javaapplication1.Greeting School of Engineering © G. Burkert, K. Rege, ZHAW 54 von 58 Werkzeuge: Editor ■ Zum Schreiben des Java Programms ■ Zum Beispiel: notepad, ultraedit ■ Programmeditor: optimiert für die Programmierung ■ Einfärben des Textes ■ Formatierungshilfen ■ Zusammenfassen von mehreren Texten zu Projekten ■ Starten des Compilers aus dem Editor heraus ■ Java Spezifika ■ nur eine Klasse pro File, Filename = Klassenname ■ File-Endung .java School of Engineering © G. Burkert, K. Rege, ZHAW 55 von 58 Werkzeuge: Compiler ■ In Java: javac.exe ■ Überprüft ob Programm syntaktisch korrekt ■ Wenn nicht → Fehlermeldung ■ Position und Ursache oft nur ungefähr ■ Übersetzt Programm in Byte-Code → .class <fn>.java School of Engineering javac javac <fn>.class © G. Burkert, K. Rege, ZHAW 56 von 58 Integrierte Entwicklungsumgebung ■ Es gibt spezielle Softwarepakete, um Programme zu entwickeln ■ Sie umfassen im allgemeinen einen Editor, Compiler, Linker, Applet-Viewer, Debugger, graphischen Layouter ■ IDE: Integrated Development Environment ■ IDEs für Java ■ NetBeans, IntelliJ, Eclipse, JBuilder, JCreator, ….. , BlueJ School of Engineering © G. Burkert, K. Rege, ZHAW 57 von 58 Noch Fragen? School of Engineering © G. Burkert, K. Rege, ZHAW 58 von 58