You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
4.6 KiB

  1. # Programmierparadigmen
  2. ## Um was geht es?
  3. In dieser Datei werde ich den Programmiersprachen Java, C, Python, go, JavaScript und TypeScript die Programmierparadigmen Imperative Programmierung, Declarative Programmierung, Prozedurale Programmierung, Objektorientierte Programmierung, Funktionale Programmierung sowie inwieweit die Programmiersprachen typisiert bzw. nicht-typisiert sind zuordnen und diese Programmierparadigmen kurz erklären.
  4. Außerdem werde ich die Programmierprinzipien KISS, FCoH, SLA, YAGNI, IOC und DI beschreiben.
  5. ## Programmierparadigmen - kurz erklärt
  6. ### Imperative Programmierung
  7. - Programm ist Folge von Anweisungen
  8. - oft hardwarenah, nicht nur auf Programmiersprachen bezihebar (z.B. Koch-Rezepte)
  9. - Beispiel: Strukturierter Text
  10. ### Declarative Programmierung
  11. - Problembeschreibung steht im Vordergrund, nicht Lösungsweg
  12. - oft kürzer
  13. - Beispiel: SQL (im weiteren Sinne), Lisp
  14. ### Prozedurale Programmierung
  15. - wie Imperative Programmierung, nur in Unterteile Zerlegbar (z.B. Funktionen)
  16. - Vorgänger OOP
  17. - Beispiel: Pascal
  18. ### Objektorientierte Programmierung
  19. - Realität wird abstrahiert im Programm abgebildet
  20. - bessere Strukurierung, bessere Testbarkeit
  21. - Beispiel: C#, Java
  22. ### Funktionale Programmierung
  23. - Verfeinerung Declarative Programmierung
  24. - Funktionen erzeugen (Abstraktion) und anwenden (Applikation), nur für Berechnungen geeignet
  25. - Beispiel: Lisp
  26. ### typisierte Programmiersprachen
  27. - Festlegung von Typen für Variablen, Rückgabe- und Übergabeparameter
  28. - kann implizit oder explizit erfolgen
  29. - Beispiel: C
  30. ### typenlose Programmiersprachen
  31. - keine Festlegung von Typen für Variablen, Rückgabe- und Übergabeparameter
  32. - Beispiel: JavaScript
  33. ## Programmiersprachen und Programmparadigmen
  34. ### Java
  35. - imperativ, prozedural, objektorientiert, typisiert
  36. - Objektorientierte Hochsprache, Programme werden nicht für Betriebssystem, sondern für die Java-VM kompiliert --> man kann Java installieren, man kann Java-Programme ausführen
  37. ### C
  38. - imperativ, prozedural, typisiert
  39. - ältere, aber teilweise immer noch aktuelle Hochsprache; entwickelt für hardwarenahe Programmierung (für eine Hochsprache)
  40. ### Python
  41. - imperativ, prozedural, objektorientiert, typisiert
  42. - neuere Hochsprache, Option zur Objektorientierung, gut einsetzbar für Datenwissenschaft, KI und web
  43. ### go
  44. - imperativ, prozedural, typisiert
  45. - neuere Hochsprache, wird für Online-Services wie Cloud-Lösungen und Messenging verwendet
  46. ### JavaScript
  47. - imperativ, prozedural, nicht-typisiert
  48. - ältere Hochsprache, Anwendung im web, wird clientseitig ausgeführt
  49. ### TypeScript
  50. - imperativ, prozedural, objektorientiert, typisiert
  51. - Erweiterung von JavaScript, zusätzlich Typisierung und Objektorientierung
  52. ## Programmierprinzipien
  53. ### KISS
  54. - kurz für Keep It Simple (and) Stupid
  55. - einfacher Code sollte das Ziel sein, um Verständlichkeit zu erhöhen
  56. - dazu kann es hilfreich sein, sich die Anforderungen zu vergegenwärtigen
  57. ### FCoH
  58. - kurz für Favor Composition over Inheritance (Komposition an Stelle von Vererbung)
  59. - man sollte Klassen eher in eine Teil-Ganzes-Beziehung als in einer Oberklasse-Unterklasse Beziehung darstellen
  60. - findet Anwendung, um Klassen stärker zu entkoppeln und dynamischer zu gestalten
  61. - dabei können Klassen bspw. Methoden aufrufen, die Methoden in dynamischen Klassenobjekten ausfrufen können statt die Methoden einer Elternklasse
  62. ### SLA
  63. - kurz für Single Layer of Abstraction
  64. - bedeutet, dass in jedem Codeabschnitt auf dem gleichen Abstraktionslevel gearbeitet werden soll
  65. - praxisnäher: eine Codeeinheit hat genau eine Aufgabe, und beispielsweise nichts mit Ausgaben oder genauer Fehlerbehandlung zu tun wenn etwas berechnet wird
  66. ### YAGNI
  67. - kurz für You Ain’t Gonna Need It
  68. - bedeutet einfach nur, dass nichts implementiert werden soll, was nicht in den Anforderungen steht
  69. - klingt einfach umsetzbar, wird aber leicht im Überschwung vergessen (zumindest bei mir als Testobjekt)
  70. - ein vermutlich guter Tipp ist das Erinnern an noch zu erledingende Dinge und das Zeitfenster
  71. ### IOC
  72. - kurz für Inversion of Control
  73. - eine Sonderform ist DI - Dependency Injection
  74. - bedeutet, dass der Verlauf des Programmes von der Stelle aus gesteuert werden sollte, die auch dafür zuständig ist
  75. - diese Stelle kann dann Konfigurationen, Abhängigkeiten oder Argumente zur Steuerung übergeben
  76. - dadurch wird der Code dynamischer
  77. ### DI
  78. - kurz für Dependency Injection
  79. - bedeutet einfach nur, dass Codeteile dynamischer gestaltet werden können, wenn ihnen Abhängigkeiten übergeben werden
  80. - falls diese Codeteile die Abhängigkeiten selbst in Form von beispielsweise Objekten erzeugen, wird der Code undynamischer, abhängiger und schlechter testbar