vorlesung programmieren - sdq webserver · 2 jun.-prof. dr.-ing. anne koziolek, arbeitsgruppe...
TRANSCRIPT
KIT – Universität des Landes Baden-Württemberg und
nationales Forschungszentrum in der Helmholtz-Gemeinschaft
ARBEITSGRUPPE ARCHITECTURE-DRIVEN REQUIREMENTS ENGINEERING (ARE)
INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD), KIT-FAKULTÄT FÜR INFORMATIK
www.kit.edu
are.ipd.kit.edu
Vorlesung Programmieren
1. Objekte und Klassen
26.10.2016 | Jun.-Prof. Dr.-Ing. Anne Koziolek Version 1.0
2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Organisatorisches
Erstes Tutorium: bringen Sie Ihren Laptop mit, falls vorhanden
Die Tutorien finden ab heute statt
Das Tutorium 19 entfällt aus organisatorischen Gründen
Falls Sie diesbezüglich keine E-Mail bekommen haben, fragen Sie bitte
Frau Yurchenko nach der Vorlesung
Einverständniserklärung bitte bis 06.11. per Programmieren-
Briefkasten abgeben, falls 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
26.10.2016 Vorlesung Programmieren: Objekte und Klassen
3 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Semesterplan - Überblick
Vorlesung Programmieren: Objekte und Klassen26.10.2016
Objekte und Klassen
Typen und Variablen
Kontrollstrukturen
Konstruktoren und Methoden
Arrays; Konvertierung, Datenkapselung, Sichtbarkeit
Listen und Abstrakte Datentypen
Vererbung
Interfaces und Generics; Exceptions
Rekursion; Java API
Testen und Assertions
Parsen, Suchen, Sortieren
Präsenzübung
Objektorientierte Design-Prinzipien
26.10.16
02.11.16
23.11.16
09.11.16
30.11.16
16.11.16
07.12.16
14.12.16
21.12.16
11.01.17
18.01.17
25.01.17
Vom Programm zur Maschine, Best Practices
01.02.17
08.02.17
4 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
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“
Vorlesung Programmieren: Objekte und Klassen26.10.2016
5 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
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
26.10.2016 Vorlesung Programmieren: Objekte und Klassen
6 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
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!
Vorlesung Programmieren: Objekte und Klassen26.10.2016
7 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
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;
}
}
}
}
}
Vorlesung Programmieren: Objekte und Klassen26.10.2016
8 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Vorlesung Programmieren: Objekte und Klassen26.10.2016
9 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Wie starte ich mein Java-Programm?
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Vorlesung Programmieren: Objekte und Klassen26.10.2016
10 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
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 zunächst übersetzt („compiliert“) werden
javac
Jede Klasse in einer eigenen Datei:
class SimpleProgram ➜ Datei „SimpleProgram.java“
Dateiname muss dem Klassennamen entsprechen
Klassendeklaration
in Java
SimpleProgram.
java
„Ausführbare“
Version der Klasse
(„Bytecode“)
SimpleProgram.
class
Java-Compilerjavac
Vorlesung Programmieren: Objekte und Klassen26.10.2016
11 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Wie starte ich mein Java-Programm?
Kompilieren
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
26.10.2016
12 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
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
Vorlesung Programmieren: Objekte und Klassen26.10.2016
13 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Wie starte ich mein Java-Programm?
Kompilieren
Ausführen
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
Hello World!
...$
26.10.2016
14 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Wozu Compiler?
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
Vorlesung Programmieren: Objekte und Klassen26.10.2016
15 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Wozu Compiler?
Assemblercode kann direkt vom Prozessor ausgeführt werden.
Abhängig vom Prozessortyp
Verwenden einer 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
Vorlesung Programmieren: Objekte und Klassen26.10.2016
16 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Compiler vs. Interpreter
Compiler
Compiler transformieren die Programme in einer höheren Sprache in
maschinennahe Programme.
Compiler übersetzen die Programme nicht vollständig.
Die Programme werden später ausgeführt.
Interpreter
Interpreter werden benutzt, wenn die Programme Anweisung für
Anweisung übersetzt werden.
Die Programme werden unmittelbar ausgeführt.
Vorlesung Programmieren: Objekte und Klassen26.10.2016
17 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Übersetzung in Maschinennahe Sprache
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.
Vorlesung Programmieren: Objekte und Klassen26.10.2016
18 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Interpretation nach Vorübersetzung
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.
Vorlesung Programmieren: Objekte und Klassen26.10.2016
19 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Übersetzung und Ausführung in Java
Vorlesung Programmieren: Objekte und Klassen
Java-Quellcode
Java-Compiler
Java-Bytecode
Java VM für
WindowsJava VM für Linux
Java VM für
MacOS
Ausführbares
Windows-Programm
Ausführbares Linux-
Programm
Ausführbares
MacOS-Programm
Vector2D.java
Vector2D.class
javac
java
26.10.2016
20 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
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)
Vorlesung Programmieren: Objekte und Klassen26.10.2016
21 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Wie ändere ich die Ausgabe?
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
Hello World!
...$
26.10.2016
22 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Wie ändere ich die Ausgabe?
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
Hello World!
...$
26.10.2016
23 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Wie ändere ich die Ausgabe?
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
Hello World!
...$
26.10.2016
24 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Wie ändere ich die Ausgabe?
Muss ich das Programm wieder kompilieren?
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
Hello World!
...$
26.10.2016
25 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Wie ändere ich die Ausgabe?
Muss ich das Programm wieder kompilieren?
Ja
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
Hello World!
...$
26.10.2016
26 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Wie ändere ich die Ausgabe?
Muss ich das Programm wieder kompilieren?
Ja
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
Hello World!
...$javac SimpleProgram.java
...$java SimpleProgram
Hello!
26.10.2016
27 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Welche Ausgabe erwarte ich?
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
System.out.println("World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
Hello World!
...$javac SimpleProgram.java
...$java SimpleProgram
Hello!
26.10.2016
28 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Welche Ausgabe erwarte ich?
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
System.out.println("World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$
26.10.2016
29 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Welche Ausgabe erwarte ich?
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
System.out.println("World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
26.10.2016
30 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Welche Ausgabe erwarte ich?
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
System.out.println("World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
Hello
World!
26.10.2016
31 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Welche Ausgabe erwarte ich?
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("1+1");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$
26.10.2016
32 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Welche Ausgabe erwarte ich?
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("1+1");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
26.10.2016
33 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Welche Ausgabe erwarte ich?
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("1+1");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
1+1
26.10.2016
34 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Woraus besteht das einfache Beispiel?
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
System.out.println("World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
Hello
World!
...$
Ein Beispiel für eine Klasse KlassennameMethodenname
main-Methode
26.10.2016
35 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Welche Ausgabe erwarte ich?
public class SimpleProgram {
public static void main(String[] args) {
int firstNumber = 1;
int secondNumber = 2;
System.out.println(firstNumber+secondNumber);
}
}
Vorlesung Programmieren: Objekte und Klassen
...$
26.10.2016
36 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Welche Ausgabe erwarte ich?
public class SimpleProgram {
public static void main(String[] args) {
int firstNumber = 1;
int secondNumber = 2;
System.out.println(firstNumber+secondNumber);
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
3
26.10.2016
37 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Woraus besteht das modifizierte Beispiel?
public class SimpleProgram {
public static void main(String[] args) {
int firstNumber = 1;
int secondNumber = 2;
System.out.println(firstNumber+secondNumber);
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
3
26.10.2016
38 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Woraus besteht das modifizierte Beispiel?
public class SimpleProgram {
public static void main(String[] args) {
int firstNumber = 1;
int secondNumber = 2;
System.out.println(firstNumber+secondNumber);
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
3
Variablendeklaration
26.10.2016
39 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Woraus besteht das modifizierte Beispiel?
public class SimpleProgram {
public static void main(String[] args) {
int firstNumber = 1;
int secondNumber = 2;
System.out.println(firstNumber+secondNumber);
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
3
VariablendeklarationWert
26.10.2016
40 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Woraus besteht das modifizierte Beispiel?
public class SimpleProgram {
public static void main(String[] args) {
int firstNumber = 1;
int secondNumber = 2;
System.out.println(firstNumber+secondNumber);
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
3
VariablendeklarationWert
Variablenname
26.10.2016
41 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Woraus besteht das modifizierte Beispiel?
public class SimpleProgram {
public static void main(String[] args) {
int firstNumber = 1;
int secondNumber = 2;
System.out.println(firstNumber+secondNumber);
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
3
VariablendeklarationWert
VariablennameVariablentyp
26.10.2016
42 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Woraus besteht das modifizierte Beispiel?
public class SimpleProgram {
public static void main(String[] args) {
int firstNumber = 1;
int secondNumber = 2;
System.out.println(firstNumber+secondNumber);
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
3
VariablendeklarationWert
Initialisierung
VariablennameVariablentyp
26.10.2016
43 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
In welcher Reihenfolge wird mein Programm ausgeführt?
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
System.out.println("World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
Hello
World!
...$
26.10.2016
44 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
In welcher Reihenfolge wird mein Programm ausgeführt?
Die Ausführung beginnt mit der main-Methode
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
System.out.println("World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
Hello
World!
...$
26.10.2016
45 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
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
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
System.out.println("World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
Hello
World!
...$
26.10.2016
46 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
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
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
System.out.println("World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
Hello
World!
...$
26.10.2016
47 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Welche Ausgabe erwarten wir?
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
}
static void printWorld(){
System.out.println("World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$
26.10.2016
48 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Welche Ausgabe erwarten wir?
Wird die Methode printWorld ausgeführt?
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
}
static void printWorld(){
System.out.println("World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$
26.10.2016
49 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Welche Ausgabe erwarten wir?
Wird die Methode printWorld ausgeführt?
Nein
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
}
static void printWorld(){
System.out.println("World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$
26.10.2016
50 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Welche Ausgabe erwarten wir?
Wird die Methode printWorld ausgeführt?
Nein
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
}
static void printWorld(){
System.out.println("World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
Hello
26.10.2016
51 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Wie kann ich die Methode printWorld ausführen?
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
}
static void printWorld(){
System.out.println("World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$
26.10.2016
52 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Wie kann ich die Methode printWorld ausführen?
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
printWorld();
}
static void printWorld(){
System.out.println("World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$
26.10.2016
53 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Einfaches Programm
Wie kann ich die Methode printWorld ausführen?
public class SimpleProgram {
public static void main(String[] args) {
System.out.println("Hello");
printWorld();
}
static void printWorld(){
System.out.println("World!");
}
}
Vorlesung Programmieren: Objekte und Klassen
...$javac SimpleProgram.java
...$java SimpleProgram
Hello
World
26.10.2016
54 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Billard-Spiel
Programmieren ist nicht nur die
Definition von Befehlen und
deren Ausführungsreihenfolge.
Datenmodellierung
x
y
(px,py)
(vx,vy)
Vorlesung Programmieren: Objekte und Klassen26.10.2016
55 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Billard-Spiel
Angenommen, wir wollen ein
Billard-Spiel programmieren
Erster Schritt: Simulation der
Bewegung der Kugeln
Tisch
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
x
y
(px,py)
(vx,vy)
26.10.2016 Vorlesung Programmieren: Objekte und Klassen
56 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Objektorientierte Programmierung (OOP)
Grundidee der Objektorientierten
Programmierung:
Jedes Objekt der Realität hat ein
virtuelles Gegenstück
Objekte kooperieren durch
Datenaustausch
Im Zentrum: Modellierungsfrage
„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“
x
y
(px,py)
(vx,vy)
26.10.2016 Vorlesung Programmieren: Objekte und Klassen
57 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Ball blueBall
diameter 57,2 mm
weight 170 g
color RED
xPos 30 cm
yPos 50 cm
⋮
simulationStep(...)
OOP am Beispiel „Billard-Spiel“
Reale Welt„Programmwelt“
Objekte
Table t
length 254 cm
width 127 cm
name „Toronto Deluxe“
getLength()
getWidth()
getName()
addBall(...)
Ball whiteBall
diameter 57,2 mm
weight 170 g
color RED
xPos 30 cm
yPos 50 cm
⋮
simulationStep(...)
Ball redBall
diameter 57,2 mm
weight 170 g
color RED
xPos 30 cm
yPos 50 cm
⋮
simulationStep(...)
Objektname Attribute
Methoden
Modellierung
26.10.2016 Vorlesung Programmieren: Objekte und Klassen
58 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Klassen: Der „Bauplan“ von Objekten
Aus einer Klasse können beliebig viele Objekte („Objekt-Instanzen“,
„Instanzen der Klasse“) dieses „Bauplans“ erzeugt werden.
Ball redBall
diameter 57,2 mm
weight 170 g
color RED
xPos 30 cm
yPos 50 cm
⋮
simulationStep(...)
class Ball {
// Attribute
float diameter; // in mm
Int weight; // in gram
...
float xPos; // in cm
float yPos; // in cm
...
// Methoden
void simulationStep() { }
}
Objekt Klasse (Java)
26.10.2016 Vorlesung Programmieren: Objekte und Klassen
59 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
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
26.10.2016 Vorlesung Programmieren: Objekte und Klassen
Grady Booch, Object Oriented Analysis and Design
60 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
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
Vorlesung Programmieren: Objekte und Klassen26.10.2016
61 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Klassen in Java
Schema: class Name { Klassenrumpf }
„Klassen-Deklaration“
class Ball {
// Attribute
float diameter; // in mm
int weight; // in gram
...
float xPosition; // in cm
float yPosition; // in cm
float xVelocity; // in m/s
Float yVelocity; // in m/s
// Methoden
...
}
Kommentare
Zwei Arten von Kommentaren in Java:
// Zeilenkommentar
/*
längerer Kommentar
über mehrere
Zeilen
*/
26.10.2016 Vorlesung Programmieren: Objekte und Klassen
62 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
class Ball {
// Attribute
float diameter; // in mm
int weight; // in gram
...
float xPosition; // in cm
float yPosition; // in cm
float xVelocity; // in m/s
Float yVelocity; // in m/s
// Methoden
...
}
Ist die Klassendefinition gut so?
Wir haben zweimal fast
dasselbe Konstrukt.
Lässt sich das vereinfachen?
Ja!
Abstraktion der x/y-Paare ineine neue Klasse Vector2D.
26.10.2016 Vorlesung Programmieren: Objekte und Klassen
63 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Abstraktion: Klasse für Koordinatenpaare
Was haben wir gewonnen?
Kürzere, übersichtlichere Klassendeklaration
Strukturierung, „Kapselung“ von Daten
class Vector2D {
// Attribute: x/y-Koordinaten
float x;
float y;
// Methoden
...
}
class Ball {
// Attribute
float diameter; // in mm
int weight; // in gram
...
float xPosition; // in cm
float yPosition; // in cm
float xVelocity; // in m/s
Float yVelocity; // in m/s
// Methoden
...
}
class Ball {
// Attribute
float diameter; // in mm
int weight; // in gram
...
Vector2D position; // in cm
Vector2D velocity; // in m/s
// Methoden
...
}
26.10.2016 Vorlesung Programmieren: Objekte und Klassen
64 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Wie erzeugt man Objekte?
Objekte werden mit dem new-Operator erzeugt
Vector2D position = new Vector2D(); // erzeugt Vektor „position“
Vector2d velocity = new Vector2D(); // erzeugt Vektor „velocity“
Ball ball = new Ball(); // erzeugt Billardkugel
26.10.2016 Vorlesung Programmieren: Objekte und Klassen
65 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Jetzt sind Sie gefragt!
Wir modellieren die Mensa
Welche Klassen benötigen wir?
Welche Attribute?
Welche Methoden?
Vorlesung Programmieren: Objekte und Klassen26.10.2016
„Bauplan“ für gleichartige Objekte
Eigenschaften eines Objekts (Zustand)
Aktionen, welche den Objekt-Zustand
ändern können (Verhalten)
66 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Wir modellieren die Mensa!
Vorlesung Programmieren: Objekte und Klassen26.10.2016
Mensa
name: String
postleitzahl: int
strasse: String
Speiseplan Gericht
name: String
preis: double
Mensabesucher
vorname: String
nachname: String
hunger: boolean
geld: int
*
*
* 1..*1 1
getSpeiseplan(): Speiseplan
bezahlen(gericht: Gericht, geld: int): int
essen(gericht: Gericht)
besuchen(mensa: Mensa)
getGericht(name): Gericht
67 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
Jetzt sind Sie gefragt!
Schreiben Sie eine main-Methode für die Klasse Vector2D, die die
Koordinaten eines Vektors ausgibt.
Vorlesung Programmieren: Objekte und Klassen26.10.2016
class Vector2D {
// attributes: x/y-coordinates
float x;
float y;
// main method (for test)
public static void main(String args[]) {
Vector2D v = new Vector2D();
System.out.println("v.x = " + v.x);
System.out.println("v.y = " + v.y);
}
}
class Vector2D {
// attributes:
// x/y-coordinates
float x;
float y;
}
68 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements
Engineering, Institut für Programmstrukturen und Datenorganisation
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
26.10.2016 Vorlesung Programmieren: Objekte und Klassen