42
Einführung Ralf Lämmel AG Softwaresprachen Objektorientierte Programmierung und Modellierung

Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

Embed Size (px)

Citation preview

Page 1: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

EinführungRalf Lämmel AG Softwaresprachen

Objektorientierte Programmierung und

Modellierung

Page 2: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

Mechanik dieser Lehrveranstaltung

Page 3: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Was ist OOPM?

Einführungsveranstaltung Informatik

Besucher aus den Curricula Inf/WI/CV u.a.

Monströse Veranstaltung mit 11 ECTS

3

Page 4: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Zentrale Herausforderungen(BlaBlaBla …)

Konstruktive, positive HerangehensweiseEigenverantwortlichkeit bei der StudienorganisationWertschätzung eines UniversitätsstudiumsKontinuierliche Arbeit über das SemesterMitarbeit im Team, in Übung, im PraktikumWenig Computerspiele o.ä. in den VorlesungenAusschöpfung der Kommunikationskanäle und Informationsquellen

4

Page 5: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau 5

Ausstieg aus dem (Informatik-) Studium ist kein Versagen!

(siehe Beispiel)

Page 6: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Struktur OOPM

6

8 LP Präsenzstudium: 90 Stunden Eigenstudium: 150 Stunden

Vorlesung4 SWS

Übung2 SWS

Programmierpraktikum2 SWS

Präsenzstudium: 30 Stunden Eigenstudium: 60 Stunden

3 LP

Page 7: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Kommunikationskanäle /Informationsquellen

Webseite: http://www.softlang.org/course:oopmKLIPS: Emails an Studierende und PrüfungsanmeldungVor Ort bei Vorlesung, Übung, PraktikumPrivate Facebook-GruppeEmails an Lehrkräfte bei persönlichen BelangenWenig empfohlenes Lehrbuch (siehe Webseite)Modulhandbuch und StudienordnungFachschaft, Prüfungsamt, Mentor, ...(Suchmaschinen, Wikipedia, Stackoverflow, …)

7

Page 8: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

http://www.softlang.org/course:oopm

8

- Was ist das Team für den Kurs? - Was sind die Vorlesungstermine? - Was sind die Übungsaufgaben? - Was sind die Prüfungsmodalitäten? - ...

Page 9: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

Inhalt dieser Lehrveranstaltung

Page 10: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

OOPM Veranstaltung = eine Art von Einführung in die Informatik

OOPM

Objektorientierte

Programmierung und

Modellierung

10

Page 11: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Was ist das Programmieren in OOPM?

11

Programmieren = Programmerstellung

Was ist also ein Programm?

Eine mögliche Definition: Ein Programm ist eine Repräsentation einer Eingabe/Ausgabe-Funktion, welche durch einen Rechner interpretiert werden kann.

Page 12: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

ggT als eine E/A-Funktion in der Programmiersprache Java

12

public static int ggT(int x, int y) {while (x != y) {

if (x > y) x = x - y;

else y = y - x; } return x;}

Eingabe

Ausgabe

ggT(6,5) = 1 ggT(6,4) = 2 ggT(9,6) = 3

ggT(12,8) = 4 ...

Page 13: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Vom Begriff des Programms zum Begriff der Sprache

Sprache = Menge von Programmen einschl. Interpretation

Maschinensprache: Programme sind direkt interpretierbar durch Hardware bzw. (virtuelle) Maschine.

Programmiersprache: Interpretation muss eine extra Abstraktionsstufe überbrücken -- etwa durch Kompilation.

13

Page 14: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau 14

Quelle: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

TIOBE Index für Oktober 2017October Headline: Swift is losing popularity

In the beginning of this year the programming language Swift peaked at a rating of 2.3% in the TIOBE index and even reached a top 10 position. But now it is back at position 16 and constantly declining month after month. Until recently it was quite common to program Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome because you have to maintain two code bases that are doing almost the same. So frameworks for mobile hybrid apps were developed and now that they have grown mature these are becoming very popular. Market leaders in this area are Microsoft's Xamarin (C#), Apache's Cordova (JavaScript) and Ionic (JavaScript). The consequences of all of this are that languages such as C# and JavaScript are gaining popularity at the cost of languages such as Java and Swift. The TIOBE Programming Community index is an indicator of the popularity of programming languages. The index is updated once a month. The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. Popular search engines such as Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube and Baidu are used to calculate the ratings. It is important to note that the TIOBE index is not about the best programming language or the language in which most lines of code have been written. The index can be used to check whether your programming skills are still up to date or to make a strategic decision about what programming language should be adopted when starting to build a new software system.

