Objektorientierte Programmierung

Werbung
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Proinformatik-Vorlesung
Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-Berlitz
Sommersemester 2011
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
1
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Organisatorisches
Zeitlicher Ablauf
08:30 – 11:00 Uhr
2 Vorlesungsteile mit ca. 15 Minuten Pause
11:00 – 12:00 Uhr
Mittagspause
12:00 – 13:30 Uhr
13:30 – 15:00 Uhr
Theoretische und praktische Übungen
(aktive und erfolgreiche Teilnahme)
Tutoren und Tutorien
Christoph Krüger
SR 051 Takustr. 9,
Benjamin Schönburg SR 006 Takustr. 9,
Michael Kmoch
Eduard Wolf
SR K36 Takustr. 9
RR Bioinf Arnimallee 6
Scheinkriterien
Übungszettel werden nach Bedarf am Ende einer Vorlesung ausgegeben
(60% der Aufgaben erfolgreich bearbeiten)
Klausur: vorletzter Vorlesungstag (08.09.2011), 8:30 Uhr s.t., 90 Minuten
(Bestehen der Klausur)
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
2
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Vorlesungsmaterialen und Literaturliste
Vorlesungsmaterialien
Vorlesungsfolien werden bereit gestellt und ersetzen das Vorlesungsskript, Programme,
Literaturhinweise und weiteres Material werden auf einer Veranstaltungswebseite zur
Verfügung gestellt:
http://www.mi.fu-berlin.de/kvv/course.htm?sid=22&iid=1&cid=9698
Literaturliste
[1] Hoffmann D.W.: "Theoretische Informatik", Hanser-Verlag 2009
[2] Kleuker S.: "Formale Modelle der Softwareentwicklung - Model-Checking,
Verifikation, Analyse und Simulation", Vieweg-Teubner-Verlag 2009
[3] Block M.: "Java-Intensivkurs - In 14 Tagen lernen Projekte erfolgreich
zu realisieren", 2. Auflage, Springer-Verlag 2009
[4] Gries D., Gries P.: "Multimedia Introduction to Programming Using Java",
Springer-Verlag 2005
[5] Weiss M.A.: "Data Structures & Problem Solving Using Java", 3. Auflage,
Addison-Wesley-Verlag 2005
[6] Cormen T.H., Leiserson C.E., Rivest R.L., Stein C.: "Introduction to Algorithms",
3. Auflage, MIT Press 2009
[7] Logufatu D.: "Grundlegende Algorithmen mit Java: Vom Algorithmus zum
fertigen Programm.", Vieweg-Teubner-Verlag 2008
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
3
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Diskussionsplattform - Forum
Mailingliste:
werden wir nicht brauchen - wichtige Änderungen oder
Mitteilungen erscheinen im Forum
Forum:
http://www.java-uni.de
Es gibt einen passwortgeschützten Bereich nur für Euch:
FU SoSe 2011: Proinformatik - Algorithmen und Programmierung II
("proinf")
Das Java-Forum dient als Diskussionsplattform.
Helft Euch gegenseitig!
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
4
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Überblick und Motivation
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
5
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
6
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Unsere wichtigsten Themen und Ziele
Programmiersprache Java
- Einführung und Ausbildung zum Selbststudium
- lernen objektorientiert zu denken und zu programmieren
Einführung in die Laufzeit- und Komplexitätsanalyse
- kleine Programmabschnitte analysieren und vergleichen können
- effiziente Lösungen für neuartige Probleme formulieren
Verifikations- und Testtechniken
- Programme möglichst fehlerfrei schreiben
- Entworfene Programme testen
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
7
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Entwicklungsumgebung für Java (erste Tage)
Für die ersten kleinen Programme in Java werden wir Notepad++ oder einen vergleichbaren Editor
mit Syntaxhighlighting verwenden:
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
8
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
9
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Entwicklungsumgebung für Java
Für eine professionelle Entwicklung größerer Programme in Java werden wir später lernen mit
Eclipse zu arbeiten:
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
10
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Motivation zu Projekten und Ausblick
Programmieren lernen heißt eine Sprache lernen … und Sprachen
muss man sprechen!
Das bedeutet für uns:
- Projekte
- Projekte
- Projekte
-…
- viele Projekte
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
11
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Einstieg in die Softwaretechnik
Visuelle Sprachen werden oft für die Kommunikation eingesetzt ...
Wir werden diese in den verschiedenen Phasen der Softwareentwicklung
kennenlernen und einsetzen.
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
12
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Handyprojekte mit Java
Klein … aber jederzeit dabei!
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
13
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Multitouchprojekte mit Java
Wenn uns Zeit bleibt … warum nicht auch so etwas!
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
14
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Top-Down- versus Bottom-Up-Lernen
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
15
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Vorbereitungen und Javas kleinste
Bausteine
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
16
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Übersicht zum Vorlesungsinhalt
zeitliche Abfolge und Inhalte können variieren
Vorbereitungen und Javas kleinste Bausteine
•
•
•
•
•
•
•
Motivation zu Java
Installation der aktuellen Java-Version
Primitive Datentypen und ihre Wertebereiche
Wiederholung: Boolesche Algebra
Variablen und Konstanten
Operationen auf primitiven Datentypen
Umwandlungen von Datentypen
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
17
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Warum gerade mit Java beginnen?
Es gibt viele Gründe mit dem Programmieren zu beginnen, aber warum sollte es gerade die
Programmiersprache Java sein?
•
•
•
•
•
•
•
Java ist leicht zu erlernen
relativ kleiner Befehlsumfang
strikte Typsicherheit
plattformunabhängig
hat dominierende Stellung auf mobilen Geräten
und in der Welt der Server
mit dem Java Native Interface (JNI) können Windows-DLLs
und C++-Bibliotheken eingebunden werden
sehr große Community
Generell gilt:
Die Chance in Java etwas falsch zu machen ist sehr viel kleiner als in anderen
Programmiersprachen, wie z.B. in C oder C++.
Java wird deshalb auf Grund dieser Eigenschaften gerade in der Lehre intensiv eingesetzt.
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
18
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Was leistet Java nicht?
Es gibt aber auch Systeme, bei denen Java nicht eingesetzt werden sollte bzw. folgende
Nachteile:
•
•
Geschwindigkeitsrelevante bzw. hardwarenahe Softwaresysteme
Operatoren können nicht überladen werden
In C++ können wir beispielsweise den Operator + für Vektoren
überladen:
Vektor c = a + b;
In Java können wir dafür nur eine Funktionsschreibweise
anbieten:
Vektor c = Vektor.add(a, b);
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
19
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Installation von Java und Vorbereitungen
Wir installieren die aktuelle Java-Version 1.7 mit interessanten Neuerungen.
1) Download1) und Installation des JDK (Java Development Kit)
2) Download2, 3) und Installation einer Entwicklungsumgebung
3) Testen der installierten Javaversion.
i) In einer Konsole prüfen, ob der Compiler vorhanden ist:
c:\javac
ii) Folgendes Testprogramm im Editor schreiben und mit dem Namen TestProgramm.java
speichern:
public class TestProgramm {}
iii) Kompilieren und ausführen des Testprogramms:
c:\javac TestProgramm.java
c:\java TestProgramm
1) Oracle:
2) Notepad++:
3) Eclipse:
http://www.oracle.com/de/technologies/java/index.html
http://notepad-plus-plus.org
http://www.eclipse.org
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
20
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Variablen als Speicherplatz
...
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
21
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Primitive Datentypen in Java
Wahrheitswerte
boolean
Zeichen und Symbole Zahlen
char
byte, short,
int, long,
float, double
Warum haben Zahlen
eine besondere Stellung?
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
22
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Primitive Datentypen und ihre Wertebereiche
Datentyp
Wertebereich
true, false
boolean
0 … 65.535 (z.B. ‘a‘, ‘b‘, …, ‘A‘, …, ‘1‘, ‘2‘, …)
char
-128 bis 127
byte
-32.768 bis 32.767
short
-2.147.483.648 bis 2.147.483.647
int
long -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807
float
+/-1,4E-45 bis +/-3,4E 38
double
+/-4,9E-324 bis +/-1,7E 308
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
Bit
8
16
8
16
32
64
32
64
23
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Deklaration von Variablen
Deklaration von Variablen:
<Datentyp> <Name>;
Beispiel:
boolean a;
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
24
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Zuweisung von Werten
Nach der Deklaration steht die Variable bereit und kann einen Wert mit dem
Symbol = zugewiesen bekommen.
Die Zuweisung erlaubt aber nur den Wert der rechten Seite auf die linke zu
übertragen:
a = true;
Es andersherum aufzuschreiben wäre fehlerhaft:
true = a;
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
25
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Deklaration und Zuweisung
Deklaration von Variablen und Zuweisung in einem Schritt:
<Datentyp> <Name> = <Wert>;
Beispiele:
boolean a, b;
a = true;
char c = 'b';
int d = 12, e, f = 0;
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
26
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Deklaration und Initialisierung vor Verwendung!
Variablen müssen vor dem Einsatz immer initialisiert (also mit einem Wert versehen)
werden.
Folgendes Beispiel führt zu einem Fehler:
int i;
int j = i;
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
27
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Bezeichnungen von Variablen
Es gibt zwar ein paar Beschränkungen für die Namensgebung, aber der wichtigste
Grund für die Wahl ist die Aufgabe der Variable.
Ein paar Beispiele dazu:
boolean istFertig;
double kursWert;
int
schrittZaehler;
Variablennamen beginnen mit einem Buchstaben, Unterstrich oder Dollarzeichen,
nicht erlaubt sind dabei Zahlen. Nach dem ersten Zeichen dürfen aber sowohl
Buchstaben als auch Zahlen folgen. Operatoren, Schlüsselwörter und vordefinierte
Literale dürfen ebenfalls nicht als Variablennamen verwendet werden.
Zu den reservierten Schlüsselwörtern und Literalen in Java gehören die folgenden:
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
28
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Syntaxhervorhebung
Schlüsselwörter werden fett und Kommentare kursiv gekennzeichnet, das fördert
Übersicht und Lesbarkeit.
Hier ein Beispiel ohne Syntaxhervorhebung (Syntaxhighlighting):
// zählt die Anzahl der bereits besetzten Felder
private int countSigns(int[][] b){
int count=0;
for (int i=0; i < 3; i++)
for (int j=0; j < 3; j++)
if (b[i][j]!=0)
count++;
return count;
}
... und hier mit:
// zählt die Anzahl der bereits besetzten Felder
private int countSigns(int[][] b){
int count=0;
for (int i=0; i < 3; i++)
for (int j=0; j < 3; j++)
if (b[i][j]!=0)
count++;
return count;
}
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
29
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Groß- und Kleinschreibung in Java
Bei Java muss auf Groß- und Kleinschreibung geachtet werden, denn unterschiedliche Schreibweisen bezeichnen unterschiedliche Variablen (case-sensitive).
Folgendes würde deshalb nicht funktionieren:
boolean istFertig;
istFERTIG = true;
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
30
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Variablenbezeichner und Code-Konventionen
Durch eine überlegte Variablenbezeichnung werden zwei Dinge gefördert:
•
•
Zum Einen benötigt der Programmautor weniger Zeit, um seine eigenen
Programme zu lesen, deren Erstellung vielleicht schon etwas länger
zurück liegt, und
zum
Anderen
fördert
es
die
Zusammenarbeit
mit
anderen
Programmierern.
Im Laufe der Zeit haben sich einige Konventionen1) bezüglich der Erstellung von
Programmen etabliert. Der Programmierer sollte sich an diese halten, um sich
selbst und anderen das Leben nicht unnötig schwer zu machen. Frei nach dem
Motto:
Wir müssen nicht immer alles machen, was erlaubt ist.
Bei der Bezeichnung von Variablen in Java hat sich die Konvention durchgesetzt,
dass wir Kombinationen von Verben und/oder Substantiven verwenden.
Die Worte werden dabei, bis auf das erste, beginnen mit einem Großbuchstaben
geschrieben (camelCase).
1) Oracle:
http://www.oracle.com/technetwork/java/codeconv-138413.html
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
31
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Variablen versus Konstanten
Manchmal ist es notwendig, Variablen zu verwenden, die die Eigenschaft besitzen,
während des gesamten Programmablaufs unverändert zu bleiben.
Beispielsweise eine Näherung der Zahl pi:
double pi = 3.14159;
Damit aber nun gewährleistet ist, dass der Softwareentwickler selbst oder auch ein
anderer weiß, dass dieser Platzhalter im Speicher nicht variabel und demzufolge
keine Änderung erlaubt ist, schreiben wir einfach ein final davor, verwenden (laut
Konvention) für den Namen nur Großbuchstaben und machen so aus einer Variable
eine Konstante.
Die Syntax dafür sieht wie folgt aus:
final <Datentyp> <Name> [= <Wert>];
Jetzt können wir unmissverständlich den Platzhalter für pi als Konstante deklarieren:
final double PI = 3.14159;
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
32
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Java-Compiler überprüft final
Sollten wir dennoch versuchen, Konstanten zu verändern ...
final double PI = 3.14159;
PI = 4;
... liefert der Java-Compiler einen Fehler:
KonstantenTest:4: cannot assign a value to
final variable PI
PI = 4;
^
1 error
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
33
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Primitive Datentypen und ihre Operationen: Datentyp boolean
Der Datentyp boolean bezeichnet einen Wahrheitswert und kann demzufolge true
oder false sein.
boolean a;
a = true;
Es gibt eine weit verbreitete Möglichkeit, auf die wir später noch genauer eingehen
werden, einen boolean für eine Entscheidung zu verwenden:
if (<boolean>)
<Anweisung>;
Wenn der boolean den Wert true hat, führen wir die nachfolgende Anweisung aus,
ansonsten überspringen wir diesen Abschnitt.
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
34
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Das wichtigsten logische Operationen: UND, ODER und NICHT
Sommersemester 2011
B1 B2 B1 UND B2 B1 ODER B2
B NICHT B
0
0
1
1
0
1
0
1
0
1
0
0
0
1
0
1
1
1
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
1
0
35
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
UND, ODER und NICHT in Java
In Java verwenden wir && (UND), || (ODER) und ! (NICHT):
boolean a, b, c;
a = true;
b = false;
c = a && b;
Welchen Wert hat c?
boolean a, b, c;
a = true;
b = a && a;
c = b || a;
Welchen Wert hat c?
boolean a = true, b = false, c, d;
c = a && b;
d = (a || b) && !c;
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
Welchen Wert hat d?
36
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Datentyp char
Zeichen oder Symbole werden durch den Datentyp char identifiziert und zwischen
' ' notiert:
char d = '7';
char e = 'b';
Die Variable d trägt als Inhalt das Zeichen '7' und wird aber nicht als Zahl 7
interpretiert.
Schauen wir uns die relationalen Operatoren (Vergleichsoperatoren) stellvertretend
für char an:
boolean d, e, f, g;
char a, b, c;
a = '1';
b = '1';
c = '5';
d
e
f
g
=
=
=
=
a
a
a
c
== b;
!= b;
< c;
>= b;
Sommersemester 2011
//
//
//
//
gleich
ungleich
kleiner
größer-gleich
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
Welche Werte gelten
für d, e, f und g?
37
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Datentyp int
Der Datentyp int repräsentiert Ganzzahlen und ist der wahrscheinlich am häufigsten verwendete:
int a, b = 0;
a = 10;
Das Schöne an Zahlen ist, dass wir sie einfach addieren, subtrahieren, multiplizieren und dividieren können. Aber mit dem Dividieren meinen wir manchmal
zwei verschiedene Dinge.
Schauen wir uns ein Beispiel an:
int a = 5, b = 2, c;
c = a / b;
// DIV-Operator liefert m
// wenn a = m*b+r;
c = a % b;
// MOD-Operator liefert r
int a = 29, b, c;
b = a / 10;
c = a % 10;
Sommersemester 2011
Welche Werte haben b und c?
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
38
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Datentyp int
Der Datentyp int hat einen Wertebereich von: {-231 , -231 +1, …, -1, 0, 1, 2, …, 231-1}
Der kleinste bzw. größte darstellbare Wert liegt jeweils in einer Konstanten vor:
int minimalerWert = Integer.MIN_VALUE;
int maximalerWert = Integer.MAX_VALUE;
Was würde jetzt passieren, wenn wir zu dem größten Wert eine 2 addieren?
231-1 +2 = 2147483647 +2 = Integer.MAX_VALUE +2
Statt 2147483649 erhalten wir -2147483647 auf Grund des zyklischen Verhaltens
durch den begrenzten Speicher.
Hier der Grund dafür:
..
Ubertragsbit
wird “vergessen”
1 … 111
int a
+ 0 … 001
int b
1 0 … 000
int c
Stichwort: Zweierkomplement-Darstellung
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
39
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Zweierkomplement-Darstellung I
Für 0 und positive Zahlen (z.B. Zweierkomplement-Darstellung mit 4 Bit) werden
die entsprechenden Binärzahlen wie folgt erstellt:
0 = 0000
+1 = 0001
+2 = 0010
+3 = 0011
+4
+5
+6
+7
=
=
=
=
0100
0101
0110
0111
Für negative Zahlen negieren wir die Binärzahl elementeweise und addieren
anschließend eine 1 dazu (z.B. -1 => 0001 => 1110 => 1111):
-1
-2
-3
-4
=
=
=
=
1111
1110
1101
1100
Sommersemester 2011
-5
-6
-7
-8
=
=
=
=
1011
1010
1001
1000
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
40
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Zweierkomplement-Darstellung I0
Folgendes zyklisches Verhalten ergibt sich:
0
0000
-2
-3
-1
1111
1110
1
0001
0010
2
3
0011
1101
0100 4
-4 1100
1011
0101
5
-5
1010
0110
6
-6
1001
0111
7
-7
1000
-8
Jetzt ist auch ersichtlich, warum es eine negative Zahl mehr als positive gibt.
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
41
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Kurzschreibweisen der Standardoperationen I
In Java und anderen Programmiersprachen gibt es für alle Standardoperationen,
wie addieren, subtrahieren, usw., eine Kurzschreibweise.
Statt dieser:
<Variable> = <Variable> <Operation> <Ausdruck>
<Anweisung>;
können wir die meisten zweistelligen Operationen auch kurz so schreiben:
<Variable> <Operation>= <Ausdruck>
<Anweisung>;
Hier zwei Beispiele dazu:
int a = 0, b = 1;
a += b;
// entspricht a = a + b;
b -= 5;
// entspricht b = b - 5;
Da solche Standardoperationen typischerweise sehr oft in Programmen vorkommen, erlaubt diese Art der Notation eine Verkürzung der Programme.
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
42
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Kurzschreibweisen der Standardoperationen II
Für Addition und Subtraktion um 1 (wird auch als inkrementieren und dekrementieren bezeichnet), deren Verwendung wahrscheinlich am häufigsten ist, gibt
es sogar noch kürzere Schreibweisen:
a++;
++a;
a--;
--a;
//
//
//
//
Postinkrement:
Preinkrement:
Postdekrement:
Predekrement:
entspricht
entspricht
entspricht
entspricht
a
a
a
a
=
=
=
=
a
a
a
a
+
+
-
1
1
1
1
Den kleinen aber feinen Unterschied der Pre- und Postvarianten zeigt folgendes
Beispiel:
int a, b, c = 0;
a = c++;
// erst Wert von c in a kopieren dann c=c+1
b = ++c;
// c=c+1 dann neuen Wert von c in a kopieren
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
Welche Werte haben
a und b?
43
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Datentypen byte, short und long
Die ebenfalls ganzzahligen Datentypen byte, short und long unterscheiden sich
dem Datentypen int gegenüber nur in der Größe der zu speichernden Werte:
byte b1=0, b2=100;
b1 = b2;
b2 = 100%15;
short s1=4, s2=12;
s1 -= s2;
s2 /= 2;
long a1=48659023, a2=110207203;
a1 *= a2;
Ganzzahlige Datentypen lassen sich neben der gebräuchlichen Dezimaldarstellung
auch zu den Basen 8 (Oktalzahlen) und 16 (Hexadezimalzahlen) angeben:
int zahlBasis10 = 21;
// Dazimaldarstellung
int zahlBasis8 = 025; // Oktaldarstellung
int zahlBasis16 = 0x15; // Hexadezimaldarstellung
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
2·101 + 1·100
2·81 + 5·80
1·161 + 5·160
44
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Datentypen float und double I
Die beiden primitiven Datentypen float und double repräsentieren gebrochene
Zahlen (oder Gleitkommazahlen):
double a = 2;
double b = 2.2;
float
float
// ganze Zahl wird double zugewiesen
// 2.2 wird als double interpretiert
c = 3;
// ganze Zahl wird float zugewiesen
d = 3.3f; // das f signalisiert den Float
float e, f;
e = d%c;
e = d/c;
f = c*(d/2.4f) + 1;
f += 1.3f;
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
45
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Datentypen float und double I
Gleitkommazahlen lassen sich auch in der Exponentenschreibweise1) angeben,
wobei der erste Teil vor dem E (oder e) der Mantisse und der zweite Teil danach
dem Exponenten entspricht:
double zahl = 1.526552E5;
// entspricht 1.52655 * 10^5
System.out.println("Zahl: " + zahl);
zahl = 4.2E-2;
// entspricht 4.2 * 10^-2
System.out.println("Zahl: " + zahl);
Die Anweisung System.out.println() gibt im Konsolenfenster eine Textzeile aus.
Später kommen wir noch einmal intensiv darauf zu sprechen.
Wir erhalten als Ausgabe die beiden Werte:
152655.2
0.042
1) SUN:
http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.2.3
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
46
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Umwandlungen von Datentypen - implizit
Datentyp in größeren kopieren:
5 0 4 3 9 0 1 0 0 2
„kleiner Datentyp“
5 0 4 3 9 0 1 0 0 2
„großer Datentyp“
Beispiele:
byte a = 28;
int b;
b = a;
// byte (8 Bit) in grösseren int (32 Bit) kopieren
float f = 2.3f;
double d;
d = f;
// float (32 Bit) in grösseren double (64 Bit) kopieren
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
47
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Umwandlungen von Datentypen - explizit
Datentyp in kleineren kopieren:
0 0 0 0 0 0 0 0 0 0 0 0 2 6 1 1 8 5 3 9
„großer Datentyp“
Inhalt passt
0 0 2 6 1 1 8 5 3 9
„kleiner Datentyp“
Fehlerhaftes Beispiel:
float f;
double d = 2.3;
f = d;
// double (64 Bit) in kleineren float (32 Bit) kopieren
Wir müssen explizit angeben, dass wir kopieren wollen und uns der Tragweite
bewußt sind (Erinnerung an zyklisches Verhalten beim int):
float f;
double d = 2.3;
f = (float)d;
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
48
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Übersicht zu impliziten Umwandlungen
Von oben nach unten können wir die erlaubten, impliziten Typumwandlungen
ablesen:
byte
char
short
int
explizit
long
implizit
float
double
So dürfen wir beispielsweise den Inhalt eines byte ohne zusätzliche Angabe in
einen int kopieren. Auch ein char darf implizit in einen int umgewandelt werden,
aber nicht umgekehrt.
Die Größen der Kästchen entsprechen dem relativen Speicherbedarf. Von unten
nach oben müssen die Datentypen explizit umgewandelt werden.
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
49
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Datentypen sind für die Operationen entscheidend
An dieser Stelle ist es wichtig, auf einen häufig gemachten Fehler hinzuweisen:
int a=5, b=7;
double erg = a/b;
Wir erwarten eigentlich einen Wert um 0.71, erhalten aber 0.0.
Was ist der Grund?
Folgende Programmzeilen liefern das gewünschte Ergebnis:
int a=5, b=7;
double erg = (double)a/b;
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
50
Proinformatik: Objektorientierte Programmierung
Freie Universität Berlin
Vielen Dank fürs aufmerksame Zuhören.
Gibt es Fragen? Ansonsten geht es mit dem praktischen
Übungsteil nach der Mittagspause weiter.
Sommersemester 2011
Prof. Dr. Marco Block-Berlitz (Mediadesign Hochschule in Berlin)
51
Herunterladen