64
Ausblick: Entwurfsmuster (Design Pattern) 12.1 Entwurfsmuster (Design Pattern) 12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12.3 Gegenstände der Software-Technik 12.4 Java 8 und Java 9 12.1 Entwurfsmuster (Design Pattern) 12-1

Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Ausblick:Entwurfsmuster (Design Pattern)

12.1 Entwurfsmuster (Design Pattern)12.2 Programmierparadigmen und -sprachen und Veranstaltungen12.3 Gegenstände der Software-Technik12.4 Java 8 und Java 9

12.1 Entwurfsmuster (Design Pattern) 12-1

Page 2: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Entwurfsmuster (Design Pattern)

• Als Entwurfsmuster bezeichnet man einen wohl überlegten Vorschlag für denEntwurf eines objektorientierten Programmierproblems. Es beschreibt inrezeptartiger Weise das Zusammenwirken von Klassen, Objekten und Methoden.Entwurfsmuster identifizieren Programmierprobleme und geben denSoftware-Entwürfen charakterisierende Namen.

• Entwurfsmuster stellen wie Algorithmen oder Datenstrukturen vordefinierteLösungen für konkrete Programmierprobleme dar, allerdings auf einer höherenEbene. In der Regel können Entwurfsmuster nicht in allen Details übernommenwerden, sondern müssen an das jeweilige Problem angepasst werden.

• Entwurfsmuster sind eine der wichtigsten Entwicklungen der objektorientiertenProgrammierung der letzten zwanzig Jahre.

12.1 Entwurfsmuster (Design Pattern) 12-2

Page 3: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

EntwurfsmusterBeispiele für Entwurfsmuster sind:

• Singleton• Immutable• Observer• Composite• Interface• Factory• Iterator• Delegate• Visitor

Wir erläutern die Idee jetzt an drei einfachen Beispielen.

12.1 Entwurfsmuster (Design Pattern) 12-3

Page 4: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Das Entwurfsmuster „Singleton“

• Ein Singleton ist eine Klasse, von der nur ein einziges Objekt erstellt werden darf.

• Sie stellt eine Zugriffsmöglichkeit auf dieses Objekt zur Verfügung und instanziiertes beim ersten Zugriff.

• Es gibt viele Beispiele für Singletons. Hier seien nur der Fenstermanager oder dieSymboltabelle eines Compilers genannt.

12.1 Entwurfsmuster (Design Pattern) 12-4

Page 5: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Das Entwurfsmuster „Singleton“

Merkmale der folgenden Implementierung sind:

• Sie besitzt ein statisches Attribut ihres eigenen Typs, in dem die einzige Instanzgespeichert wird.

• Mithilfe der statischen Methode getInstance() kann auf die Instanz zugegriffenwerden.

• Die Klasse enthält einen privaten parameterlosen Konstruktor. So wird verhindert,dass andere Klassen den new-Operator anwenden und weitere Instanzen erzeugen.

12.1 Entwurfsmuster (Design Pattern) 12-5

Page 6: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Das Entwurfsmuster „Singleton“

public class Singleton {private static Singleton instance = null;

private Singleton() {}

public static Singleton getInstance() {if (instance == null) {

instance = new Singleton();}return instance;

}}

12.1 Entwurfsmuster (Design Pattern) 12-6

Page 7: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Das Entwurfsmuster „Singleton“

// Singleton s1 = new Singleton(); gibt FehlerSingleton s2 = Singleton.getInstance(); // new wird aufgerufenSingleton s3 = Singleton.getInstance(); // new wird nicht aufgerufen

12.1 Entwurfsmuster (Design Pattern) 12-7

Page 8: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Das Entwurfsmuster „Immutable“

• Als immutable (unveränderlich) werden Objekte bezeichnet, die nach ihrerInstanziierung nicht mehr verändert werden können.

• Unveränderliche Objekte können gefahrlos mehrfach referenziert werden underfordern im Multithreading keinen Synchronisationsaufwand.

12.1 Entwurfsmuster (Design Pattern) 12-8

Page 9: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Das Entwurfsmuster „Immutable“

Merkmale der folgenden Implementierung sind:

• Alle Attribute sind privat.

• Schreibende Zugriffe finden nur in einem Konstruktor oder in Initalisierern statt.

