Sprachparadigmen
Programmierparadigmen sind die grundlegenden Stile, die die Ausdrucksweise von Berechnungen organisieren, von imperativer Zustandsmutation bis hin zu funktionalen, logischen und deklarativen Modellen.
Definition
Ein Programmierparadigma ist ein kohärentes Set von Konzepten und Strukturierungsprinzipien zur Organisation von Berechnungen innerhalb einer Sprache, das definiert, was die grundlegenden Einheiten eines Programms sind (Anweisungen, Ausdrücke, Objekte, Relationen) und wie sie sich zusammensetzen.
Scope
Dieser Bereich behandelt die wichtigsten Paradigmen von Programmiersprachen und die ihnen zugrunde liegenden Berechnungsmodelle: imperative und objektorientierte Programmierung, die auf veränderlichem Zustand und Nachrichtenübermittlung aufbaut; funktionale Programmierung, die auf Ausdrucksauswertung und Funktionen höherer Ordnung basiert; Logik- und Constraint-Programmierung, die auf Relationen und Suche aufbaut; und Metaprogrammierung, bei der Programme Programme manipulieren. Es wird untersucht, wie Paradigmen das Sprachdesign prägen, welche Kompromisse sie beinhalten und wie moderne Multi-Paradigma-Sprachen diese kombinieren.
Sub-topics
Core questions
- Was unterscheidet ein Paradigma von einem anderen, und sind diese Unterschiede scharf oder eher eine Frage der Betonung?
- Wie beeinflussen Paradigmen die Programmkorrektheit, Modularität und das logische Denken?
- Können imperative und deklarative Stile vereinigt werden, und was wird durch ihre Mischung gewonnen oder verloren?
- Wie beeinflusst das zugrunde liegende Berechnungsmodell (Von-Neumann-Maschine, Lambda-Kalkül, Resolution) ein Paradigma?
Key theories
- Funktionale Programmierung als Algebra von Programmen
- Backus argumentierte, dass die funktionale, kombinatorbasierte Programmierung Sprachen vom Von-Neumann-Flaschenhals befreit, indem sie Programmen eine Algebra von Gleichungsgesetzen für das Denken und die Transformation gibt.
- Algorithmus = Logik + Kontrolle
- Kowalskis Trennung der logischen Spezifikation eines Problems von der zur Lösung verwendeten Kontrollstrategie untermauert das deklarative/logische Paradigma und verdeutlicht, was es von prozeduralem Code unterscheidet.
- Multi-Paradigma Kernel-Sprach-Framework
- Van Roy und Haridi stellen Paradigmen als inkrementelle Erweiterungen einer kleinen Kernsprache dar und zeigen, wie Konzepte wie Zustand, Parallelität und Laziness hinzugefügt oder entfernt werden können, um jedes Paradigma wiederherzustellen.
Clinical relevance
Die Wahl des Paradigmas hat praktische Konsequenzen für die Softwareentwicklung: Funktionale und deklarative Stile unterstützen das gleichungsbasierte Denken, die Testbarkeit und die Parallelisierung, während die objektorientierte Zerlegung eine großskalige Modularität fördert. Moderne Sprachen vermischen zunehmend Paradigmen, sodass das Verständnis ihrer Kompromisse die Sprachauswahl und das idiomatisches Design beeinflusst.
History
Die imperative Programmierung stammt von der gespeicherten Von-Neumann-Architektur und frühen Sprachen wie Fortran und Algol ab. Lisp (1958) führte funktionale Ideen ein, die im Lambda-Kalkül verwurzelt sind. In den 1970er Jahren entstanden die logische Programmierung (Prolog) und der Aufstieg der strukturierten und dann der objektorientierten Programmierung (Simula, Smalltalk). Backus' Turing Award-Vortrag von 1977 kristallisierte die funktionale Kritik am imperativen Stil, und die folgenden Jahrzehnte brachten zunehmend Multi-Paradigma-Sprachen hervor.
Debates
- Imperativ versus deklarativ als primäres Organisationsprinzip
- Eine langjährige Debatte wägt die Direktheit und Leistungskontrolle von imperativem Code gegen die Vorteile des Denkens und der Komponierbarkeit von deklarativen und funktionalen Stilen ab; die meisten modernen Sprachen lösen dies, indem sie beides unterstützen.
Key figures
- John Backus
- Robert Kowalski
- Peter Van Roy
- Harold Abelson
- Gerald Jay Sussman
Related topics
Seminal works
- backus1978
- kowalski1979
- vanroy2004
- abelson1996
Frequently asked questions
- Ist objektorientierte Programmierung ein separates Paradigma von imperativer Programmierung?
- Objektorientierte Programmierung wird in der Regel als eine Strukturierungsdisziplin behandelt, die auf dem imperativen Paradigma aufbaut: Sie organisiert veränderlichen Zustand in Objekten mit gekapseltem Verhalten, basiert aber immer noch auf Zustandsänderungen und Sequenzierung.
- Schließen sich Paradigmen gegenseitig aus?
- Nein. Viele weit verbreitete Sprachen sind Multi-Paradigma-Sprachen, die funktionale, objektorientierte und imperative Merkmale kombinieren, sodass Programmierer den am besten geeigneten Stil pro Aufgabe wählen können.