Ausgewählte Paradigmen der Softwareentwicklung

Slides:



Advertisements
Ähnliche Präsentationen
Blue J.
Advertisements

Ziele von EINI I + II Einführen in „Informatik“
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Modellbasierte Software-Entwicklung eingebetteter Systeme
Einführung in die Programmierung Zusammenfassung
der Universität Oldenburg
Einführung in Berechenbarkeit und Formale Sprachen
Paul, Morten, Yannick Blue J. Entwicklungsumgebung versteht Java Programmcode versteht Java Programmcode Für die Entwicklung eigener Software.
FH-Hof Einbindung von JavaScript Anweisungen
Java: Objektorientierte Programmierung
Sortierverfahren Richard Göbel.
Entwicklung der Programmiersprachen
Polymorphie (Vielgestaltigkeit)
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (17 –Turingmaschinen) Prof. Dr. Th. Ottmann.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Imperative Programmierung Funktionen und Parameter
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Wieviel Programmieren-Können braucht man in der Mathematiklehre? Arbeitsgruppe MU&I Ak der GDM Dillingen2005, Ltg: Haftendorn Teilnehmer: Epkenhans, Martin.
Zhaohan Chen SS061 SIMULA-an Algol Based Simulation Language geschrieben von: Zhaohan Chen Betreuer: Prof. Dr. Rainer Manthey.
Entwicklung von Simulationsmodellen
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
Informatik Oberstufe A. Gillmann, M. Reker, V. Reimchen.
Das Java-Hamstermodell
Dieter Bergmann, Lichtenfels
Einführung in die Programmierung Datensammlung
Programmieren mit Kindern
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
Simple Programmierung
grundlagen der Wirtschafts- informatik
Dateien Datei = File (engl.) Mögliche Inhalte einer Datei
Einführung in die Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Entwicklung der Programmiersprachen
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Einführung in die Programmierung
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 16: Ausnahmebehandlung.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 9: Abstraktion.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Informatik Objekte und Klassen 1. Objektorientiertes Modellieren und Programmieren 1.1 Objekte und Klassen.
Historische Entwicklung und ihre Einteilung
Programmiersprachen Proseminar Grundlagen wissenschaftlichen Arbeitens
Optimierungstechniken in modernen Compilern
Algorithmen und Datenstrukturen Übungsmodul 8
Hochschule Fulda – FB ET Sommersemester 2014
Programmierparadigmen
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
SFZ FN Sj. 13/14 Python 3 Rekursion Inf K1/2 Sj 13/14
SFZ FN Sj. 13/14 Python 2 Turtle Inf K1/2 Sj 13/14 GZG FN W.Seyboldt.
Algorithmen und Datenstrukturen 1 SS 2002
Informatik im Wahlpflichtbereich
Lernlandkarte OOP (ObjektOrientiertes Programmieren)
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Objektorientierte (OO) Programmierung
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Programmiersprachen II Vorbesprechung Klausur Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Objektorientierte Programmierung
 Präsentation transkript:

Ausgewählte Paradigmen der Softwareentwicklung Prof. Dr. Holger Schlingloff Institut für Informatik und Fraunhofer FIRST

Worum geht es? Paradigma: eigentlich „Beispiel“ (griechisch „nebenher Gezeigtes“; para=neben, halb; deiknynai=zeigen, begreiflich machen) heute: Paradigma = Denkmuster, übergeordnetes Prinzip Programmieren: Gestalten von Vorschriften oder Handlungsabläufen (Choreographie eines Tanzes, Komponieren eines Musikstücks, Zusammenstellung eine Gala-Diners, Schreiben eines Film-Drehbuchs, …) Programmierparadigma: grundlegende Prinzipien, wie man Arbeitsvorschriften für Computer formulieren kann kreative Tätigkeit!

Gliederung Paradigmen LOGO imperative, funktionale, objektorientierte, deklarative Konzepte Parallelismus Modellbasierung

Paradigmen und Sprachen Programmierparadigmen haben Einfluss auf die Gestaltung von Programmiersprachen „visual C#.Net vereinigt Paradigmen der visuellen und objektorientierten Programmierung zur Programmierung von WebServices“ Eine Programmiersprache realisiert ein bestimmtes Paradigma (oder auch mehrere) „funktionale“ oder „objektorientierte“ Sprachen Programmiersprachen lassen sich auf Paradigmen zuschneiden ... imperativ funktional visuell objektorientiert ... C++ visual BASIC EMacs LisP Asslembler visual C++ Smalltalk JAVA

Entwurfsprinzipien Dilemma: menschenorientiert oder maschinenorientiert? leicht erlernbar oder effizient? der Anschauung oder der Realität nachempfunden? Konzeptionelle Klarheit wichtigstes Prinzip für Paradigmen!

