Geometrische Formen - Benutzer

Werbung
http://www.nightofscience.de/
1
Grundlagen der Programmierung II
DBIS - SS2011
Teil 2
Modul: Programmierung B-PRG
Grundlagen der Programmierung II
Dr. Karsten Tolle
[email protected]
2
Aus- und Rückblick
3
Grundlagen der Programmierung II
DBIS - SS2011
Hallo Welt!
Haskell
main :: IO ()
main = putStrLn "Hallo Welt!"
Java
Python
#!/usr/bin/python
print "Hallo ",
print "Welt!"
Piet
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
4
Grundlagen der Programmierung II
DBIS - SS2011
Hallo Welt!
C#
Java
5
class MainClass
{
public static void Main()
{
System.Console.WriteLine("Hallo Welt!");
}
}
public class hallowelt
{
public static void main( String[] args )
{
System.out.println("Hallo Welt! ");
}
}
Grundlagen der Programmierung II
DBIS - SS2011
Ziel
1. Unterschiede in den Programmiersprachen
verstehen und auf zukünftige Wechsel der
Programmiersprache vorbereitet sein
2. Programmieren lernen in Java (zumindest die
Grundlagen☺)
3. Spaß haben …
6
Grundlagen der Programmierung II
DBIS - SS2011
Vergleich Java und Python (Typisierung)
Java
Statische Typisierung
Python
Dynamische Typisierung
…
…
int width = 20;
width = 20
int height = 5*9;
height = 5*9
int summe = width * height;
summe = width * height
String text1 = "hallo1";
text1 = 'hallo1'
String text2;
text2 = "hallo2"
text2 = "hallo2";
…
…
7
Grundlagen der Programmierung II
DBIS - SS2011
Vergleich Java und Python (Strukturierung)
Java
Struktur durch Klammern
und Semikolon
Python (Version 2.6)
…
…
if(a == 1) {
if(a == 1):
Struktur durch Einrücken
und Zeilenumbruch
if(b > 100):
if(b > 100) {
print c
System.out.println(c);
print d
System.out.println(d); }
System.out.println(e);
print e
…
}
…
8
… ab Version 3: print (c)
Grundlagen der Programmierung II
DBIS - SS2011
Vergleich Java und Python (Verzweigungen)
Java
Python
if (<Bedingung_1>)
Anweisung_1;
if expression:
[else if (<Bedingung_2>)
Anweisung_2;]
block
[elif expression:
[else
block
Anweisung_3;]
elif expression:
block
Statt einzelnen Anweisungen können auch
durch Klammern begrenzte Blöcke
verwendet werden:
{ Anweisung_1;
Anweisung_2; … }
9
…]
[else:
block]
Grundlagen der Programmierung II
DBIS - SS2011
Vergleich Java und Python (Schleifen)
Java
Python
for (<Element>:<Kollektion>)
Anweisung;
for ziel in sequenz:
…
for (<Init>;<Bedingung>;Anweisung)
[else:
…]
Anweisung;
while ziel in sequenz:
while (<Bedingung>) Anweisung;
…
[else:
do Anweisung; while (<Bedingung>);
10
…]
Grundlagen der Programmierung II
DBIS - SS2011
Java - Geschichte
Ursprung:
„Green“-Project bei der Firma Sun Microsystems 1991
Entwicklung eines Systems mit folgenden Eigenschaften:
• hardwareunabhängig
• 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
11
Grundlagen der Programmierung II
DBIS - SS2011
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;
END;
END p.
Compiler
00010110010
11001001001
00001110001
11111000001
10101010100
11001100011
11001100111
11000111001
Ausführung
Ergebnis
Maschinencode
Programm (Quellcode)
• Interpreter (bei Basic, Lisp, Python usw.):
10 INPUT n$
20 FOR i=1 TO 10
30 PRINT “Hi”,n$
40 NEXT
Anweisung Nr. i
12
Interpreterer
00010110010
11001001001
Ausführung
Ergebnis Nr. i
Maschinencode
Grundlagen der Programmierung II
DBIS - SS2011
Plattformunabhängigkeit von Java
Vorgehensweise bei Java
(Java Virtual Machine)
Ergebnis
JavaInterpreter
(i686-CPU)
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
JavaInterpreter
(Power PC)
Java Bytecode
(plattformunabhängig)
Ergebnis
JavaInterpreter
(SPARC)
Ergebnis
13
Grundlagen der Programmierung II
DBIS - SS2011
Ergebnis
JavaInterpreter
(i686-CPU)
class Dreieck ext ends GeoObj {
double seite,ho ehe,alpha;
Dreieck(double s,
double h,
double a) {
this.seite=s;
this.hoehe=h;
this.alpha=a; }
double berechne Flaeche() {
return 0.5*se ite*hoehe);}
}
Java
Compiler
JavaInterpreter
(Power PC)
Java Bytecode
(plattformunabhängig)
Java Quellcode
Ergebnis
JavaInterpreter
(SPARC)
Java
Libraries
Ergebnis
HalloWelt.java
HalloWelt.class
javac HalloWelt.java
14
Grundlagen der Programmierung II
„Hallo Welt“
java HalloWelt
DBIS - SS2011
Java Bytecode
javac hallowelt.java
javap –c hallowelt
15
Grundlagen der Programmierung II
DBIS - SS2011
Was ist Java?
Java =
• Programmiersprache (OO)
• Virtuelle Maschine
Ergebnis
• Bibliotheken
JavaInterpreter
(i686-CPU)
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
JavaInterpreter
(Power PC)
Java Bytecode
(plattformunabhängig)
Ergebnis
JavaInterpreter
(SPARC)
Ergebnis
16
Grundlagen der Programmierung II
DBIS - SS2011
JRE und JDK
Java Runtime Environment (JRE) – enthält die
Java Virtual Machine und eine Programmierschnittstelle (API), welche die Standard-Klassen
bereitstellt.
Java Development Kit (JDK) – enthält den
Compiler zu Erstellen des Byte-Codes (und
Programme weitere hilfreiche Programme zum
Programmieren)
Java Compiler JDK 6 update 25 und Virtuelle Maschine JRE:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
17
Grundlagen der Programmierung II
DBIS - SS2011
18
Grundlagen der Programmierung II
DBIS - SS2011
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:
„Thinking in Java 3“ von Bruce Eckel !!!
http://www.smart2help.com/e-books/tij-3rd-edition/TIJ3.htm
19
Grundlagen der Programmierung II
DBIS - SS2011
Pause
20
Grundlagen der Programmierung II
DBIS - SS2011
Programmieren/Arbeitsablauf allgemein
21
Grundlagen der Programmierung II
DBIS - SS2011
Wiederholung: Programmieren allgemein
Parameter / Konstante Datentypen
Bedingungen / Verzweigungen
Schleifen / Rekursion
Methoden / Funktionen, Prozeduren
Kommentare
…
22
Grundlagen der Programmierung II
DBIS - SS2011
Kontrollstrukturen in Java
• if
• switch
• while
• for
23
Grundlagen der Programmierung II
DBIS - SS2011
Mehrfachauswahl (switch)
• Soll eine Variable auf mehrere Werte überprüft
werden, dann kann die If-Anweisung unübersichtlich
werden.
• Eine switch-Anweisung ist für solche Fälle besser
geeignet.
24
Grundlagen der Programmierung II
DBIS - SS2011
Mehrfachauswahl (switch)
int wahl = 3;
…
switch (wahl)
{
case 1:
Anw1; [break;]
case 3:
{Block3} [break;]
case 5:
Anw5; [break;]
…
[default:
. . . [break;]]
}
25
Grundlagen der Programmierung II
DBIS - SS2011
Mehrfachauswahl (switch)
• Die Variable wahl muss vom Typ
– char
– byte
– short
– int
• Nicht erlaubt sind:
– long
– float
– double
– boolean
26
Grundlagen der Programmierung II
DBIS - SS2011
Unbestimmte Schleifen (while)
Nur wenn die Bedingung wahr ist, wird der Block
ausgeführt:
while (Bedingung)
{
Block
}
kopfgesteuert
Der Block wird auf jeden Fall einmal durchlaufen:
do
{
Block
fußgesteuert
}
while (Bedingung);
27
Grundlagen der Programmierung II
DBIS - SS2011
Bestimmte Schleifen (for)
Anzahl der Durchläufe kann vorher festgelegt werden.
for (<Init>;<Bedingung>;Anweisung)
Anweisung;
int i;
for (i = 1; i <= 10;) {
System.out.println(i)
i = i+1;
}
28
Grundlagen der Programmierung II
DBIS - SS2011
Dateinamen (Endung)
• Quellcode auf *.java
statt *.py in Python
oder *.hs in Haskell
• Compilierter Code auf *.class
• case sensitive
Java unterscheidet zwischen Groß- und
Kleinschreibung (auch im Quellcode)!
Java auf den Rechnern der RBI
Java: /opt/rbi/bin/java
Javacompiler: /opt/rbi/bin/javac
29
Grundlagen der Programmierung II
DBIS - SS2011
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!”);
}
MUSS gleich sein!
}
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!“
30
Grundlagen der Programmierung II
DBIS - SS2011
Programmstruktur:
Klassen, Methoden und Variablen
class ClassName {
type variablenName = anfangswert ;
rückgabeType methodenName(type parameter1, …){
}
}
Ein erstes Beispiel:
class Student {
int semester;
int getSemester() {
return semester;
}
}
31
Grundlagen der Programmierung II
DBIS - SS2011
Klassen, Methoden und Variablen
Konstruktor:
Student() { … }
Student(int semester) { … }
Objekt student1 erzeugen:
Student student1 = new Student();
Methode aufrufen und Rückgabewert speichern:
int semanzahl = student1.getSemester();
32
Grundlagen der Programmierung II
DBIS - SS2011
Bibliotheken
Start!
33
Grundlagen der Programmierung II
DBIS - SS2011
OO
Einführung in die
Objektorientierung
siehe auch V8 aus
PRG-1 WS 2010/2011
34
Objektorientierung
Das Objektmodell beschreibt „die Welt“
als eine Menge interagierender Objekte.
35
Grundlagen der Programmierung II
DBIS - SS2011
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).
• ein benutzerdefinierter Typ in einer objektorientierten
Programmiersprache.
• eine zur Compilezeit des Programms notwendige
Typspezifikation.
36
Grundlagen der Programmierung II
DBIS - SS2011
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.
• 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.
37
Grundlagen der Programmierung II
DBIS - SS2011
Beispiele
Klasse
Objekte (Instanzen)
PKW
• mein Auto
• dein Auto
• das Auto mit dem Kennzeichen F-CB 2000
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
38
Grundlagen der Programmierung II
DBIS - SS2011
Attribute und Zustand
Die Attribute eines Objektes
legen die Eigenschaften und Zustände des Objektes fest.
Der Zustand eines Objektes
ist die Gesamtheit der Attribute eines Objektes plus ihre momentanen Werte.
F-CB 2000
PKW
DA-XY 123
Typ
Farbe
km/h
39
Grundlagen der Programmierung II
DBIS - SS2011
Methoden
Methoden
• 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.
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
40
Grundlagen der Programmierung II
DBIS - SS2011
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.
F-CB 2000
PKW
DA-XY 123
Typ
Farbe
km/h
VW
Rot
60
BMW
Gelb
100
beschleunigen()
bremsen()
41
Grundlagen der Programmierung II
DBIS - SS2011
Vererbung (Inheritance) in der OOP
Die Unterklasse erbt alle Merkmale der Oberklasse und ist
ihr 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
Erweiterung ihrer Oberklasse.
Eine Unterklasse kann selbst wieder Oberklasse sein. Dadurch ergibt
sich eine Baumstruktur, die so genannte Vererbungsstruktur oder
Klassenhierarchie.
Die Vererbung ist transitiv.
42
Grundlagen der Programmierung II
DBIS - SS2011
Beispiel für eine Klassenhierarchie (1)
Kraftfahrzeug
Typ, Farbe, kmh
beschleunigen()
bremsen()
Kraftfahrzeug ist 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.
43
Grundlagen der Programmierung II
DBIS - SS2011
Beispiel für eine Klassenhierarchie (2)
Kraftfahrzeug
Typ, Farbe, kmh
beschleunigen()
bremsen()
LKW anhängen()
LKW ist eine Unterklasse von Kraftfahrzeug. Sie erbt alle
Eigenschaften von ihrer Oberklasse, hat aber die zusätzliche
Methode anhängen().
Es gibt auch Kraftfahrzeuge, die keine LKWs sind.
44
Grundlagen der Programmierung II
DBIS - SS2011
Beispiel für eine Klassenhierarchie (3)
Kraftfahrzeug
Omnibus Stehplätze
PKW
Typ, Farbe, kmh
beschleunigen()
bremsen()
LKW anhängen()
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.
45
Grundlagen der Programmierung II
DBIS - SS2011
Beispiel für eine Klassenhierarchie (4)
Kraftfahrzeug
Omnibus Stehplätze
Limousine
PKW
Typ, Farbe, kmh
beschleunigen()
bremsen()
LKW anhängen()
Cabriolet Verdeck öffnen()
Cabriolet und Limousine können zusätzliche Methoden bzw. Attribute haben.
Beide erben alle Merkmale von PKW und damit auch von Kraftfahrzeug.
46
Grundlagen der Programmierung II
DBIS - SS2011
Beispiel für eine Klassenhierarchie in UML
47
Grundlagen der Programmierung II
DBIS - SS2011
Mehrfach-Vererbung
Fahrzeug
Typ, Farbe, kmh
beschleunigen()
bremsen()
Schiff
PKW
LKW anhängen()
AmphibienFahrzeug
Mehrfach-Vererbung ist in Java nicht möglich
… in Python schon!
48
Grundlagen der Programmierung II
DBIS - SS2011
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, nicht
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!
49
Grundlagen der Programmierung II
DBIS - SS2011
Identität eines Objektes
deinAuto
meinAuto
Referenz 1
keine Referenzen
Referenz 2
Objekt mit zwei Namen und zwei Referenzen
Objekt ohne Namen
Ein Objekt ohne Namen besitzt zwar eine Identität,
ist aber nicht (mehr) erreichbar …
50
Grundlagen der Programmierung II
DBIS - SS2011
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
Java 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.
51
Grundlagen der Programmierung II
DBIS - SS2011
Beispiel JavaScript
52
Grundlagen der Programmierung II
DBIS - SS2011
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
• dynamisch Typisiert
• läuft in einer Art Sandbox (Sandkasten) – kein
direkter Dateizugriff oder Aufruf von Programmen
• … also JavaScript ≠ Java
53
Grundlagen der Programmierung II
DBIS - SS2011
Applets
Beispiel:
package simpleapplet;
import java.awt.Graphics;
class HelloWorld extends java.applet.Applet {
public void paint (Graphics g) {
g.drawString(“Hallo Welt!”, 10, 10);
}
}
54
Grundlagen der Programmierung II
DBIS - SS2011
Einbindung des Applet in HTML
<html>
<body>
<applet
codebase = "."
code
= "simpleapplet.HelloWorld.class"
width
= "400"
height
= "300"
>
</applet>
</body>
</html>
55
Grundlagen der Programmierung II
DBIS - SS2011
Ausführen des Applets
56
Grundlagen der Programmierung II
DBIS - SS2011
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:
• 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
57
Grundlagen der Programmierung II
DBIS - SS2011
Kommentare in Java
In Java gibt es drei Möglichkeiten zur Kommentierung:
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.
Die Schachtelung der „Kommentarklammern“ ist nicht erlaubt.
""" Kommentar
über
mehrere
Zeilen """
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-Kommentar
* @since JDK1.0
*/
58
Grundlagen der Programmierung II
(ein String)
DBIS - SS2011
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
* @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; }
}
DBIS - SS2011
Java - API - Dokumentation
http://download.oracle.com/javase/6/docs/api/
60
Grundlagen der Programmierung II
DBIS - SS2011
Javadoc
Homepage: http://java.sun.com/j2se/javadoc/
Aufruf (unter dem „bin“-Ordner des JDK):
javadoc [ options ] [ packagenames ] [ sourcefilenames ] [
-subpackages pkg1:pkg2:... ] [ @argfiles ]
Tags
@author; {@code}; {@docRoot}; @deprecated;
@exception; {@inheritDoc}; {@link}; {@linkplain};
{@literal}; @param; @return; @see; @serial;
@serialData; @serialField; @since; @throws; {@value};
@version
61
Grundlagen der Programmierung II
DBIS - SS2011
Herunterladen