Vorlesung Programmieren
1. Objekte und Klassen
21.10.2015 | Prof. Dr. Ralf H. Reussner
Version 1.0
LEHRSTUHL FÜR SOFTWARE-DESIGN UND –QUALITÄT (SDQ)
INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD), FAKULTÄT FÜR INFORMATIK
KIT – Universität des Landes Baden-Württemberg und
nationales Forschungszentrum in der Helmholtz-Gemeinschaft
sdq.ipd.kit.edu
www.kit.edu
Organisatorisches
Die Anmeldung zu den Tutorien ist bereits geöffnet und endet am
Donnerstag, den 22.10.2015, um 18 Uhr:
http://webinscribe.ira.uka.de
Erstes Tutorium: bringen Sie Ihren Laptop mit, falls vorhanden
Die Tutorien ab Mittwoch (den 28.10.2015)
Einverständniserklärung bitte diese Woche per ProgrammierenBriefkasten abgeben, wenn noch nicht geschehen
Parallel zur Vorlesung im Audimax gibt es Live-Streams in die Hörsäle:
-101, Gebäude 50.34, 1. UG
-102, Gebäude 50.34, 1. UG
2
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Semesterplan - Überblick
21.10.15
Objekte und Klassen
28.10.15
Typen und Variablen
04.11.15
Kontrollstrukturen
11.11.15
Konstruktoren und Methoden
18.11.15
Arrays
25.11.15
Konvertierung, Datenkapselung, Sichtbarkeit
02.12.15
Listen und Abstrakte Datentype
09.12.15
Vererbung
16.12.15
Interfaces und Generics
23.12.15
Rekursion
30.12.15
06.01.16
3
13.01.16
Exceptions
20.01.16
Testen und Assertions
27.01.16
Parsen, Suchen, Sortieren
03.02.16
Java API, Objektorientierte Design-Prinzipien
10.02.16
Vom Programm zur Maschine, Best Practices
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Literaturhinweis - Weiterlesen
Dietmar Ratz, Jens Scheffler, Detlef Seese und Jan Wiesenberger
„Grundkurs Programmieren in Java“, 7. Auflage, 2014 (mit Java 8),
Hansa-Verlag
Abschnitt 2.2. „Was heißt Programmieren?“
Abschnitt 3.1. „Mein erstes Programm“
4
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Was ist Programmierung?
Aufgabe: Aufstellung der Personen der Größe nach
Verfügbare Instruktionen:
1.
nach links oder rechts weitergeben
2.
nach links oder rechts weitergeben
3. Personen, die
oder
halten, wechseln den Platz
Beispielablauf:
1.
nach rechts
2. Platz wechseln
3.
nach links
4. Platz wechseln
5
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
War das nun „Programmieren“?
Zum Teil ja:
Präzise festgelegter Prozess
Eindeutige Instruktionen
Es fehlt:
Ein „allgemeiner Plan“, der angibt, welcher Schritt als nächstes zu tun ist
Allgemein: für beliebige Anzahl von Personen
Möglichst abstrakt, d.h. (z.B.) nicht nur auf Personen bezogen
Dies wäre dann ein Programm!
6
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Bubblesort – Implementierung
public class BubbleSort {
public static void sort(long[] a) {
for (int pass = 1; pass < a.length; pass++) {
for (int i = 0; i < a.length - pass; i++) {
if (a[i] > a[i+1]) {
long tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
}
}
}
}
}
7
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
8
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Wie starte ich mein Java-Programm?
9
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Praxis: Übersetzen von Java-Klassen
Der Prozessor „versteht“ kein Programm in einer höheren
Programmiersprache, wie z.B. Java!
è Er verarbeitet nur Binärcode!
Java-Programme müssen daher übersetzt („compiliert“) werden
javac
Jede Klasse in einer eigenen Datei:
class SimpleProgram ➜ Datei „SimpleProgram.java“
Dateiname muss dem Klassennamen entsprechen
Klassendeklaration
in Java
Java-Compiler
javac
SimpleProgram.
java
10
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
„Ausführbare“
Version der Klasse
(„Bytecode“)
SimpleProgram.
class
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
...$javac SimpleProgram.java
Wie starte ich mein Java-Programm?
Kompilieren
11
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Praxis: Ausführen von Java-Programmen
Mit javac übersetze Programme (Klassen) werden mit dem Java-Interpreter
java ausgeführt. Im Beispiel:
java SimpleProgram
Dabei wird in der angegebenen Klasse die Methode main gesucht und diese
gestartet. main muss deklariert sein als
public static void main(String args[]) { ... }
Ausgaben können mittels System.out.print() und
System.out.println() vorgenommen werden; letzteres gibt einen
Zeilenvorschub mit aus
12
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
Hello World!
...$
Wie starte ich mein Java-Programm?
Kompilieren
Ausführen
13
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Compiler vs. Übersetzer
Ein Programm ist ein Algorithmus, der in einer Programmiersprache
geschrieben wurde.
Die Programmierer „sprechen“ also mit dem Rechner.
Zum „Sprechen“ kann in einer „Sprache“ erfolgen, die der Rechner
direkt versteht.
è Binärcode
Eine Notation mit Nullen und Einsen
Für Menschen schwer verständlich
Idee: Maschinennahe Sprachen, auch Assemblersprache genannt.
Assemblersprache besteht aus Buchstaben und Ziffern, z.B.:
MOV RG1 RG5
ADD RG2 RG4
14
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Compiler vs. Übersetzer
Assemblercode kann direkt vom Prozessor ausgeführt werden.
Abhängig vom Prozessortyp.
Verwenden eines benutzernahen Sprache
è
è
Höhere Programmiersprachen
Übersetzer notwendig
Übersetzer ist eine spezielle Software, die den Code einer höheren
Programmiersprache übersetzt in
die Maschinensprache
oder eine Zwischensprachen
15
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Compiler vs. Übersetzer
Compiler
Compiler transformieren die Programme in einer höheren Sprache in
maschinennahe Programme.
Compiler übersetzen die Programme nicht vollständig
Die Programme wird später ausgeführt.
Interpreter
Interpreter werden benutzt, wenn die Programme Anweisung für
Anweisung übersetzt werden.
Die Programme werden unmittelbar ausgeführt.
16
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Compiler vs. Übersetzer
Traditionelle höhere Programmiersprachen benötigen für jeden
Prozessortyp einen Compiler.
Der Quellcode wird in das Zielprogramm übersetzt.
è Das Programm muss für jeden Prozessortyp übersetzt werden.
17
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Compiler vs. Übersetzer
18
Java hingegen ist plattformunabhängig.
è Nur ein Compiler wird für alle Plattformen benötigt.
Compiler übersetzt den Quellcode in Java-Bytecode.
Java-Bytecode ist unabhängig von einem bestimmten Prozessor.
Java-Bytecode kann nicht unmittelbar ausgeführt werden.
è Java-Bytecode ist portabel.
è Java-Bytecode wird für einen „virtuellen Prozessor“ gefertigt.
Der virtuelle Prozessor wird die virtuelle Maschine (VM) genannt.
Java-Interpreter analysiert den Java-Bytecode und führt ihn aus.
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Compiler vs. Übersetzer
Java-Quellcode
Vector2D.java
Java-Compiler
Java-Bytecode
javac
Vector2D.class
java
19
Java VM für
Windows
Java VM für Linux
Java VM für
MacOS
Ausführbares
Windows-Programm
Ausführbares LinuxProgramm
Ausführbares
MacOS-Programm
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Just In Time Compilation
Ein leichtgewichtiger Compiler
Findet während der Ausführung des Codes statt
Ziel: Optimierung des Codes zum Verbessern der Performance
è Optimierung des häufig auszuführenden Codes, wie z.B. Schleifen
Beispiele für die Code-Optimierung:
Entfernen von redundanten Aufrufen (z.B. durch Ersetzen mit einer lokalen
Variable)
Copy Propagation (Beispiel: Ersetzen von z=x+y und y=f durch z=x+f)
Entfernen vom toten Code (Code, der nie aufgerufen wird oder dessen
Ergebnis nie benutzt wird)
20
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
Hello World!
...$
Wie ändere ich die Ausgabe?
21
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
Hello World!
...$
Wie ändere ich die Ausgabe?
22
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello!");
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
Hello World!
...$
Wie ändere ich die Ausgabe?
23
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello!");
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
Hello World!
...$
Wie ändere ich die Ausgabe?
Muss ich das Programm wieder kompilieren?
24
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello!");
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
Hello World!
...$
Wie ändere ich die Ausgabe?
Muss ich das Programm wieder kompilieren?
Ja
25
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello!");
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
Hello World!
...$javac SimpleProgram.java
...$java SimpleProgram
Hello!
Wie ändere ich die Ausgabe?
Muss ich das Programm wieder kompilieren?
Ja
26
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
System.out.println("World!");
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
Hello World!
...$javac SimpleProgram.java
...$java SimpleProgram
Hello!
Welche Ausgabe erwarte ich?
27
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
System.out.println("World!");
}
}
...$
Welche Ausgabe erwarte ich?
28
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
System.out.println("World!");
}
}
...$javac SimpleProgram.java
Welche Ausgabe erwarte ich?
29
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
System.out.println("World!");
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
Hello
World!
Welche Ausgabe erwarte ich?
30
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("1+1");
}
}
...$
Welche Ausgabe erwarte ich?
31
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("1+1");
}
}
...$javac SimpleProgram.java
Welche Ausgabe erwarte ich?
32
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("1+1");
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
1+1
Welche Ausgabe erwarte ich?
33
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
Ein Beispiel für eine Klasse
Klassenname
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
System.out.println("World!");
}
}
Methodenname
main-Methode
...$javac SimpleProgram.java
...$java SimpleProgram
Hello
World!
...$
Woraus besteht das einfache Beispiel?
34
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
int firstNumber = 1;
int secondNumber = 2;
System.out.println(firstNumber+secondNumber);
}
}
...$
Welche Ausgabe erwarte ich?
35
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
int firstNumber = 1;
int secondNumber = 2;
System.out.println(firstNumber+secondNumber);
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
3
Welche Ausgabe erwarte ich?
36
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
int firstNumber = 1;
int secondNumber = 2;
System.out.println(firstNumber+secondNumber);
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
3
Woraus besteht das modifizierte Beispiel?
37
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
Veriablendeklaration
public class SimpleProgram {
public static void main(String[] args) {
int firstNumber = 1;
int secondNumber = 2;
System.out.println(firstNumber+secondNumber);
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
3
Woraus besteht das modifizierte Beispiel?
38
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
Veriablendeklaration
Wert
public class SimpleProgram {
public static void main(String[] args) {
int firstNumber = 1;
int secondNumber = 2;
System.out.println(firstNumber+secondNumber);
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
3
Woraus besteht das modifizierte Beispiel?
39
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
Variablenname
Veriablendeklaration
Wert
public class SimpleProgram {
public static void main(String[] args) {
int firstNumber = 1;
int secondNumber = 2;
System.out.println(firstNumber+secondNumber);
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
3
Woraus besteht das modifizierte Beispiel?
40
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
Variablentyp
Variablenname
Veriablendeklaration
Wert
public class SimpleProgram {
public static void main(String[] args) {
int firstNumber = 1;
int secondNumber = 2;
System.out.println(firstNumber+secondNumber);
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
3
Woraus besteht das modifizierte Beispiel?
41
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
Variablentyp
Variablenname
Veriablendeklaration
Wert
public class SimpleProgram {
public static void main(String[] args) {
int firstNumber = 1;
int secondNumber = 2;
System.out.println(firstNumber+secondNumber);
}
}
Initialisierung
...$javac SimpleProgram.java
...$java SimpleProgram
3
Woraus besteht das modifizierte Beispiel?
42
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
System.out.println("World!");
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
Hello
World!
...$
In welcher Reihenfolge wird mein Programm ausgeführt?
43
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
System.out.println("World!");
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
Hello
World!
...$
In welcher Reihenfolge wird mein Programm ausgeführt?
Die Ausführung beginnt mit der main-Methode
44
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
System.out.println("World!");
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
Hello
World!
...$
In welcher Reihenfolge wird mein Programm ausgeführt?
Die Ausführung beginnt mit der main-Methode
Die Ausführung beginnt mit der ersten Zeile der main-Methode
45
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
System.out.println("World!");
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
Hello
World!
...$
In welcher Reihenfolge wird mein Programm ausgeführt?
Die Ausführung beginnt mit der main-Methode
Die Ausführung beginnt mit der ersten Zeile der main-Methode
Die Ausführung endet mit der letzten Zeile der main-Methode
46
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
}
static void printWorld(){
System.out.println("World!");
}
}
...$
Welche Ausgabe erwarten wir?
47
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
}
static void printWorld(){
System.out.println("World!");
}
}
...$
Welche Ausgabe erwarten wir?
Wird die Methode printWorld ausgeführt?
48
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
}
static void printWorld(){
System.out.println("World!");
}
}
...$
Welche Ausgabe erwarten wir?
Wird die Methode printWorld ausgeführt?
Nein
49
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
}
static void printWorld(){
System.out.println("World!");
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
Hello
Welche Ausgabe erwarten wir?
Wird die Methode printWorld ausgeführt?
Nein
50
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
}
static void printWorld(){
System.out.println("World!");
}
}
...$
Wie kann ich die Methode printWorld ausführen?
51
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
printWorld();
}
static void printWorld(){
System.out.println("World!");
}
}
...$
Wie kann ich die Methode printWorld ausführen?
52
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
printWorld();
}
static void printWorld(){
System.out.println("World!");
}
}
...$javac SimpleProgram.java
...$java SimpleProgram
Hello
World
Wie kann ich die Methode printWorld ausführen?
53
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Billard-Spiel
Programmieren ist nicht nur die
Definition von Befehlen und
deren Ausführungsreihenfolge.
è Datenmodellierung
y
(vx,vy)
(px,py)
x
54
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Billard-Spiel
Angenommen, wir wollen ein
Billard-Spiel programmieren
Erster Schritt: Simulation der
Bewegung der Kugeln
y
Tisch
(vx,vy)
Größe
Kugeln: jede Kugel hat (zu jedem
Zeitpunkt):
Eine Position auf dem Tisch
Eine Bewegungsrichtung und
Geschwindigkeit
Evtl. Effet (Drall, Spin)
Kugeln können
aneinanderstoßen und ändern
dann die Bewegungsrichtung
55
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
(px,py)
x
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Objektorientierte Programmierung (OOP)
Grundidee der Objektorientierten
Programmierung:
Jedes Objekt der Realität hat ein
virtuelles Gegenstück
Objekte kooperieren durch
Datenaustausch
Im Zentrum: Modellierungsfrage
y
(vx,vy)
(px,py)
„Wer macht was?“ (Im Gegensatz
zu: „Wie wird’s gemacht?“)
Gebräuchliche Benennungen für
Datenaustausch:
„Objekt A sendet Nachricht an
Objekt B“
„Objekt A ruft eine Methode von
Objekt B auf“
56
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
x
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
OOP am Beispiel „Billard-Spiel“
Reale Welt
„Programmwelt“
Objektname Objekte
Attribute
Table t
length
Modellierung width
name
getLength()
getWidth()
getName()
addBall(...)
254 cm
127 cm
„Toronto Deluxe“
Methoden
Ball blueBall
Ball redBall
Ball whiteBall
diameter
57,2 mm
diameter 57,2 mm
weightdiameter
170 g 57,2 mm
weight
170 g
170 gRED
color weight
color
RED
xPos color
30 cmRED
xPos
30 cm
yPos xPos
50 cm30 cm
yPos
50 cm
yPos
50 cm
⋮
⋮
⋮
simulationStep(...)
simulationStep(...)
simulationStep(...)
57
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Klassen: Der „Bauplan“ von Objekten
Objekt
Ball redBall
diameter
weight
color
xPos
yPos
⋮
57,2 mm
170 g
RED
30 cm
50 cm
simulationStep(...)
Klasse (Java)
class Ball {
// Attribute
float diameter; // in
Int
weight;
// in
...
float xPos;
// in
float yPos;
// in
...
// Methoden
void simulationStep() {
}
mm
gram
cm
cm
}
Aus einer Klasse können beliebig viele Objekte („Objekt-Instanzen“,
„Instanzen der Klasse“) dieses „Bauplans“ erzeugt werden.
58
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Definition: Objekte und Klassen
Ein Objekt wird durch drei Aspekte charakterisiert:
Identität
Objekteigenschaften können sich ändern, die Identität des Objekts bleibt
aber gleich
Durch Objektnamen sichergestellt
Zustand
Menge der Eigenschaften des Objekts zu einem Zeitpunkt
Durch Attribute realisiert
Verhalten
Ausführen von Aktionen, die den Zustand ändern können
Durch Methoden realisiert
Eine Klasse ist ein „Bauplan“ für gleichartige Objekte und legt fest
welche Attribute die Objekt-Instanzen der Klasse haben
welche Methoden die Objekt-Instanzen der Klasse haben
Grady Booch, Object Oriented Analysis and Design
http://www.nicolasdanino.com/tongji/OOAD_Booch_3rd_Edition.pdf
59
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Ursprung Objektorientierter Programmierung
1960er Jahre: Ole-Johan Dahl (1931-2002) und Kristen Nygaard
(1926-2002) entwickeln die Programmiersprache Simula
genauer: erst Simula I, danach Simula 67
Simula steht für SIMulation LAnguage, eine Programmiersprache für
Simulationen
Erste Programmiersprache, die zwischen Klassen und Objekten
unterscheidet
Viele weitere Konzepte aus Simula finden sich in heutigen
Objektorientierten Sprachen wieder
60
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Klassen in Java
class Ball {
// Attribute
float diameter;
int
weight;
...
float xPosition;
float yPosition;
float xVelocity;
Float yVelocity;
Kommentare
// in mm
// in gram
//
//
//
//
in
in
in
in
cm
cm
m/s
m/s
// Methoden
...
}
Zwei Arten von Kommentaren in Java:
// Zeilenkommentar
/*
längerer Kommentar
über mehrere
Zeilen
*/
Schema: class Name { Klassenrumpf }
„Klassen-Deklaration“
61
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Ist die Klassendefinition gut so?
class Ball {
// Attribute
float diameter;
int
weight;
...
float xPosition;
float yPosition;
float xVelocity;
Float yVelocity;
// in mm
// in gram
//
//
//
//
in
in
in
in
cm
cm
m/s
m/s
// Methoden
...
Wir haben zweimal fast
dasselbe Konstrukt.
Lässt sich das vereinfachen?
Ja!
}
Abstraktion der x/y-Paare in
eine neue Klasse Vector2D.
62
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Abstraktion: Klasse für Koordinatenpaare
class Ball {
// Attribute
float diameter;
int
weight;
...
float
Vector2D
xPosition;
position;
float
Vector2D
yPosition;
velocity;
float xVelocity;
Float
// Methoden
yVelocity;
...
}
// Methoden
...
}
// in mm
// in gram
//
//
//
//
in
in
in
in
cm
cm
m/s
m/s
m/s
class Vector2D {
// Attribute: x/y-Koordinaten
float x;
float y;
// Methoden
...
}
Was haben wir gewonnen?
Kürzere, übersichtlichere Klassendeklaration
Strukturierung, „Kapselung“ von Daten
63
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Wie erzeugt man Objekte?
Objekte werden mit dem new-Operator erzeugt
Vector2D position = new Vector2D();
Vector2d velocity = new Vector2D();
Ball ball = new Ball();
64
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
// erzeugt Vektor „position“
// erzeugt Vektor „velocity“
// erzeugt Billardkugel
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Jetzt sind Sie gefragt!
Wir modellieren die Mensa
„Bauplan“ für gleichartige Objekte
Welche Klassen benötigen wir?
Welche Attribute?
Welche Methoden?
Eigenschaften eines Objekts (Zustand)
Aktionen, welche den Objekt-Zustand
ändern können (Verhalten)
65
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Jetzt sind Sie gefragt!
Schreiben Sie eine main-Methode für die Klasse Vector2D, die die
Koordinaten eines Vektors ausgibt.
class Vector2D {
// attributes:
// x/y-coordinates
float x;
float y;
}
66
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)
Zusammenfassung
Objekte modellieren Gegenstände der realen Welt
Klassen sind „Baupläne“ für Objekte
Klassen in Java werden deklariert mit
class Name { Klassenrumpf }
Neue Objekte einer Klasse werden mittels new erzeugt
Klassen erlauben eine Erweiterung der eingebauten Java-Datentypen
67
21.10.2015
Vorlesung Programmieren: Objekte und Klassen
Lehrstuhl für Software-Design und –Qualität (SDQ)
Institut für Programmstrukturen und Datenorganisation (IPD)