• Lesende Zugriffe sind verboten, wenn das Attribut ein veränderliches Objekt oderein Array ist.

• Werden veränderliche Objekte oder Arrays an einen Konstruktor übergeben, somüssen sie geklont werden, bevor sie einer Attributvariablen zugewiesen werden.

12.1 Entwurfsmuster (Design Pattern) 12-9

Page 10: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Das Entwurfsmuster „Immutable“

public class Immutable {

private int value1;private String[] value2;

public Immutable(int value1, String[] value2) {this.value1 = value1;this.value2 = (String[]) value2.clone();

}

12.1 Entwurfsmuster (Design Pattern) 12-10

Page 11: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

public int getValue1() {return value1;

}

public String getValue2(int index) {return value2[index];

}

}

12.1 Entwurfsmuster (Design Pattern) 12-11

Page 12: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Das Entwurfsmuster „Immutable“

• Durch Ableitung könnte ein unveränderliches Objekt wieder veränderlich werden.Zwar ist es der abgeleiteten Klasse nicht möglich, die privaten Attribute zuüberschreiben, sie könnte aber eigene Attribute einführen, die veränderbar sind.

• Erforderlichenfalls muss die Klasse als final deklariert werden.

12.1 Entwurfsmuster (Design Pattern) 12-12

Page 13: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Das Entwurfsmuster „Observer“

• Das Observer-Pattern beschreibt die Idee, bestimmte Objekte auf Veränderungenihres Zustands zu überwachen.

• Die überwachten Objekte, die sog. Observables, informieren die ihnen bekanntgemachten Observer von den Veränderungen.

• Auf diese Weise werden die Veränderungen der Daten und die darausresultierenden Aktionen entkoppelt.

• Das Observer-Pattern ist eines der in Java am häufigsten benutztenEntwurfsmuster, zum Beispiel als „Listener“.

12.1 Entwurfsmuster (Design Pattern) 12-13

Page 14: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Das Entwurfsmuster „Observer“

• Die zugrunde liegende Idee ist die Verwendung einer Klasse Observable, derenObjekte überwacht werden sollen. Diese Klasse enthält (mindestens)◦ ein privates Observer-Attribut sowie◦ Methoden zum Hinzufügen und Löschen von Observern.

• Außerdem gibt es die Klasse Observer,◦ in deren Konstruktor, die Anmeldung beim zu beobachtenden Objekt erfolgt

sowie◦ eine Update-Methode, in der die Reaktion auf die Veränderung spezifiziert wird.

• Wir erläutern jetzt dieses Entwurfsmuster an einem einfachen Beispiel mit nureinem Beobachter. Beobachtet werden Objekte der Klasse Name aufVeränderungen des Attributs String name.

12.1 Entwurfsmuster (Design Pattern) 12-14

Page 15: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Das Entwurfsmuster „Observer“

public class Name {private String name;private Observer observer; // bei mehreren Beobachtern: Vectorpublic void setObserver(Observer observer) { this.observer = observer; }public void deleteObserver(Observer observer) { this.observer = null; }public void setName(String name) {

this.name = name;if (observer != null)

observer.update(this);}public String getName() { return name; }

}

12.1 Entwurfsmuster (Design Pattern) 12-15

Page 16: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Das Entwurfsmuster „Observer“public class Observer {

private Name[] namen;public Observer() {

namen = new Name[10];for (int i = 0; i < namen.length; i++) {

namen[i] = new Name();namen[i].setObserver(this);

}}public void update(Name n) {

int index = 0;while (n != namen[index]) index++;System.out.println("Name Nr. " + index + " wurde geändert.");System.out.println("Neuer Name: " + namen[index].getName());

}public Name getName(int i) { return namen[i]; }

}

12.1 Entwurfsmuster (Design Pattern) 12-16

Page 17: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Das Entwurfsmuster „Observer“

import java.util.Scanner;

public class Test {

public static void main(String[] args) {Observer obs = new Observer();for (int i = 0; i < 5; i++) {

Scanner sc = new Scanner(System.in);int index = (int) (Math.random() * 10);System.out.print("Name: ");obs.getName(index).setName(sc.next());

}}

}

12.1 Entwurfsmuster (Design Pattern) 12-17

Page 18: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Ausblick:Programmierparadigmen und -sprachen und Veranstaltungen