Programme und Prozesse wie beschreibt man eine (Rechen-)Vorschrift? durch Befehle und Datenstrukturen? durch Angabe funktionaler Abhängigkeiten? durch Klassen, Attribute und Methoden? durch Regeln und Fakten? was ist ein (Rechen-)Prozess? die Abarbeitung von Befehlen? die Auswertung von Funktionen? die Interaktion zwischen Agenten? die Anwendung von Schlussregeln?

gängige Paradigmen imperativ funktional (applikativ) objektorientiert Programm als Folge elementarer Anweisungen Programmausführung ist Abarbeitung der Anweisungen Stichworte: Sprünge, Makros, Prozeduren, Variablen funktional (applikativ) Programm als Funktion von Ein- in Ausgabewerte Programmausführung ist Berechnung der Funktion Stichworte: Lambda-Kalkül, LISP, SML, Haskell objektorientiert Programm als Menge von Klassen und Objekten Programmausführung ist Interaktion zwischen Objekten Stichworte: ADT, Vererbung, Polymorphie, Agenten deklarativ (logisch) Programm als Sammlung von Fakten und Regeln Programmausführung ist Suche nach Antworten auf Anfragen Stichworte: constraintbasiert, regelbasiert, prädikativ, relational parallel modellbasiert

Beispiel: LOGO nachfolgend als Beispiel dafür, wie sich verschiedene Paradigmen in einer Sprache bzw. Programmier-umgebung manifestieren lassen 1966 als Unterrichtssprache für den Schulunterricht entworfen (BBN/ArpaNet, Seymore Papert @MIT, Konstruktivismus) ursprünglich nur 20 Kommandos und 14 Funktionen 1971: Schildkröte als Anschauungsobjekt (Dialogpartner / Personalisierung des Computers, zuerst reales Ausgabegerät, dann Bildschirmgrafik) Turtle-Roboter von 1948/49 (Smithsonian)

„Programmieren für Kinder“ revolutionär in 1970, selbstverständlich in 2004 (Taschenrechner, Klingeltöne, Levelbuilder, ...) heutige Vorlesung: LOGO zur Demonstration elementarer Ideen („wie jedes Kind begreifen kann, ...“) Warnung vor Überheblichkeit nichts ist „zu einfach“ LOGO bis zum Vordiplom Entwicklung von kommerziellen Computerspielen mit LOGO Entwicklungen: LogoWriter, LegoLogo, MicroWorlds und StarLogo, MW Pro/EX MWPro Entwicklung (deutsche Version) TZi Univ. Bremen, H. Schlingloff

Paradigma: Imperative Programmierung Programm als Folge elementarer Anweisungen (mache erst dies, dann das, dann mach weiter mit jenem) Programmausführung ist Abarbeitung der Anweisungen der Reihe nach Wechselwirkung HW-Design / SW-Paradigma (von Neumann) Prototypisch: Assembler mov $0x61, %al inc %ah jz @loop

imperative Programmierung in LOGO Schildkrötenbefehle: vorwärts, rückwärts, rechts, links, Stifthoch, Stiftabwärts, ... Prozeduren als Makros: Prozedur Viereck vw 100 re 90 vw 100 re 90 vw 100 re 90 vw 100 re 90 Ende erweiterte Befehle: Stiftfarbe!, Stiftstärke!, fülle, neuesBild, Startposition, Position!, versteckSchildkröte, ...

Wiederholungen in Assembler meist durch Sprünge realisiert „goto considered harmful“ ursprüngliche Lösung: Endrekursion schwer verständlich! rein funktionales Paradigma spezielle Wiederholungsanweisungen: immerwieder [ ... ] Prozedur Kreis vw 1 re 1 Kreis Ende Prozedur Kreis immerwieder [vw 1 re 1] Ende

