Einführung in Python und seine Anwendungen
Definition:
Einführung in die Programmiersprache Python und deren Anwendungsgebiete.
Details:
- Python: Höhere Programmiersprache, einfach zu lernen und verwenden.
- Syntax: Klar und lesbar (z.B.: Einrückungen statt geschweifte Klammern).
- Anwendungen: Webentwicklung, Datenanalyse, wissenschaftliches Rechnen, künstliche Intelligenz, Automatisierung.
- Bibliotheken: Umfangreich (z.B.: NumPy, Pandas, TensorFlow, Flask).
- Interpreter: Python-Code wird zeilenweise ausgeführt (\texttt{python filename.py}).
- Versionsverwaltung: Wichtige Unterscheidung zwischen Python 2 und Python 3.
- Entwicklungsumgebung: IDLE, PyCharm, VSCode.
Verwendung von Java für objektorientierte Programmierung
Definition:
Verwendung von Java für objektorientierte Programmierung
Details:
- Klassen und Objekte erstellen und instanziieren
- Vererbung (Inheritance): \text{Klasse A extends Klasse B}
- Polymorphismus: Überladen und Überschreiben von Methoden \text{Methodenname(params)}
- Abstrakte Klassen und Schnittstellen: \text{abstract class} und \text{interface}
- Modifikatoren: \text{public}, \text{private}, \text{protected}
- Kapselung (Encapsulation): Umsetzung durch Getter- und Setter-Methoden \text{getX()}, \text{setX()}
- Konstruktoren: Initialisierung von Objekten \text{Klassenname(params)}
- Exception Handling: \text{try} und \text{catch}-Blöcke
Grundlagen der C-Programmierung für systemnahe Anwendungen
Definition:
Grundlagen der C-Programmierung für systemnahe Anwendungen. Notwendig für die effiziente, hardware-nahe Programmierung.
Details:
- Syntaxgrundlagen: Datentypen, Operatoren, Kontrollstrukturen
- Pointers und Speicherverwaltung: \text{malloc}, \text{free}, Zeigerarithmetik
- Modularisierung: Header-Dateien (\text{.h}), Quell-Dateien (\text{.c})
- Vorkompilations-Direktiven: \text{\texttt{\textbackslash\text#define}}, \text{\texttt{\textbackslash\text#include}}
- Ein-/Ausgabe (stdio.h): \text{\texttt{printf}}, \text{\texttt{scanf}}
- Systemnahe Funktionen: Dateioperationen (\text{fopen}, \text{fread}, \text{fwrite}, \text{fclose})
- Fehlerbehandlung und Debugging: \text{gdb}, \text{valgrind}
Entwurfsmuster und Architekturprinzipien
Definition:
Strukturierte Lösungen für häufig wiederkehrende Probleme in der Softwareentwicklung.
Details:
- Entwurfsmuster (Design Patterns): Standardisierte Lösungen für typische Probleme.
- Architekturprinzipien: Grundlegende Richtlinien zur Strukturierung von Softwaresystemen.
- Singleton: Stellt sicher, dass eine Klasse nur eine Instanz hat.
- Strategy: Ermöglicht das Austauschen von Algorithmen zur Laufzeit.
- SOLID: Fünf Prinzipien für wartbaren und erweiterbaren Code (Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion).
- DRY (Don't Repeat Yourself): Vermeide Code-Duplikate.
- KISS (Keep It Simple, Stupid): Bevorzuge einfache Lösungen.
Datenstrukturen wie Arrays, Listen und Bäume
Definition:
Grundlegende Datenstrukturen zur Speicherung und Verwaltung von Daten in der Informatik.
Details:
- Arrays: Statische, homogene Datenstrukturen, schneller Zugriff über Index, O(1) Zugriff.
- Listen: Dynamische Datenstrukturen, erlauben flexible Größe, Einfügen und Löschen von Elementen, z.B. einfach verkettete Listen, doppelt verkettete Listen.
- Bäume: Hierarchische Datenstrukturen, bestehen aus Knoten, enthalten Daten und Verweise auf Nachbarknoten, besonders bekannt: Binärbäume, AVL-Bäume.
Verwendung von Debugging-Tools
Definition:
Verwendung von Debugging-Tools zur Identifikation und Behebung von Programmfehlern.
Details:
- Breakpoint setzen: Haltepunkte im Code, um Ausführungsstatus zu überprüfen.
- Watchpoints verwenden: Überwachung von Variablenwerten bei jeder Änderung.
- Step-Funktionen: Zeilenweises Debuggen (Step Into, Step Over, Step Out).
- Call Stack Analyse: Aufrufreihenfolge der Funktionen nachvollziehen.
- Speicherinspektion: Inhalt von Variablen und Speicheradressen prüfen.
- Log-Analyse: Programmverlauf durch Log-Dateien nachvollziehen.
Versionskontrolle mit Git
Definition:
Verwalten von Quellcode-Änderungen, ermöglicht Zusammenarbeit und Nachverfolgbarkeit.
Details:
- Initialisierung:
git init
- Klonen:
git clone <URL>
- Status prüfen:
git status
- Änderungen hinzufügen:
git add <Datei>
oder git add .
- Commit:
git commit -m 'Nachricht'
- Änderungen übertragen:
git push
- Änderungen holen:
git pull
- Zweig erstellen:
git branch <Name>
- Zweig wechseln:
git checkout <Name>
- Zweig zusammenführen:
git merge <Name>
- Konflikte lösen: Dateikonflikte manuell bearbeiten und dann
git add <Datei>
und git commit
Unit Testing und Testautomatisierung
Definition:
Automatisiertes Testen einzelner Programmmodule, um sicherzustellen, dass diese unabhängig vom Gesamtsystem korrekt funktionieren.
Details:
- Frameworks: JUnit, TestNG
- Testklassen und Testmethoden definieren
- Assert-Methoden zur Verifikation: \text{assertEquals()}, \text{assertTrue()}
- Integration in CI/CD-Pipeline
- Ermöglicht frühes Erkennen von Fehlern
- Reduziert manuellen Testaufwand
- Testabdeckung (\text{Code Coverage}) als Qualitätsmaß