# Programmierparadigmen ## Java * Objektorientiert * Klassen, Vererbung, Polymorphie * Imperativ * Ähnlichkeit zu C++ * Standart-Bibliotheken * Strikt typisiert * Funktionale Anteile seit neueren Java-Versionen * Anwendung: Web-Applikationen, Desktop-Anwendungen ## C * Imperativ * Prozedual * Typisierte Sprache * Anwendung:Hardwarenahe Programmierung * Direkter Speicherzugriff * Nutzung auf so ziemlich allen Systemen * Schnell & verbraucht wenig Ressourcen * Befehlssatz ist relativ klein * Kann Vorteil oder Nachteil sein * Selber schreiben oder einbinden externer Bibliotheken # Python * Prozedural * Imperativ * Dynamische Typisierung * Duck Typing * Objektorientiert * Vererbung * Functional * Python wird zur Bytecode Übersetzt bevor er interpretiert wird * Klare Syntax, kompakter Code, geringe Schlüsselwörter * Kompilierter Bytecode wird vom Interpreter ausgeführt ## Go * Imperativ / 00P (aber keine Klassen/Vererbung) * Einfach/lesbar * Effizient * Orientierung an C * Low-Level * Statische Typisierung * Variablen haben festen Datentyp * Fehlerfindung frühzeitig * Standardbibliothek * Cross Platform Compilation # JavaScript * Ähnliche Syntax zu C * Typenlose * Imperative Programmiersprache * Funktionale Programmiersprache * Objektorientierte Sprache * Prototypenbasiert also Klassenlos * Asynchrone Verarbeitung (Callbacks) * Modulare Programmierung (ES6) * Vorteile: Verwendung für Frontend & Backend * Altere Sprache, Große Community * Interaktive Benutzeroberflächen * Unterstützung verschiedener Browser * Anfälligkeit zu XSS * Läuft im Browser # TypeScript * imperativ * Superset von JavaScript * Starke Typisierung im Gegensatz zu Javascript * Statische & Dynamische Datentypen werden unterstützt * TypeScript ist objekt-orientiert * Vererbung * Schnittstellen * Funktional (weil auf JavaScript aufbauend) * Einsatzzweck für große Web-Applikationen/Frameworks * Bessere Strukturierung * Konsistener durch Type-Checking/Typisierung ## Programmierprinzipien STUPID, SOLID