Programmiersprachen: Klassifizierung und Methoden Programmier-Paradigmen Grundlagen der Programmierung 2 (1.C) - 1 - Programmiersprachen: Begriffe Syntax Beschreibung der Programme als Texte let xyz = 3+4 Semantik Beschreibung der Aktionen / Bedeutung eines Programms ( berechne (3+4), mit dem Resultat ...) Grundlagen der Programmierung 2 (1.C) - 2 - Programmiersprachen imperativ Programm ist Folge von Befehlen sukzessive Änderung des Speicherinhalts Ergebnis des Programms: letzter Zustand bzw. alle durchgeführten Änderungen Ein imperatives Programm sagt präzise: was (welche Anweisung), wann (Reihenfolge der Anweisungen) womit (Speicherplatz/Variable) zu geschehen hat. Grundlagen der Programmierung 2 (1.C) - 3 - Programmiersprachen prozedural: Strukturierung in (imperativen) Programmiersprachen Prozedur = Unterprogramm Aufruf mit Argumenten im Programm Ziel: Übersichtlichkeit; Wiederverwendbarkeit Grundlagen der Programmierung 2 (1.C) - 4 - Programmiersprachen funktional: Programm ist strukturiert in Funktionsdefinitionen Ausdrücke = Anwendung von Funktionen auf Argumente Berechnung = Auswertung von Ausdrücken Ergebnis = Nur der Return-Wert Varianten von funktionalen Programmiersprachen: nicht-strikt: Argumente werden so spät wie möglich ausgewertet strikt: Argumente werden vor Funktionsaufruf ausgewertet pur: Objekte haben nur einen Wert, keine Mutation möglich nicht-pur: Objekte veränderbar, Seiteneffekte möglich Grundlagen der Programmierung 2 (1.C) - 5 - Programmiersprachen deklarativ: Idealfall: Spezifikation = deklaratives Programm Betonung auf Logik, weniger algorithmisch Beispiele: logische Programmierung Prolog Grundlagen der Programmierung 2 (1.C) - 6 - Programmiersprachen objektorientiert: Verwendung in imperativen Programmiersprachen Strukturierung des Programm in Klassen. Ziel: Übersichtlichkeit, Wiederverwendung Ausführung eines Programms: Erzeugung von Objekten Austausch von Nachrichten zwischen Objekten Grundlagen der Programmierung 2 (1.C) - 7 - Programmiersprachen typisiert Alle Programmiersprachen haben eine Typisierung Programmtext • statische Typisierung: • dynamische Typisierung: Ausführungszeit des Programms • • schwache Typisierung: Typfehler zur Laufzeit sind möglich starke Typisierung: Typfehler zur Laufzeit sind nicht möglich Grundlagen der Programmierung 2 (1.C) - 8 - Beispiele für Programmiersprachen Haskell: Eine funktionale Programmiersprache funktional, nicht-strikt, hat ein polymorphes und starkes Typsystem, flexible Datenstrukturen, gute Abstraktionseigenschaften, Ziele: pures Programmieren, Auswerten von Ausdrücken rekursives Programmieren, Typsystem zur Strukturierung Grundlagen der Programmierung 2 (1.C) - 9 - Beispiele für Programmiersprachen Python: prozedural; schwaches, dynamisches Typsystem, flexible Datenstrukturen, Objektorientierung. Java: prozedural; dynamisches Typsystem, flexible Datenstrukturen, Objektorientierung. Grundlagen der Programmierung 2 (1.C) - 10 - Objektorientierte Konzepte: Vergleich mit Haskell OO (Java,Python) Klasse Methode Objekt Senden von Nachrichten Seiteneffekte Aliasing Grundlagen der Programmierung 2 (1.C) | entspricht entspricht entspricht entspricht | | Haskell Typ bzw. einer Typklasse Funktion (bzw. Prozedur) konstruiertem Datenobjekt. Funktionsaufruf (self = extra Argument) Nur Kopieren möglich keine Seiteneffekte - 11 - Logische Programmierung Grundlegende Idee: Verwendung der Prädikatenlogik Formaler: Hornlogik, d.h.: Programm besteht nur aus Formeln ∀x1, . . . xn.A1 ∧ . . . ∧ An ⇒ B (Hornklauseln) Schreibweise: B : −A1, . . . An Grundlagen der Programmierung 2 (1.C) - 12 - Logische Programmierung Informell: Stärken: • • • Programm besteht aus Wenn-Dann-Regeln mit Übertragung von Werten verglichen mit anderen Programmiersprachen deklarative (auch rekursive) Beschreibung von menhängen (Relationen) Beschreibung von Mengen Suche/Suchverfahren ergeben sich automatisch Grundlagen der Programmierung 2 (1.C) Zusam- - 13 - Logische ausführung Programmierung: Programm- Ausführung = Beantwortung von Anfragen an das Programm Anfrage: ∃y1, . . . ym.C1 ∧ . . . ∧ Cm entspricht einer negativen Hornklausel Antwort die möglichen Tupel y1, . . . ym bzw Ja / Nein Ausführung: Schlussfolgern Grundlagen der Programmierung 2 (1.C) - 14 - Logische Programmierung: Beispiel vater(peter,maria). mutter(susanne,maria). vater(peter,monika). frau(maria). frau(susanne). frau(monika). mann(peter). eltern(X,Y) :- vater(X,Y). eltern(X,Y) :- mutter(X,Y). Anfrage: Antwort: eltern(peter,maria)? Ja Anfrage: Antwort 1: Antwort 2: Antwort 3: frau(X)? X = maria X = susanne X = monika Grundlagen der Programmierung 2 (1.C) Programm - 15 - Logische Programmierung: Beispiel vater(peter,maria). mutter(susanne,maria). vater(peter,monika). frau(maria). frau(susanne). frau(monika). mann(peter). eltern(X,Y) :- vater(X,Y). eltern(X,Y) :- mutter(X,Y). Anfrage: Antwort 1: Antwort 2: eltern(peter,X) X = maria X = monika Grundlagen der Programmierung 2 (1.C) Programm (Kinder von peter) - 16 -