Einfaches Programm

Werbung
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)
Herunterladen