Advanced Programming Techniques - Cheatsheet
Verwendung von abstrakten Klassen und Interfaces
Definition:
Verwendung von abstrakten Klassen und Interfaces zur Definition von Schnittstellen und gemeinsamen Verhalten in der objektorientierten Programmierung.
Details:
- Abstrakte Klassen: Können nicht instanziiert werden, dienen als Basisklassen.
- Können abstrakte (ohne Implementierung) und nicht-abstrakte Methoden enthalten.
- Interfaces: Definieren nur Methoden und Konstanten, keine Implementationen.
- Eine Klasse kann mehrere Interfaces implementieren, aber nur von einer abstrakten Klasse erben.
- Nützlich zur Gewährleistung der Austauschbarkeit und Erweiterbarkeit von Komponenten.
Entwurfsmuster: Singleton, Factory, Adapter, Dekorator, Beobachter, Zustandsmuster
Definition:
Entwurfsmuster: Singleton, Factory, Adapter, Dekorator, Beobachter, Zustandsmuster
Details:
- Singleton: Stellt sicher, dass eine Klasse nur eine Instanz hat und bietet einen globalen Zugriffspunkt darauf.
- Factory: Erzeugungsmuster; eine Methode/Funktion zur Erstellung von Objekten ohne Angabe der konkreten Klasse.
- Adapter: Strukturmuster; passt die Schnittstelle einer Klasse an die einer anderen Klasse an.
- Dekorator: Fügt einer bestehenden Klasse zur Laufzeit Verantwortung hinzu, ohne ihre Struktur zu ändern.
- Beobachter: Verhaltensmuster; ein Objekt (Beobachter) wird über Zustandsänderungen eines anderen Objekts (Subjekt) informiert.
- Zustandsmuster: Verändert das Verhalten eines Objekts, wenn sich dessen Zustand ändert, und verwendet Zustandsklassen zur Durchführung zustandsabhängiger Operationen.
Lambda-Ausdrücke und Closures
Definition:
Anonyme Funktion, ohne Namen, direkt verwendet. Closure: Funktion mit Zugriff auf Umgebung, in der sie erstellt wurde.
Details:
- Syntax Lambda-Ausdruck:
(Parameter) => Ausdruck
- Kann überall dort verwendet werden, wo eine Funktion benötigt wird
- Häufig in höheren Funktionen
- Closure speichert Variablen aus ihrer Erzeugungsumgebung
- Beispiel Closure: Funktion innerhalb einer Funktion, Zugriff auf äußere Variablen
Höhere Ordnung Funktionen
Definition:
Funktionen, die andere Funktionen als Parameter nehmen oder zurückgeben.
Details:
- Verwende Expressions wie
map
, filter
und reduce
. - Implementiere mit
lambda
-Funktionen für Kurzdefinitionen. - Erlauben funktionale Programmierungsparadigmen.
- Syntaktisch abhängig von der Programmiersprache.
- Ermöglicht flexiblere und wiederverwendbare Codesegmente.
Thread-Management und Synchronisationsmechanismen
Definition:
Verwaltung und Synchronisation von Threads, um parallele Ausführungen zu ermöglichen und Race Conditions zu vermeiden.
Details:
- Thread-Erstellung: \texttt{std::thread} in C++ oder \texttt{Thread} API in Java
- Synchronisationsmechanismen: Mutex (\texttt{std::mutex}), Semaphore (\texttt{std::counting\textunderscore semaphore}), Bedingungsvariablen (\texttt{std::condition\textunderscore variable})
- Deadlocks vermeiden: Reihenfolge der Sperren beachten, Deadlock-Detection und -Prevention-Algorithmen
- Wichtige Begriffe: Kontextwechsel, Thread-Pool, Thread-Sicherheit
Asynchrone Programmierung und Event-Loops
Definition:
Form der Programmierung zur parallelen Ausführung von Operationen ohne blockierende Wartezeiten.
Details:
- Event-Loop: zentrale Komponente, die Ereignisse verwaltet und ausführt
- Wichtig für I/O-intensive Anwendungen
- Promise: Objekt zur Verwaltung asynchroner Ergebnisse
- async/await: syntaktischer Zucker für Promises
- Concurrency über Task-Scheduling realisiert
- Nutzung in Sprachen wie JavaScript, Python (asyncio)
Client-Server-Architekturen und RPC
Definition:
Client-Server-Architekturen: ein Modell zur Verteilung von Aufgaben zwischen Service-Anbietern (Server) und Service-Nutzern (Client). Remote Procedure Calls (RPC): Methode zur Kommunikation zwischen Programmen auf verschiedenen Rechnern, Aufruf von Methoden als wären sie lokal.
Details:
- Client-Server-Architekturen:
- Trennung von Aufgaben und Zuständigkeiten
- Clients stellen Anfragen, Server antworten
- Zentrale Verwaltung und Wartung auf dem Server
- Remote Procedure Calls (RPC):
- Transparenter Methodenaufruf über Netzwerke
- Nutzung von Stubs und Skeletons zur Abstraktion
- Verarbeitung von Parametern und Rückgaben
- Fehlerbehandlung (z.B. Netzwerkausfälle)
Verteilte Transaktionen und Konsistenzmodelle
Definition:
Verteilte Transaktionen gewährleisten atomare Operationen über mehrere verteilte Knoten, um Konsistenz zu bewahren. Konsistenzmodelle definieren Regeln für die Sichtbarkeit und Reihenfolge von Änderungen in einem verteilten System.
Details:
- ACID-Eigenschaften: Atomarität, Konsistenz, Isolation, Dauerhaftigkeit
- 2-Phasen-Commit: Vorbereitung und Commit/Abort
- Konsistenzmodelle: Strikte, sequentielle, kausale Konsistenz
- CAP-Theorem: Konsistenz, Verfügbarkeit, Partitionstoleranz (nur zwei von drei möglich)
- Eventual Consistency: Änderungen werden irgendwann sichtbar