Unterschied imperativen, deskriptiven und objektorientierten Programmiersprachen?

2 Antworten

Die Fragen um diese Themen kann man alle hier klären: https://de.wikipedia.org/wiki/Programmierparadigma

Wenn man dann immer noch keine Unterschiede sieht, kann man meistens deutlich gezielter fragen.

Vielleicht sollte man sich in diesem Zusammenhang eines immer wieder bewusst und klar machen: Egal ob das Paradigma imperativ, deklarativ, objektorientiert  oder sonst wie orientiert ist und wie „raffiniert“ die programmier-technischen Probleme durch Programmiersprachen „verkleidet“ werden, jeder Compiler oder Interpreter muss irgendwann die Variablen und Rechenanweisungen in ganz konkrete Befehlsfolgen von Assembler-Befehlen übersetzen. Spätestens ab diesem Zeitpunkt wird dann wirklich jedes Paradigma wieder imperativ!! … :-)

Alle 3 Arten sind Konzepte bzw. Herangehensweisen, Probleme mit Hilfe einer bestimmten Struktur zu lösen.

Imperatives Programmierparadigma

Es ist die älteste und konkreteste Art zu programmieren, denn Programme werden nicht in abstrakte Methoden o.ä. unterteilt, sondern lediglich die notwendigen Befehle nacheinander aufgerufen. Der Programmierer gibt damit einen konkreten Programmfluss vor, der zur Laufzeit immer in der gleichen Reihenfolge abläuft. Lediglich Kontrollstrukturen können den Programmfluss etwas variabel lenken.

Bsp.:

int a = 1;
int b = 2;
int c = a + b;

Assemblersprachen laufen imperativ ab. 


Deskriptives Programmierparadigma

Hier ist es Ziel, Algorithmen (Beschreibung und Lösung eines Problems) in den Vordergrund zu stellen. Wie die Maschine dies später umsetzt, ist nicht so wichtig.

Im Gegensatz zu den imperativen Paradigma wird das Programm in einzelne, abstraktere Algorithmen aufgeteilt, bspw. durch Funktionen. Das Programm muss sich schließlich zur Laufzeit selbst den Handlungsablauf konstruieren, indem es z.B. von Funktionsaufruf zu Funktionsaufruf springt. Der Code wird nicht mehr in der Reihenfolge ausgeführt, wie er eingegeben wurde.

Das obige Beispiel könnte deklarativ so aussehen:

int addiere(int a, int b){
  return a + b;
}

int main(){ int c = addiere(1, 2); return 1;
}

Bsp.: LISP, Haskell, C

Objektorientierte Programmierung

Eine Abstraktionsschicht höher als das deklarative Paradigma ist die objektorientierte Programmierung. Code-Abschnitte werden hierbei nochmals Klassen zugeordnet. Man möchte die reale Welt etwas näher abbilden, daher verfolgt man das Prinzip, dass Programme aus Klassen und Objekten bestehen. Die Klassen sind die Blaupause, das Baumodell für ein Objekt. Und ein Objekt wird durch einen eigenen Zustand repräsentiert, der sich durch sein Verhalten zu etwas verändern kann.

Durch die neue Art zu strukturieren können Programme wartbarer und erweiterbarer gestaltet werden. So kann man Objekte variabel austauschen und ihnen andere Zustände geben, ohne dabei zwingend das komplette Programm zu zerstören.

Indem man Methoden logisch bündelt, wird es übersichtlicher. So kann ein Programmierer davon ausgehen, dass er mit einem Objekt der Klasse Rechner rechnen kann und in einem Objekt der Klasse SortierteListe die Möglichkeit hat, Daten in sortierter Reihenfolge abzulegen.

Wieder bezogen auf das obige Beispiel, konvertiert in ein objektorientiertes Beispiel:

class Rechner {
  public int addiere(int a, int b){
    return a + b;
  }
}

class Programm { public static void main(String[] args){ Rechner rechner = new Rechner(); int c = rechner.addiere(1, 2); } }


Objektorientierte Sprachen sind C++ oder Java.

Des Weiteren gibt es darauf nochmals abstraktere Ansätze, wie die aspektorientierte Programmierung.