Objektorientierte Einführung Ralf Lämmel AG Softwaresprachen Programmierung und Modellierung
Mechanik dieser Lehrveranstaltung
3 Was ist OOPM? Einführungsveranstaltung Informatik Besucher aus den Curricula Inf/WI/CV u.a. Monströse Veranstaltung mit 11 ECTS
4 Zentrale Herausforderungen (BlaBlaBla ) Konstruktive, positive Herangehensweise Eigenverantwortlichkeit bei der Studienorganisation Wertschätzung eines Universitätsstudiums Kontinuierliche Arbeit über das Semester Mitarbeit im Team, in Übung, im Praktikum Wenig Computerspiele o.ä. in den Vorlesungen Ausschöpfung der Kommunikationskanäle und Informationsquellen
5 Ausstieg aus dem (Informatik-) Studium ist kein Versagen! (siehe Beispiel)
6 Struktur OOPM Vorlesung 4 SWS 8 LP Präsenzstudium: 90 Stunden Eigenstudium: 150 Stunden Übung 2 SWS Programmierpraktikum 2 SWS Präsenzstudium: 30 Stunden Eigenstudium: 60 Stunden 3 LP
7 Kommunikationskanäle / Informationsquellen Webseite: http://www.softlang.org/course:oopm KLIPS: Emails an Studierende und Prüfungsanmeldung Vor Ort bei Vorlesung, Übung, Praktikum Private Facebook-Gruppe Emails an Lehrkräfte bei persönlichen Belangen Wenig empfohlenes Lehrbuch (siehe Webseite) Modulhandbuch und Studienordnung Fachschaft, Prüfungsamt, Mentor,... (Suchmaschinen, Wikipedia, Stackoverflow, )
8 http://www.softlang.org/course:oopm - 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
10 OOPM Veranstaltung = eine Art von Einführung in die Informatik OOPM Objektorientierte Programmierung und Modellierung
11 Was ist das Programmieren in OOPM? 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.
12 ggt als eine E/A-Funktion in der Programmiersprache Java Eingabe public static int ggt(int x, int y) { while (x!= y) { if (x > y) x = x - y; else y = y - x; } return x; } Ausgabe ggt(6,5) = 1 ggt(6,4) = 2 ggt(9,6) = 3 ggt(12,8) = 4...
13 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.
14 Quelle: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html TIOBE Index für Oktober 2017 October 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.
16 Quelle: http://thomasinterestingblog.wordpress.com/2011/11/26/the-family-tree-of-programming-languages/ Der Familienbaum für Programmiersprachen
17 Programmierparadigmen Prozedurale (imperative) Programmierung Prozeduren und Variablen Funktionale Programmierung Logische Programmierung Objektorientierte Programmierung Mathematische Funktionen Mathematische Logik Objekte Multi-Paradigmen-Programmierung Zugrundeliegende Prinzipien charakterisieren Programmierparadigmen.
18 Abstraktionsstufen bei Java http://www.javaworld.com/javaworld
19 ggt in JVM (Java Virtual Machine) 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, nichtstrukturiert,...
20 OO-Paradigma Methode Daten Methode Objekte = Datenkapseln = Zustand + Verhalten Nachricht Objekte werden in Klassen klassifiziert. Personen, Konten, Lehrveranstaltungen,... Objekte können miteinander verbunden sein. Klassen können in Beziehungen stehen. Methodenauswahl
21 Wo kommen die Programme her? Probleme: Kontenverwaltung, Videokompression,... Programme: (Effektive) Problemlösungen Spezifikationen: ( Gute ) Problembeschreibungen Modelle: Abstraktionen von Problemlösungen u.a.
22 Eigenschaften unzweideutig vollständig detailliert Beispiel: ggt Spezifikationen bzw. Problembeschreibungen Eingabe: x, y positive ganze Zahlen Ausgabe: z positive ganze Zahl Spezifikation ü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.
23 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.
24 Algorithmus für! (Fakultät) Eingabe: natürliche Zahl Ausgabe: natürliche Zahl Verfahren: 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.
25 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 Turingvollständigen Sprache) ist algorithmisch nicht lösbar.
26 Was machen wir mit komplexen Programmen? Probleme: Kontenverwaltung, Videokompression,... Programme: (Effektive) Problemlösungen Spezifikationen: ( Gute ) Problembeschreibungen Modelle: Abstraktionen von Problemlösungen u.a. OO ist ein Paradigma für Programme und Modelle. Damit ist OOPM erklärt!
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.
28 Ein Klassendiagramm (UML-Modell) für eine Bankanwendung Eine Klasse für das grundlegende Konzept eines Kontos Attribute eines Kontos Verhalten eines Kontos Eine Klasse für fortgeschrittene Konten mit Kredit Beziehung zwischen den Konzepten: Klassenvererbung
29 Beispielproblem: CAD (Computer Aided Design) Formen ( shapes ) Rechtecke Kreise Verhalten Bewegen Zeichnen
30 Ein Klassendiagramm (UML-Modell) für die CAD-Anwendung Mit Modellen verschwimmt (im positiven Sinne) die starre Grenze zwischen Problembeschreibungen und -lösungen.
31 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.
Das Suchproblem
33 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] == x false: sonst Alternative: Gib (ersten) Index i zurück. Wir nehmen nichts weiter an als dass wir Gleichheit für t bestimmen können.
34 Einfache Suchalgorithmen Dimensionen der Variationen: Effizienz (Laufzeit-Komplexität) Annahmen über Eigenschaften des Feldes Annahmen über Operationen (Gleichheitstest, etc.)
Das Sortierproblem
36 Eine unsortierte Liste 7 3 2 5 2 3 5 7 Die sortierte Liste
37 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. Beachte: Dies ist eine Problembeschreibung (im Gegensatz zu einer Lösung). b ist eine Permutation von a
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 38 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 http://www.bambinipronto.com.au/ false: sonst
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 39 Das Problem des 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. 1 3 2 3 1 2
Permutationstest // Assume all elements of the arrays to be distinct public 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; (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau } if (!found) return false; return true; 40 Vorbedingung Dies kann wesentlich eleganter beschrieben werden wenn wir Label-basiertes Break/Continue verwenden. Siehe package algorithm.sorting
41 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
Zusammenfassung Mechanik dieser Lehrveranstaltung Inhalt dieser Lehrveranstaltung Programmierung mit Java und eventuell Python Modellierung mit UML, EBNF, u.a. Wir werden auch spezifizieren, analysieren, verifizieren. Ausblick Sortierverfahren Strukturierte Programmierung Anforderungsspezifikation Algebraische Spezifikation Objektorientierung