Imperative Sprachen haben sich entwickelt, von prozeduraler Entwicklung hin zu OOP und jetzt AOP. Wirklich anders sind OOP-Sprachen aber auch nicht. Das hat nichts mit Korinthenkackerunterscheidung zu tun Hawkes, es sind Tatsachen. Zudem sind OOP Sprachen auch nicht für alles geeignet und der kleinste gemeinsame Nenner der imperativen Sprachen ist eben nun mal prozeduraler Code, wie du es jetzt verpackst, ist ein anderes Ding.
Deswegen unterscheidet man auch wenn man nach Programmiersprachen geht, erst mal zwischen Imperativ und Funktional, nur das OOP und AOP bei den imperativen Sprachen das aktuell höchste Glied in der Nahrungskette ist. Assembler ist ja auch erst mal bedingt imperativ und prozedural, bis du die Blöcke nutzt, damit fängt es ja bei imperativen Sprachen an und die Kapselung hin bis zu den heutigen Klassen hat sich entwickelt. Genau so wie man auch damals bereits mit den Funktionalensprachen angefangen hat.
Und du sprichst hier von 2 Welten, aber das ist nicht OOP und Prozedural, sondern erst mal Imperativ und Funktional, was du dann bei den imperativen Sprachen für eine Sprache und welche Ausbaustufe sie hat, wählst ist auch wieder entscheidend. Wenn wir in der Uni jetzt Projekte anfangen, stellt sich für uns erst die Frage: Funktional oder Imperativ und danach dann erst weitere Konzeptfragen.
Kurzes Beispiel:
Code:
class DijkstraIF {
protected int a = 5
public void test() {
if (a >= 5) return true;
if (a <= 5) return false;
}
}
Wird immer true zurück geben, es läuft von oben nach unten in der Methode. Bei einer Funktionalensprache gibt es hier aber ein Unterschied.
Code:
FUN dijkstraIF : nat -> bool
DEF dijkstraIF(x) ==
IF x >= 5 THEN true
IF x <= 5 THEN false
FI
Viele Leute die mit Java arbeiten denken jetzt sofort, ja es kommt true zurück, das ist aber so nicht, in einer funktionalen Sprache entscheidet hier eher der Zufall. Mal kommt true, mal false zurück wenn man der Funktion den Wert 5 übergibt.
Ach ja, bis zur ersten Vorlesung der Funktionalensprachen wusste ich das aber auch nicht.