12.1 Entwurfsmuster (Design Pattern)12.2 Programmierparadigmen und -sprachen und Veranstaltungen12.3 Gegenstände der Software-Technik12.4 Java 8 und Java 9

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-18

Page 19: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Wiederholung: Paradigmen zur Algorithmenbeschreibung

In einem objektorientierten Algorithmus werden Datenstrukturen und Methoden zueiner Klasse zusammengefasst. Von jeder Klasse können Objekte gemäß derDatenstruktur erstellt und über die Methoden manipuliert werden.

In einem imperativen Algorithmus gibt es Variable, die verschiedene Werte annehmenkönnen. Die Menge aller Variablen und ihrer Werte sowie der Programmzählerbeschreiben den Zustand zu einem bestimmten Zeitpunkt. Ein Algorithmus bewirkteine Zustandstransformation.

Ein Algorithmus heißt funktional, wenn die zugrunde liegende Berechnungsvorschriftmittels einer Sammlung von Funktionen definiert wird. Die Funktionsdefinitionendürfen insbesondere Rekursionen und Funktionen höherer Ordnung enthalten.

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-19

Page 20: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Algorithmus von Euklid

Der folgende, in einer imperativen Programmiersprache formulierte

Algorithmus von Euklid

berechnet den größten gemeinsamen Teiler der Zahlen x , y ∈ N mit x ≥ 0 und y > 0:

a := x;b := y;while b # 0do r := a mod b;

a := b;b := r

od

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-20

Page 21: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Algorithmus von Euklid

Variable z2 z5 z8 z11 z14r – 36 16 4 0a 36 52 36 16 4b 52 36 16 4 0

ggT(36, 52) = 4

Durchlaufene Zustände: z0, z1, z2, ... , z14

Zustandstransformation: z0 7−→ z14

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-21

Page 22: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Imperatives Programmieren

• In einem imperativen Programm gibt es Variable, die Werte speichern können. DieVariablen und ihre Werte legen den Zustand des Programms fest. Der Zustandändert sich mit dem Ablauf des Programms.

• Die Wertzuweisung gestattet es, den Zustand zu verändern.

• ◦ Mit einer Sequenz können Anweisungen nacheinander ausgeführt werden.◦ Die Selektion erlaubt die Auswahl zwischen Anweisungen.◦ Anweisungen können mit der Iteration wiederholt werden.

• ◦ Eingabe-Anweisungen ermöglichen es, den Zustand von außen zu beeinflussen.◦ Ausgabe-Anweisungen erstellen einen Ausdruck des Zustands (oder eines Teils

davon).

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-22

Page 23: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Imperatives Programmieren

• Prozeduren: Abstraktionen von Anweisungen

• Funktionen: Abstraktionen von Ausdrücken

• Datentypen:◦ Primitive Datentypen:

boolean, char, int, real◦ Zusammengesetzte Datentypen:

enumeration, array, record, pointer◦ Typdeklarationen: Abstraktionen von DatentypenTypsysteme können unabhängig von Paradigmen und Sprachen definiert unduntersucht werden.

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-23

Page 24: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Imperatives Programmieren

• Weitere Kontrollstrukturen

• Module

• Ausnahmebehandlung

• Parallelverarbeitung

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-24

Page 25: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Algorithmus von Euklid

• imperative/iterative Formulierung:

while b # 0do r := a mod b;

a := b;b := r

od

• funktionale/rekursive Formulierung:

