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