Page 15: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Page 16: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau 16

Der Familienbaum für Programmiersprachen

Quelle: http://thomasinterestingblog.wordpress.com/2011/11/26/the-family-tree-of-programming-languages/

Page 17: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau 17

Programmierparadigmen

• Prozedurale (imperative) Programmierung

• Funktionale Programmierung

• Logische Programmierung

• Objektorientierte Programmierung

• Multi-Paradigmen-Programmierung

Zugrundeliegende Prinzipien charakterisieren Programmierparadigmen.

Objekte

Mathematische Logik

Prozeduren und Variablen

Mathematische Funktionen

Page 18: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Abstraktionsstufen bei Java

18

http://www.javaworld.com/javaworld

Page 19: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

ggT in JVM (Java Virtual Machine)

19

public static int ggT(int, int); 0: iload_0 1: iload_1 2: if_icmpeq 24 5: iload_0 6: iload_1 7: if_icmple 17 10: iload_0 11: iload_1 12: isub 13: istore_0 14: goto 0

17: iload_1 18: iload_0 19: isub 20: istore_1 21: goto 0 24: iload_0 25: ireturn

kellerbasiert, nicht-strukturiert,

...

Page 20: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

OO-Paradigma

Objekte = Datenkapseln = Zustand + Verhalten Objekte werden in Klassen klassifiziert.

Personen, Konten, Lehrveranstaltungen, ... Objekte können miteinander verbunden sein.Klassen können in Beziehungen stehen.

20

Nachricht

Daten

Methode

Methoden- auswahl

Methode

Page 21: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Wo kommen die Programme her?

Probleme: Kontenverwaltung, Videokompression, ...

Programme: (Effektive) Problemlösungen

Spezifikationen: (“Gute”) Problembeschreibungen

Modelle: Abstraktionen von Problemlösungen u.a.

21

Page 22: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Spezifikationen bzw.

ProblembeschreibungenEigenschaften

unzweideutig vollständigdetailliert

Beispiel: ggTEingabe: x, y positive ganze ZahlenAusgabe: z positive ganze ZahlSpezifikation über x, y, z: z ist ein Teiler von x und y, wobei für jeden anderen solchen Teiler z’ gellten muss dass z’ < z.

22

Page 23: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Einschub: Begriff des Algorithmus (vergl. Programm)

Ein Algorithmus ist eine detaillierte, endliche Beschreibung zur schrittweisen Lösung eines Problems in endlich vielen Schritten.

Das ist in etwa ein abstrakterer Begriff für Programm; Algorithmen sind eventuell in Pseudocode notiert und Konventionen kommen zur Anwendung für die Definition von Ausführbarkeit.

Vergl.: Programme mögen eventuell ...... nicht terminieren,... das gegebene Problem nicht lösen,… ohne Problembeschreibung existieren.

23

Page 24: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Algorithmus für “!” (Fakultät)

Eingabe: natürliche ZahlAusgabe: natürliche ZahlVerfahren:1. Weise Eingabe an Variable n zu.2. Initialisiere r mit 1.3. Wenn n = 0 dann gehe nach 7.4. Weise n * r an r zu.5. Dekrementiere n.6. Gehe nach 3.7. Gib r als Ausgabe aus.

24

Page 25: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Algorithmische Lösbarkeit

Ein Problem ist algorithmisch lösbar, wenn ein Algorithmus existiert der für beliebige Eingaben die korrekte Ausgabe in endlicher Zeit liefert, vorausgesetzt man gibt dem Algorithmus genug Zeit und Speicher.

Ein Problem ist algorithmisch nicht lösbar, wenn kein solcher Algorithmus existiert. Z.B. das Halteproblem (Entscheidung über die Terminierung eines Programmes in einer Turing-vollständigen Sprache) ist algorithmisch nicht lösbar.

25

Page 26: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Was machen wir mit komplexen Programmen?

Probleme: Kontenverwaltung, Videokompression, ...

Programme: (Effektive) Problemlösungen

Spezifikationen: (“Gute”) Problembeschreibungen

Modelle: Abstraktionen von Problemlösungen u.a.

26

OO ist ein Paradigma für Programme und Modelle. Damit ist OOPM erklärt!

Page 27: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau 27

Beispielproblem: Bankanwendung

Was sind die wesentlichen Arten von Objekten (Klassen) in einer Bankanwendung? Was sind die Beziehungen zwischen den Klassen?

Ein Modell abstrahiert von einer Problemlösung.

