programmierung und - userpages.uni-koblenz.desoftlang/oopmcourse/slides/intro.pdf · android apps...

Post on 14-Aug-2019

212 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

EinführungRalf Lämmel AG Softwaresprachen

Objektorientierte Programmierung und

Modellierung

Mechanik dieser Lehrveranstaltung

(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

(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

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

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

(siehe Beispiel)

(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

(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

(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? - ...

Inhalt dieser Lehrveranstaltung

(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

(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.

(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 ...

(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

(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.

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

(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/

(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

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

Abstraktionsstufen bei Java

18

http://www.javaworld.com/javaworld

(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,

...

(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

(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

(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

(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

(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

(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

(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!

(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.

(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

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

Beispielproblem: CAD (Computer Aided Design)

Formen (“shapes”)

Rechtecke

Kreise

Verhalten

Bewegen

Zeichnen

29

(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.

(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

Das Suchproblem

(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.

(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

Das Sortierproblem

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

23 57

Eine unsortierte Liste

2 3 5 7

Die sortierte Liste

(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).

(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/

(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

(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

(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

(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…

top related