Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe...

68
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

Transcript of Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe...

Page 1: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 2: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 3: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 4: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 5: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 6: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 7: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 8: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 9: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 10: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 11: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 12: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 13: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 14: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 15: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 16: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 17: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 18: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 19: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 20: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 21: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 22: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 23: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 24: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 25: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 26: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 27: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 28: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 29: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 30: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 31: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 32: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 33: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 34: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 35: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 36: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 37: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 38: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 39: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 40: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 41: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 42: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 43: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 44: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 45: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 46: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 47: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 48: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 49: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 50: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 51: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 52: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 53: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 54: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 55: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 56: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 57: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 58: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 59: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 60: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 61: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 62: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 63: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 64: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 65: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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)

Page 66: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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

Page 67: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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;

}

Page 68: Vorlesung Programmieren - SDQ Webserver · 2 Jun.-Prof. Dr.-Ing. Anne Koziolek, Arbeitsgruppe Architecture-Driven Requirements Engineering, Institut für Programmstrukturen und Datenorganisation

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