Page 28: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Ein Klassendiagramm (UML-Modell) für eine Bankanwendung

28

Attribute eines Kontos

Verhalten eines Kontos

Eine Klasse für das grundlegende “Konzept”

eines Kontos

Eine Klasse für fortgeschrittene Konten

mit Kredit

Beziehung zwischen den Konzepten:

Klassenvererbung

Page 29: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Beispielproblem: CAD (Computer Aided Design)

Formen (“shapes”)

Rechtecke

Kreise

Verhalten

Bewegen

Zeichnen

29

Page 30: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Ein Klassendiagramm (UML-Modell) für die CAD-Anwendung

30

Mit Modellen verschwimmt (im positiven Sinne) die starre Grenze zwischen Problembeschreibungen und -lösungen.

Page 31: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Sprache = Menge von Programmen oder Modellen (einschliesslich der Interpretation)

Maschinensprache: Programme sind direkt interpretierbar durch Hardware bzw. (virtuelle) Maschine.

Programmiersprache: Interpretation muss eine extra Abstraktionsstufe überbrücken, etwa durch Kompilation.

Modellierungsprache: Ausführbarkeit nicht mehr notwendig gegeben. Interpretation kann “anders” definiert sein.

31

Page 32: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

Das Suchproblem

Page 33: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Das Such-Problem

Eingabe: Ein Feld a mit n Elementen vom Typ t.Ein Wert x vom Typ t.

Ausgabe: Ein Boolescher Wert:

true: Es gibt ein 0 <= i < n so dass a[i] == xfalse: sonst

Alternative: Gib (ersten) Index i zurück.

33

Wir nehmen nichts weiter an als dass wir Gleichheit für t

bestimmen können.

Page 34: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Einfache Suchalgorithmen

Dimensionen der Variationen:

Effizienz (Laufzeit-Komplexität)

Annahmen über Eigenschaften des Feldes

Annahmen über Operationen (Gleichheitstest, etc.)

34

Page 35: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

Das Sortierproblem

Page 36: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau 36

23 57

Eine unsortierte Liste

2 3 5 7

Die sortierte Liste

Page 37: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Das Sortier-Problem

Eingabe: Ein Feld a mit n Elementen des Typs t

Annahme: Vergleichbarkeit (<,=) für Typ t

Ausgabe:

Ein Feld b

b ist sortiert.

b ist eine Permutation von a

37

Beachte: Dies ist eine Problembeschreibung (im

Gegensatz zu einer Lösung).

Page 38: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Das Problem des Testens auf Sortiertheit

Eingabe:

Ein Feld a mit n Elementen vom Typ t.

Ausgabe:

Ein Boolescher Wert:

true: a[i-1] <= a[i] für alle i mit 1 <= i < n

false: sonst

38

http://www.bambinipronto.com.au/

Page 39: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Das Problemdes Testens auf Permutation

Eingabe: Feld a und b gleicher Länge

Annahme: Gleicheitstest für Typ t verfügbar.

Ausgabe:

Gibt es eine 1:1 Abbildung von a auf b?

Ausgangs- und Bildelement sind jeweils gleich.

39

1

3

2

3

1

2

Page 40: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Permutationstest

40

// Assume all elements of the arrays to be distinctpublic static boolean isPermutation(int[] a, int[] b) {

if (a.length != b.length)return false;

for (int x : a) {boolean found = false;for (int y : b)

if (x == y) {found = true;break;

}if (!found)

return false;}return true;

}

Dies kann wesentlich eleganter beschrieben werden wenn wir

Label-basiertes Break/Continue verwenden.

Vorbedingung

Siehe package algorithm.sorting

Page 41: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Warum (Suchen und) Sortieren in OOPM?

Grundlegende Technik in der Programmierung

Hervorragende Eignung für weitere Themen:

Laufzeitanalyse (Laufzeitkomplexität)

Speicherplatzanalyse (Speicherkomplexität)

Iterative vs. rekursive Lösungen

Verifikation

41

Page 42: Programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · Android apps in Java and iOS apps in Swift/Objective-C. This is quite cumbersome This is quite

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Zusammenfassung Mechanik dieser LehrveranstaltungInhalt dieser Lehrveranstaltung

Programmierung mit Java und eventuell PythonModellierung mit UML, EBNF, u.a.Wir werden auch spezifizieren, analysieren, verifizieren.

Ausblick SortierverfahrenStrukturierte ProgrammierungAnforderungsspezifikationAlgebraische SpezifikationObjektorientierung…