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.

202 lines
3.3 KiB

  1. # Programmierparadigmen von verschiedenen Programmiersprachen
  2. ## Übung 02.11.2023
  3. ### Java
  4. Imperativ
  5. Objekt-orientiert (OOP)
  6. Streng objekt-orientiert
  7. Konzept: Klassen/Objekte
  8. Vererbung/Kapselung/Polymorphie
  9. Modellierung komplexer Probleme leichter
  10. Wartbar/Skalierbar
  11. Plattform unabhängig
  12. -> Cross-Plattform Kompatibilität
  13. Multi-Threaded
  14. Funktional (seit neueren Versionen)
  15. ### C
  16. Imperative Programmiersprache
  17. Prozedurale Programmiersprache
  18. Weitergabe von Daten über Funktionen
  19. Typisierte Programmiersprache
  20. -> Streng typisiert
  21. Vorteil: Hardwarenähe, Kompatibilität
  22. Schnelligkeit
  23. Nachteil: Speicherverwaltung
  24. ### Python
  25. Imperativ
  26. Objekt-orientiert
  27. Klassen und Objekte
  28. Hierarchien
  29. Funktional
  30. Kompakte Syntax
  31. Interpretierte Sprache
  32. Übersetzung in andere Sprachen möglich (Cython, etc.)
  33. Portabilität
  34. Typisierung Dynamisch (Duck Typing)
  35. ### Go
  36. Modular, imperativ
  37. Breite Palette an Programmierparadigmen
  38. Teilweise Objektorientiert & Funktional
  39. Keine Vererbung
  40. Statt Klassen werden Structs verwendet
  41. Einache, effektive Programmierung
  42. Typisierung: Statisch typisiert
  43. Vor der Kompilierung müssen Typen fest stehen
  44. Mix: Schnelligkeit von C & Anwendungsmöglichkeiten/Simplizität von Python
  45. Multi-Threading
  46. ### JavaScript
  47. Erweiterung von HTML
  48. Multi-Paradigmen
  49. OOP, Prozedural oder Funktional
  50. Dynamische Typisierung
  51. Anwendung: Interaktive Web-Anwendungen (z.B. Google Maps)
  52. Vorteile: Modernes Erscheinungsbild, Günstiger Server-Traffic (läuft im Browser)
  53. Dynamische Elemente
  54. Event-basiert (Callbacks)
  55. Asynchrone Verarbeitung
  56. ### TypeScript
  57. Typisiert
  58. Imperativ, OOP
  59. Vererbung
  60. TypeScript hat Einfluss von JavaScript/Java/C#
  61. Baut auf Supermenge von JavaScript Bibliotheken auf
  62. Skalierbarkeit/Wartbarkeit -> Durch Einführung OOP
  63. ### SOLID
  64. # Separations of Concern
  65. Eine Klasse sollte nur für eine Funktion verantwortlich sein.
  66. # Open/Closed Principle
  67. Offen für Erweiterungen, aber geschlossen für Modifikationen.
  68. # Liskov Substitution Principle
  69. Objekte einer abgeleiteten Klasse sollte ohne, dass die Funktionalität des Programms eingeschränkt wird, anstelle von Objekten der Basisklasse verwendet werden können.
  70. # Interface Segregation Principle
  71. Clients sollten nicht von Schnittstellen abhängig sein, welche nicht verwendet werden.
  72. # Dependency Inversion Principle
  73. Module sollten nicht von einander abhänig sein, sondern von abstrakten Schnittstellen.
  74. ### STUPID
  75. # Singelton
  76. Es wird nur ein Objekt in einer Klasse erzeugt, wenn diese global zur Verfügung stehen, kann das die Testbarkeit beeinträchtigen.
  77. # Tight Coupling
  78. Teile die nichts miteinander zu tun haben, sind dennoch eng miteinander verbunden. Dies sollte nicht geschehen.
  79. # Untestability
  80. Untestbarkeit z.B. aufgrund von Tight Coupling, was zu Qualitätsverlust des Codes führen kann.
  81. # Premature Optimization
  82. Man sollte erst etwas Optimieren, wenn es auch nötig ist, sonst verschwendet man viel Zeit.
  83. # Indescriptive Naming
  84. Wenn man etwas ungenau benennt, kann das für andere Programmierer, die den Code ansehen, Probleme mit der Nachvollziehbarkeit machen.
  85. # Duplication
  86. Man sollte denselben Code nicht doppeln, da man jedes mal, wenn man etwas am Original verändert, auch bei den gedoppelten Codes die Veränderung vornehmen muss.