Programmiertechnik/Programmierparadigma
Die Konzepte der unterschiedlichen Programmierparadigmen sollen hier kurz beschrieben werden, wobei es nicht das Ziel des Artikels sein soll, dem Leser genaue Vorstellungen von den Paradigmen zu verschaffen.
Inhaltsverzeichnis
Deklarative Programmierung
Deklarative Sprachen beschreiben lediglich das Ziel selbst. Die Realisierung wird vom so genannten Interpreter der Sprache übernommen. Dies hat den Vorteil, dass entsprechende Programme relativ klein sind und partielle Auswertung ermöglichen, wodurch theoretisch unendliche Datenstrukturen in ihnen enthalten sein können.
Im weiten Sinn zählen auch Transformationssprachen wie XSLT oder Abfragesprachen wie SQL zu den deklarativen Programmiersprachen. SQL ist hier wohl eines der bekanntesten Beispiele für deklarative Sprachen, obwohl auch hier zunehmend objektorientierte und prozedurale Elemente einfließen (PL/SQL und ähnliche Erweiterungen).
Der Begriff „deklarative Programmierung“ wird häufig als Überbegriff unter anderem für die logische und die funktionale Programmierung vorgestellt.
Logische Programmierung
Die logische Programmierung hat ihren Ursprung in der Forschung nach künstlicher Intelligenz. Entsprechende Programme sind aus Axiomen, also Regeln, und Fakten aufgebaut, welche, anders als bei deklarativen Programmiersprachen üblich, das Problem bzw. Ziel beschreiben, dessen Lösungsweg nicht vorgegeben ist. Als Beispiele bieten sich Verwandtschaftsbeziehungen an:
Fakten:
- Paul ist Vater von Hans,
- Louisa ist die Mutter von Hans,
- Irene ist die Mutter von Louisa,
Regel:
- Hans schenkt seiner Großmutter ein Bild.
Nun könnte die Frage sein: Wer bekommt das Bild von Hans?
Auch wenn dieses Beispiel wenig sinnvoll erscheint, gibt es doch eine Vorstellung von der Grundstruktur dieser Programme.
Das bekannteste und wohl auch beliebteste Beispiel einer logischen Sprache ist PROLOG, ein Programm, welches für die Forschung an künstlicher Intelligenz und der Entwicklung von Expertensystemen genutzt wird.
Funktionale Programmierung
Unter funktionaler Programmierung versteht man die Strukturierung von Programmen als Reihe von Funktionen, die jeweils 0-n Ein- und Ausgaben haben. Besonders einfache Aufgaben kann man am leichtesten mit diesem Konzept bearbeiten.
Imperative Programmierung
Imperative Sprachen beschäftigen sich mit dem tatsächlichen technischen Erreichen eines gewünschten Ziels. Beim Schreiben von imperativen Programmen werden also Befehle aneinandergereiht, wodurch bestimmte Funktionen erreicht werden. In dieses Paradigma sind zum Beispiel C, Pascal und weitere Sprachen einzuordnen.
Die imperative Programmierung ist wiederum ein Überbegriff für strukturierte, objektorientierte, prozedurale Programmierung und einige weniger bedeutende mehr.
Strukturierte Programmierung
Strukturierte Programmierung ist die einfachste Art der imperativen Programmierung. Hier werden Befehle sequentiell ausgeführt und Algorithmen durch Kontrollstrukturen wie Schleifen oder bedingte Verzweigungen umgesetzt.
Prozedurale Programmierung
Prozedurale Programmierung bezeichnet die Programmierung von Algorithmen mittels einer sequentiellen Abfolge von Befehlen wobei im Gegensatz zur strukturierten Programmierung wiederverwendbare Teile in Funktionen (Prozeduren) ausgelagert werden.
Objektorientierte Programmierung
Gerade bei großen Projekten ist die objektorientierte Programmierung (kurz: OOP) ein geeignetes Mittel, um einzelne Programmteile sauber zu verarbeiten. Dabei wird alles als Objekt angesehen. Jedes Objekt kann eigene Attribute (Eigenschaften) und Methoden haben. Attribute sind sozusagen Merkmale eines Objekts, etwa der Radius eines Kreises, während Methoden Funktionen sind, die an das Objekt gebunden sind, bspw. die Darstellung des Kreises. Oftmals werden Attribute als privat gekapselt, d. h. sie können nur durch Methoden des Objekts manipuliert werden.
Kreis = Objekt{ radius, liniendicke, position = Objekt{ x, y }, darstellen(), schnittmenge(objekt) } meinKreis = new Kreis();
Von außen kann man bpsw. auf meinKreis.radius
zugreifen, während innerhalb des meinKreis
-Objekts this.radius
(manchmal auch self.radius
, je nach Sprache) diesen Wert zurückgibt.
Manche Sprachen bringen syntaktische Abkürzungen für das Konzept der Objektorientierung mit – aber auch ohne diese Abkürzungen kann man das Konzept umsetzen (was jedoch mehr Aufwand bedeutet).
Weblinks
- it-talents.de: prozedurale vs. objektorientierte Programmierung