Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Nächste Überarbeitung
Vorherige Überarbeitung
informatik:oop:oop-skript [2025/06/16 18:13] – angelegt jonathan.pfeifferinformatik: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, Band 1. Springer-Verlag, Berlin, 2. Auflage, 1998 )// 
- 
-==== 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, die unbedingt in der angegebenen Reihenfolge abgearbeitet werden. +
-  * 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(); +
-</code> +
- +
-==== 3.4.3 Auswahlstruktur ==== +
-  * **einseitige** Auswahlstruktur: ''if(Bedingung){Anweisung(en)}'' \\ Wenn für den Fall, dass die Bedingung FALSCH ist, keine Sequenz angegeben wird, spricht man von einer einseitigen Auswahlstruktur oder einer bedingten Anweisung. +
-  * **zweiseitige** Auswahlstruktur: ''if(Bedingung){Anweisung(en)}else{Anweisung(en)}'' +
-  * **mehrseitige** Auswahlstrukur: else-if oder switch(case) +
- +
- +
-==== 3.4.4 Schleifen (Wiederholung) ==== +
-  * while-Schleife und do-while-Schleife +
-     * <code>while (laufbedingung) { +
-  // anweisung(en); +
-+
-</code> +
-     * <code>do { +
-  // anweisung(en); +
-+
-while (laufbedingung); +
- +
-+
-</code> +
-  * for-schleife +
-     * <code>for (int i = 0; i < 5; i++) { +
-  System.out.println(i); +
-+
-</code> +
- +
- +
- +
-===== 4 Datenkapselung =====+
 Das Kernelement der Datenkapselung besteht darin, die internen Informationen eines Objekts vor unberechtigtem Zugriff zu schützen. Hierbei wird kontrolliert, welche Daten von außen sichtbar und zugänglich sind, während andere Informationen verborgen bleiben. Das Kernelement der Datenkapselung besteht darin, die internen Informationen eines Objekts vor unberechtigtem Zugriff zu schützen. Hierbei wird kontrolliert, welche Daten von außen sichtbar und zugänglich sind, während andere Informationen verborgen bleiben.
 ==== 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: Änderungen an Datenstrukturen können auf die Klasse beschränkt werden, ohne dass dies Auswirkungen auf andere Teile des Programms hat.   * Flexibilität: Änderungen an Datenstrukturen können auf die Klasse beschränkt werden, ohne dass dies Auswirkungen auf andere Teile des Programms hat.
-===== Generalisierung & Spezialisierung (Vererbung) =====+===== 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:
 </code> </code>
  
-===== Abstrakte Klassen =====+===== 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:
 } }
 </code> </code>
 +===== 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. \\
 +{{:informatik:oop:assoziation1.png?400|}}
 +\\
 +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.
 +
 +{{:informatik:oop:assoziation2.png?400|}}
 + 
 +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). \\
 +{{:informatik:oop:assoziation3.png?400|}}
 +
 +Im oben beschriebenen Beispiel kann ein Kunde ein Girokonto haben. Es ist aber auch vorstellbar, dass der Kunde bei der Bank kein Girokonto hat, sondern nur ein Sparkonto. Deswegen spricht man hier von einer Kann-Assoziation (Untergrenze 0). Dagegen muss ein Girokonto einen Kunden als Kontoinhaber haben, weswegen hier von einer Muss-Assoziation (Untergrenze > 0) gesprochen wird.
 +
 +Mögliche Multiplizitäten sind:
 +| 0 .. 1  | kein oder ein assoziiertes Objekt                  | KANN-Assoziation  |
 +| 1       | genau ein assoziiertes Objekt                      | MUSS-Assoziation  |
 +| *       | kein, ein oder beliebig viele assoziierte Objekte  | KANN-Assoziation  |
 +| 1 .. *  | ein oder beliebig viele assoziierte Objekte        | MUSS-Assoziation  |
 +| 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).
 +\\
 +{{:informatik:oop:assoziation4.png?400|}}
 +\\
 +Jeder Kunde hat kein, ein oder beliebig viele Girokonten. Jedes Girokonto hat 1 oder 4 Kontoinhaber (= Kunden).
 +\\
 +{{:informatik:oop:assoziation5.png?400|}}
 +\\
 +
 +==== Navigierbarkeit ====
 +
 +Bei der Navigierbarkeit wird die Frage beantwortet, wer kann auf wen zugreifen? Dabei unterscheidet man zwischen **unidirektionalen** und **bidirektionalen** Assoziationen.
 +
 +==== Unidirektionale Assoziation ====
 +
 +\\
 +{{:informatik:oop:assoziation6.png?300|}}
 +\\
 +
 +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 ====
 +
 +
 +\\
 +{{:informatik:oop:assoziation7.png?300|}}
 +\\
 +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.
 +\\
 +{{:informatik:oop:assoziation8.png?300|}}
 +\\
 +\\
 +=== Mögliche Beziehungen ===
 +| Pfeilspitze  | Zugriff auf die Klasse möglich.       |
 +| „X“          | Kein Zugriff auf die Klasse möglich.  |
 +| (nichts)     | Keine Beziehung festgelegt.           |
 +
 +
 +===== 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, Band 1. Springer-Verlag, Berlin, 2. Auflage, 1998 )//
 +
 +==== 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, die unbedingt in der angegebenen Reihenfolge abgearbeitet werden.
 +  * 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();
 +</code>
 +
 +==== 7.4.3 Auswahlstruktur ====
 +  * **einseitige** Auswahlstruktur: ''if(Bedingung){Anweisung(en)}'' \\ Wenn für den Fall, dass die Bedingung FALSCH ist, keine Sequenz angegeben wird, spricht man von einer einseitigen Auswahlstruktur oder einer bedingten Anweisung.
 +  * **zweiseitige** Auswahlstruktur: ''if(Bedingung){Anweisung(en)}else{Anweisung(en)}''
 +  * **mehrseitige** Auswahlstrukur: else-if oder switch(case)
 +
 +
 +==== 7.4.4 Schleifen (Wiederholung) ====
 +  * while-Schleife und do-while-Schleife
 +     * <code>while (laufbedingung) {
 +  // anweisung(en);
 +}
 +</code>
 +     * <code>do {
 +  // anweisung(en);
 +}
 +while (laufbedingung);
 +
 +}
 +</code>
 +  * for-schleife
 +     * <code>for (int i = 0; i < 5; i++) {
 +  System.out.println(i);
 +}
 +</code>
 +
 +
 {{tag>[informatik thema java oop]}} {{tag>[informatik thema java oop]}}