Softwareentwicklung und Programmierung: Modellierung, Algorithmen, Implementierung
Der Bereich Softwareentwicklung und Programmierung prüft, ob du ein Problem durchgängig bearbeiten kannst: vom Modell über den Algorithmus bis zum lauffähigen Java-Programm. Typische Aufgaben verlangen ein UML-Klassendiagramm aus einer Textbeschreibung, Pseudocode oder ein Struktogramm für einen Algorithmus, die Analyse von Rekursion und Sortierverfahren sowie eine Begründung der Komplexität mit der O-Notation.
Modellierung
- Klasse als Bauplan (Attribute mit Typ und Sichtbarkeit, Operationen), Objekt als Instanz mit konkreten Werten; Attribut ist keine Methode.
- Assoziation mit Multiplizität an beiden Enden (1, 0..1, 1..*, *), gerichtete Assoziation, Vererbung als „ist-ein“-Beziehung.
- Komposition (gefüllte Raute, existenzabhängig) gegen Aggregation (leere Raute, unabhängig) abgrenzen.
- Dynamisches Verhalten: Zustandsdiagramm (Zustände, Transitionen mit Ereignis/Bedingung/Aktion) oder Aktivitätsdiagramm (Aktionen, Entscheidungsknoten, Parallelisierung).
Algorithmen und Datenstrukturen
- Lineare Suche O(n) auf beliebigen Feldern, binäre Suche O(log n) nur auf sortierten Feldern.
- Sortieren: Selection-/Insertion-/Bubble-Sort O(n²), Mergesort O(n log n) mit Hilfsfeld.
- Rekursion braucht Abbruchbedingung plus Rekursionsschritt; jeder rekursive Abstieg lässt sich mit einem expliziten Stack iterativ nachbauen.
- Felder haben feste Länge, eine ArrayList wächst dynamisch; Stack (LIFO) und Queue (FIFO) sind abstrakte Datentypen mit klar definierten Operationen.
Implementierung in Java
- Kapselung: Attribute private, Zugriff über Getter/Setter, public nur für die Schnittstelle.
- Objektinhalt mit equals vergleichen, Identität mit ==; bei String nie == für den Inhaltsvergleich nutzen.
- Testen mit Randfällen (leeres Feld, ein Element, Duplikate) und gezielt mit dem Debugger statt mit Vermutungen.
Durchgerechnetes Beispiel
Binäre Suche in feld = [3, 8, 12, 19, 25, 31] nach dem Wert 25: lo = 0, hi = 5, mid = (0+5)/2 = 2, feld[2] = 12 < 25, also lo = 3. Neues mid = (3+5)/2 = 4, feld[4] = 25, gefunden nach zwei Vergleichen. Begründung der Laufzeit: Das Suchintervall halbiert sich pro Schritt, bei n = 6 sind höchstens drei Schritte nötig, allgemein ⌈log₂ n⌉ Vergleiche. Wichtig ist die Angabe der Voraussetzung: Das Feld muss sortiert sein, sonst ist das Verfahren falsch.
Typische Punktverluste
- Multiplizitäten auf der falschen Seite der Assoziation eingetragen.
- Rekursion ohne Abbruchbedingung oder mit falschem Rekursionsschritt (Endlosschleife, StackOverflow).
- Binäre Suche auf unsortierten Daten vorgeschlagen.
- O-Notation ohne Bezug zum worst case und ohne Begründung angegeben.
- Struktogramm ohne Anfang/Ende oder mit nicht abgedeckten Fällen.