Daten in LOGO endliche Wiederholungen: Daten sind wiederhole 360 [vw 100 rw 100] wiederholeIndex [i 10] [schreibeZeile :i * :i] wiederholeListe ... Daten sind Wörter (Zeichenreihen) Zahlen (spezielle Wörter) Listen (in eckige Klammern eingeschlossen) Ein Programm ist eine Liste von Wörtern Programme als Eingabedaten erlaubt Interpreter statt Compiler wiederhole 100 [schreibe "|Ich darf im Unterricht nicht schwatzen. |]

lokale und globale Variablen ein Original-LOGO-Programm von 1967 Probleme der Gültigkeit und Lebensdauer von Variablen to t1 5 print "function t1 entered" 10 make "A" "this is A from t1" 20 make "B" "this is B from t1" 30 print /A 40 print /B 50 do t2 55 print "just returned from t2" 60 print /A 70 print /B to t2 10 print "function t2 entered" 20 print /A 30 print /B 40 make "A" "this is a new A from t2" 50 print /A

Variablen

Paradigma: applikative Programmierung Programm als Funktion von Ein- in Ausgabewerte, Programmausführung ist Berechnung der Funktion LOGO-Programme sind Anweisungen oder Ausdrücke Anweisungen sind Folgen von Befehlen Ausdrücke sind Aufrufe von Funktionen Beenden von Prozeduren mit Rückkehr (=Stop, bei Anweisungsprozeduren) oder Rückgabe (bei Funktionsprozeduren) Beliebige Rekursionen erlaubt, Endrekursion wird als Iteration gesondert behandelt

Beispiele Prozedur Quadrale :Schritt wenn :Schritt > 170 [Rückkehr] vorwärts :Schritt rechts 90 Quadrale :Schritt + 5 links 90 Ende Prozedur Binärbaum :Länge wenn :Länge < 1 [Rückkehr] vorwärts :Länge links 30 vorwärts :Länge Binärbaum :Länge * 2 / 3 rückwärts :Länge rechts 30 rechts 30 vorwärts :Länge rückwärts :Länge links 30 rückwärts :Länge Ende

rekursive Funktionsprozeduren Prozedur umgekehrt :w wenn leer? :w [Rückgabe "] Rückgabe Wort letztes :w umgekehrt ohneletztes :w Ende Prozedur Vokal? :z Rückgabe Element? :z [A E I O U Ä Ö Ü] Ende Prozedur ersetze-Vokal :x :y wenn Vokal? :x [Rückgabe :y] Rückgabe :x Prozedur alles-mit :z :w wenn leer? :w [Rückgabe "] Rückgabe Wort ersetze-Vokal erstes :w :z alles-mit :z ohneerstes :w zeige alles-mit "e "|Drei Chinesen mit dem Kontrabass| Dree Chenesen met dem Kentrebess zeige alles-mit "o "|Drei Chinesen mit dem Kontrabass| Droo Chonoson mot dom Kontroboss

Insertion Sort Prozedur sortiere :L Rückgabe sort :L [] Ende Prozedur sort :L1 :L2 wenn leer? :L1 [Rückgabe :L2] Rückgabe sort ohneerstes :L1 einsortieren erstes :L1 :L2 Prozedur einsortieren :El :Li wenn leer? :Li [Rückgabe miterstem :El :Li] wenn :El < erstes :Li [Rückgabe miterstem :El :Li] Rückgabe miterstem erstes :Li einsortieren :El ohneerstes :Li zeige sortiere [5 3 7 2 4] 2 3 4 5 7

Paradigma: deklarative Programmierung Programm als Sammlung von Fakten Programmausführung als Suche nach Antworten auf Anfragen Logo-ähnliche Umgebung: Toon Talk (1995) concurrent constraint programming Klausel = Roboter Term = Schachtel Programmieren = Roboter trainieren Prozesse = Häuser

Paradigma: visuelle Programmierung Schildkröten können Formen annehmen Möglichkeit der Animation durch Formwechsel Multimedia: Neben Schildkröten gibt es Textboxen Knöpfe Regler Hyperlinks Audio, Video, Excel-Tabellen Aufruf eines Objektes durch Angabe des Namens

Paradigma: Parallelismus eigentlich kein eigenes Paradigma, sondern eine neue Dimension für die anderen Paradigmen in applikativen oder deklarativen Sprachen parallele Auswertung von Funktionsargumenten oder Anfragen in imperativen Sprachen gleichzeitige Ausführung mehrerer Befehle in objektorientierten Sprachen simultane Interaktion zwischen Objekten

Parallelismus in LOGO mehrere Schildkröten gleichzeitig (in StarLogo mehrere hunderttausend!) Jede Schildkröte hat einen eindeutigen Namen Schildkröten tragen Instruktionen Prozessstart mit der Maus durch Anklicken Interleaving (Zeitscheibenverfahren) Befehl wartebis zum Warten auf Ereignisse Farbwächter für einfache Ereignisse Befehl klickan zum synchronen Start von Prozessen Prozedur krabbeln iw [vw 1 re zz 3 li zz 3] Ende wartebis [( Abstand "S2 ) < 100] krabbeln

Synchronisation Schildkrötenunabhängige Prozesse und Prozessfamilien Befehl starte [...] zur Erzeugung eines Prozesses Synchronisation von Prozessen durch neue Prozesse Befehl sobald [...][...] als Abkürzung: sobald [yKoordinate > 100][rückwärts 100] immerwieder [wartebis [yKoordinate > 100] rückwärts 100 wartebis [nicht (yKoordinate > 100)]]

Paradigma: Objektorientierung Programm als Menge von Objekten Programmausführung ist Interaktion zwischen Objekten MW EX (2004): Schildkröten als „Objekte erster Klasse“ erweitertes Zustandskonzept Rucksack mit eigenen Prozeduren multiple Regeln für Ereignisse

Paradigma: modellbasiert Was hat das mit modellbasierter Entwicklung zu tun? Noch nichts, aber: Prinzipiell bietet sich das Paradigma zur Umsetzung in solche Programmierumgebungen an (diskursive versus präsentationelle Kommunikation; Beispiel: I-Logix Rhapsody in C/C++ for UML 2.0) Ideen zur Einbringung vorhanden Forschungsbedarf!