ggT(a,b) ={

a b = 0ggT(b, a mod b) b 6= 0

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-25

Page 26: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Algorithmus von Euklid(Scheme, funktional)

(define (ggT a b)(if (= b 0)

a(ggT b (remainder a b))))

(ggt 36 52)> 4

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-26

Page 27: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Funktionales Programmieren

• Ein funktionaler Algorithmus formuliert die Berechnungsvorschrift durch eineMenge von Funktionen.

• Die Funktionen können wechselseitig-rekursiv oder auch

• von höherer Ordnung (Funktionale) sein.

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-27

Page 28: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Funktionen höherer Ordnung

(define (inc n) (+ n 1))

(define (square x) (* x x))

(define (cube x) (* x x x))

(define (sum f a next b)(if (> a b)

0(+ (f a)

(sum f (next a) next b))))

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-28

Page 29: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

(define (sum-square a b)(sum square a inc b))

(define (sum-cube a b)(sum cube a inc b))

> (sum-square 1 4)30 // 30 = 1+4+9+16

> (sum-cube 1 4)100 // 100 = 1+8+27+64

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-29

Page 30: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Deduktive Algorithmen

• Ein deduktiver (logischer) Algorithmus führt Berechnungen durch, indem er ausFakten und Regeln weitere Fakten, sogenannte Anfragen (Ziele), beweist.

• Fakten:P

• Regeln:P if Q1 and Q2 and ... and Qk

Regeln dieser Form werden auch Horn-Klauseln genannt. Fakten können als Regelnmit k = 0 gesehen werden.

• Die folgenden Beispiele wurden in der deduktiven Programmiersprache Prologgeschrieben.

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-30

Page 31: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Beispiel: Eingabe der Fakten und Regeln

vater(johann,heinrich).vater(johann,thomas).vater(heinrich,carla).vater(thomas,erika).vater(thomas,klaus).vater(thomas,golo).vater(thomas,monika).vater(thomas,elisabeth).vater(thomas,michael).verheiratet(johann,julia).verheiratet(heinrich,maria).verheiratet(thomas,katia).

mutter(X,Y) :- vater(Z,Y), verheiratet(Z,X).geschwister(X,Y) :- vater(Z,X), vater(Z,Y), X \= Y.

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-31

Page 32: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Beispiel: Eingabe der AnfragenNachdem das Programm eingelesen wurde, können Anfragen gestellt werden, die voneiner Interferenzmaschine, zum Beispiel einem Prolog-Interpreter, beantwortet werden.Anfragen werden nach der Eingabeaufforderung | ?- gestellt:

| ?- geschwister(thomas, heinrich).true ? ;no

| ?- geschwister(thomas, golo).no

Die Ausgabe true bedeutet, dass die Anfrage positiv beantwortet wurde, das heißt,dass Thomas und Heinrich Geschwister sind. Nach einem Fragezeichen erwartet derInterpreter Anweisungen, wie fortzufahren ist. Ein Semikolon ist die Aufforderung,nach weiteren Lösungen zu suchen.

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-32

Page 33: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Beispiel: Eingabe der Anfragen

Falls eine Anfrage eine Variable enthält, werden alle Belegungen für die Variablenermittelt, die die Aussage wahr werden lassen. Wenn wir die Geschwister von Golosuchen, stellen wir die folgende Anfrage.

| ?- geschwister(X,golo).X = erika ? ;X = klaus ? ;X = monika ? ;X = elisabeth ? ;X = michael ? ;no

Erika, Klaus, Monika, Elisabeth und Michael sind also die Geschwister von Golo.

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-33

Page 34: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Beispiel: Eingabe der Anfragen

Eine Anfrage kann mehr als eine Variable enthalten. Durch

| ?- geschwister(X,Y).

werden insgesamt 32 Geschwisterpaare ermittelt, da Paare wegen der Symmetrie derRelation doppelt ausgegeben werden.

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-34

Page 35: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Algorithmus von Euklid(Prolog, deduktiv)

ggt(A,0,A).ggt(A,B,Z) :- U is A mod B, ggt(B,U,Z).

| ?- ggt(36,52,Z).

Z = 4 ?

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-35

Page 36: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Funktionen und Relationen

• Eine Funktion f : X −→ Y ordnet jedem Element der Menge X(Definitionsbereich) genau ein Element der Menge Y (Wertebereich) zu:

x 7−→ f (x)

• Eine Relation R ⊆ X × Y besteht aus Paaren (x , y) ∈ X × Y . Dabei kann es zueinem x ∈ X mehrere Elemente y ∈ Y mit

(x , y) ∈ R

geben.

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-36

Page 37: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Deduktives Programmieren

• Deduktives Programmieren beschäftigt sich mit Relationen und nicht mitFunktionen.

• Fakten und Regeln können als Eingabe von Relationen bzw. alsKonstruktionsvorschriften für Relationen angesehen werden.

• Anfragen überprüfen, ob Paare in einer bestimmten Relation stehen oder ermittelnsolche Paare:◦ Eine Anfrage der Form P(x , y) überprüft, ob x und y bezüglich P in Relation

stehen.◦ Die Anfrage P(X , y) berechnet alle x mit (x , y) ∈ P .◦ Anfragen der Form P(X ,Y ) führen zur Ausgabe aller Paare (x , y) mit

(x , y) ∈ P .

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-37

Page 38: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Deklaratives Programmieren

• In deklarativen Programmiersprachen wird aus einer nach bestimmten Regelngebildeten mathematischen Formulierung eines Problems automatisch einProgramm erzeugt.

• Die formale Problembeschreibung kann z. B. auf der Prädikatenlogik (logischeProgrammiersprachen) oder dem λ-Kalkül (funktionale Programmiersprachen)basieren.

• Deklarative Programmiersprachen haben sich vom Konzept der ausführendenMaschine gelöst.

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-38

Page 39: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Entwicklung der Programmiersprachen

.

1995

1985

1975

COBOL ALGOL

BASIC

PL/I

ALGOL68 SIMULA

PASCAL

C

MODULA−2

ADA SMALLTALK80

C++

JAVA

C#

SCHEME

.

1990

1980

1970

1965

2000

LOGO

PROLOG

CSP

OCCAM

.

SCHEME (standard)

1955

1960

FORTRAN

LISP

Programmiersprachen in derInformatikausbildung

• Algol

• Algol68

• Modula-2

• Scheme

• Java

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-39

Page 40: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Programmiersprachen• Imperative Programmiersprachen:

Cobol, Fortran, PL/I, Basic, Algol, Algol68, Pascal, Modula-2, C, Ada.

• Funktionale Programmiersprachen:Lisp, Scheme, ML, Haskell, Scala. Die Sprache Scala ist eine Erweiterung von Java.

• Objektorientierte Programmiersprachen:C++, Eiffel, Smalltalk, Java, C#, Oberon.

• Logische Programmiersprachen:Prolog.

• Hybride Sprachen: z. B. Java, C++, Scala.

• Skriptsprachen, Spezialsprachen

• prozedurales, deklaratives Vorgehen

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-40

Page 41: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Programmierveranstaltungen

• Imperative und objektorientierte Programmierung

◦ Programmieren I (Java, 1. Sem.)◦ Programmieren II (Java und kleiner Blick auf C, JavaScript, 2. Sem.)

• Software Engineering

◦ Software Engineering I (UML, 3. Sem.)◦ Software-Entwicklungspraktikum

(UML, die Programmiersprache legt das betreuende Institut fest, 4. Sem.)

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-41

Page 42: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Programmierveranstaltungen• Übergeordnete Sichtweise, funktionale Programmierung

◦ Programmieren f. Fortgeschrittene (zurzeit: Haskell)

• Logisches Paradigma, weitere Logiken◦ Logik in der Informatik (Prolog, Master)

• Bedeutung und Umsetzung von Programmiersprachen◦ Semantik von Programmiersprachen (Master)◦ Compiler I, II, Praktikum (Master)

• Konkrete Anwendung◦ Softwaretechnisches Industriepraktikum

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-42

Page 43: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Programmierlabor im Sommersemester 2017

• Das Programmierlabor findet in diesem Semester vom

vom 10. August bis zum 17. August (Programmieren 2)

und

vom 21. August bis zum 25. August (Programmieren 1)

statt.

12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12-43

Page 44: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Ausblick:Gegenstände der Software-Technik

12.1 Entwurfsmuster (Design Pattern)12.2 Programmierparadigmen und -sprachen und Veranstaltungen12.3 Gegenstände der Software-Technik12.4 Java 8 und Java 9

12.3 Gegenstände der Software-Technik 12-44

Page 45: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Was ist Software-Technik?

W. Hesse, H. Keutgen, A. L. Luft, H. D. Rombach: Ein Begriffsystem für dieSoftware-Technik, Informatik-Spektrum, 7, 1984, S. 200–213:

Software-Technik (Software-Engineering) ist das Teilgebiet der Informatik, dassich mit der Bereitstellung und systematischen Verwendung von Methoden undWerkzeugen für die Herstellung und Anwendung von Software beschäftigt.

12.3 Gegenstände der Software-Technik 12-45

Page 46: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Software-Technik

• setzt solide Kenntnisse in (mindestens) einer Programmiersprache voraus,

• ist nicht auf eine spezielle Programmiersprache (sondern evtl. eher auf einParadigma) zugeschnitten,

• ist ein weites und wichtiges Gebiet der Informatik.

12.3 Gegenstände der Software-Technik 12-46

Page 47: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Teilgebiete der Software-Technik

• Software-Entwicklung

• Software-Management

• Software-Qualitätssicherung

12.3 Gegenstände der Software-Technik 12-47

Page 48: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Software-Entwicklung

• Planungsphase

• Definitionsphase

• Entwurfsphase

• Implementierungsphase

• Abnahme- und Einführungsphase

• Wartungs- und Pflegephase

12.3 Gegenstände der Software-Technik 12-48

Page 49: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Software-Management

• Planung

• Organisation

• Personaleinsatz

• Leitung

• Kontrolle

12.3 Gegenstände der Software-Technik 12-49

Page 50: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Software-Qualitätssicherung

• Qualitätssicherung

• Prüfmethoden

• Prozessqualität

• Produktqualität

12.3 Gegenstände der Software-Technik 12-50

Page 51: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Weitere Aspekte

• Werkzeuge, Computer Aided Software Engineering (CASE)

• Wiederverwendbarkeit von Software

• Modellierung, z. B. Unternehmensmodellierung

• Modellierungsprachen, z. B. UML

• Langlebigkeit

• . . . . . . . . .

12.3 Gegenstände der Software-Technik 12-51

Page 52: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Unified Modelling Language

• UML (Unified Modelling Language) wurde in den 1990er Jahren mit dem Ziel, eineeinheitliche – auch grafische – Notation für die objektorientierteSoftware-Entwicklung zur Verfügung zustellen, definiert.

• Derzeitige Version: UML 2.5 (Dezember 2015)

• Sie enthält ca. ein Dutzend verschiedener Modelltypen zur Beschreibung derverschiedenen Systemaspekte.

• Die ersten Entwickler der UML waren Grady Booch, Ivar Jacobson und JamesRumbaugh.

• UML werden Sie in der Veranstaltung Software Engineering 1 kennenlernen.

12.3 Gegenstände der Software-Technik 12-52

Page 53: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Unified Modelling Language

• Anwendungsfalldiagramm (Benutzersicht)

• Implementierungsdiagramme (Strukturdiagramme, statische Systemstruktur)

◦ Klassendiagramm (haben wir schon kennengelernt)◦ Objektdiagramm (haben wir schon kennengelernt)◦ Komponentendiagramm◦ Paketdiagramm◦ Verteilungsdiagramm◦ Kompositionsstrukturdiagramm

12.3 Gegenstände der Software-Technik 12-53

Page 54: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Unified Modelling Language

• Verhaltensdiagramme (Verhaltensdiagramme, dynamisches Systemverhalten)

◦ Aktivitätsdiagramm◦ Zustandsdiagramm◦ Kollaborationsdiagramme, Kommunikationsdiagramm◦ Timingdiagramm◦ Sequenzdiagramm◦ Interaktionsübersichtsdiagramm

Die Namen der Diagramme sind nicht immer gleich, einige haben sich auch geändert.

12.3 Gegenstände der Software-Technik 12-54

Page 55: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Anwendungsfalldiagramme

• modellieren die Einbettung eines Systems in seine Umgebung,

• beschreiben die Sicht auf Systemfunktionalität von außen und

• werden zur Spezifikation der globalen Systemanforderungen eingesetzt.

Kunde

Einzelkunde Firmenkunde

Kartentransaktion

Fuehre

durch

Verwalte

Kundenkonto

Kreditkarten-Validierungssystem

Haendler

Finanzinstitut

Bearbeite

Rechnung

12.3 Gegenstände der Software-Technik 12-55

Page 56: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Klassendiagramme• stellen die statische Systemstruktur dar und

• beschreiben die Systemelemente und ihre Beziehungen zueinander.

BildschirmBitmap

zeichnen()

Pixelx : Integery : IntegerFarbe : Colour

+Elemente

Quadrat Dreieck Icon

Klassen -und Objektdiagramme haben wir schon kennengelernt

12.3 Gegenstände der Software-Technik 12-56

Page 57: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Sequenzdiagramme

• stellen die Abfolge der Nachrichten dar.

• Sie basieren auf “Message Sequence Charts”.

SystemReader Librarian

hand_book

enter_book_data

update

[reserved] notify

acknowledge_librarian

acknowledge_reader

12.3 Gegenstände der Software-Technik 12-57

Page 58: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Ausblick:Java 8 und Java 9

12.1 Entwurfsmuster (Design Pattern)12.2 Programmierparadigmen und -sprachen und Veranstaltungen12.3 Gegenstände der Software-Technik12.4 Java 8 und Java 9

12.4 Java 8 und Java 9 12-58

Page 59: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Bisherige Entwicklung von Java1992–1995 Java-Vorläufer, zuerst unter dem Namen „Oak“.

Oak: Object Application Kernel, Eiche.Neu: Applets (little applications)

Januar 1996 JDK 1.0 (Java Development Kit)Anfang 1997 JDK 1.1

Dezember 1998 JDK 1.2, wurdeJanuar 1999 umbenannt in „Java 2 Plattform“

Mai 2000 Java 2, JDK 1.3Februar 2002 Java 2, JDK 1.4

Ende 2004 Java 2, JDK 5.0 (interne Versionsnummer: 1.5.0) „Tiger“Dezember 2006 Java Standard Edition 6 („Mustang“)

Juli 2011 Java Standard Edition 7 („Dolphin“)März 2014 Java Standard Edition 8

Die installierte Version kann mit java -version ermittelt werden.

12.4 Java 8 und Java 9 12-59

Page 60: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Java 8

• Eigentlich sollte Java 8 schon im September 2013 veröffentlicht werden.

• Den genauen Termin hat der verantworliche Ingenieur Mark Reinhold bei Oracleauf den 18. März 2014 festgelegt.

12.4 Java 8 und Java 9 12-60

Page 61: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Fragestellung: Statischer/dynamischer ScopeWie lautet die Ausgabe des folgenden Programms?

public class Test {static int x=7;static void p() {x=0;} // x ist eine globale Variable.public static void main(String[] args) {

int x=5;p();System.out.println(x);

}}

