Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

kr4cher/programming-principles

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 

Repository files navigation

Programming Principles

SOLID

Single Responsibility Principle

  • jede Klasse hat nur eine Zuständigkeit

Open Closed Principle

  • offen für Erweiterungen
  • geschlossen für Änderungen

Liskov Substitution Principle

  • Objekte eines abgeleiteten Typs müssen als Ersatz ihres Basistyps funktionieren, ohne die Korrektheit zu ändern.

Interface Segregation Principle

  • Interfaces aufteilen, sodass Funktionalität getrennt ist
  • Fat Interfaces bündeln viel Funktionalität:
    • Anwender abhängig von Änderungen anderer Methoden im Interface
    • Anwender hat Zugriff auf Methoden, die nicht für ihn bestimmt sind

Dependency Inversion Principle

  • High-Level-Module sollten nicht von Low-Level-Modulen abhängen
  • Regeln in High-Level-Modul vorgegeben, in Low-Level-Modul implementiert
  • ausschließlich von Abstraktionen abhängen
    → High-Level-Module können so wiederverwendet werden

Tell, don't ask

  • Objekt selbst etwas ausführen lassen
    → hat alle Informationen um Entscheidungen selbst zu treffen
  • Kommandos statt Abfragen

→ Führt zu verteilter Businesslogik

KISS

"Keep it simple, stupid"

  • Komplexität so gering wie möglich halten
  • Code nicht unnötig verkomplizieren

SLAP

"Single Level of Abstraction Principle"

  • Code innerhalb einer Methode ist auf einem Abstraktionsniveau
    • keine Vermischung von Arbeit und Delegation
    • keine Vermischung aus Technischem und Businesslogik

Composed Methods: Einstiegsmethode delegiert an private Hilfsmethoden

DRY

"Don't repeat yourself"

  • Code nur einmal schreiben
  • gleicher Code auslagern und von allen anderen Stellen darauf zugreifen
  • Änderungen müssen nur an einer Stelle gemacht werden
  • Nur eine Quelle der Wahrheit

YAGNI

"You ain't gonna need it"

  • nicht benötigte Features nicht implementieren
  • unnötige Features erhöhen Komplexität
  • bindet unnötig Ressourcen

GRASP

"General Responsibility Assignment Software Patterns"

Ziel: Low Representational Gap (LRG) möglichst klein halten
(LRG = Lücke zwischen gedachtem Domänenmodell und Implementierung)

Low Coupling

  • geringe Kopplung zwischen Objekten
  • Abhängigkeiten so gering wie möglich halten

High Cohesion

  • starke Kohäsion innerhalb einer Klasse
  • semantische Nähe der Elemente einer Klasse

Information Expert

  • Objekt hält Verantwortung für Informationen die es besitzt
  • Objekte sind zuständig für Aufgaben die ihre Informationen betreffen

Creator

  • Legt fest, wer für die Erzeugung von Objekten zuständig ist
  • Objekt kommt als Creator infrage, wenn es zu jedem erstellten Objekt eine Beziehung hat

Indirection

  • Delegation
  • kann Teile des Systems entkoppeln, indem Aufgaben ausgelagert werden

Polymorphism

  • Behandlung von alternativen abhängig vom Typ
  • Umgang mit Variation in der OO-Programmierung
  • Methoden je nach Typ andere Implementierung
  • Vermeidung von Fallunterscheidungen

Controller

  • Verarbeitung einkommender Benutzereingaben
  • Koordination UI ↔ Logik
  • Hauptsächlich Delegation
  • Verwalten des Anwendungszustands

Pure Fabrication

  • reine Verhalten- oder Arbeiterklasse
  • keinen Bezug zur Domäne
  • Trennung technisch ↔ fachlich

Protected Variations

  • Kapselung verschiedener Implementierungen hinter einer einheitlichen API
  • Variabilität einzelner Komponenten soll nicht Gesamtsystem beeinflussen

Conways Law

  • Kommunikationsstruktur eines Unternehmens bildet sich auf Code bzw. Architektur ab
  • Kommunikationsschnittstellen entsprechen Modulschnittstellen im Code
  • Besser: Kommunikationsstruktur an Produkt/Kundenbedürfnis ausrichten

About

Programmierprinzipien kurz und knapp

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
Morty Proxy This is a proxified and sanitized view of the page, visit original site.