Komplexitätsklassen und algorithmische Effizienz
Definition:
Kategorisierung von Algorithmen basierend auf den Ressourcen, die sie benötigen (Zeit und Speicher).
Details:
- Komplexitätsklassen: Einordnung basierend auf Asymptotik
- Zeitkomplexität: Laufzeit in Abhängigkeit von der Eingabegröße
- Wichtige Zeitklassen: P, NP, NP-vollständig, NP-schwer
- Ablauf: Zeitkomplexität als Funktion f(n) (z. B. O(n), O(n^2))
- Algorithmische Effizienz: Geschwindigkeit und Ressourcennutzung
Rekursive und iterative Prozessgestaltung
Definition:
Rekursive und iterative Prozessgestaltung sind zwei grundlegende Methoden, um wiederholende Abläufe in der Programmierung zu implementieren.
Details:
- Rekursion: Eine Funktion ruft sich selbst auf.
- Iteration: Einsatz von Schleifen (z.B. for, while).
- Rekursive Algorithmen nutzen Basisfälle und Rekursionsschritte.
- Iterative Algorithmen durchlaufen Schleifen bis zu einer Abbruchbedingung.
- Rekursion kann zu Stackoverflow führen, Iteration zu hoher Laufzeit.
- Rekursion oft einfacher und eleganter, Iteration meist effizienter.
- Beispiel für rekursive Definition der Fakultät:
a=[Rekursion, Iteration]
Datenstrukturen: Listen, Bäume und Graphen
Definition:
Grundlegende Datenstrukturen in der Informatik, verwendet zur Organisation und Speicherung von Daten.
Details:
- Listen: Sequenz von Elementen, geordnet, indiziert.
- Bäume: Hierarchische Struktur, Knotenelemente (Knoten, Wurzel, Blatt), rekursiv definiert.
- Graphen: Menge von Knoten (Ecken) und Kanten, können gerichtet oder ungerichtet sein.
- Wichtige Operationen: Einfügen, Löschen, Suchen.
- Komplexität: Listen (linear), Bäume (logarithmisch, linear), Graphen (variiert je nach Algorithmus).
Algorithmen zur Datenmanipulation
Definition:
Algorithmen zur Transformation, Verarbeitung und Analyse von Daten
Details:
- Änderung der Datenstruktur: z.B. Sortieren (\texttt{Quicksort}, \texttt{Mergesort})
- Datenfiltern: z.B. Benutzung von Prädikaten zur Auswahl von Daten
- Aggregationsoperationen: z.B. Summieren, Durchschnittsbildung
- Map-Reduce: Verteilung und parallele Verarbeitung großer Datenmengen
- \texttt{CRUD}-Operationen: \texttt{Create}, \texttt{Read}, \texttt{Update}, \texttt{Delete}
Objektorientierte Programmierung und Design-Patterns
Definition:
Objektorientierte Programmierung (OOP) ist ein Paradigma, das Objekte verwendet, um Daten und Funktionen zu organisieren. Design-Patterns sind wiederverwendbare Lösungen für häufige Probleme in der Softwareentwicklung.
Details:
- Objekte: Instanzen von Klassen, die Daten (Attribute) und Funktionen (Methoden) kapseln
- Klassen: Baupläne für Objekte
- Vererbung: Mechanismus, bei dem eine Klasse (Subklasse) von einer anderen Klasse (Superklasse) erbt
- Polymorphismus: Fähigkeit, Methoden auf unterschiedliche Weise zu implementieren
- Abstraktion: Prozess der Vereinfachung komplexer Systeme durch Fokussierung auf entscheidende Details
- Kapselung: Verbergen der internen Zustände und das Bereitstellen von Methoden zur Änderung und Abfrage dieser Zustände
- Design-Patterns:
- Singleton: Stellt sicher, dass eine Klasse nur eine Instanz hat
- Factory: Erzeugt Objekte ohne Angabe der genauen Klasse
- Observer: Benachrichtigt Abonnenten über Änderungen eines Zustands
- Decorator: Fügt Objekten dynamisch Verantwortung hinzu
- Strategy: Definiert eine Familie von Algorithmen, die austauschbar sind
Debugging-Techniken und Fehlersuche
Definition:
Fehlersuche und Korrektur von Programmfehlern
Details:
- Breakpoints setzen: Programm an bestimmten Stellen anhalten
- Step-by-step-Ausführung: Programm Codezeile für Codezeile durchlaufen
- Variable beobachten: Werte von Variablen während der Ausführung überwachen
- Log-Statements: Ausgabe von Zustandsinformationen in der Konsole
- Debugger-Tools: Verwendung spezialisierter Software zum Debuggen (z.B. GDB, Visual Studio Debugger)
- Testfälle: Schreiben von Tests, um Fehler zu identifizieren und zu reproduzieren
- Spezielle Debugging-Methoden: Unit-Tests, Integrationstests
Softwareentwicklungsmethoden: Agile und klassische Ansätze
Definition:
Unterschiedliche Ansätze zur Softwareentwicklung. Agile Methoden (flexibel, inkrementell) vs. klassische Methoden (planbasiert, sequentiell).
Details:
- Agile Methoden: Scrum, Kanban.
- Klassische Methoden: Wasserfallmodell, V-Modell.
- Agil: Kunde im Fokus, regelmäßige Anpassungen, kurze Entwicklungszyklen.
- Klassisch: Feste Phasen, umfassende Planung im Voraus, weniger Anpassungen während des Prozesses.
Projektmanagement in der Softwareentwicklung
Definition:
Projektmanagement in der Softwareentwicklung umfasst die Planung, Überwachung und Steuerung von Softwareprojekten, um sicherzustellen, dass die Projektziele innerhalb der geplanten Zeit und des Budgets erreicht werden.
Details:
- Phasen: Initiierung, Planung, Ausführung, Überwachung & Steuerung, Abschluss
- Wichtige Konzepte: Scope, Time, Cost, Quality, Resource Management
- Methoden: Wasserfallmodell, Agile (Scrum, Kanban)
- Werkzeuge: JIRA, Trello, Microsoft Project
- Rollen: Projektmanager, Entwickler, Tester, Scrum Master (bei Agile)
- Wichtige Dokumente: Projektplan, Lastenheft, Pflichtenheft, Statusberichte