Programmierparadigmen

Werbung
Grundzüge der Informatik 1
Teil 1: Einführung
1.5 Programmierparadigmen
Prof. Dr. Max Mühlhäuser
FG Telekooperation
TU-Darmstadt
Agenda
• Was sind Programmierparadigmen?
• Die wichtigsten Programmiersprachentypen
–
–
–
–
–
–
–
–
–
–
Maschinensprachen
Maschinenorientierte Sprachen
Imperative Programmiersprachen (Pascal, C)
OOP (folgt in Teil 2)
Funktionale Programmiersprachen (LISP)
Logische Programmiersprachen (PROLOG)
Domänenangepasste Programmiersprachen (COBOL, VHDL)
Verteilte / Parallele Programmiersprachen (OCCAM)
Skriptsprachen (Perl, Python, PHP)
Strukturbeschreibende Sprachen (HTML, SGML als
Obermenge)
– Datenbank-Sprachen (Mengenbasierte Sprachen; SQL)
2003 © MM ...
GdI1-1.5: Programmierparadigmen
2
Was sind eigentlich Programmierparadigmen?
• Paradigma = Denkmuster, übergeordnetes Prinzip
• Programmierparadigma = grundlegende Ansätze, wie
man Computer durch Programmierung steuern kann
• Beispiel 1: wie modelliert man einen Sachverhalt?
– Durch Vererbung, Klassen, Attribute und Methoden (OOP)
– Durch Datenhaltung, Funktionen und Befehle (imperativ)
– Durch Regeln, Fakten und Schlussfolgerungen (logisch)
• Beispiel 2: wie berechnet man eine Funktion?
– Durch die Abarbeitung von Befehlen (imperativ, OOP)
– Durch die Anwendung weiterer, komplexer oder primitiver
Funktionen (funktional)
– Durch die Anwendung von Schlussfolgerungen (logisch)
2003 © MM ...
GdI1-1.5: Programmierparadigmen
3
Programmierparadigmen
• Programmiersprachen werden in drei Paradigmen
eingeteilt:
– Imperativ mit den Unterformen
• Klassisch prozedural
• Objektorientiert
– Funktional (applikativ)
– Regelbasiert / Logisch
• Im folgenden stellen wir die drei Grundparadigmen
vor
• Anschließend werden einige typische Vertreter der
verschiedenen Programmiersprachentypen
vorgestellt
2003 © MM ...
GdI1-1.5: Programmierparadigmen
4
Imperatives Programmierparadigma
• Auch „von-Neumann-Paradigma“ genannt
• Hauptkonzepte:
– Ein Programm ist eine Folge von elementaren Schritten
– Ein typischer elementarer Schritt ist die Wertzuweisung
– Die Speicherung von Daten erfolgt in Variablen
• Die Reihenfolge der Schritte ergibt sich aus…
– Kontrollstrukturen wie
•
•
•
•
2003 © MM ...
Sequenzen (…; …;)
Alternativen (if, switch)
Schleifen (for, while, do…while)
Sprünge und Unterprogrammaufrufe (goto, call / x() )
GdI1-1.5: Programmierparadigmen
5
Imperatives Programmierparadigma
• Es gibt zwei wesentliche Unterformen der
imperativen Programmierung
• Klassische prozedurale Programmiersprachen sind
stark vorgehensorientiert
– Mache erst dies, dann jenes; rufe folgende Methode auf; …
– Typische Vertreter: Pascal, C, Fortran, Maschinensprachen
• Objektorientierte Programmiersprachen basieren
auf kooperierenden und interagierenden Elementen
– Jede Klasse bietet Dienste (Methoden) an
– Jedes Objekt kann Dienste auf sich ausführen oder andere
Objekte mit der Ausführung von Diensten beauftragen
– Typische Vertreter: Simula 67, Smalltalk, C++, Java
2003 © MM ...
GdI1-1.5: Programmierparadigmen
6
Maschinensprachen
• Älteste Form der Programmierung der Großcomputer
• Die Programmierung beruht auf der richtigen
Anordnung der Nullen und Einsen zum „Füttern“ des
Computers
• Die Programme wurden in der Regel auf Lochstreifen
codiert und entsprechend eingelesen
• Schwer zu programmieren: exakte Kenntnis der
Bitcodes erforderlich!
• Extrem fehleranfällig – ein einziger Bitfehler kann das
Programm nicht lauffähig machen oder „ruinieren“
2003 © MM ...
GdI1-1.5: Programmierparadigmen
7
Maschinenorientierte Sprachen
• Maschinenorientierte Sprachen vereinfachen die
Programmierung gegenüber der Maschinensprache
• Statt Bitmustern werden Textbefehle verwendet
– meist abgekürzt, z.B. auf 3-5 Zeichen („Mnemonics“)
– Speicher via Bezeichner (statt Adresse) benennbar (~Variablen?)
• Ein „Assembler“ übersetzt die Textbefehle in
entsprechende Bitfolgen
• Wesentlich komfortabler als Maschinensprache
• Dennoch wird weiterhin direkt der Prozessor
(„Maschine“) programmiert
• Für verschiedene Prozessortypen gibt es
verschiedene Assembler
– z.B. Intel x86-Linie versus Motorola G4
2003 © MM ...
GdI1-1.5: Programmierparadigmen
8
Maschinenorientierte Sprachen
• Vorteile:
– Maschinensprachennah – daher optimierbar
– Nur sehr geringer Abstraktionsgrad
Ablauf unmittelbar
erfassbar
• Nachteile:
– Abhängig vom Prozessor verschiedene Sprachnotation,
daher sind Programme nicht auf andere Prozessoren
übertragbar
– Geringer Abstraktionsgrad erfordert viel „Handarbeit“
– Aufwändiges Testen der Programme erforderlich
• Beispielbefehle (Motorola MC680x0):
– MOVE
– ADD
2003 © MM ...
&15, %d0 # Wert 15 in Datenregister 0 schreiben
&45, %d0 # Wert 45 zu Datenregister 0 addieren
GdI1-1.5: Programmierparadigmen
9
Imperative Programmiersprachen
• Standardvertreter: Pascal, C, diverse BASICs
• Ein Programm besteht aus
– Variablendeklarationen,
– Funktionen (Ergebnis[-typ]) und/oder Prozeduren
– und einem „Hauptprogramm“, das die Bearbeitung startet
• Vorteil: sehr einfach zu lernen für Anfänger
• Nachteile:
– keine gute Modellierung „unserer Welt“
– oft geringe Wiederverwendbarkeit
• Daher wurden imperative Programmiersprachen seit
den 90ern von Objektorientierung weitgehend
verdrängt
2003 © MM ...
GdI1-1.5: Programmierparadigmen
10
Objektorientierte Sprachen
• Betrachten wir in Teil 2 genauer anhand von Java!
• Andere gängige Vertreter:
– C++
•
•
•
•
Objektorientierte Erweiterung von C
Mehrfachvererbung, Generische Datentypen (Templates)
Teilweise schneller als Java
Geringere Sicherheit: Beliebige Umwandlungen von Datentypen und
direkter Speicherzugriff möglich
• Speicher muss von Hand angefordert und freigegeben werden
• Große Teile von MS Windows und KDE sind in C++ programmiert
– Smalltalk
•
•
•
•
hier gibt es keine primitiven Datentypen; alles ist ein Objekt!
die Typisierung von Objekten bei Deklaration entfällt
Dynamische Erzeugung von Klassendefinitionen zur Laufzeit
Sehr guter Debugger erlaubt auch Codeänderung zur Laufzeit
– Eiffel
• Sehr saubere Spezifikationen, unter anderem von Schleifeninvarianten
2003 © MM ...
GdI1-1.5: Programmierparadigmen
11
Funktionales Programmierparadigma
• Ein Programm ist eine Menge von Funktionen
• Funktionen bilden Eingabewerte in Ausgabewerte ab
• Eine Funktion entsteht durch die Zusammensetzung anderer
Funktionen
– Eine Menge an Grundfunktionen ist bereits vorgegeben
• Ein Programm wird „ausgeführt“, indem eine Funktion auf
Eingabewerte angewendet wird
– Diese Funktion ruft in der Regel weitere Funktionen auf
• Die gängigste Datenstruktur ist die Liste
• Typische Vertreter: LISP, ML, Haskell, HOPE
– Auch der Editor XEmacs verwendet einen LISP-Dialekt („E-LISP“)
– Mit E-LISP ist der Editor weitreichend umprogrammierbar
– LISP-Dialekte finden sich auch in anderen Umgebungen, etwa dem
Open-Source Projekt GIMP („GNU Image Manipulation Program“)
2003 © MM ...
GdI1-1.5: Programmierparadigmen
12
Funktionale Programmiersprachen
• Beispiel aus E-LISP:
(defun faculty (n))
(cond ((< n 0) -1)
; Fallunterscheidung
((= n 0) 1)
; 0! = 1
t (* n faculty (- n 1)) ; n! = n*(n-1)!
)
; Ergebnis = Letzter berechneter Wert
)
sind vordefinierte Funktionen
• Es gibt im wesentlichen nur zwei Aspekte:
• *, <, =, -, t
– Funktionsdefinitionen (Abstraktion)
– Funktionsanwendung (Applikation)
2003 © MM ...
GdI1-1.5: Programmierparadigmen
13
Regelbasiertes Programmierparadigma
• Ein Programm besteht aus einer Menge von Regeln
• Eine Regel ist in einem bestimmten Zustand
anwendbar
• Die Daten liegen in einer „Datenbasis“ vor
–
–
Anfangs enthält die Datenbasis die Eingabedaten
Zum Schluss enthält die Datenbasis die Ergebnisdaten
• Jeder „Programmschritt“ ist eine Regelanwendung:
1.
2.
3.
4.
Suche Regel(n), die im aktuellen Zustand anwendbar
Falls keine Regel anwendbar ist, beende das Programm
Wähle eine der Regeln und wende sie an
Weiter bei 1.
• Anzutreffen meist in Produktionssystemen
2003 © MM ...
GdI1-1.5: Programmierparadigmen
14
Logisches Programmierparadigma
• Das Logische Paradigma ist eine Unterform des Regelbasierten
Paradigmas
• Ein Programm besteht hier aus zwei Elementen:
– Fakten (gesichertes Wissen oder Startwerte)
– Regeln (um von Fakten auf neue Fakten zu schließen)
•
•
•
•
Ein Programmschritt ist die Anwendung einer Regel
Eine Programmausführung ist die Beantwortung einer Anfrage
Zur Abarbeitung ist die aktuell passende Regel zu finden
Durch Ersetzungen von Platzhaltern werden die Werte
bestimmt
• Typischer Vertreter: PROLOG (Programming in Logic)
– Fakten: Prädikate
– Regeln haben die Form Prädikat <- Prädikat1, Prädikat2
2003 © MM ...
GdI1-1.5: Programmierparadigmen
15
Logisches Programmiersprachen
• Ein Beispiel aus PROLOG (Programming in Logic):
Mutter (Annika, Fabian). Fakt: Annika ist Mutter von Fabian
Mutter (Sabine, Annika). Fakt: Sabine ist Mutter von Annika
Ahne(X, Y) <- Mutter(X, Y).
Regel 1: Ist X Mutter von Y, ist X auch eine Ahne von Y
Ahne(X, Y) <- Ahne(X, Z), Mutter(Z, Y).
Regel 2:
Ist X eine Ahne von Z und Z Mutter von Y, so ist
auch X eine Ahne von Y.
• Die Anfrage „?Ahne(X, Fabian)“ liefert
– True: X = Annika, X = Sabine
• Bitte beachten: die Regel „Ahne“ ist rekursiv und findet daher
auch die Ur-Ur-Ur-Ur-Urgroßmutter
– Jedenfalls wenn genügend Fakten vorhanden sind!
2003 © MM ...
GdI1-1.5: Programmierparadigmen
16
Domänenangepasste
Programmiersprachen
• Diese Sprachen wurden für eine bestimmte Aufgabe
oder Anwendungsgebiet entwickelt
• Beispiele:
– COBOL (Wirtschaftswesen inkl. Zinsrechnung)
– VHDL (Hardwarebeschreibungssprache zum Entwurf von
Mikrochips und elektronischen Schaltungen)
– FORTRAN (Mathematisch präzise Berechnungen mit allen
Finessen wie komplexen Zahlen oder mehr als 100 Stellen)
• In der Regel lassen sich die Sprachen einem
bestimmten Programmierparadigma zuteilen
– Meistens Imperativ / Prozedural
2003 © MM ...
GdI1-1.5: Programmierparadigmen
17
Verteilte / Parallele
Programmiersprachen
• Vereinfachung der Entwicklung von verteilten oder
parallel laufenden Programmen oder Methoden
• Vertreter sind beispielsweise
– OCCAM (gängig auch in der Hardwarebeschreibung)
– PVM („Parallel Virtual Machine“)
• Programme: kooperierenden Prozesse (Prozess-Netz)
– einfachster Fall: ein Prozess pro Prozessor / Rechnernetzknoten
– auch mehrere Prozesse pro Prozessor erlaubt
• Zu den Aufgabengebieten zählt die Spezifikation
–
–
–
–
–
Welche und wie viele Prozesse auf den Daten arbeiten
Welcher Prozess wann welche Daten sehen soll
Woher und wohin Eingabe- bzw. Ausgabedaten fließen
Wie die Arbeit auf die Prozesse zu verteilen ist
Wie das Gesamtergebnis aus Einzelergebnissen entsteht
2003 © MM ...
GdI1-1.5: Programmierparadigmen
18
Skriptsprachen
• Meist kompakte, einfach zu lernende Sprachen
• Oftmals können die Programme in andere Kontexte eingebettet
werden, z.B. in HTML-Seiten
• In vielen Kontexten anzutreffen – teilweise „versteckt“
• Einige Vertreter:
–
–
–
–
Perl und Python (mit „Tausenden von Methoden“)
PHP (eingebettet, aber versteckt auf WWW-Seiten)
JavaScript (eingebettet, aber sichtbar auf WWW-Seiten)
AnimalScript (Beschreibung von Animationsinhalten, siehe
http://www.animal.ahrgr.de)
• Die TK-WebSeiten nutzen PHP z.B. bei „Publikationen“
– Im Hintergrund wird eine Datenbank abgefragt
– Aus den Abfrageergebnissen entsteht dynamisch die WWW-Seite
2003 © MM ...
GdI1-1.5: Programmierparadigmen
19
Strukturbeschreibende Sprachen
• Ursprung in elektronischer Textverarbeitung:
– „Markups“: Ergänzungen von Text um Struktur-, LayoutInformation
• Primär: Erfassung der logischen Struktur der Inhalte
– Layout sollte separiert werden (Ziel: Bildschirm? Buch? …)
• Beispiele:
– SGML (Standard Generalized Markup Language)
– HTML (Layout von WWW-Seiten; „Dokumenttyp“ von SGML)
– XML (Strukturierung von Daten; Vereinfachung von SGML)
• Bemerkungen zu HTML:
– ursprünglich „wilde“ Mischung von Struktur- und Layout-Befehlen
– Bp.: „emphasis“ (hervorheben, bitte), „italic“ (kursiv schreiben!)
– neuere Versionen besser (Verhalten der Autoren nicht immer ☺ )
2003 © MM ...
GdI1-1.5: Programmierparadigmen
20
Datenbank-Sprachen
•
•
•
•
Sprachen zur Abfrage / Änderung von Datenbankinhalten
Gängigster Vertreter ist SQL (Structured Query Language)
Befehle sind in der Regel mengenorientiert
Beispiel:
SELECT Autor, Titel, Jahr
FROM Publikationen
WHERE Titel LIKE '%rithm%';
• Ergebnis: Autor, Titel und Jahr aller Publikationen mit „rithm“ im
Titel
– „C. Chaplin“, „Der Algorithmusbegriff im Wandel der Zeiten“, 1912
– „G. Rößling“, „Algorithm Visualization“, 2003
– …
2003 © MM ...
GdI1-1.5: Programmierparadigmen
21
Herunterladen