• Statischer Scope: Ausgabe: 5, Dynamischer Scope: Ausgabe: 0.

• Die Semantik der Methode p hängt also davon ab, wie die globale Variable x genommen wird.

• Wir wissen: Java gibt die 5 aus.

12.4 Java 8 und Java 9 12-61

Page 62: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Java 8• Die wichtigste Erweiterung ist das Projekt Lambda. Das Ziel dieses Projektes ist

die Einführung von Closures. Damit wird die Bedeutung von globalen Variablendefiniert. Globale Variable können vielfältiger als das obige Beispiel sein.

• Funktionale Schnittstellen sind Schnittstellen, die genau eine abstrakte Methodeenthalten. Abstrakte Klassen mit einer abstrakten Methode zählt man nicht zu denfunktionalen Schnittstellen. Schnittstellen sollen auch statische Methodenenthalten können.

• Eine wichtige Erweiterung sind Lambda-Ausdrücke. Ein Lambda-Ausdruck ist einLiteral, das eine funktionale Schnittstelle implementiert, ohne der Funktion einenNamen zu geben.

• Die API wurde erweitert werden.

12.4 Java 8 und Java 9 12-62

Page 63: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

ClosuresFriedrich Esser:

Ein Closure ist ein Block bzw. eine Einheit von Code, der freie Variable aus derUmgebung, genauer dem umgebenden Scope zur Berechnung des Ergebnisses miteinbezieht. Abhängig von der Art der freien Variablen, gibt es Closures, deren

– Ergebnisse nur von ihren Argumenten abhängen, da die freien Variablen immutablesind.

– Ergebnisse mit den mutablen Werten der freien Variablen variieren.

Leider wird Closure je nach Autor oder Sprache ein wenig anders interpretiert.

12.4 Java 8 und Java 9 12-63

Page 64: Ausblick: Entwurfsmuster(DesignPattern)Entwurfsmuster(DesignPattern) 12.1Entwurfsmuster(DesignPattern) 12.2Programmierparadigmenund-sprachenundVeranstaltungen 12.3GegenständederSoftware-Technik

Java 9

• Vermutlich sollte Java 9 im Juli 2017, also diesen Monat veröffentlicht werden.

• Jetzt sieht es nach September 2017 aus.

12.4 Java 8 und Java 9 12-64