📋 Inhaltsverzeichnis
1. Themenübersicht & Gewichtung 2. Zahlensysteme & Konvertierungen 3. Einer- und Zweierkomplement 4. Digitaltechnik (Gatter, Boolesche Algebra, KV) 5. OOP-Theorie 6. UML-Klassendiagramme 7. Struktogramme & PAP 8. Java-Programmierung 9. Algorithmen & Sortierung 10. Datenbanken & Normalisierung 11. Prüfungssimulation & Tipps 12. Schnellreferenz: Häufigste Prüfungsaufgaben 13. Selbstcheck-Checkliste1. Themenübersicht & Gewichtung
📊 Alle Prüfungsthemen nach Gewichtung
| # | Themenblock | Gewichtung | Schwierigkeit |
|---|---|---|---|
| 1 | Zahlensysteme & Konvertierungen | ⭐⭐⭐ Hoch | 🟡 Mittel |
| 2 | Digitaltechnik (Logik, Gatter, KV) | ⭐⭐⭐ Hoch | 🔴 Schwer |
| 3 | OOP-Theorie (Begriffe, Konzepte) | ⭐⭐⭐ Hoch | 🟡 Mittel |
| 4 | Java-Programmierung | ⭐⭐⭐ Hoch | 🔴 Schwer |
| 5 | UML-Diagramme (Klassen/Objekt) | ⭐⭐ Mittel | 🟡 Mittel |
| 6 | Struktogramme (Nassi-Shneiderman) | ⭐⭐ Mittel | 🟢 Leicht |
| 7 | Programmablaufpläne (PAP) | ⭐⭐ Mittel | 🟢 Leicht |
| 8 | Sortieralgorithmen | ⭐⭐ Mittel | 🟡 Mittel |
| 9 | Datenbanken / Normalisierung | ⭐ Niedrig | 🟡 Mittel |
2. Zahlensysteme & Konvertierungen
2.1 Dezimal ↔ Dual
📖 Umrechnungsmethoden
Dual → Dezimal: Jede Stelle × 2Position (von rechts, bei 0 beginnend).
Kommazahlen: Nachkommastellen × 2, Ganzzahlanteil notieren.
✏️ Übungsaufgaben
- Wandle um: 0, 74, 101 (Dezimal → Dual)
- Wandle um: 1101111010₂ → Dezimal
- Wandle 21,75₁₀ ins Dualsystem um
- Berechne: 23 + 45 + 7 im Dualsystem
- Wie groß ist der Informationsgehalt einer 8-stelligen Binärinformation? → 2⁸ = 256 Möglichkeiten
2.2 Hexadezimal & Konvertierungen
🔤 Hex-Tabelle zum Auswendiglernen
Hex: 0 1 2 3 4 5 6 7
Dual: 0000 0001 0010 0011 0100 0101 0110 0111
Hex: 8 9 A B C D E F
Dual: 1000 1001 1010 1011 1100 1101 1110 1111
Zusammenhang: Je 4 Bit = 1 Hex-Ziffer (da 16 = 2⁴)
✏️ Übungsaufgaben
- Wandle um: 14F5B₁₆ → Dual
- Wandle um: 1010 1111 0011₂ → Hexadezimal
- Erstelle eine Hex-Tabelle (0-F mit Dual- und Dezimalwerten)
3. Einer- und Zweierkomplement
📖 Komplement-Methoden
Zweierkomplement: Einerkomplement + 1. Vorteil: Nur eine Null, Subtraktion = Addition des Komplements.
Subtraktion a − b: a + Zweierkomplement(b), Überlauf ignorieren.
🎯 Prüfungsfrage (häufig!)
„Weshalb ist die Verwendung des Zweierkomplements bei der Subtraktion von Binärzahlen der Verwendung des Einerkomplements vorzuziehen?"
→ Beim Einerkomplement gibt es zwei Darstellungen der Null (+0 und −0), was zu Fehlern führt. Das Zweierkomplement hat nur eine Null und ermöglicht eine direkte Subtraktion durch Addition.
✏️ Übungsaufgaben
- 00110101 + 00110101 (Addition)
- 01100111 + 00010101 (Addition)
- 00110101 − 01011100 (mit Einer- UND Zweierkomplement, 8-Bit)
- 10101 × 10101 (Multiplikation)
- 43 − 47 = (−4) im Dualsystem berechnen
- Wie lautet die dezimale 16 im Dualsystem? Wie im Zweierkomplement?
4. Digitaltechnik
4.1 Logische Gatter
📊 Wahrheitstabellen der Grundgatter
AND (∧) OR (∨) NOT (¬) XOR (⊕)
A B | Y A B | Y A | Y A B | Y
0 0 | 0 0 0 | 0 0 | 1 0 0 | 0
0 1 | 0 0 1 | 1 1 | 0 0 1 | 1
1 0 | 0 1 0 | 1 1 0 | 1
1 1 | 1 1 1 | 1 1 1 | 0
💡 Halbaddierer
Übertrag C = A AND B
A B | S C
0 0 | 0 0
0 1 | 1 0
1 0 | 1 0
1 1 | 0 1
4.2 Boolesche Algebra & Vereinfachung
📐 Wichtige logische Identitäten
Idempotenz: A ∧ A = A A ∨ A = A
Neutralität: A ∧ 1 = A A ∨ 0 = A
Dominanz: A ∧ 0 = 0 A ∨ 1 = 1
Komplement: A ∧ ¬A = 0 A ∨ ¬A = 1
Kommutativ: A ∧ B = B ∧ A A ∨ B = B ∨ A
Assoziativ: (A∧B)∧C = A∧(B∧C)
Distributiv: A∧(B∨C) = (A∧B)∨(A∧C)
De Morgan: ¬(A∧B) = ¬A ∨ ¬B ¬(A∨B) = ¬A ∧ ¬B
Absorption: A ∨ (A∧B) = A A ∧ (A∨B) = A
4.3 KV-Diagramme, KNF, DNF
📖 Vorgehensweise KV-Diagramm
- Wahrheitstabelle aufstellen
- Werte ins KV-Diagramm eintragen (Gray-Code-Reihenfolge!)
- Blöcke bilden (2er-Potenzen: 1, 2, 4, 8...)
- Minimierte Funktion ablesen
DNF: Alle Minterme (= Zeilen mit Ergebnis 1) mit OR verknüpfen.
KNF: Alle Maxterme (= Zeilen mit Ergebnis 0) mit AND verknüpfen.
🎯 Prüfungshinweis 5 Punkte
KV-Diagramme kamen in der Klausur mit 5 Punkten vor – unbedingt üben!
5. OOP-Theorie
5.1 Grundbegriffe
📊 Die wichtigsten OOP-Begriffe
| Begriff | Definition | Beispiel |
|---|---|---|
| Klasse | Vorlage/Bauplan/Datentyp für Objekte | class Rechteck { } |
| Objekt | Konkrete Instanz einer Klasse | Rechteck r1 = new Rechteck(5, 3); |
| Attribut | Eigenschaft/Variable einer Klasse | private int breite; |
| Methode | Funktion innerhalb einer Klasse | public int berechneFlaeche() |
| Konstruktor | Spezielle Methode zur Objekterzeugung | public Rechteck(int b, int h) |
| Parameter | Wertübergabe an Methoden | (int breite, int hoehe) |
| Vererbung | Subklasse erbt Attribute/Methoden | class Quadrat extends Rechteck |
| Kapselung | Zugriffsschutz durch Modifikatoren | private + public Getter/Setter |
| Überschreiben | Methode wird in Subklasse neu definiert | @Override public String toString() |
🔑 Zugriffsmodifikatoren
public: Von überall zugreifbar
private: Nur innerhalb der eigenen Klasse zugreifbar
protected: Innerhalb der eigenen Klasse + Subklassen zugreifbar
🎯 Prüfungsaufgabe 17 Punkte!
„Erläutern Sie die Begriffe Objekte, Klassen, Attribute, Konstruktoren und Methoden schriftlich in einem geschlossenen Text an einem Beispiel über eine Rechteckklasse."
📝 Mustertext (auswendig lernen!)
Rechteck definiert die Attribute breite und hoehe als private Variablen. Diese beschreiben die Eigenschaften jedes Rechtecks. Ein Konstruktor Rechteck(int b, int h) ist eine spezielle Methode, die beim Erzeugen eines Objektes aufgerufen wird und die Attribute mit den übergebenen Parametern initialisiert. Ein Objekt ist eine konkrete Instanz dieser Klasse, erzeugt durch new Rechteck(5, 3). Methoden wie berechneFlaeche() definieren das Verhalten der Objekte. Durch Kapselung (private Attribute, public Getter/Setter) wird sichergestellt, dass Attribute nicht unkontrolliert von außen verändert werden können. Durch Vererbung kann eine Klasse Quadrat von Rechteck erben und alle Attribute und Methoden übernehmen, ohne den Code duplizieren zu müssen.
5.2 Vererbung, Interfaces, Abstrakte Klassen
🔗 Vererbung
class Fahrzeug { // Oberklasse
protected String marke;
public void fahren() { }
}
class Auto extends Fahrzeug { // Subklasse erbt von Fahrzeug
private int tueren;
}
Java erlaubt KEINE Mehrfachvererbung! Wenn eine Klasse von zwei Oberklassen erben würde, die die gleiche Methode haben → Konflikt!
Lösung: Interfaces verwenden.
🔌 Interface-Konzept
interface Schwimmfaehig {
void schwimmen(); // Nur Methodensignaturen, keine Implementierung
}
interface Fahrbar {
void fahren();
}
class Amphibienfahrzeug implements Schwimmfaehig, Fahrbar {
public void schwimmen() { /* Implementierung */ }
public void fahren() { /* Implementierung */ }
}
🏗️ Abstrakte Klassen
abstract class Fahrzeug { // Kann nicht instanziiert werden
abstract void bewegen(); // Muss von Subklassen implementiert werden
public void hupen() { } // Kann normale Methoden haben
}
→ abstract wenn die Oberklasse zu allgemein ist, um eigene Objekte zu haben
6. UML-Klassendiagramme
📖 UML-Klassendiagramm Aufbau
Sichtbarkeiten: - (private), + (public), # (protected)
📊 Beziehungspfeile
Vererbung (leerer Pfeil), Implementierung (gestrichelt), Assoziation (einfache Linie), Aggregation (leere Raute), Komposition (volle Raute)
🔢 Kardinalitäten
1 = genau eins
0..1 = null oder eins
* = beliebig viele
1..* = mindestens eins
0..* = null oder beliebig viele
✏️ Übungsaufgaben
- Gastronomie-Klassendiagramm erstellen (Belegschaft, Kunden, Kellner, etc.)
- Fitnessstudio-Klassendiagramm
- Baum-Klassendiagramm: Baum → Äste → Zweige → Blätter
- Von Objektdiagramm auf Klassendiagramm schließen
7. Struktogramme & PAP
7.1 Struktogramme (Nassi-Shneiderman)
📊 Grundelemente
┌─────────────────────┐
│ Anweisung 1 │ ← Sequenz (nacheinander)
├─────────────────────┤
│ Anweisung 2 │
├─────────────────────┤
│ Anweisung 3 │
└─────────────────────┘
┌─────────────────────┐
│ Bedingung? │ ← Verzweigung (if/else)
├──────────┬──────────┤
│ Ja │ Nein │
│ Aktion A │ Aktion B │
└──────────┴──────────┘
┌─────────────────────┐
│ Solange Bedingung │ ← Kopfgesteuerte Schleife (while)
│ ┌─────────────────┐ │
│ │ Schleifenkörper│ │
│ └─────────────────┘ │
└─────────────────────┘
🎯 Klausuraufgabe 10 Punkte
Kaffeekochen als Struktogramm: 1. Kaffeefilter einlegen → 2. Kaffeepulver einfüllen → 3. Prüfen: Wasser im Tank? (Wenn nein: Tank auffüllen) → 4. Maschine einschalten
7.2 Programmablaufpläne (PAP / Flussdiagramme)
📊 PAP-Symbole (Flussdiagramme)
8. Java-Programmierung
8.1 Grundlagen: Variablen, Schleifen, Arrays
💻 Wichtige Codebeispiele
// Array deklarieren und initialisieren
int[] zahlen = {64, 34, 25, 12, 22, 11, 90};
// Array durchlaufen mit for-Schleife
for (int i = 0; i < zahlen.length; i++) {
System.out.println(zahlen[i]);
}
// While-Schleife
int count = 0;
int zahl = 2;
while (count < 1000) {
if (istPrim(zahl)) { count++; }
zahl++;
}
8.2 Klassen und Objekte programmieren
💻 Muster einer vollständigen Klasse
public class Rechteck {
private double breite; // Attribute (private = Kapselung)
private double hoehe;
// Vollparametrisierter Konstruktor
public Rechteck(double breite, double hoehe) {
this.breite = breite;
this.hoehe = hoehe;
}
// Getter
public double getBreite() { return breite; }
public double getHoehe() { return hoehe; }
// Setter
public void setBreite(double breite) { this.breite = breite; }
public void setHoehe(double hoehe) { this.hoehe = hoehe; }
// Fachliche Methoden
public double berechneFlaeche() { return breite * hoehe; }
public double berechneUmfang() { return 2 * (breite + hoehe); }
// toString
@Override
public String toString() {
return "Rechteck [" + breite + " x " + hoehe + "]";
}
}
🎯 Klausuraufgabe 20 Punkte!
- Methode
show()für Rechteck schreiben - Rechteck-Objekt erzeugen und Ausgabe überprüfen
- Methode
addiereRechteck()schreiben (zwei Rechtecke → neues Rechteck)
8.3 Vererbung programmieren
💻 Klausurbeispiel: Kuehlwagen erbt von Lastwagen
public class Lastwagen {
private String kennzeichen;
private double maxGewicht;
public Lastwagen(String kennzeichen, double maxGewicht) {
this.kennzeichen = kennzeichen;
this.maxGewicht = maxGewicht;
}
// Getter und Setter...
}
public class Kuehlwagen extends Lastwagen {
private int vorlaufzeit; // Neues Attribut
// Vollparametrisierter Konstruktor
public Kuehlwagen(String kennzeichen, double maxGewicht, int vorlaufzeit) {
super(kennzeichen, maxGewicht); // Aufruf des Eltern-Konstruktors
this.vorlaufzeit = vorlaufzeit;
}
public int getVorlaufzeit() { return vorlaufzeit; }
public void setVorlaufzeit(int vorlaufzeit) { this.vorlaufzeit = vorlaufzeit; }
@Override
public String toString() {
return super.toString() + ", Vorlaufzeit: " + vorlaufzeit;
}
}
🎯 Klausuraufgabe 10 20 Punkte!
Genau dieses Muster wurde abgefragt!
8.4 Comparator-Interface
💻 Beispiel: Angestellte nach Gehalt sortieren
import java.util.*;
public class Angestellter {
private String name;
private double gehalt;
private String arbeitszeit; // "Vollzeit" oder "Teilzeit"
// Konstruktor, Getter, Setter...
}
// Comparator für Gehalt (aufsteigend)
class GehaltComparatorAuf implements Comparator<Angestellter> {
@Override
public int compare(Angestellter a1, Angestellter a2) {
return Double.compare(a1.getGehalt(), a2.getGehalt());
}
}
// Comparator für Gehalt (absteigend)
class GehaltComparatorAb implements Comparator<Angestellter> {
@Override
public int compare(Angestellter a1, Angestellter a2) {
return Double.compare(a2.getGehalt(), a1.getGehalt());
}
}
// Sortierung anwenden:
List<Angestellter> liste = new ArrayList<>();
Collections.sort(liste, new GehaltComparatorAuf());
8.5 JavaFX: Beans, Binding, Property
📖 JavaFX Begriffe
Property: Ein "smarter" Wrapper um einen Wert (beobachtbar, bindbar).
Binding: Automatische Verknüpfung von Properties (Änderung wird weitergegeben).
💻 Codebeispiel: Person Bean
import javafx.beans.property.*;
public class Person {
private final StringProperty name = new SimpleStringProperty();
private final IntegerProperty age = new SimpleIntegerProperty();
public String getName() { return name.get(); }
public void setName(String value) { name.set(value); }
public StringProperty nameProperty() { return name; }
}
9. Algorithmen & Sortierung
9.1 Definition Algorithmus
📖 Was ist ein Algorithmus?
9.2 Sequentielle Suche
💻 Sequentielle Suche
public class SequentielleSuche {
public static int suche(int[] arr, int suchWert) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == suchWert) {
return i; // Gefunden → Index zurückgeben
}
}
return -1; // Nicht gefunden
}
}
- Aufwand: O(n) = linear
- Im Schnitt: n/2 Vergleiche
- Verdoppelt sich das Array → doppelt so lange Suche
9.3 Bubble Sort
💻 Bubble Sort
static void bubbleSort(int arr[], int n) {
int i, j, temp;
boolean swapped;
for (i = 0; i < n - 1; i++) {
swapped = false;
for (j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j]; // Tauschen
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = true;
}
}
if (swapped == false) break; // Optimierung: Schon sortiert → Abbruch
}
}
Wie funktioniert es?
- Vergleiche immer zwei benachbarte Elemente
- Wenn links > rechts → tauschen
- Das größte Element "blubbert" nach rechts (daher der Name)
- Wiederhole für alle Elemente
Komplexität: O(n²) – nicht effizient für große Datenmengen
10. Datenbanken & Normalisierung
📖 Normalformen
2NF: 1NF + Jedes Nicht-Schlüssel-Attribut hängt voll vom gesamten Primärschlüssel ab. → Keine teilweisen Abhängigkeiten bei zusammengesetztem Schlüssel.
3NF: 2NF + Kein Nicht-Schlüssel-Attribut hängt transitiv von einem anderen Nicht-Schlüssel-Attribut ab. → Keine indirekten Abhängigkeiten.
11. Prüfungssimulation & Tipps
11.1 Mündliche Prüfung (Häufige Fragen)
- Was versteht man unter dem Begriff Algorithmus?
→ Eindeutige Handlungsvorschrift zur Lösung eines Problems (endlich, wohldefiniert). - Beschreibe die sequentielle Suche – was wird wie umgesetzt?
→ Jedes Element im Array wird nacheinander geprüft, bis das gesuchte Element gefunden wird. Komplexität: O(n). - Wie viel länger dauert die Suche bei doppelter Array-Größe?
→ Doppelt so lange O(n). - Erkläre OOP mit den Begriffen:
→ Klasse, Objekt, Konstruktor, Vererbung, Parameter, Methode, Attribut, Kapselung (Siehe Mustertext oben). - Was bedeutet "Überschreiben" im Kontext der OOP?
→ Eine Methode der Oberklasse wird in der Subklasse mit gleichem Namen und Parametern neu definiert (@Override).
11.2 Komplexaufgabe: OOP + UML + Java
🎯 Übungsbeispiel: Fitnessstudio (ca. 45 Min)
Ein Fitnessstudio verwaltet seine Mitglieder digital. Erstelle:
- Ein UML-Klassendiagramm mit den Klassen:
Fitnessstudio, Kette, Mitglied, Trainer, Quartal, Training - Implementiere die Klasse
Mitgliedmit allen Attributen, Konstruktor, Getter/Setter - Erstelle eine Klasse
PremiumMitglied extends Mitgliedmit Zusatzattributrabatt - Sortiere eine Liste von Mitgliedern nach Mitgliedsnummer (Comparator)
11.3 🎯 Tipps für den Prüfungstag
- Zeitmanagement: Punkte pro Aufgabe beachten → 1 Punkt ≈ 1 Minute Arbeitszeit!
- Zuerst alles lesen: Alle Aufgaben durchlesen und sich eine Übersicht verschaffen.
- Leichtes zuerst: Mit den Aufgaben anfangen, bei denen du dir sicher bist.
- UML: Sichtbarkeiten (+, -, #) und Pfeilarten (Rauten, offene/geschlossene Pfeilspitzen) GANZ GENAU zeichnen. Wenn etwas unleserlich ist, gibt es Punktabzug!
- Java-Code: Syntax beachten (Semikolons, geschweifte Klammern, Großschreibung von Datentypen wie String).
- Struktogramme/PAP: Saubere Kästen notieren und mit Lineal zeichnen!
12. Schnellreferenz: Häufigste Prüfungsaufgaben
⚡ Die häufigsten Prüfungsaufgaben
| Aufgabentyp | Punkte | Häufigkeit |
|---|---|---|
| Zahlensystem-Umrechnung (Hex↔Dual↔Dez) | 9 P | ✅✅✅ Jede Klausur |
| OOP-Begriffe als zusammenhängender Text | 17 P | ✅✅✅ Jede Klausur |
| Vererbung: Klasse in Java implementieren | 20 P | ✅✅✅ Jede Klausur |
| Boolesche Terme vereinfachen | 3–5 P | ✅✅ Häufig |
| KV-Diagramm → KNF/DNF | 5 P | ✅✅ Häufig |
| Zweierkomplement-Berechnung | 10 P | ✅✅ Häufig |
| Struktogramm erstellen | 10 P | ✅✅ Häufig |
| UML-Klassendiagramm zeichnen | 10–20 P | ✅✅ Häufig |
| Praktische Java-Programmierung (am PC) | 20 P | ✅✅ Häufig |
| Wahrheitstabelle / Gatter | 3 P | ✅ Gelegentlich |
| Comparator implementieren | 5–10 P | ✅ Gelegentlich |
| Normalisierung (1NF→3NF) | 5–10 P | ✅ Gelegentlich |
13. Selbstcheck-Checkliste
✅ Prüfe dich selbst – Kannst du das alles?
- Hex→Dual→Dezimal fehlerfrei umrechnen
- Zweierkomplement-Subtraktion durchführen
- Wahrheitstabelle für beliebige Schaltungen aufstellen
- KV-Diagramm erstellen und KNF/DNF ablesen
- Boolesche Terme vereinfachen
- Alle OOP-Begriffe in einem Text erklären
- Java-Klasse mit Konstruktor und Getter/Setter schreiben
- Vererbung mit
extendsundsuper()implementieren - Struktogramm erstellen
- PAP zeichnen
- UML-Klassendiagramm zeichnen
- Bubble Sort erklären und Code verstehen
- Sequentielle Suche erklären
- Comparator implementieren
- Normalisierung durchführen (1NF→2NF→3NF)