# Programmierparadigmen (Programmiersprachen) ## 2. Programmiersprachen Grobe Analyse nach: - Imperativitart \ *reinfolgebasierte Anweisungen* - Declarativitaet \ *Problemloesungsorientierung* - Prozeduralitaet \ *Kompartmentisierung Algoritmisierung* - Objektorientierung \ *Unterstuetzung von Objekten, Klassen und Vererbungen* - Funktionialitaet \ *Funktionserzeugung & -anwendung* - Typisierung \ *(fehlende) Festlegung von Parametern & Rueckgabewerten* ### Java - imperative, prozedurale und objektorientierte Programmiersprache - typisierte Sprache ### C - typische imperative Sprache (begruendet durch Hardwarenaehe) - ist prozedural - typisierte Programmiersprache ### Python - imperativ - unterstuetzt objektorientierte als auch prozedurale und funktionale Programmierung - unterstuetzt Typisierung ### go - imperative und objektorientierte Programmiersprache - bietet Typisierung ### JavaScript - imperative, funktionale und objektorientierte Programmiersprache - ist typisiert ### TypeScript - imparative, funktionale und objektorientierte Sprache - typisierte Programmiersprache --- ## 3. Programmierprinzipien ### LoD **L**aw **o**f **D**emeter \ *Sprich nur zu deinen engsten Freunden* - Objekte sollen zur Verständlichkeit und Stetigkeit nur Methoden von ihnen bekannten Objekten aufrufen ### DRY **D**on't **R**epeat **Y**ourself \ *Vermeide Wiederholungen* - Durch Vermeidung von Duplikationen wird spätere Modifikation erleichtert - Erhöht die Verständlichkeit ### RY **R**epeat **Y**ourself \ *Wiederhole dich* - Benutzerschnittstellen sollten konsistent ähnlich aufgebaut sein - Erleichterung der Bedienung und Vermeidung von Bedienungsfehlern ### DAU **D**uemmster **A**nzunehmender **U**ser - Synonyme dafür: - BDU *(**B**rain **D**ead **U**ser)* - Error -40 *(Implikation: Der Fehler sitzt -40 cm "hinter" dem Desktop, bzw vor dem Computer)* - EIFOK *(**E**rror **I**n **F**ront **O**f **K**eyboard)* - PICNIC _*(**P**roblem **I**n **C**hair **N**ot **I**n **C**omputer)* - PEBKAC *(**P**roblem **E**xists **B**etween **K**eyboard **A**nd **C**hair)* - Anwendbarkeit von Programmen sollte intuitiv sein - Verdeutlichung, dass Nutzer meist kein Hintergrundwissen zur Funktion haben und somit viele für Devs logische Ablaeufe nicht nachvollziehen koennen ### SoC **S**eparation **o**f **C**oncerns \ *Aufteilung von verschiedenen Belangen in Unterprogramme/Sektionen* - Form von Abstraktion und Kompartmentisierung um Programme, Deployment und Erweiterung zu vereinfachen