Kapitel 4 - 8.11.2005

Werbung
Informatik I – WS05/06 – Folien von Tobias Dezulian
Kapitel 4 - 8.11.2005
• Schichtenarchitektur: Kompiler und Interpreter
• Java (Source & Byte Code), " Hello World " Programm
• Datenstrukturen in Java: Primitivtypen, Arrays, Objekte
• Klassen, Objekte und Referenzen
• Lehrbeispiel: Sortieralgorithmus " Bubble Sort"
¾ Sortieren von Primitivtypen
¾ [Sortieren von Strings]
¾ [Sortieren von Objekten anhand eines Feldes]
Informatik I – WS05/06 – Folien von Tobias Dezulian
Schichtenarchitektur am Beispiel: C,
BASIC, Java
Graphik: A. Weber und W. Küchlin
Informatik I – WS05/06 – Folien von Tobias Dezulian
Schichtenarchitektur am Beispiel: C,
BASIC, Java
Java
Virtuelle
Maschine (JVM)
Kompilierung
Java
Virtuelle
Maschine (JVM)
Graphik: A. Weber und W. Küchlin
Informatik I – WS05/06 – Folien von Tobias Dezulian
Schichtenarchitektur am Beispiel: C
C Source Code
Kompilierung:
[+]: Code läuft effizient
[-]: Abhängig von BS und CPU
Kompilierung
Assembler Code
Ausführung
Betriebssystem
CPU
Informatik I – WS05/06 – Folien von Tobias Dezulian
Schichtenarchitektur am Beispiel: BASIC
BASIC Code
Interpretation:
[+]: Unabhängig von BS und CPU
[-]: Code läuft etwas langsamer
Interpretation
BASIC
Interpreter
Betriebssystem
CPU
Schichtenarchitektur am
Beispiel: Java
Informatik I – WS05/06 – Folien von Tobias Dezulian
Java Source Code
Kompilierung
Java Byte Code
Interpretation
Kompilierung + Interpretation:
[+]: Unabhängig von BS und CPU
[+]: Code läuft effizient
[-]: Komplexeres Verfahren
Java
Virtuelle
Maschine (JVM)
Betriebssystem
CPU
Java Source und Byte Code
Informatik I – WS05/06 – Folien von Tobias Dezulian
Java Source Code
Kompilierung
[Kompiler: javac]
Java Byte Code
public class Calculator {
public static void main(String[] args){
int i = 17 + 20 - 10;
System.out.println(i);
return;
}
}
bipush 17
istore_1
iload_1
bipush 20
iadd
istore_1
iload_1
bipush 10
isub
istore_1
getstatic #2; //java/lang/System.out:Ljava/io/PrintStream;
iload_1
invokevirtual #3; //Method java/io/PrintStream.println:(I)V
return
Informatik I – WS05/06 – Folien von Tobias Dezulian
Java Live Demo
Java Source Code
Kompilierung
[Kompiler: „javac“]
Java Byte Code
Interpretation
[JVM: „java“]
Java
Virtuelle
Maschine
Empfohlene Literatur:
•http://java.sun.com/docs/books/tutorial/getStarted/cupojava/index.html
•http://java.sun.com/docs/books/tutorial/index.html
Informatik I – WS05/06 – Folien von Tobias Dezulian
„Hello World“ Programm in Java (I)
// Datei: HelloWorld.java
public class HelloWorld {
public static void main( String[] args ) {
System.out.println("Hello World!");
}
}
• das gesamte Programm befindet sich innerhalb der
Klassendefinition public class HelloWorld {}
• Java-Programm = Menge von Klassendefinitionen
• die Klassendefinition HelloWorld muss in einer
gleichnamigen Datei „HelloWorld.java“ abgespeichert sein
• main()-Methode ist der Einstiegspunkt des Programms
• Bildschirmausgabe mit System.out.println()
Informatik I – WS05/06 – Folien von Tobias Dezulian
„Hello World“ Programm in Java (II)
• Übersetzung der Applikation (Compiler):
% javac HelloWorld.java
• nach fehlerfreier Übersetzung entsteht
die Bytecode-Datei: HelloWorld.class
• ausführbares Programm = Menge von .class-Dateien
• Ausführen der Applikation (Interpreter):
% java HelloWorld
• Ausgabe von “Hello World!” auf dem Bildschirm
Informatik I – WS05/06 – Folien von Tobias Dezulian
Variablendeklaration in Java
Variablen
• sind Positionen im Speicher, die Werte aufnehmen können.
Bestehen aus Typ, Bezeichnung und Wert: int i = 12;
Typ
Bezeichnung
Wert
• müssen vor der Benutzung deklariert werden:
zaehler = 7; //Fehler: Variable „zaehler“
unbekannt!
• Deklaration mit gleichzeitiger Anfangswert-Zuweisung erlaubt:
boolean muede = false;
• Mehrfachdeklarationen in einer Zeile möglich:
int i = 0, j = 3, k = 5;
• Variablennamen müssen mit einem Buchstaben, einem
Unterstreichungsstrich (_) oder einem Dollarzeichen ($) beginnen
Variablen in Java
Informatik I – WS05/06 – Folien von Tobias Dezulian
Bezeichnungen:
• Java ist eine „case sensitive“ Programmiersprache, d.h.
unterscheidet
generell Groß/Kleinbuchstaben : int f = 12; int F = 17;
• Stilistischer Tipp: Aussagenkräftige Bezeichnungen wählen!!
float tempCelsius = calcCelsius( tempFahrenheit );
• Deklaration mit gleichzeitiger Anfangswert-Zuweisung erlaubt:
boolean muede = false;
• Mehrfachdeklarationen und Zuweisungen in einer Zeile möglich:
int i = 0, j = 3, k = 5;
• Variablennamen müssen mit einem Buchstaben, einem
Unterstreichungsstrich (_) oder einem Dollarzeichen ($) beginnen
Zwei Arten von Datentypen
in Java:
• Primitivtypen
• Klassen/Interfaces
Neue (benutzerspezifische) Datentypen
können (nur) durch neue
Klassendefinitionen erzeugt werden !
Informatik I – WS05/06 – Folien von Tobias Dezulian
Datenstrukturen: Primitivtypen
Typ
Bedeutung
Größe
boolean
true oder false
char
Unicode-Zeichen
16 Bits
byte
Ganze Zahl mit Vorzeichen
8 Bits
short
Ganze Zahl mit Vorzeichen
16 Bits
int
Ganze Zahl mit Vorzeichen
32 Bits
long
Ganze Zahl mit Vorzeichen
64 Bits
float
IEEE 754-Fließkommazahl
32 Bits
double
IEEE 754-Fließkommazahl
64 Bits
1 Bit
Aufgrund der durch die Sprachdefinition
festgeschriebenen Größe und Handhabung der
Primitivtypen gibt es keine Plattformabhängigkeiten (wie
in vielen anderen Sprachen, z.B. C) !!!
Informatik I – WS05/06 – Folien von Tobias Dezulian
Datenstrukturen: Klassen
Eine Klasse ist ein Datentyp, der wiederum Attribute aus
Primitivtypen und Referenzen auf Objekten anderer Klassen
beinhalten kann. Diese Attribute heißen in Java „Felder“.
class String{
char[] zeichenkette;
class Auto{
int anzahlTueren;
}
float motorTemp;
String kennzeichen;
class Person{
Person fahrer;
String name;
}
int alter;
Felder
}
Eine Klasse ist Schablone für Objekte
Huhn
Informatik I – WS05/06 – Folien von Tobias Dezulian
Klasse
String name;
float groesse;
Image bildchen;
Berta
Kunigunde
Objekte
Elfriede
Graphik: http://www.ias.uni-stuttgart.de/
Elsa
Klassen und Objekte
Informatik I – WS05/06 – Folien von Tobias Dezulian
• Jedes Objekt wird als Instanz seiner Klasse bezeichnet.
• Erzeugung (Instanziierung) eines Objekts auf Basis seiner Klasse
erfolgt mittels des new Operators.
• Der Zugriff auf die Felder einer Instanz erfolgt mittels des "."-operators.
public class ComplexNumber{
float real;
float complex;
}
ComplexNumber cn = new ComplexNumber();
cn.real = 17.891;
cn.complex = 13.112;
float someFloat = cn.complex;
System.out.print(someFloat);
13.112
Primitivtypen, Objekte, Referenzen
Informatik I – WS05/06 – Folien von Tobias Dezulian
Primitivtypen und Objekte unterscheiden sich sehr grundlegend:
• Eine Variable eines Primitivtyps enthält einen Wert.
• Eine Variablen eines nicht-Primitivtyps (Referenz) verweist auf
ein Objekt (Spezialfall: null) und enthält als Wert eine
Referenz auf dieses Objekt.
int myInt = 99;
int myInt2 = myInt;
ComplexNumber cn = new ComplexNumber();
real: 17.891
cn.real = 17.891;
complex: 13.1
cn.complex = 13.1;
ComplexNumber cn2 = cn;
t
r
e
zi ert
n
re nzi
e
f
myInt == 99
re fere
99
myInt2 ==
re
cn
==
ref
ref
cn2
==
Informatik I – WS05/06 – Folien von Tobias Dezulian
Referenzen
ComplexNumber cn = new ComplexNumber();
cn.real = 17.891;
cn.complex = 13.1;
ComplexNumber cn2 = cn;
ComplexNumber cn3 = new ComplexNumber();
cn3.real = 17.891;
cn3.complex = 13.1;
real: 17.891
cn ==
cn2 ==
cn3 ==
cn
cn
== cn2
== cn3
ref
ref
ref
true
false
referenziert
referenziert
re f e
ren
complex: 13.1
zier
t
real: 17.891
complex: 13.1
Informatik I – WS05/06 – Folien von Tobias Dezulian
Datenstrukturen: Klassen
Die Java Laufzeitumgebung (JRE) stellt automatisch schon mehr
als 3000 Klassen zur Verfügung, auf die jedes Java Programm
zurückgreifen kann. Zusätzlich lassen sich in Form anderer
Bibliotheken beliebig viele andere Klassen einbinden. Und (fast)
jedes Java-Programm deklariert eine Vielzahl eigener Klassen.
Sonderklassen, welche durch die Java Sprachdefinition einen
eigenen syntaktischen Umgang mitbringen:
• Zeichenkette (String)
• Reihung (Array)
• Aufzählung (Enumeration)
[wird später behandelt]
Informatik I – WS05/06 – Folien von Tobias Dezulian
Syntaktisch ausgezeichnete Klassen: Strings
Da Strings sehr häufig benutzt werden, gibt es zusätzlich zur
Standardsyntax im Umgang mit Klassen noch folgende
Möglichkeiten:
• Konkatenation mit + operator
• Automatische Konvertierung von Primitivtypen und Objekten
String textEins = "hel"+"lo";
char ausrufezeichen = '!';
String textZwei = "world";
int number42 = 42;
String textOut = textEins + "_"
+ textZwei + ausrufezeichen
+ " the number is:"+number42;
System.out.println(textOut);
hello_world! the number is:42
Informatik I – WS05/06 – Folien von Tobias Dezulian
Syntaktisch ausgezeichnete Klassen: Arrays
Ein Array ist eine "Container"-Klasse, welche eine Menge von
Primitivtypen (gleichen Typs) oder Objekte (gleichen Typs)
zusammenfasst und leicht verwaltbar macht:
int[] lottozahlen = { 27, 15, 2, 40, 4, 13, 37 };
referen
z i er t
27
15
2
40
4
13
37
Image uluru, paris, fiji;
Ein Array ist lediglich Container!!!
.. //initialisierung
Image[] urlaubsbilder = { uluru, paris, fiji};
referen
z i er t
uluru
paris
Zugriff:
lottozahlen[0]=10;
Image favorit=urlaubsbilder[2];
referenziert
fiji
Syntaktisch ausgezeichnete Klassen: Arrays
Ein Array kann mit new() leer erzeugt werden:
Informatik I – WS05/06 – Folien von Tobias Dezulian
int[] lottozahlen = new int[3]();
Ein Array kann höhere Dimensionalität besitzen:
Kochplatte[][] kochplatten = new Kochplatte[2][2]();
kochplatten[1][1]
kochplatten[0][1]
kochplatten[0][0]
kochplatten[1][0]
Leitbeispiel:
Sortier-Algorithmus "Bubble Sort"
Informatik I – WS05/06 – Folien von Tobias Dezulian
Eingabe: Eine Reihung
(Array) von Elementen (z.B.
Zahlen) und eine Ordnung.
Ausgabe: Eine Reihung
derselben Elemente –
wobei ihre Reihenfolge jetzt
dieser Ordnung entspricht.
Ablauf: Vergleiche
schrittweise benachbarte
Elemente und vertausche
sie ggfs in die durch die
Ordnung vorgegebene
Reihenfolge. Höre auf,
sobald alle Elemente
paarweise geordnet sind.
(Zahlen-)
Wert
Position innerhalb des Arrays
Graphik von: http://wwwtcs.inf.tu-dresden.de/~stoschek/aud/bubble/bubble.html
Informatik I – WS05/06 – Folien von Tobias Dezulian
Sortier-Algorithmus: Bubble Sort
Eingabe: Eine Reihung
(Array) von Elementen (z.B.
Zahlen) und eine Ordnung.
Ausgabe: Eine Reihung
derselben Elemente –
Vertauschen
!!! ihre Reihenfolge jetzt
wobei
dieser Ordnung entspricht.
Ablauf: Vergleiche
schrittweise benachbarte
Elemente und vertausche
sie ggfs in die durch die
Ordnung vorgegebene
Reihenfolge. Höre auf,
sobald alle Elemente
paarweise geordnet sind.
(Zahlen-)
Wert
Position innerhalb des Arrays
Graphik von: http://wwwtcs.inf.tu-dresden.de/~stoschek/aud/bubble/bubble.html
Informatik I – WS05/06 – Folien von Tobias Dezulian
Sortier-Algorithmus: Bubble Sort
Eingabe: Eine Reihung
(Array) von Elementen (z.B.
Zahlen) und eine Ordnung.
Ausgabe: Eine Reihung
derselben Elemente –
Belassenwobei
!!! ihre Reihenfolge jetzt
dieser Ordnung entspricht.
Ablauf: Vergleiche
schrittweise benachbarte
Elemente und vertausche
sie ggfs in die durch die
Ordnung vorgegebene
Reihenfolge. Höre auf,
sobald alle Elemente
paarweise geordnet sind.
(Zahlen-)
Wert
Position innerhalb des Arrays
Graphik von: http://wwwtcs.inf.tu-dresden.de/~stoschek/aud/bubble/bubble.html
Informatik I – WS05/06 – Folien von Tobias Dezulian
Bubble Sort von Integern in Java
int[] r; //Ein- und Ausgabe-Reihung
int i; //index
int tmp; //temporaerer Speicher
boolean done; //merkt sich, ob Alg fertig
VariablenDeklaration
r = new int[]{ 17, 2, 20, 5, 6};
Eingabe
//Sortieren
do{
done = true;
for(i=0; i<r.length-1; i++){
if( r[i] > r[i+1]){
tmp = r[i]; r[i]=r[i+1]; r[i+1] = tmp;
done = false;
}
}
}while(!done);
//Ausgabe
for(i=0; i<r.length; i++){
System.out.print(r[i]+" ");
}
Algorithmus
Ausgabe
Herunterladen