Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Nächste Überarbeitung | Vorherige Überarbeitung | ||
| informatik:oop:oop-skript [2025/06/16 18:13] – angelegt jonathan.pfeiffer | informatik:oop:oop-skript [2025/06/26 09:34] (aktuell) – jonathan.pfeiffer | ||
|---|---|---|---|
| Zeile 220: | Zeile 220: | ||
| - | ===== 3 Algorithmus ===== | ||
| - | ==== 3.1 Definition ==== | ||
| - | **Ein Algorithmus ist eine eindeutige Handlungsvorschrift zur Lösung eines Problems oder einer Klasse von Problemen.** | ||
| - | ==== 3.2 Formale Definition ==== | ||
| - | Ein __Algorithmus__ ist ein Verfahren, das | ||
| - | * durch eine **endliche** Beschreibung | ||
| - | * in einer **präzisen** (d.h. genau festgelegten) Sprache | ||
| - | * unter Verwendung **effektiver** (d.h. tatsächlich ausführbarer) und **elementarer** (Verarbeitungs-) Schritte | ||
| - | festgelegt wird.\\ | ||
| - | \\ | ||
| - | //(nach Broy, M.: Informatik: Eine grundlegende Einführung, | ||
| - | |||
| - | ==== 3.3 Programme und Algorithmen ==== | ||
| - | * Ein Programm ist eine (von vielen möglichen) Darstellungen eines bestimmten Algorithmus als Text. | ||
| - | * Dieser Text ist in einer speziellen Sprache, die vom Rechner automatisch interpretiert werden kann. | ||
| - | * Eine solche Sprache heißt Programmiersprache. | ||
| - | |||
| - | ==== 3.4 Struktur von Algorithmen ==== | ||
| - | * Algorithmen haben eine sehr einfache Struktur. | ||
| - | * Jeder Algorithmus lässt sich aus vier verschiedenen Typen von Strukturelementen zusammensetzen. | ||
| - | * Elementare Verarbeitungsschritte | ||
| - | * Sequenz | ||
| - | * Bedingte Anweisung | ||
| - | * Wiederholung | ||
| - | ==== 3.4.1 Elementare Verarbeitungsschritte ==== | + | ===== 3 Datenkapselung ===== |
| - | „Unteilbare“ atomare Aktionen, z.B.: | + | |
| - | * Aufruf einer Methode eines Objekts: k2.fuellen(schwarz); | + | |
| - | * Ausgabe eines Wertes: System.out.print(Ergebnis); | + | |
| - | * Berechnung eines Terms: c = Wurzel(a*a+b*b); | + | |
| - | + | ||
| - | ==== 3.4.2 Sequenzen ==== | + | |
| - | * Eine Sequenz ist eine Folge von elementaren Verarbeitungsschritten, | + | |
| - | * Je nach Programmiersprache sind verschiedene (oft auch mehrere) Trennzeichen zwischen den Anweisungen einer Sequenz zugelassen, z.B.: Strichpunkt | + | |
| - | <code java> | + | |
| - | move(1); | + | |
| - | turn(90); | + | |
| - | putLeaf(); | + | |
| - | </ | + | |
| - | + | ||
| - | ==== 3.4.3 Auswahlstruktur ==== | + | |
| - | * **einseitige** Auswahlstruktur: | + | |
| - | * **zweiseitige** Auswahlstruktur: | + | |
| - | * **mehrseitige** Auswahlstrukur: | + | |
| - | + | ||
| - | + | ||
| - | ==== 3.4.4 Schleifen (Wiederholung) ==== | + | |
| - | * while-Schleife und do-while-Schleife | + | |
| - | * < | + | |
| - | // anweisung(en); | + | |
| - | } | + | |
| - | </ | + | |
| - | * < | + | |
| - | // anweisung(en); | + | |
| - | } | + | |
| - | while (laufbedingung); | + | |
| - | + | ||
| - | } | + | |
| - | </ | + | |
| - | * for-schleife | + | |
| - | * < | + | |
| - | System.out.println(i); | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | ===== 4 Datenkapselung ===== | + | |
| Das Kernelement der Datenkapselung besteht darin, die internen Informationen eines Objekts vor unberechtigtem Zugriff zu schützen. Hierbei wird kontrolliert, | Das Kernelement der Datenkapselung besteht darin, die internen Informationen eines Objekts vor unberechtigtem Zugriff zu schützen. Hierbei wird kontrolliert, | ||
| ==== Zugriffmodifikatoren ==== | ==== Zugriffmodifikatoren ==== | ||
| Zeile 302: | Zeile 236: | ||
| * Sicherheit: Schützt Daten vor unberechtigtem Zugriff und Manipulation. | * Sicherheit: Schützt Daten vor unberechtigtem Zugriff und Manipulation. | ||
| * Flexibilität: | * Flexibilität: | ||
| - | ===== 5 Generalisierung & Spezialisierung (Vererbung) ===== | + | ===== 4 Generalisierung & Spezialisierung (Vererbung) ===== |
| Die Generalisierung stellt ein zentrales Konzept objektorientierter Modellierung dar. Sie setzt zwei Klassen so in Beziehung, dass eine Klasse eine Verallgemeinerung des anderen darstellt. | Die Generalisierung stellt ein zentrales Konzept objektorientierter Modellierung dar. Sie setzt zwei Klassen so in Beziehung, dass eine Klasse eine Verallgemeinerung des anderen darstellt. | ||
| Zeile 360: | Zeile 294: | ||
| </ | </ | ||
| - | ===== 6 Abstrakte Klassen ===== | + | ===== 5 Abstrakte Klassen ===== |
| Nicht immer soll eine Klasse ausprogrammiert werden. Manchmal möchten wir in einer | Nicht immer soll eine Klasse ausprogrammiert werden. Manchmal möchten wir in einer | ||
| Oberklasse lediglich Methoden für die Unterklassen vorgeben, ohne zu wissen, wie diese | Oberklasse lediglich Methoden für die Unterklassen vorgeben, ohne zu wissen, wie diese | ||
| Zeile 397: | Zeile 331: | ||
| } | } | ||
| </ | </ | ||
| + | ===== 6 Assoziationen ===== | ||
| + | Eine Beziehung zwischen zwei oder mehreren Klassen wird als Assoziation bezeichnet. Die Assoziation beschreibt eine sehr enge Form der Beziehung zwischen zwei Klassen, die das gegenseitige Zugreifen auf Elemente der Klasse (Attribute und Operationen) **ermöglicht**. | ||
| + | Eine Assoziation beschreibt die Beziehung aller Objekte der beteiligten Klassen. Sie wird auf Objektebene hergestellt und auf Klassenebene modelliert. \\ | ||
| + | {{: | ||
| + | \\ | ||
| + | Beispielsweise besteht zwischen der Klasse Kunde und der Klasse Girokonto eine Beziehung. Denn ein Kunde kann ein Girokonto haben und der Kontoinhaber eines Girokontos ist ein Kunde. Beziehungen zwischen Klassen (Assoziationen) werden genauer beschrieben durch **Rollen**, **Multiplizitäten** und **Navigierbarkeit**. | ||
| + | |||
| + | ==== Rollen ==== | ||
| + | |||
| + | Rollennamen beschreiben die Bedeutung der Objekte der assoziierten Klasse näher. | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Aus der Sicht des Girokontos ist der Kunde der Kontoinhaber. Aus der Sicht des Kunden ist das Girokonto sein Konto. Die Rolle einer assoziierten Klasse kann ggf. Auswirkungen auf die Multiplizitäten und die Navigierbarkeit haben. | ||
| + | |||
| + | ==== Multiplizitäten ==== | ||
| + | |||
| + | Multiplizitäten geben an mit wie vielen Objekten der assoziierten Klasse ein Objekt verbunden werden kann (vgl. Kardinalitäten bei ERDs). Sie stellen folglich Mengenverhältnisse zwischen Klassen dar. | ||
| + | |||
| + | === Beispiel === | ||
| + | Jeder Kunde hat kein oder ein Girokonto. | ||
| + | Jedes Girokonto hat genau einen Kontoinhaber (= Kunden). \\ | ||
| + | {{: | ||
| + | |||
| + | Im oben beschriebenen Beispiel kann ein Kunde ein Girokonto haben. Es ist aber auch vorstellbar, | ||
| + | |||
| + | Mögliche Multiplizitäten sind: | ||
| + | | 0 .. 1 | kein oder ein assoziiertes Objekt | ||
| + | | 1 | genau ein assoziiertes Objekt | ||
| + | | * | kein, ein oder beliebig viele assoziierte Objekte | ||
| + | | 1 .. * | ein oder beliebig viele assoziierte Objekte | ||
| + | | n .. m | von n bis m assoziierte Objekte | ||
| + | |||
| + | === Weitere Beispiele === | ||
| + | Jeder Kunde hat kein, ein oder beliebig viele Girokonten. Jedes Girokonto hat ein oder be-liebig viele Kontoinhaber (= Kunden). | ||
| + | \\ | ||
| + | {{: | ||
| + | \\ | ||
| + | Jeder Kunde hat kein, ein oder beliebig viele Girokonten. Jedes Girokonto hat 1 oder 4 Kontoinhaber (= Kunden). | ||
| + | \\ | ||
| + | {{: | ||
| + | \\ | ||
| + | |||
| + | ==== Navigierbarkeit ==== | ||
| + | |||
| + | Bei der Navigierbarkeit wird die Frage beantwortet, | ||
| + | |||
| + | ==== Unidirektionale Assoziation ==== | ||
| + | |||
| + | \\ | ||
| + | {{: | ||
| + | \\ | ||
| + | |||
| + | Jedes Objekt der Klasse Girokonto kennt seinen Kontoinhaber (= Kunde). Allerdings kennt ein Objekt der Klasse Kunde nicht seine Girokonten. Das heißt, man kann über das Girokonto z.B. den Namen des Kontos ausgeben, aber nicht über den Kun-den den Kontostand seines Girokontos. | ||
| + | Die Navigierbarkeit ist also nur in eine Richtung möglich, nämlich von Kunde zu Girokonto (Pfeil), aber nicht von Girokonto zu Kunde („X“) | ||
| + | |||
| + | ==== Bidirektionale Assoziation ==== | ||
| + | |||
| + | |||
| + | \\ | ||
| + | {{: | ||
| + | \\ | ||
| + | Jedes Objekt der Klasse Kunde weiß, welche Girokonten ihm zugeordnet sind. Umgekehrt weiß aber auch jedes Girokonto welche Kontoinhaber (= Kunden) es hat. Die Navigierbarkeit ist in beide Richtun-gen möglich. Das heißt, über einen Kun-den kann der Kontostand seines Girokon-tos herausgefunden werden und über ein Girokonto kann der Name des Kunden ermittelt werden. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | Neben der Pfeilspitze und dem „X“ kann auch „nichts“ geschrieben werden. Dies bedeutet, dass noch keine Beziehung festgelegt wurde. | ||
| + | \\ | ||
| + | {{: | ||
| + | \\ | ||
| + | \\ | ||
| + | === Mögliche Beziehungen === | ||
| + | | Pfeilspitze | ||
| + | | „X“ | ||
| + | | (nichts) | ||
| + | |||
| + | |||
| + | ===== 7 Algorithmus ===== | ||
| + | ==== 7.1 Definition ==== | ||
| + | **Ein Algorithmus ist eine eindeutige Handlungsvorschrift zur Lösung eines Problems oder einer Klasse von Problemen.** | ||
| + | |||
| + | ==== 7.2 Formale Definition ==== | ||
| + | Ein __Algorithmus__ ist ein Verfahren, das | ||
| + | * durch eine **endliche** Beschreibung | ||
| + | * in einer **präzisen** (d.h. genau festgelegten) Sprache | ||
| + | * unter Verwendung **effektiver** (d.h. tatsächlich ausführbarer) und **elementarer** (Verarbeitungs-) Schritte | ||
| + | festgelegt wird.\\ | ||
| + | \\ | ||
| + | //(nach Broy, M.: Informatik: Eine grundlegende Einführung, | ||
| + | |||
| + | ==== 7.3 Programme und Algorithmen ==== | ||
| + | * Ein Programm ist eine (von vielen möglichen) Darstellungen eines bestimmten Algorithmus als Text. | ||
| + | * Dieser Text ist in einer speziellen Sprache, die vom Rechner automatisch interpretiert werden kann. | ||
| + | * Eine solche Sprache heißt Programmiersprache. | ||
| + | |||
| + | ==== 7.4 Struktur von Algorithmen ==== | ||
| + | * Algorithmen haben eine sehr einfache Struktur. | ||
| + | * Jeder Algorithmus lässt sich aus vier verschiedenen Typen von Strukturelementen zusammensetzen. | ||
| + | * Elementare Verarbeitungsschritte | ||
| + | * Sequenz | ||
| + | * Bedingte Anweisung | ||
| + | * Wiederholung | ||
| + | |||
| + | ==== 7.4.1 Elementare Verarbeitungsschritte ==== | ||
| + | „Unteilbare“ atomare Aktionen, z.B.: | ||
| + | * Aufruf einer Methode eines Objekts: k2.fuellen(schwarz); | ||
| + | * Ausgabe eines Wertes: System.out.print(Ergebnis); | ||
| + | * Berechnung eines Terms: c = Wurzel(a*a+b*b); | ||
| + | |||
| + | ==== 7.4.2 Sequenzen ==== | ||
| + | * Eine Sequenz ist eine Folge von elementaren Verarbeitungsschritten, | ||
| + | * Je nach Programmiersprache sind verschiedene (oft auch mehrere) Trennzeichen zwischen den Anweisungen einer Sequenz zugelassen, z.B.: Strichpunkt | ||
| + | <code java> | ||
| + | move(1); | ||
| + | turn(90); | ||
| + | putLeaf(); | ||
| + | </ | ||
| + | |||
| + | ==== 7.4.3 Auswahlstruktur ==== | ||
| + | * **einseitige** Auswahlstruktur: | ||
| + | * **zweiseitige** Auswahlstruktur: | ||
| + | * **mehrseitige** Auswahlstrukur: | ||
| + | |||
| + | |||
| + | ==== 7.4.4 Schleifen (Wiederholung) ==== | ||
| + | * while-Schleife und do-while-Schleife | ||
| + | * < | ||
| + | // anweisung(en); | ||
| + | } | ||
| + | </ | ||
| + | * < | ||
| + | // anweisung(en); | ||
| + | } | ||
| + | while (laufbedingung); | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | * for-schleife | ||
| + | * < | ||
| + | System.out.println(i); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| {{tag> | {{tag> | ||