LF11 Funktionalität in Anwendungen realisieren
Dieses Lernfeld 11a bringt dir bei, wie du richtige Software entwickelst - von der ersten Idee bis zum fertigen Programm.
Hier lernst du Algorithmen, Java, Datenstrukturen und UML kennen. Das ist das Handwerkszeug für jeden Programmierer.
I. Grundlagen der Algorithmen
Algorithmen sind wie Kochrezepte für den Computer - sie zeigen Schritt für Schritt, wie Probleme gelöst werden.
Ohne Algorithmen könnte kein Programm funktionieren. Sie sind das Herz jeder Software.
Algorithmus
Ein Algorithmus ist ein präzise festgelegtes Verfahren zur Lösung von Problemen. Wie ein Kochrezept, das aus endlich vielen Schritten besteht und in endlicher Zeit ein Ergebnis produziert.
5 Bedingungen für jeden Algorithmus:
- Spezifikation - Was kommt rein, was soll rauskommen?
- Durchführbarkeit - Muss vollständig beschrieben und ausführbar sein
- Terminiertheit - Muss irgendwann aufhören
- Determiniertheit - Bei gleichen Eingaben immer gleiches Ergebnis
- Korrektheit - Bei korrekten Eingaben muss korrektes Ergebnis rauskommen
II. Java Entwicklungsumgebung
Java ist plattformunabhängig - einmal geschrieben, läuft überall. Das macht die Sprache so beliebt für große Software-Projekte.
Dafür brauchst du die richtige IDE und verstehen, wie der javac funktioniert.
Java IDE
Eine IDE ist wie eine Werkbank für Programmierer - alles was du brauchst ist an einem Ort.
Wichtige Komponenten:
- JDK - Java Development Kit - die komplette Werkzeugkiste
- JRE - Java Runtime Environment - damit laufen Java Programme
- JVM - Java Virtual Machine - übersetzt Bytecode in Maschinencode
- Java Compiler (javac) - macht aus Java-Code Bytecode
Entwicklungsfluss:
- Quelle.java - dein Java Code
- Java Compiler (javac) - macht Bytecode draus (Quelle.class)
- JVM - führt Bytecode auf dem Zielsystem aus
III. Java Grundlagen
Java ist objektorientiert - alles dreht sich um Klassen und Objekte. Das macht Programme übersichtlich und wiederverwendbar.
Mit Klassen baust du Bausteine, aus denen du dann Objekte erschaffst.
Java klasse und Java Objekt
Klassen sind wie Baupläne, Objekte sind die fertigen Häuser. Eine Klassen beschreibt, was ein Objekt können soll.
Aufbau einer Java klasse:
- Attributen - Was das Java Objekt weiß (Eigenschaften)
- Java Methode - Was das Java Objekt kann (Funktionen)
class Tier {
String art; // Attribut
double gewicht; // Attribut
void friss() { // Methode
// Code zum Fressen
}
}
Java Objekt erstellen:
Tier elefant = new Tier(); // Neues Objekt
elefant.art = "Elefant"; // Attribut setzen
elefant.friss(); // Methode aufrufen
IV. Datenstrukturen
Datenstrukturen sind wie Container - verschiedene Formen für verschiedene Zwecke. Willst du Daten sortiert? Unsortiert? Schnell durchsuchen?
Die richtige Datenstruktur macht dein Programm schneller und sauberer.
Einfache Datenstrukturen
Arrays
- Feste Größe, gleicher Datentyp
- Schneller Zugriff über Index
int[] zahlen = {1, 2, 3, 4, 5};
Collections - die Flexiblen
Lists:
- ArrayList - variabel, wie ein erweiterbares Array
- LinkedList - verkettet, gut zum Einfügen/Löschen
Sets:
- HashSet - unsortiert, jedes Element nur einmal
- TreeSet - sortiert automatisch
Maps:
- HashMap - unsortiert, Schlüssel → Wert
- TreeMap - sortiert nach Schlüsseln
| Datenstruktur | Eigenschaften | Verwendung | |-----------------------------------|---------------|------------| | ArrayList | Variabel, schneller Zugriff | Wenn du oft auf Elemente zugreifst | | LinkedList | Verkettet, schnelles Einfügen | Wenn du oft einfügst/löschst | | HashSet | Eindeutige Elemente, unsortiert | Duplikate vermeiden | | HashMap | Schlüssel-Wert-Paare | Wie ein Wörterbuch |
V. Komplexe Datenstrukturen
Für große Datenmengen brauchst du clevere Datenstrukturen - sie machen den Unterschied zwischen sekunden- und minutenlangen Wartezeiten.
Hash-basierte Strukturen und Sortieralgorithmen sind hier die Profiwerkzeuge.
Hashbasierte Datenstrukturen
Hash-Verfahren sind wie ein super-schneller Index in einem Buch. Statt alles durchzublättern, springst du direkt zur richtigen Seite.
Eigenschaften:
- Nicht lineare Datenstruktur
- Jeder Datenwert hat eindeutigen Schlüssel
- Schnelle Suche unabhängig von Datengröße
- Verschiedene Hash-Verfahren: Divisions-Rest-Methode, Multiplikative Methode, etc.
Bekannte Hash-Verfahren:
- Brent-Hashing
- Doppel-Hashing
- Kuckucks-Hashing
- Mittquadratmethode
Sortieralgorithmen
Heapsort
- "Heap" = Haufen, Halde
- Instabiles aber schnelles Sortierverfahren
- Basiert auf binärem Heap (vollständiger binärer Baum)
- Max-Heap: Elternknoten ≥ Kindknoten
- Min-Heap: Elternknoten ≤ Kindknoten
VI. UML Modellierung
UML ist die Sprache der Software-Architekten. Bevor du programmierst, zeichnest du deine Ideen auf - das spart später viel Zeit.
Mit UML können alle im Team verstehen, wie die Software aufgebaut ist.
UML - Unified Modeling Language
UML hat verschiedene Diagramme für verschiedene Sichten auf deine Software - wie ein Bauplan mit Grundriss, Seitenansicht und Elektroplan.
Die 5 Sichten:
- Logische Sicht - Klassendiagramme, Paketdiagramme
- Ablaufsicht - Sequenzdiagramme, Zustandsdiagramme
- Physische Sicht - Deployment-Diagramme
- Implementierungssicht - Komponenten-Diagramme
- Szenarien - Use-Case-Diagramme, Aktivitätsdiagramme
Anwendungsfalldiagramm
Use-Case-Diagramme zeigen, was dein System für wen tun soll - wie eine Aufgabenliste für die Software.
Aufbau:
- Anwendungsfall - horizontale Ovale mit Verben (z.B. "Geld abheben")
- Akteure - Strichmännchen für Benutzer
- System-Grenzen - Rechteck um alle Anwendungsfälle
Klassendiagramm
Klassendiagramme sind der Bauplan deiner Klassen - zeigen Eigenschaften, Funktionen und Beziehungen.
Darstellung einer Klasse:
┌─────────────┐
│ Klassenname │
├─────────────┤
│ + attribut1 │ ← Attribute
│ - attribut2 │
├─────────────┤
│ + methode1()│ ← Methoden
│ - methode2()│
└─────────────┘
Sichtbarkeiten:
- + öffentlich - jeder kann darauf zugreifen
- - privat - nur die Klasse selbst
- # geschützt - Klasse und Unterklassen
Sequenzdiagramm
Sequenzdiagramme zeigen zeitliche Abläufe - wie ein Chat-Verlauf zwischen Objekten.
Elemente:
- Akteure - senkrechte Linien (Lebenslinien)
- Nachrichten - Pfeile zwischen Akteuren
- Zeit - läuft von oben nach unten
Aktivitätsdiagramm
Aktivitätsdiagramme sind wie Flussdiagramme - zeigen Entscheidungen und parallele Abläufe.
Notation:
- Startknoten - schwarzer Punkt ●
- Endknoten - schwarzer Punkt im Kreis ⦿
- Aktivität - abgerundetes Rechteck
- Entscheidung - Raute ◇
- Ablaufende - X (beendet aktuellen Fluss)
Anwendung:
- Alternative Abläufe modellieren
- Parallele Aktivitäten darstellen
- Verantwortungsbereiche zuordnen
- Ausnahmebehandlung planen
VII. Softwareentwicklung
Gute Software entsteht nicht durch Zufall - du brauchst Planung, Tests und modularen Aufbau.
Modularität macht deine Software wartbar und erweiterbar.
Modulare Softwarekomponenten
Prinzipien:
- Kapselung - Interna verstecken
- Schnittstellen - Klare Kommunikationswege
- Wiederverwendbarkeit - Einmal schreiben, oft nutzen
- Testbarkeit - Komponenten einzeln prüfbar
Vorteile modularer Entwicklung:
- Mehrere Entwickler können parallel arbeiten
- Fehler sind leichter zu finden
- Einzelne Module sind austauschbar
- Code ist besser verständlich
Softwarekomponenten testen
Testarten:
- Unit-Tests - Teste einzelne Methoden
- Integrationstests - Teste Zusammenspiel zwischen Komponenten
- Systemtests - Teste komplette Anwendung
Test-Prinzip:
- Arrange - Testdaten vorbereiten
- Act - Funktion ausführen
- Assert - Ergebnis prüfen
VIII. Erweiterte Konzepte
Für professionelle Software brauchst du noch mehr Werkzeuge - Sortieralgorithmen, Komprimierung und Verschlüsselung.
Diese Themen machen aus einem einfachen Programm eine robuste Anwendung.
Sortieralgorithmen
Sortierung ist überall - in Suchmaschinen, Datenbanken, Listen. Der richtige Sortieralgorithmus macht den Geschwindigkeitsunterschied.
Wichtige Sortieralgorithmen:
- Heapsort - immer O(n log n), aber instabil
- Quicksort - meist sehr schnell, schlimmstenfalls O(n²)
- Mergesort - immer O(n log n), stabil aber braucht mehr Speicher
Komprimierung
Komprimierung spart Speicherplatz und Übertragungszeit - besonders wichtig bei großen Datenmengen.
Verfahren:
- Verlustfrei - Original kann perfekt wiederhergestellt werden (ZIP)
- Verlustbehaftet - Acceptable Qualitätsverluste (JPEG, MP3)
Verschlüsselung
Verschlüsselung schützt sensible Daten - vom Online-Banking bis zu privaten Nachrichten.
Grundarten:
- Symmetrisch - Gleicher Schlüssel für Ver- und Entschlüsselung
- Asymmetrisch - Öffentlicher und privater Schlüssel (RSA)
- Hash-Funktionen - Einweg-Verschlüsselung für Passwörter
Die Informationen und Konzepte wurden aus den von ihm bereitgestellten Lehrunterlagen und Vorlesungen entnommen. Alle Bilder, die hier gepostet wurden, wurden in meiner eigenen Umgebung erstellt, stammen aus dem Buch Westermann oder aus den PDF-Präsentationen von Herrn Wondmu Alemu.
Mein Ziel war es, die wesentlichen Punkte zusammenzufassen und die Kerninhalte verständlich darzustellen.