Objektorientierte Programmierung (OOP)
Ein Bauplan für Objekte. Definiert Attribute (Eigenschaften) und Methoden (Verhaltensweisen), die alle Objekte dieser Klasse haben werden.
String farbe;
void fahren() { ... }
}
Eine konkrete Ausprägung (Exemplar) einer Klasse. Wird mit new erzeugt und hat eigene Attributwerte.
meinAuto.farbe = "rot";
Eine Eigenschaft/Variable innerhalb einer Klasse. Beschreibt den Zustand eines Objekts.
private int alter;
Eine Funktion innerhalb einer Klasse. Definiert das Verhalten eines Objekts und kann auf Attribute zugreifen.
this.name = n;
}
Spezielle Methode, die beim Erstellen eines Objekts automatisch aufgerufen wird. Hat denselben Namen wie die Klasse und keinen Rückgabetyp.
this.farbe = farbe;
}
Eine Klasse (Unterklasse) übernimmt Attribute und Methoden von einer anderen Klasse (Oberklasse). Ermöglicht Code-Wiederverwendung.
int akkuKapazitaet;
}
Verstecken von Implementierungsdetails. Attribute werden private gesetzt und nur über Getter/Setter-Methoden zugänglich gemacht.
public int getKontostand() { return kontostand; }
"Vielgestaltigkeit" - Objekte verschiedener Klassen können unterschiedlich auf dieselbe Methode reagieren. Ermöglicht durch Überschreiben von Methoden.
hund.gibLaut(); // "Wuff"
katze.gibLaut(); // "Miau"
Eine Klasse, von der keine Objekte erzeugt werden können. Dient als Vorlage für Unterklassen und kann abstrakte Methoden enthalten.
abstract void fahren();
}
Ein "Vertrag" der festlegt, welche Methoden eine Klasse implementieren muss. Enthält nur Methodensignaturen, keine Implementierung.
void fahren();
void bremsen();
}
Schlüsselwort, das auf das aktuelle Objekt verweist. Wird verwendet um zwischen Attributen und Parametern mit gleichem Namen zu unterscheiden.
this.name = name; // this.name = Attribut
}
Schlüsselwort für den Zugriff auf die Oberklasse. Kann Konstruktor oder Methoden der Oberklasse aufrufen.
super.methode(); // Methode der Oberklasse
UML (Unified Modeling Language)
Unified Modeling Language - Standardisierte grafische Sprache zur Modellierung von Software-Systemen. Unabhängig von Programmiersprachen.
Eine allgemeine Beziehung zwischen zwei Klassen. Zeigt, dass Objekte der Klassen miteinander in Verbindung stehen.
(Student besucht Kurs)
Gibt an, wie viele Objekte einer Klasse mit Objekten einer anderen Klasse in Beziehung stehen können.
0..1 = null oder eins
* = beliebig viele (0 bis unendlich)
1..* = mindestens eins
"Hat-ein" Beziehung mit loser Kopplung. Das Teil kann ohne das Ganze existieren. Dargestellt durch leere Raute (◇).
(Bücher existieren auch ohne Bibliothek)
"Besteht-aus" Beziehung mit starker Kopplung. Das Teil kann NICHT ohne das Ganze existieren. Dargestellt durch gefüllte Raute (◆).
(Räume existieren nur im Haus)
Die UML-Darstellung von Vererbung. Ein leerer Pfeil zeigt von der Unterklasse zur Oberklasse.
△
|
Auto ——— Motorrad
Zeigt den zeitlichen Ablauf von Nachrichten/Methodenaufrufen zwischen Objekten. Zeit verläuft von oben nach unten.
ATM → Bank: pruefePIN()
Bank ---> ATM: pinOK
Zeigt den Ablauf von Aktivitäten in einem Prozess. Ähnlich wie ein Flussdiagramm mit Start, Ende, Entscheidungen und Parallelität.
◇ → [Tee aufgießen] → ◉
Zeigt Anwendungsfälle aus Sicht der Benutzer (Akteure). Beschreibt WAS ein System tut, nicht WIE.
🧑💼 Admin → (Produkt verwalten)
Symbole in UML-Klassendiagrammen für Zugriffsmodifikatoren.
- private (nur in eigener Klasse)
# protected (Klasse + Unterklassen)
~ package (im selben Paket)
Aussagenlogik
Logisches UND. Ergebnis ist nur wahr, wenn beide Aussagen wahr sind.
A ∧ B = true nur wenn A=true UND B=true
1 ∧ 1 = 1, sonst 0
Logisches ODER. Ergebnis ist wahr, wenn mindestens eine Aussage wahr ist.
A ∨ B = true wenn A=true ODER B=true
0 ∨ 0 = 0, sonst 1
Logisches NICHT. Kehrt den Wahrheitswert um.
¬A = true wenn A=false
¬1 = 0, ¬0 = 1
Logische Folgerung. "Wenn A, dann B". Nur falsch wenn A wahr und B falsch ist.
A → B = false nur wenn A=true und B=false
"Wenn es regnet → Straße nass"
Logische Gleichwertigkeit. Wahr, wenn beide Aussagen denselben Wahrheitswert haben.
A ↔ B = true wenn (A=B)
1 ↔ 1 = 1, 0 ↔ 0 = 1, sonst 0
Entweder-oder. Wahr, wenn genau eine der beiden Aussagen wahr ist (nicht beide).
A ⊕ B = true wenn A ≠ B
1 ⊕ 0 = 1, 0 ⊕ 1 = 1, sonst 0
Negiertes UND. Ergebnis ist falsch, nur wenn beide Aussagen wahr sind.
1 NAND 1 = 0, sonst 1
(Universelles Gatter!)
Negiertes ODER. Ergebnis ist nur wahr, wenn beide Aussagen falsch sind.
0 NOR 0 = 1, sonst 0
Elektronische Schaltungen für logische Operationen. Symbole: & = AND, ≥1 = OR, =1 = XOR, ○ = Negation am Ausgang.
AND: [&]─ (beide 1)
OR: [≥1]─ (mind. einer 1)
NAND: [&]○─ (negiertes AND)
Tabelle die alle möglichen Eingabekombinationen und deren Ergebnisse für einen logischen Ausdruck zeigt.
0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1
Regeln zur Umformung von negierten UND/ODER-Ausdrücken.
¬(A ∨ B) = ¬A ∧ ¬B
"Negation dreht ∧ und ∨ um"
ODER-Verknüpfung von UND-Termen (Mintermen). Jeder Minterm enthält jede Variable genau einmal (normal oder negiert).
Ablesen: Zeilen mit Y=1 in Wahrheitstabelle
"ODER von UND-Termen"
UND-Verknüpfung von ODER-Termen (Maxtermen). Jeder Maxterm enthält jede Variable genau einmal (normal oder negiert).
Ablesen: Zeilen mit Y=0, Variablen negieren!
"UND von ODER-Termen"
UND-Verknüpfung aller Variablen. Variable normal wenn 1, negiert wenn 0. Liefert nur für eine Kombination den Wert 1.
Für DNF: Minterme aller Y=1 Zeilen ODER-verknüpfen
ODER-Verknüpfung aller Variablen. Variable negiert wenn 1, normal wenn 0! Liefert nur für eine Kombination den Wert 0.
Für KNF: Maxterme aller Y=0 Zeilen UND-verknüpfen
Karnaugh-Veitch-Diagramm zur Minimierung von Booleschen Funktionen. Benachbarte Felder unterscheiden sich nur in einer Variable.
Aus DNF → minimierte Form
Aus KNF → minimierte Form
Zahlensysteme
Zahlensystem zur Basis 2. Verwendet nur die Ziffern 0 und 1. Grundlage der digitalen Datenverarbeitung.
Stellenwerte: 8, 4, 2, 1 (2³, 2², 2¹, 2⁰)
Das alltägliche Zahlensystem zur Basis 10. Verwendet Ziffern 0-9.
Stellenwerte: 100, 10, 1 (10², 10¹, 10⁰)
Zahlensystem zur Basis 16. Verwendet 0-9 und A-F (A=10, B=11, ..., F=15). Kompakte Darstellung von Binärzahlen.
A=10, B=11, C=12, D=13, E=14, F=15
Zahlensystem zur Basis 8. Verwendet Ziffern 0-7.
Stellenwerte: 64, 8, 1 (8², 8¹, 8⁰)
Methode zur Darstellung negativer Zahlen im Binärsystem. Das höchstwertige Bit (MSB) gibt das Vorzeichen an.
1. +5 = 0101
2. Invertieren: 1010
3. +1 addieren: 1011 = -5
Binary Digit - Kleinste Informationseinheit. Kann nur zwei Zustände haben: 0 oder 1.
1 Bit: 2 Werte (0, 1)
8 Bit: 256 Werte (0-255)
Eine Gruppe von 8 Bits. Standard-Einheit für Datenspeicherung.
1 KB = 1024 Byte
1 MB = 1024 KB
Das höchstwertige Bit - ganz links. Bei vorzeichenbehafteten Zahlen das Vorzeichen-Bit.
Bei signed: 1 = negativ, 0 = positiv
Das niedrigstwertige Bit - ganz rechts. Hat den Stellenwert 2⁰ = 1.
Bestimmt ob Zahl gerade (0) oder ungerade (1)
Tritt auf wenn das Ergebnis einer Berechnung größer ist als darstellbar. Das Ergebnis "wickelt sich um".
1111 + 0001 = 10000 → 0000 (Überlauf!)
15 + 1 = 0 (statt 16)
Java Grundlagen
Ein benannter Speicherplatz für Daten. Hat einen Datentyp, Namen und Wert.
String name = "Max";
boolean istStudent = true;
Die grundlegenden Datentypen in Java. Speichern einfache Werte direkt.
double (Dezimal): 1.5, 3.14
boolean: true/false
char: 'A', 'B'
Zeichenkette - eine Folge von Zeichen. In Java ein Objekt (kein primitiver Typ). Wird mit Anführungszeichen definiert.
text.length() // 10
text.charAt(0) // 'H'
Eine geordnete Sammlung von Elementen gleichen Typs. Feste Größe nach Erstellung. Index beginnt bei 0.
zahlen[0] // 1 (erstes Element)
zahlen.length // 5
Kontrollstruktur zur Wiederholung von Anweisungen. Arten: for, while, do-while.
System.out.println(i);
}
Verzweigung im Programmablauf basierend auf einer Bedingung.
System.out.println("Erwachsen");
} else {
System.out.println("Minderjährig");
}
Schlüsselwort das eine Methode beendet und einen Wert zurückgibt. Der Typ muss zum Rückgabetyp der Methode passen.
return x * 2;
}
Kennzeichnet eine Methode die keinen Wert zurückgibt.
System.out.println("Hallo!");
// kein return nötig
}
Kennzeichnet Attribute/Methoden die zur Klasse gehören, nicht zu einzelnen Objekten. Können ohne Objekt aufgerufen werden.
Math.sqrt(16) // statische Methode
Klasse.methode() // ohne new
Spezieller Wert der anzeigt, dass eine Referenzvariable auf kein Objekt verweist.
if (text != null) {
text.length(); // sicher
}
Allgemeine Begriffe
Eine eindeutige Handlungsvorschrift zur Lösung eines Problems. Besteht aus endlich vielen, wohldefinierten Einzelschritten.
ausführbar, terminierend
Beispiel: Sortieralgorithmen, Suchverfahren
Ein Programm das Quellcode in Maschinencode übersetzt. Bei Java: Übersetzung in Bytecode.
(Quellcode → Compiler → Bytecode)
Integrated Development Environment - Software die Programmierer beim Entwickeln unterstützt mit Editor, Compiler, Debugger.
Visual Studio Code, BlueJ
Die Grammatik/Regeln einer Programmiersprache. Bestimmt wie Code geschrieben werden muss.
falsche Klammern, Tippfehler
int x = 5 // Fehler: ; fehlt
Die Bedeutung von Code. Syntaktisch korrekter Code kann semantisch falsch sein.
falsche Logik, falsches Ergebnis
// Syntax OK, aber logisch falsch
Der Prozess des Findens und Behebens von Fehlern (Bugs) in einem Programm.
Variablen inspizieren,
Schritt-für-Schritt ausführen
Eine Methode/Funktion die sich selbst aufruft. Benötigt Abbruchbedingung um nicht endlos zu laufen.
if (n <= 1) return 1; // Abbruch
return n * fakultaet(n-1);
}
Parameter: Variable in der Methodendefinition.
Argument: Konkreter Wert beim Aufruf.
grüßen("Max"); // "Max" ist Argument