Post on 01-Nov-2019
http://www.nightofscience.de/
DBIS - SS2011Grundlagen der Programmierung II1
Teil 2
2
Teil 2
Modul: Programmierung B-PRGGrundlagen der Programmierung II
Dr. Karsten Tolletolle@dbis.cs.uni-frankfurt.de
Aus - und Rückblick
DBIS - SS2011Grundlagen der Programmierung II3
Hallo Welt!main :: IO () main = putStrLn "Hallo Welt!" PietHaskell
DBIS - SS2011Grundlagen der Programmierung II4
#!/usr/bin/pythonprint "Hallo ", print "Welt!"
public class hallowelt{
public static void main( String[] args ) {
System.out.println("Hallo Welt! "); }
}
~ 130 Hallo-Welt Programme unter: http://de.wikipedia.org/wiki/Liste_von_Hallo-Welt-Programmen/Programmiersprachen
Java
Python
class MainClass{
public static void Main() {
System.Console.WriteLine("Hallo Welt!"); }
Hallo Welt!
C#
DBIS - SS2011
} }
Grundlagen der Programmierung II5
public class hallowelt{
public static void main( String[] args ) {
System.out.println("Hallo Welt! "); }
}
Java
Ziel
1. Unterschiede in den Programmiersprachen verstehen und auf zukünftige Wechsel der Programmiersprache vorbereitet sein
2. Programmieren lernen in Java (zumindest die
DBIS - SS2011
Grundlagen☺)
3. Spaß haben …
Grundlagen der Programmierung II6
Vergleich Java und Python (Typisierung)
JavaStatische Typisierung
…
int width = 20;
PythonDynamische Typisierung
…
width = 20
DBIS - SS2011
int width = 20;
int height = 5*9;
int summe = width * height;
String text1 = "hallo1";
String text2;
text2 = "hallo2";…
width = 20
height = 5*9
summe = width * height
text1 = 'hallo1'
text2 = "hallo2"
…
Grundlagen der Programmierung II7
Vergleich Java und Python (Strukturierung)
Python (Version 2.6)
Struktur durch Einrückenund Zeilenumbruch
…
Struktur durch Klammern und Semikolon
…
Java
DBIS - SS2011
if(a == 1):
if(b > 100):
print c
print d
print e
…
Grundlagen der Programmierung II8
if(a == 1) {
if(b > 100) {
System.out.println(c);
System.out.println(d); }
System.out.println(e);
}
… … ab Version 3: print (c)
Vergleich Java und Python (Verzweigungen)
Python
if expression:
block
[ elif expression:
if (<Bedingung_1>)
Anweisung_1;
[ else if (<Bedingung_2>)
Anweisung_2;]
Java
DBIS - SS2011
block
elif expression:
block
…]
[ else :
block]
Grundlagen der Programmierung II9
[ else
Anweisung_3;]
Statt einzelnen Anweisungen können auch durch Klammern begrenzte Blöcke verwendet werden:{ Anweisung_1; Anweisung_2; … }
Vergleich Java und Python (Schleifen)
Python
for ziel in sequenz:
…
[ else:
for (<Element>:<Kollektion>)
Anweisung;
for (< Init >;<Bedingung>;Anweisung)
Java
DBIS - SS2011
…]
while ziel in sequenz:
…
[ else:
…]
Grundlagen der Programmierung II10
for (< Init >;<Bedingung>;Anweisung)
Anweisung;
while (<Bedingung>) Anweisung;
do Anweisung; while (<Bedingung>);
Java - GeschichteUrsprung :„Green“-Project bei der Firma Sun Microsystems 1991
Entwicklung eines Systems mit folgenden Eigenschaften:
• hardwareunabhängig
• möglichst klein
DBIS - SS2011Grundlagen der Programmierung II11
• möglichst klein
Einsatzgebiet: Konsumgeräte, z.B. Umschalter für das Kabelfernsehen
basierend auf C++ (objektorientiert ) ohne dessen Schwierigkeiten
Name: zuerst OAK (Object Application Kernel), später Java
Durchbruch : Ende 1995, 1998 dann JAVA 2
Plattformunabhängigkeit von Java
Erinnerung : Übliche Übersetzungsvorgänge bei Programmiersprachen
• Compiler (bei Modula-2, C usw.):
MODULE p; VAR n,i:INTEGER; BEGIN FOR i:=1 TO n DO n:=n*n;
Compiler
00010110010 11001001001 00001110001 11111000001 10101010100 11001100011
Ausführung Ergebnis
DBIS - SS2011Grundlagen der Programmierung II12
• Interpreter (bei Basic, Lisp, Python usw.):
END; END p.
Programm (Quellcode)
11001100011 11001100111 11000111001
Maschinencode
10 INPUT n$ 20 FOR i=1 TO 10 30 PRINT “Hi”,n$
40 NEXT Anweisung Nr. i
Interpreterer 00010110010 11001001001
Maschinencode
Ausführung Ergebnis Nr. i
class Dreieck extends GeoObj {
Java- Interpreter (i686-CPU)
Ergebnis
Plattformunabhängigkeit von Java
Vorgehensweise bei Java (Java Virtual Machine)
DBIS - SS2011Grundlagen der Programmierung II13
class Dreieck extends GeoObj { double seite,hoehe,alpha; Dreieck(double s, double h, double a) { this.seite=s; this.hoehe=h; this.alpha=a;} double berechneFlaeche() { return 0.5*seite*hoehe);} }
Java Quellcode
Java Compiler
Java Bytecode (plattform- unabhängig)
Java- Interpreter (SPARC)
Java- Interpreter (Power PC)
Ergebnis
Ergebnis
class Dreieck extends GeoObj { double seite,hoehe,alpha; Dreieck(double s, double h, double a) { this.seite=s; this.hoehe=h; this.alpha=a; } double berechneFlaeche() { return 0.5*se ite*hoehe);} }
Java Quellcode
Java Compiler
Java Bytecode (plattform- unabhängig)
Java- Interpreter (i686-CPU)
Java- Interpreter (SPARC)
Java- Interpreter (Power PC)
Ergebnis
Ergebnis
DBIS - SS2011Grundlagen der Programmierung II14
unabhängig) (SPARC)
Ergebnis
Java Libraries
HalloWelt.java HalloWelt.class
javac HalloWelt.java java HalloWelt
„Hallo Welt“
Java Bytecode
javac hallowelt.java
javap –c hallowelt
DBIS - SS2011Grundlagen der Programmierung II15
Was ist Java?
Java =
• Programmiersprache (OO)
• Virtuelle Maschine
• Bibliotheken
Ergebnis
DBIS - SS2011Grundlagen der Programmierung II16
• Bibliotheken
class Dreieck extends GeoObj { double seite,hoehe,alpha; Dreieck(double s, double h, double a) { this.seite=s; this.hoehe=h; this.alpha=a;} double berechneFlaeche() { return 0.5*seite*hoehe);} }
Java Quellcode
Java Compiler
Java Bytecode (plattform- unabhängig)
Java- Interpreter (i686-CPU)
Java- Interpreter (SPARC)
Java- Interpreter (Power PC)
Ergebnis
Ergebnis
JRE und JDK
Java Runtime Environment (JRE) – enthält die Java Virtual Machine und eine Programmier-schnittstelle (API), welche die Standard-Klassen bereitstellt.
Java Development Kit (JDK)
DBIS - SS2011
Java Development Kit (JDK) – enthält den Compiler zu Erstellen des Byte-Codes (und Programme weitere hilfreiche Programme zum Programmieren)
Grundlagen der Programmierung II17
Java Compiler JDK 6 update 25 und Virtuelle Maschine JRE:http://www.oracle.com/technetwork/java/javase/downloads/index.html
DBIS - SS2011Grundlagen der Programmierung II18
Literatur zu Java• Java Tutorials: http://download.oracle.com/javase/tutorial/
• Bücher in der Bib. … unter D
• … online unter: http://scholar.google.de/
• Empfehlung zum Schmökern:
DBIS - SS2011Grundlagen der Programmierung II19
• Empfehlung zum Schmökern: „Thinking in Java 3“ von Bruce Eckel !!!
http://www.smart2help.com/e-books/tij-3rd-edition/TIJ3.htm
Pause
DBIS - SS2011Grundlagen der Programmierung II20
Programmieren/Arbeitsablauf allgemein
DBIS - SS2011Grundlagen der Programmierung II21
Wiederholung: Programmieren allgemein
Parameter / Konstante � Datentypen
Bedingungen / Verzweigungen
Schleifen / Rekursion
Methoden / Funktionen, Prozeduren
DBIS - SS2011
Methoden / Funktionen, Prozeduren
Kommentare
…
Grundlagen der Programmierung II22
Kontrollstrukturen in Java
• if
• switch
• while
• for
DBIS - SS2011Grundlagen der Programmierung II23
• for
Mehrfachauswahl (switch )
• Soll eine Variable auf mehrere Werte überprüft werden, dann kann die If -Anweisung unübersichtlich werden.
DBIS - SS2011Grundlagen der Programmierung II24
• Eine switch -Anweisung ist für solche Fälle besser geeignet.
Mehrfachauswahl (switch )int wahl = 3;
…
switch (wahl)
{
DBIS - SS2011Grundlagen der Programmierung II25
case 1: Anw1; [break;]
case 3: {Block3} [break;]
case 5: Anw5; [break;]
…
[default: . . . [break;]]
}
Mehrfachauswahl (switch )
• Die Variable wahl muss vom Typ– char
– byte
– short
– int
DBIS - SS2011Grundlagen der Programmierung II26
– int
• Nicht erlaubt sind:– long
– float
– double
– boolean
Unbestimmte Schleifen (while)
Nur wenn die Bedingung wahr ist, wird der Block ausgeführt:
while ( Bedingung)
{
Block
}
kopfgesteuert
DBIS - SS2011Grundlagen der Programmierung II27
}
Der Block wird auf jeden Fall einmal durchlaufen:do
{
Block
}
while ( Bedingung);
fußgesteuert
Bestimmte Schleifen (for )
Anzahl der Durchläufe kann vorher festgelegt werden.
for (<Init>;<Bedingung>;Anweisung)
Anweisung;
DBIS - SS2011Grundlagen der Programmierung II28
int i;for (i = 1; i <= 10;) {
System.out.println(i)i = i+1;
}
Dateinamen (Endung)
• Quellcode auf *.java
• Compilierter Code auf *.class
statt *.py in Pythonoder *.hs in Haskell
DBIS - SS2011Grundlagen der Programmierung II29
• case sensitiveJava unterscheidet zwischen Groß- und Kleinschreibung (auch im Quellcode)!
Java auf den Rechnern der RBIJava: /opt/rbi/bin/javaJavacompiler: /opt/rbi/bin/javac
Applikationen - Entwicklungsprozess Erster Schritt: Erstellen einer Klasse Hello (in einem Editor) mit dem Namen „ Hello.java “
class Hello {
public static void main(String[] args) {
System.out.println(“Hello Students!”);
}
DBIS - SS2011Grundlagen der Programmierung II30
}
}
Zweiter Schritt : Compilieren des Quellcodes Aufruf : „ javac Hello.java “Ergebnis : autom. Erzeugen des Bytecodes „Hello.class“
Dritter Schritt: Evtl. Ausführen des Programms�Aufruf : „ java Hello “ (Ausgeführt wird immer die main-Methode!)
Ausgabe: „ Hello Students! “
MUSS gleich sein!
Programmstruktur:Klassen, Methoden und Variablen
class ClassName {
type variablenName = anfangswert ;
rückgabeType methodenName( type parameter1, …){
}
}
DBIS - SS2011Grundlagen der Programmierung II31
Ein erstes Beispiel:
class Student {int semester; int getSemester() {
return semester;}
}
Klassen, Methoden und Variablen
Konstruktor:
Student() { … }
Student( int semester) { … }
DBIS - SS2011Grundlagen der Programmierung II32
Objekt student1 erzeugen:
Student student1 = new Student();
Methode aufrufen und Rückgabewert speichern:
int semanzahl = student1.getSemester();
Bibliotheken
DBIS - SS2011Grundlagen der Programmierung II33
Start!
OO
34
Einführung in die Objektorientierung
siehe auch V8 aus PRG-1 WS 2010/2011
Objektorientierung
Das Objektmodell beschreibt „die Welt“ als eine Menge interagierender Objekte .
DBIS - SS2011Grundlagen der Programmierung II35
Klasse
Eine Klasse (Typ, Schablone) ist
• Klasse dient als Bauplan für Abbildung von realen Objekten („Schablone“) – eine Abstraktion auf die für die Programmierung wichtiger Eigenschaften.
• eine Realisierung eines abstrakten Datentyps (ADT).
DBIS - SS2011Grundlagen der Programmierung II36
• eine Realisierung eines abstrakten Datentyps (ADT).
• ein benutzerdefinierter Typ in einer objektorientierten Programmiersprache.
• eine zur Compilezeit des Programms notwendige Typspezifikation.
Objekt
Ein Objekt (Instanz) ist
• eine individuelle, benennbare reale oder abstrakte Einheit mit einer wohldefinierten Rolle.
• eine klar abgrenzbare Einheit mit Merkmalen(Zustand und Verhalten) und einer Identität .
DBIS - SS2011Grundlagen der Programmierung II37
(Zustand und Verhalten) und einer Identität .
• eine Ausprägung einer Klasse .
• eine gekapselte Datenstruktur , die zur Laufzeit des Programms Speicherplatz belegt und die nur über die Operationen der definierten Schnittstelle manipuliert werden kann.
Beispiele
Klasse Objekte (Instanzen)
PKW • mein Auto• dein Auto• das Auto mit dem Kennzeichen F-CB 2000
usw.
DBIS - SS2011Grundlagen der Programmierung II38
usw.
Geometrische Formen • ein Kreis mit dem Radius 5 und Mittelpunkt (42,17)• eine Pyramide mit Grundfläche 3x4 und Höhe 6
usw.
DVD • „Mr. and Mrs. Smith“-DVD• „King Kong“-DVD
Attribute und Zustand
Die Attribute eines Objekteslegen die Eigenschaften und Zustände des Objektes fest.
Der Zustand eines Objektesist die Gesamtheit der Attribute eines Objektes plus ihre momentanen Werte .
DBIS - SS2011Grundlagen der Programmierung II39
F-CB 2000
DA-XY 123
Typ
Farbe
km/h
PKW
MethodenMethoden
• sind auf einem Objekt ausführbare Operationen.
• werden durch eintreffende Nachrichten ausgelöst.
• können den Objekt-Zustand verändern.
• werden innerhalb einer Klasse definiert.
DBIS - SS2011Grundlagen der Programmierung II40
Es gibt mehrere Arten von Methoden:Modifikation � ändert Zustand
Selektion � liest Zustand
Iteration � wiederholte Modifikation oder Selektion
Konstruktion � kreiert ein Objekt und initialisiert Zustand
Destruktion � löscht Zustand und zerstört ein Objekt
Verhalten eines Objektes
Das Verhalten eines Objektes• sind die Aktionen und Reaktionen des Objektes.
• wird durch die Methoden der Klasse des Objekts realisiert.
• wird durch den Aufruf der Methoden verursacht.
DBIS - SS2011Grundlagen der Programmierung II41
F-CB 2000
DA-XY 123
Typ Farbe km/h
PKW
beschleunigen()
bremsen()
VW Rot 60
BMW Gelb 100
Vererbung (Inheritance) in der OOP
Die Unterklasse erbt alle Merkmale der Oberklasse und istihr damit ähnlich . Sie kann die geerbten Attribute und Methoden unverändert benutzen oder neu definieren (überschreiben).Eine Unterklasse besitzt im Allgemeinen zusätzliche Attribute und Methoden. Sie ist eine Spezialisierung, Konkretisierung oder
DBIS - SS2011Grundlagen der Programmierung II42
Methoden. Sie ist eine Spezialisierung, Konkretisierung oder Erweiterung ihrer Oberklasse.Eine Unterklasse kann selbst wieder Oberklasse sein. Dadurch ergibt sich eine Baumstruktur , die so genannte Vererbungsstruktur oderKlassenhierarchie .Die Vererbung ist transitiv .
Beispiel für eine Klassenhierarchie (1)
Typ, Farbe, kmh beschleunigen() bremsen()
Kraftfahrzeug
DBIS - SS2011Grundlagen der Programmierung II43
Kraftfahrzeugist eine Klasse mit den drei Attributen Typ, Farbe und kmh und den beiden Methoden beschleunigen() und bremsen().
Es gibt aber auch „spezielle“ Kraftfahrzeuge, die ein zusätzliches, gemeinsames Merkmal haben.
Beispiel für eine Klassenhierarchie (2)
Typ, Farbe, kmh beschleunigen() bremsen()
Kraftfahrzeug
LKW anhängen()
DBIS - SS2011Grundlagen der Programmierung II44
LKW ist eine Unterklasse von Kraftfahrzeug. Sie erbt alle Eigenschaften von ihrer Oberklasse , hat aber die zusätzlicheMethode anhängen().
Es gibt auch Kraftfahrzeuge, die keine LKWs sind.
LKW anhängen()
Beispiel für eine Klassenhierarchie (3)
Typ, Farbe, kmh beschleunigen() bremsen()
Omnibus Stehplätze
Kraftfahrzeug
PKW LKW anhängen()
DBIS - SS2011Grundlagen der Programmierung II45
Omnibus, PKW und LKW sind jeweils Unterklassen der Klasse Kraftfahrzeug. LKW hat eine zusätzliche Methode, Omnibus ein zusätzliches Attribut. Die drei Unterklassen erben alle Merkmale der Oberklasse Kraftfahrzeug.
Aber es gibt es auch mehrere, verschiedene Arten von PKWs, die besondere Merkmale haben.
Beispiel für eine Klassenhierarchie (4)
Typ, Farbe, kmh beschleunigen() bremsen()
Omnibus Stehplätze
Kraftfahrzeug
PKW LKW anhängen()
DBIS - SS2011Grundlagen der Programmierung II46
Cabriolet und Limousine können zusätzliche Methoden bzw. Attribute haben. Beide erben alle Merkmale von PKW und damit auch von Kraftfahrzeug.
Limousine Cabriolet Verdeck öffnen()
Beispiel für eine Klassenhierarchie in UML
DBIS - SS2011Grundlagen der Programmierung II47
Mehrfach -Vererbung
Typ, Farbe, kmh beschleunigen() bremsen()
Fahrzeug
PKW LKW anhängen() Schiff
DBIS - SS2011Grundlagen der Programmierung II48
Amphibien- Fahrzeug
Mehrfach-Vererbung ist in Java nicht möglich… in Python schon!
Identität eines Objektes• Objekte sind mittels Referenz eindeutig identifizierbar .
• Objekte haben eine Identität und meistens einen oder mehrere Namen bzw. Referenzen .
• Der Zustand eines Objektes kann sich ändern, nichtseine Identität.
DBIS - SS2011Grundlagen der Programmierung II49
seine Identität.
• Gleicher Zustand (also der gleiche Wert) bedeutet nicht gleiche Identität! � Dies ist besonders bei Vergleichsoperationen zu beachten.
… das ist bei Haskell anders!
Identität eines Objektes
meinAuto Referenz 2
Referenz 1deinAuto keine Referenzen
DBIS - SS2011Grundlagen der Programmierung II50
Ein Objekt ohne Namen besitzt zwar eine Identität, ist aber nicht (mehr) erreichbar …
Objekt mit zwei Namenund zwei Referenzen Objekt ohne Namen
Lebenszeit von Objekten
Die Lebenszeit eines Objektes ist die Zeit zwischen
• der Kreierung des Objektes und• dem Löschen des Objektes (bzw. der Löschung der
letzten Referenz) mit anschließender Garbage Collection.
Garbage Collection
DBIS - SS2011Grundlagen der Programmierung II51
Garbage CollectionJava gibt automatisch den Speicher unbenutzter Objekte frei!Das expliziete setzen von Referenzen auf NULL unterstützt die Garbage Collection.Mit System.gc() kann man die Garbage Collection explizit anstoßen.
Beispiel JavaScript
DBIS - SS2011Grundlagen der Programmierung II52
JavaScript = Java ???
• Sieht aus wie Java - ABER
• wird anders verarbeitet (reine Skript-Sprache),
• bietet nicht so viele Möglichkeiten wie Java, wird mit HTML vermischt und dient meist nur zur Erweiterung der Web-Seiten-Funktionalität
DBIS - SS2011Grundlagen der Programmierung II53
der Web-Seiten-Funktionalität
• dynamisch Typisiert
• läuft in einer Art Sandbox (Sandkasten) – kein direkter Dateizugriff oder Aufruf von Programmen
• … also JavaScript ≠ Java
Applets
Beispiel:
package simpleapplet;
import java.awt.Graphics;
DBIS - SS2011Grundlagen der Programmierung II54
class HelloWorld extends java.applet.Applet {
public void paint (Graphics g) {
g.drawString(“Hallo Welt!”, 10, 10);
}
}
Einbindung des Applet in HTML
<html >
<body >
<applet
codebase = "."
code = "simpleapplet.HelloWorld.class"
DBIS - SS2011Grundlagen der Programmierung II55
code = "simpleapplet.HelloWorld.class"
width = "400"
height = "300"
>
</ applet >
</ body >
</ html >
Ausführen des Applets
DBIS - SS2011Grundlagen der Programmierung II56
Arten von Java-Programmen
Applikationen :• „normale“ Programme (vergleichbar mit anderen Sprachen wie Modula-2, C)• eigenständig und ohne Sicherheitseinschränkungen• eine auszuführende Klasse muss eine main-Methode enthalten• Aufruf durch den Java-Interpreter java
Applets :
DBIS - SS2011Grundlagen der Programmierung II57
Applets :• Java-Programme für den Einsatz in einem WWW-Browser• Einbettung in eine HTML-Seite durch <applet> - oder <object> -Tag• keine main-Methode erforderlich; Erbt von java.applet.Applet –
Methoden: init(), start(), paint(), stop(), …• Sandbox-Prinzip / Sicherheitseinschränkungen, z.B. können keine
Programme gestartet und es kann nicht auf Dateien zugegriffen werden• nutzt JRE des Browsers
Server-Anwendungen :• Servlets (Java Server Pages), Enterprise Java Beans
Kommentare in Java
JAVA Erklärung Python
// Kommentar Alle Zeichen nach dem „//“ werden ignoriert.�für „normale“ einzeilige Kommentare.
# Kommentar
/* Kommentar über mehrere Zeilen
Alle Zeichen zwischen dem „/*“ und dem „*/“ werden ignoriert. � auskommentieren von Programmteilen.
""" Kommentarüber mehrere
In Java gibt es drei Möglichkeiten zur Kommentierung:
DBIS - SS2011Grundlagen der Programmierung II58
Zeilen */
� auskommentieren von Programmteilen.Die Schachtelung der „Kommentar-klammern“ ist nicht erlaubt.
mehrereZeilen """(ein String)
/*** javadoc-Kommentar * @since JDK1.0* /
Alle Zeichen zwischen dem „/**“ und dem „*/“ werden ignoriert. � für das javadoc -Programm des JDK.
Mit ihrer Hilfe wird eine einfache Online-Dokumentation erstellt.
pythondoc
Javadoc Beispiel/** * Returns an Image object that can then be painted on the screen. * The url argument must specify an absolute {@link URL} . The name* argument is a specifier that is relative to the url argument. * <p>* This method always returns immediately, whether or not the* image exists. When this applet attempts to draw the image on * the screen, the data will be loaded. The graphics primitives * that draw the image will incrementally paint on the screen. * * @param url an absolute URL giving the base location of the image
DBIS - SS2011
* @param url an absolute URL giving the base location of the image* @param name the location of the image, relative to the url argument* @return the image at the specified URL * @see Image */
public Image getImage(URL url, String name) { try
{ return getImage(new URL(url, name));
} catch (MalformedURLException e) { return null; }
}
Java - API - Dokumentation
http://download.oracle.com/javase/6/docs/api/
DBIS - SS2011Grundlagen der Programmierung II60
Javadoc
Homepage: http://java.sun.com/j2se/javadoc/
Aufruf (unter dem „bin“-Ordner des JDK):javadoc [ options ] [ packagenames ] [ sourcefilenames ] [-subpackages pkg1:pkg2:... ] [ @argfiles ]
DBIS - SS2011Grundlagen der Programmierung II61
Tags @author; {@code}; {@docRoot}; @deprecated; @exception; {@inheritDoc}; {@link}; {@linkplain}; {@literal}; @param; @return; @see; @serial; @serialData; @serialField; @since; @throws; {@value}; @version