/media/sda-magnetic/david/Dok-15-2023-11-27/fernuni-hagen/cs-i-ii/old-cs-2-03/java-new/java2.5.3.txt


- Subtyping
- Typisierung
- Deklarationstyp = statischer Typisierung
- statische Typsicherheit
- Behälterklasse 
- Object ist per default der Supertyp aller Objekttypen 
- Cast
- instanceof-Operator: Stellt Java extra dafür zur Verfügung 
- Basisdatentypen und Subtyping
- Verpacken - Bibliothek: java.lang, Klasse mit Attribut value 
- Wrapperklassen 
- Autoboxing, Boxing und Unboxing
- Subtyping bei Arrays 
- Klassifizierung von Objekten 
- Ist-ein-Beziehung 
- Spezialisierung und Abstraktion 
- Spezialisierung
- Abstraktion 
- Schnittstellentyp (interface)
- Interfaces und Subtyping 
- Interfacedeklaration 
- Klassentypen
- Interfacetypen 
- Referenz- oder Objekttypen: Klassen-, Interface-, Arraytypen
- Supertyp
- Direkter Subtyp 
- Interfacetypen als Subtypen 
- Klassentypen als Subtypen 
- Klassifikation und Subtyping: Subtyping ist ein hervoragendes Mittel, zur Klassifikation 
- Typhierarchie erweitern 
- Vererbung
- Vererbung = inheritance
- Überschreiben, overwriting
- Schlüsselwort "super"
- Vererbung und Objektinitialisierung
- Konstruktoren 
- Vererbung und Konstruktoren!!!
- Vererbung und innere Klasse 
- Vererbung, Subtyping und Subclassing 
- Subclassing: Verberung und Subtyping in einem
- Abstrakte Klassen und Methoden 
- Schlüsselwort "abstract"
- Abstrakte Klassen
- Abstrakte Methoden 
- Mehrfachvererbung = multiple inheritance
- Vererbung und Kapselung
- Privater Zugriff, Paketloser Zugriff, öffentlicher Zugriff 
- Geschützter Zugriff 
1. Man kann eine Klasse so anwenden, wie sie ist (Anwendungsnutzung)
2. Man kann eine Klasse erben, um eine speziellere Klasse zu entwickeln (Verberungsnutzung)
- Schlüsselwort "protected"
- unveränderliche Klassen
- final 
- Zusammenspiel von Vererbung und Kapselung
- private Attribute und Methoden: Werden vererbt, aber nicht zugreifbar
- Realisierung gekapselter Objektgeflechte





Kapselung
Klassinvarianten
Information Hiding = Geheimnisprinzip 
private 
Schachtelung
Schachtelung bei Blöcken
Schachtelung bei Klassen 

Statisch Innere Klassen 


innere Klassen


Behälter = Container

Ein Behälter ist ein Datentyp zum Speichern von Elementen bzw. Objekt-Referenzen 

Parametrisierung von Typen 
Typisierung von Programmiersprachen 
Behälter für beliebige Objekte, Refernztyp, Superklasse object 

parametrische Klassen = generische Klassen 

Typparameter


Bausteine:
- awt
- beans
- io
- lang
- math
- net
- rmi
- security
- sql
- util

- awt
    - event
    - font
    - image
- beans
- io
- lang
- math
- net
- rmi
    - registry
    - server 
- security
- sql
- util
    - concurrent
    - jar
    - zip
    - regex

- awt: graphische Bedienoberflächen
    - event
    - font
    - image: java.awt.image: Darstellung von Bildern
- beans
- io: Ein und Ausgabe
- lang: Standardpaket: Object, String, StringBuiler
- math: Klassen zur Programmierung mit Zahlen 
- net: Socketverbindungen 
- rmi: Remote method invocation: Entfernte Methodenaufrufe, Netzwerke
    - registry
    - server 
- security
- sql: SQL
- util: Listen, Stapel, Bitfelder, Hashtabellen; Behandlung von Zeit- und Kalenderdaten
    - concurrent
    - jar
    - zip
    - regex

Ausnahmebehandlung:
1. Ausnahmebehandlung: Erschöpfen der zugeteilten Maschineressourcen, kein Speicher 
2. Ausnahmen durch defensives Programmieren vermeidbar: Zugriff auf null
3. Ausnahmen, die nicht vermeidbar sind: Nutzer löscht Datei

- Objekt
    - Throwable
        - Error
            - AbstractMethodError
            - OutOfMemoryError
            - StackoverflowError
        - Exception 
            - RunTimeException
                - NullPointerException
                - IndexOutOfBoundsException
                - IllegalArgumentException
                    - NumberFormatException
            - IOException
            - ClassNotFoundException
            - KeinKaffeException
            
Zusammenspiel von Sprache und Bibliothek

1. Auslösen von Ausnahmen
2. Abfangen und Behandeln von Ausnahmen
3. Weiterreichen von Ausnahmen über Methodengrenzen hinweg 

Ströme: Bausteine zur Ein- und Ausgabe

Strom = stream

Methode: read 

read: Nächstes Zeichen 
Kein weiteres Zeichen -1
Auf Eingabestrom kann nicht zugegriffen werden: IOException

Ergebnistyp: interface

Quellen: Dateien, Datenstrukturen (z.B. Arrays), Netzwerk, von anderen Strömen, durch den Benutzer

Weiterreichen von Ausnahmen

1. abrupt terminierende Programmstück liegt innerhalb von Try-Anweisung
2. Das Programmstück ist in keiner try-Anweisung enthalten

Ströme: Bausteine zur Ein- und Ausgabe

Strom = stream

Methoden
1. Lesen
2. Schreiben 

interface CharEingabeStrom {
    int read () throws IOException;
}

Eingabeströme: Unterschiedliche Quellen

Beispiel:
1. Ein String-Leser, der sukzessive Zeichen aus einem String-Objekt ließt
2. Einem Filter, der alle Zeichen eines Stroms in Großbuchstaben umwelt
3. Einem Filter, der das "ß" mittels zweier Buchsstaben transliterirt.