diff --git a/Programmierparadigmen.md b/Programmierparadigmen.md new file mode 100644 index 0000000..7a68167 --- /dev/null +++ b/Programmierparadigmen.md @@ -0,0 +1,99 @@ +# Übung 2: Programmierparadigmen (03.11.2023) + +## Programmiersprachen: + +### Java +* Objekt orientiert, unterstützt auch imperative und funktionale Programmierung. +* Klassenbasiert +* Zugriff wird klar definiert +* Vererbung/Polymorphismus +* Strikt typisiert. +* Ähnlichkeiten zu C++ +* Standard Bibliotheken und Frameworks. +* Langsamerer Start im Vergleich zu kompilierten Sprachen. +* Funktionale Anteile seit neueren Java-Versionen +* Anwendung: Web-Applikationen, Desktop-Anwendungen + +### C +* Imperativ, strukturiert. +* Protedural +* Statisch typisiert +* Direkter Spreicherzugriff +* Nutzung auf ziemlich allen Systemen +* Fehlende abstrakte Konzepte im Vergleich zu moderneren Sprachen. +* Manuelle Verwaltung des Speichers erforderlich. +* Anwendung: Hardwarenahe Programmierung, Spielenentwicklung + +### Python +* Multiparadigma (Objektorientiert, Imperativ, Funktional). +* Dynamisch typisiert. +* Klare und lesbare Syntax. +* Große Community und zahlreiche Bibliotheken. +* Geringere Leistung im Vergleich zu kompilierten Sprachen. +* Begrenzt in Echtzeitanwendungen aufgrund der Garbage Collection. +* Anwendung: KI und maschinelles Lernen, Automatisierung und Skripting + +### Go +* Cross Platform Compilation +* Imperativ / OOP aber keine Klassen / Vererbung. +* Nebenläufig, kompiliert. +* Einfach / lesbar +* Effizient +* Statisch typisiert. +* Leistung vergleichbar mit C/C++ bei einfacherer Syntax. +* Native Nebenläufigkeit mit Goroutinen und Kanälen. +* Weniger Standardbibliotheken im Vergleich zu älteren Sprachen. +* Weniger verbreitet in Unternehmen im Vergleich zu Java. +* Anwendung: Cloud-basierte Anwendungen, Netzwerkanwendungen. + +### Javascript +* Multiparadigma (hauptsächlich imperativ und objektorientiert). +* Dynamisch typisiert. +* Einfach zu erlernen und schnelle Iteration. +* Typisierungsprobleme können in größeren Projekten auftreten. +* Keine natürliche Unterstützung für nebenläufige Programmierung. +* Anwendung: Webentwicklung und Client-Seite. + +### Typescript +* Multiparadigma (basiert auf JavaScript, fügt statische Typen hinzu). +* Statisch typisiert (optional dynamisch). +* Fügt statische Typisierung zu JavaScript hinzu, verbessert die Robustheit. +* Kompatibel mit dem vorhandenen JavaScript-Ökosystem. +* Höhere Lernkurve für diejenigen, die nur mit JavaScript vertraut sind. +* Erhöhte Komplexität der Entwicklung aufgrund der Hinzufügung von Typen. +* Anwendung: Webentwicklung, Serverseitige Entwicklung. + +## Weitere Programmierprinzipien: + +### Logische Programmierung (LP) +* Definition: Programmierung basierend auf mathematischer Logik. +* Beispiel: Prolog. +* Ursprung: Entwickelt für die künstliche Intelligenz. +* Vorteile: + * Natürliche Repräsentation von Wissen. + * Deutliche Trennung von Daten und Prozess. +* Nachteile: + * Performanceprobleme bei großen Datenmengen. + * Komplexität für Anfänger. + +### Reaktive Programmierung (RP) +* Definition: Manipulation und Verbreitung von Zustandsänderungen. +* Beispiele: RxJava, React.js. +* Ursprung: Entwickelt für ereignisgesteuerte Systeme. +* Vorteile: + * Schnelle Reaktion auf Zustandsänderungen. + * Vereinfachte Handhabung von asynchronen Operationen. +* Nachteile: + * Komplexität bei der Verfolgung von Zustandsänderungen. + * Lernkurve für Entwickler. + +### Agentenorientierte Programmierung (AOP) +* Definition: Design von autonom handelnden Softwareagenten. +* Beispiele: Robotersteuerung, Multi-Agenten-Systeme. +* Ursprung: Forschung im Bereich der Künstlichen Intelligenz. +* Vorteile: + * Autonome Entscheidungsfindung. + * Skalierbarkeit durch verteilte Agenten. +* Nachteile: + * Komplexität in der Agenteninteraktion. + * Schwierigkeiten bei der Koordination großer Agentenmengen.