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


Gedankliche Konzepte hinter der Objektorientierung:

Objekte, die jeweils eine Identität haben und einander Nachrichten schicken 

Objekte haben Lebensdauer

Referenz: Damit ein Objekt dem anderen eine Nachricht schicken kann, muss es das andere kennen: Es besitzt eine Referenz auf das andere Objekt. 

Objekte: Personen, Dokumente, Zahlen, Wahrheitsbereiche 
Nachrichten: Schreibe dich ein, Drucke Dich aus, +, -

Identität: Objekte verhalten sich wie Gegenstände in der realen Welt. 
(Autos, Lampen, Telefone, Lebewesen, etc.)
Ein Objekt kann nicht an zwei Orten gleichzeitig sein. 
Auto wird umlackiert: Ändert seine Identität 

Nachrichten und Methoden: 
- Auftragserteilung
- Auftragsdurchführung 

K. sagt Buchhandlung: "Möchte Buch". Sie schreibt dafür einen Brief
1. Frau K. lösst Aktion aus. Schickt Nachricht. 
2. Die Buchhandlung besitzt eine Methode, die an sie gesendete Nachricht zu verarbeiten. 

Nachrichtenversand und Zustandsänderung

Klassifikation und Vererbung

Objekte kathegorisieren:

1. Einzelhandelsgeschäft
1.1. Lebensmittelladen
1.2. Buchladen 
1.2.1. Kinderbuchladen
1.2.2. Fachbuchhandlung
1.3. Möbelgeschäft

I.) Superklasse
II.) Subklassen 

Abstrakte Klassen: Keine Objekte, sondern: Gemeinheiten von Subklassen zusammenfassen 

Vererbung: Eigenschaften und Methoden, die mehreren Klassen gemeinsam sind, brauchen nur ein Mal in der übergeordneten Klasse beschrieben werden und können von den Subklassen geerbt werden



1. Objekte
2. Identität
3. Nachrichten und Methoden 
4. Nachrichtenversand und Zustandsänderung
5. Klassifikation und Vererbung 


Gefahr: Prozedurale Programmierung nicht mit Objektorientierung verwechseln!

a) Modellierung von Information und Verarbeitung

Prozedurale Programmierung
1. Modellierung der Information
2. Modellierung der Verarbeitung

Prozedural: Beide stark getrennt. 

Informationen: Grunddaten: Ganze Zahlen, Boolesche Werte, Zeichen, Zeichenketten, ...
In Variablen gespeichert. 
Variablen lassen sich in Arrays und Records organisieren
Grundmodell der Verarbeitung in prozeduralen Programmiersprachen: Zustandsänderung

b) Sicht der Programmierenden

c) Strukturierung und Datenkapselung: 
Erlaubt in natürlicher Weise die Strukturierung der Verarbeitung
Es bietet wenig Möglichkeiten, um die Teile des Zustands mit den auf ihm operierenden Prozeduren zusammen zu fassen
Und: Kapselung von Daten erreichen

d) Erweiterbarkeit:
Strenge Typisierung
Typkonzepte verbessern zwar die statische Überprüfbarkeit eines Programms, erschweren aber die Anpassbarkeit
Die Typen einer Prozedur p sind fest vorgegeben. 
Wird ein Typ erweitert oder modifiziert, entsteht ein neuer Typ, dessen Elemente von p nicht mehr akzeptiert werden. 

e) Zuordnung Prozeduraufruf - Prozedurausführung
Sollen unterschiedliche Daten zu unterschiedlichen Programmabläufen führen, müssen Fallunterscheidungen programmiert werden. 
Objektorientiert: Binden 

f) Parallelität: Die prozedurale Programmierung basiert auf einem sequentiellen Ausführungsmodell. Um Parallelität ausdrücken zu können, muss das Grundmodell erweitert werden.

a) Modellierung von Information und Verarbeitung
b) Sicht der Programmierenden
c) Strukturierung und Datenkapselung: 
d) Erweiterbarkeit:
e) Zuordnung Prozeduraufruf - Prozedurausführung
f) Parallelität: Die prozedurale Programmierung basiert auf einem sequentiellen Ausführungsmodell. Um Parallelität ausdrücken zu können, muss das Grundmodell erweitert werden. 

Objektorientierung:
a) Modellierung von Information und Verarbeitung: 
In der objektorientierten Programmierung bilden Objekte eine Einheit aus Daten und Methoden 
b) Sicht der Programmierenden
c) Strukturierung und Datenkapselung: 
Jedes Objekt hat eine klar festgelegte Schnittstelle, die beschreibt, welche Nachrichten es versteht
d) Erweiterbarkeit: 
e) ...

Objektorientierte Programmiersprachen, 50 Jahre alt
Simula67
Smalltalk

1. Softwaretechnische Simulation 
2. Konstruktion interaktiver, grafischer Benutzeroberflächen
3. Programm-Wiederverwendung
4. Verteilte Programmierung

Begrifflich unterscheiden wir, zwischen:
1. Objekten
2. Werten 

objects
values 

1. Zustand (Objekt, hat Zustand: Auto bekommt Delle, Mensch neue Frisur, ...)
2. Identität: Objekte können sich vollkommen gleichen, ohne denselben Zustand zu haben 
3. Lebensdauer
4. Aufenthaltsort
5. Verhalten: 

Werte, Typen und Variablen in Java:
byte
short
int 
long 
float 
double 
char 
boolean

Konstanten des Typs long haben L als Postfix 

Operationen auf Basisdaten (&&, ||, ...)
Ausdrücke (Expression)

Typkonvertierung (type casts)

(long)3

Auswertung (evaluation)


Objekte, Klassen:

public class Test {
    public static void main(String[] args) {
        Anweisungsblock
    }
}

Ausdruck auf der Standardausgabe
System.out.println(Ausdruck);
System.out.print(Ausdruck);

String s = "1234";
int i = Integer.parseInt(s);

String s = "Die Ausgabe lautet ";
int i = 42;
System.out.println (s + i + ".");

Anweisungen und Blöcke 

{
 ...
}   

Klassische Konstrollstrukturen 

if (boolescher_ausdruck) Answeisung
if (boolescher_ausdruck) Answeisung1 else Anweisung2

while (boolescher_ausdruck) Answeisung
do Anweisung while (boolescher_ausdruck);
for (init-Ausdruck; boolescher_ausdruck; Ausdruck) Anweisung

Abfangen von Ausnahmen
Ebenso wie die Auswertung von Ausdrücken kann auch die Ausführung einer Anweisung normal und abrupt terminieren.

Ausnahmesituation behandeln: 
try-Anweisung. 

Damit können Programmierende aufgetretene Ausnahmen kontrollieren 

Mit

throw 

selber herbeiführen 

try
 try-Block
catch
...
catch
finally