44
Grundlagen der Objektorientierung OOPM, Ralf Lämmel Ist es nicht oensichtlich, dass die Gurkenscheiben OO repräsentieren?

Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

Grundlagen der ObjektorientierungOOPM, Ralf Lämmel

Ist es nicht offensichtlich, dass die Gurkenscheiben

OO repräsentieren?

Page 2: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Neue bzw. ausgeweitete Begriffe1. Objekt (eine Kapsel aus Zustand und Verhalten)

2. Klasse (als ein Stempel für Objekte)

3. Nachricht (mehr als ein Methodenaufruf)

4. Vererbung (Generalisierung) (für Klassen und Schnittstellen)

5. Komposition (für Objektbeziehungen)

6. Schnittstelle (Menge implementierbarer Methodensignaturen)

7. Abstrakte Klasse (nicht instanziierbare Klasse)

8. Polymorphismus (gleiche Schnittstellen; verschiedenes Verhalten)

9. Dynamische Bindung (Implementationsauswahl zur Laufzeit)

2

Page 3: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Die Basis von OO: Objekte und Nachrichten

3

Page 4: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Objekte als Abstraktion

4

Abstraktion

Attribute

Methoden

rlaemmel : Person

Geburtsdatum: 15.12.??Name: Lämmel

forschenlehren

AttributwerteObjektname

Vorname: Ralf

Page 5: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Was ist ein Objekt?

5

Abstraktionen von physischen DingenPersonen, Studenten, Immobilien

Abstraktionen von ideellen (virtuellen) DingenKonten, Bestellung

Modellierung von rechnerbasierten KonzeptenDruckaufträge, Dialog

Beachte: Objekte nicht nur relevant in der Programmierung, sondern auch bei der Analyse und dem

Entwurf. Zum Beispiel ist auch der Benutzer eines Informationssystems ein Objekt in der Analysephase.

Page 6: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Definierende Eigenschaften eines Objektes

6

Struktur zusammengesetzt aus:Attributen (primitiver Typen; typischerweise)Beziehungen mit anderen Objekten

Verhalten beschrieben durch eine Menge von OperationenIdentität zur Unterscheidung von Objekten

Anderer gängiger Begriff: Zustand

Page 7: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Objekte als Abstraktion

7

Abstraktion

: rectangle1

x: 100y: 100

draw

Attribute

Methoden

AttributwerteObjektname

height: 50width: 100

moveTomoveBy

Page 8: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Objektidentität

Jedes Objekt besitzt einen eindeutigen Objektbezeichner (OID).

OID wird bei "Geburt" des Objekts vergeben.

OID ist unveränderlich.

OID ist unabhängig vom aktuellen Objektzustand.

8

Verschiedene Objekte mit gleichen Eigenschaften

Name = „Jackson" Vorname = „Michael"

Name = „Jackson" Vorname = „Michael"

Name = „Jackson" Vorname = „Michael"

Page 9: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Objektidentität

Jedes Objekt besitzt einen eindeutigen Objektbezeichner (OID).

OID wird bei "Geburt" des Objekts vergeben.

OID ist unveränderlich.

OID ist unabhängig vom aktuellen Objektzustand.

9

Verschiedene Objekte mit gleichen Eigenschaften

Name = „Jackson" Vorname = „Michael"

Name = „Jackson" Vorname = „Michael"

Name = „Jackson" Vorname = „Michael"

Page 10: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Nachricht

Jedes Objekt versteht bestimmte Nachrichten.

Z.B.: ein Konto versteht die Nachricht für eine Abhebung.

BestandteileExplizit

Empfänger (ein Objekt)Nachrichtenname (Methodenname)Parameter (Objekte)

ImplizitAbsender (ein Objekt)

10

public class Transfer { public Transfer( Account from, Account to, float amount) { ... } public execute() { from.withdraw(amount); to.deposit(amount); }}

Page 11: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Potential für Nachrichtenaustausch

Ein Objekt kann Nachrichten an folgende Objekte senden:

an jedes “verknüpfte” Objekt.

an jedes Objekt aus den Parametern.

Abstrakt betrachten wir Verknüpfungen zwischen Objekten:

Ein Konto ist mit dem Kontoinhaber verbunden.

Ein Kontoinhaber ist mit seinen Konten verbunden.

11

Page 12: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Klassen und Vererbung

12

Page 13: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Vom Objekt zur Klasse

13

Abstraktion

Attribute

Methoden

Klassenname

int xint y

draw

int heightint width

moveTomoveBy

Rectangle

Page 14: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Ein beliebtes Beispiel

Formen (“shapes”)

Rechtecke

Kreise

Verhalten

Bewegen

Zeichnen

14

Siehe Shapes Chrestomathie https://github.com/rlaemmel/nopetal

Page 15: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Nachrichtenaustausch im Computer-Aided Design (Bild-Aufbau)

Instanziiere Abbildung aAn a: Konstruiere Rechteck r1 mit Abmessungen ...An a: Konstruiere Rechteck r2 mit Abmessungen ...An a: Konstruiere Kreis k mit Abmessungen ...An a: Male Dich!

An r1: Male Dich!An r2: Male Dich!An k: Male Dich!

15

Page 16: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Nachrichtenaustausch im Computer-Aided Design (Bild-Mutation)

An r1: Bewege Dich etwas vom Rand weg ...An r2: Bewege Dich in die Mitte von r1 ...An k: Bewege Dich in die Mitte von r2 ...An a: Male Dich!

An r1: Male Dich!An r2: Male Dich!An k: Male Dich!

16

Instanz eines Entwurfsmusters: Eine Abbildung ist ein Kompositum und das Malen ist

die Operation davon.

Page 17: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Klassen als Stempel von Objekten

17

X: 0 Y: 0width: 50height: 50

X: 50 Y: 50width: 100height: 25

Eine Klasse beschreibt eine Sammlung von Objekten mit gleichen Eigenschaften (Attributen), gemeinsamer Funktionalität (Methoden), gemeinsamen Beziehungen zu anderen Objekten und gemeinsamer Semantik.

Jedes Objekt ist Instanz genau einer Klasse.

Klassenzugehörigkeit ändert sich niemals.

RECT

ANGL

E

In Java ist das so!

Page 18: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Vererbung (Generalisierung)

Klassen werden in einer Hierarchie angeordnet.

Unterklasse erbt von Oberklasse

Attribute

Methoden

(Beziehungen)

18

Page 19: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Abstrakte vs. konkrete Klassen

19

Abstrakte Klasse

nicht-instanziierbare KlasseBereitstellung einer Schnittstelle

Wurzel einer Fallunterscheidung für Vererbung

Bereitstellung einer (unvollständigen) Implementation

Konkrete Klasse

instanziierbare Klasseweitere Spezialisierung (Vererbung) ist möglich.

Page 20: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Code zum Shapes-Beispiel

20

Siehe Shapes Chrestomathie https://github.com/rlaemmel/nopetal

Page 21: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau 21

package oo.shapes.simple;

import java.io.PrintStream;

public abstract class Shape {

private int x; private int y;

protected Shape(int x, int y) { moveTo(x, y); } public int getX() { return x; } public int getY() { return y; } public void setX(int x) { this.x = x; } public void setY(int y) { this.y = y; }

public void moveTo(int x, int y) { setX(x); setY(y); } public void moveBy(int deltax, int deltay) { moveTo(getX() + deltax, getY() + deltay); }

public abstract void draw(PrintStream s); }

Die abstrakte Basisklasse für alle Formen

Privater Zustand für Position der Form

Konstruktor für Aufruf in den Unterklassen

Reguläre Getter und Setter

Die Methoden zum Bewegen können bereits implementiert

Das Malen muss von den Unterklassen implementiert

werden.

Page 22: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau 22

package oo.shapes.simple;

import java.io.PrintStream;

class Circle extends Shape {

private int radius;

public Circle(int x, int y, int radius) {super(x, y);setRadius(radius);

}

public int getRadius() { return radius; }public void setRadius(int radius) { this.radius = radius; }

public void draw(PrintStream s) {s.println(

"Drawing a Circle at:(" + getX() + ", " + getY() + "), radius " + getRadius());

}}

Eine abgeleitete Klasse für Kreise

Zusätzlicher Zustand für Kreise

Ein echter Konstrukor

Reguläre Getter und Setter

Wir “malen” einen Kreis.

Drawing a Circle at:(15, 25), radius 8

Aufruf vom Shape-Konstruktor

Page 23: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau 23

class Rectangle extends Shape ...

Extra Übungsaufgabe für Sie: Versuchen Sie erst diese Klasse zu sketchen.

Sie können Ihr Ergebnis mit dem im Repository vergleichen.

Page 24: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Abstrakte Klassen vs. Schnittstellen

24

Wann nimmt man abstrakte Klassen?

Wann nimmt man Schnittstellen?

Page 25: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Abstrakte Klassen vs. Schnittstellen

25

package oo.shapes.iop;

import java.io.PrintStream;

public interface Shape { void moveTo(int x, int y); void moveBy(int deltax, int deltay); void draw(PrintStream s); }

Wir können mit dieser Schnittstelle (im Gegensatz zu der ursprünglichen, abstrakten Klasse) nicht den Zustand für

die Position der Formen mit Attributen modellieren. Darum können wir auch nicht die bisherigen

Implementationen für moveTo und moveBy angegeben.

Schnittstellen in Java können auch Attribute (Felder)

beinhalten. Diese sind aber public, static und final.

Page 26: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Abstrakte Klassen vs. Schnittstellen

26

Wann nimmt man abstrakte Klassen?Wurzel einer Fallunterscheidung in der Klassenhierarchie

Faktorisierung von Attributen und MethodenimplementationErmöglichung des Überschreibens von Methodenimplementationen

Wann nimmt man Schnittstellen?Definition allein einer gemeinsamen Schnittstelle

Ermöglichung von implementierenden Klassen ohne feste Oberklasse

Page 27: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Vererbung mit/ohne Überschreiben

27

Page 28: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Basisklasse für Konten

28

package oo.account;

public class Account {protected float balance = 0;public float getBalance() { return balance; }public void statement() {

System.out.println("Account's balance is " + getBalance() + ".");}public void deposit(float amount) {

if (amount <= 0)return;

balance += amount;}public float withdraw(float amount) {

float result = 0;if (amount <= 0)

return result;result = amount > balance ? balance : amount;balance -= result;return result;

}}

Wir zahlen unter Umständen nicht den

vollen Betrag aus sondern nur soviel, dass

der Kontostand nicht negativ wird.

Wir ermöglichen auch (schreibenden) Zugriff in

den Unterklassen.

Page 29: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

package oo.account;

public class CreditAccount extends Account {private float overdraft = 0;public void statement() {

super.statement();System.out.println("Account's overdraft is " + getOverdraft() + ".");

}public float getOverdraft() { return overdraft; }public boolean adjustOverdraft(float amount) { ... }public float withdraw(float amount) {

float result = 0;if (amount <= 0)

return result;result = balance - amount < -overdraft ?

balance + overdraft: amount;

balance -= result;return result;

}}

Ein geändertes Konto

29

Die geerbte Implementation läßt keine negativen

Kontostände zu! Damit müssen wir komplett überschreiben.

Ergänzung der vererbten Implementation

Page 30: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Vererbung mit/ohne Überschreiben -- Zusammenfassung --

Optionen für MethodenvererbungVollständige BewahrungVollständige Überschreibung (Ersetzung)Teilweise Überschreibung (Ergänzung)

Java: “super” ruft Oberklassenmethode aufStatische Methoden und Konstruktoren werden nicht vererbt.

Die Referenzierung mit “super” ist aber auch möglich.

30

Page 31: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Polymorphismus und

dynamische Bindung

31

Page 32: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Polymorphismus

Eine Methode ist polymorph, wenn sie in Unterklassen (Untertypen) unterschiedlich implementiert ist.

Beispiel

Nachricht: s.draw(...) mit s : Shape

Optionen für Semantik

32

Page 33: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Dynamische Bindung

Dynamisches oder spätes Binden liegt vor, wenn erst beim Ablauf eines Algorithmus (zur Laufzeit) festgelegt werden kann, welche Implementation durch eine Nachricht aktiviert wird.

Beispiel: Verwalte einen Container mit Formen und biete eine Zeichen-Methode an, welche alle Formen des Containers zeichnet.

33

Page 34: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Polymorphismus mit Formen (einschließlich später Bindung)

34

// Construct a list of shapesShape[] scribble = new Shape[2];scribble[0] = new Rectangle(10, 20, 5, 6);scribble[1] = new Circle(15, 25, 8);

// Handle the shapes in the list polymorphicallyfor (int i = 0; i < scribble.length; i++) {scribble[i].draw(System.out);scribble[i].moveBy(100, 100);scribble[i].draw(System.out);

}

Drawing a Rectangle at:(10, 20), width 5, height 6 Drawing a Rectangle at:(110, 120), width 5, height 6 Drawing a Circle at:(15, 25), radius 8 Drawing a Circle at:(115, 125), radius 8

Page 35: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Fangfrage: Wäre dies auch noch späte Bindung?

35

// Construct a list of shapesShape[] scribble = new Shape[2];scribble[0] = new Rectangle(10, 20, 5, 6);scribble[1] = new Circle(15, 25, 8);

// Handle the shapes in the list polymorphicallyscribble[0].draw(System.out);scribble[0].moveBy(100, 100);scribble[0].draw(System.out);scribble[1].draw(System.out);scribble[1].moveBy(100, 100);scribble[1].draw(System.out);

Drawing a Rectangle at:(10, 20), width 5, height 6 Drawing a Rectangle at:(110, 120), width 5, height 6 Drawing a Circle at:(15, 25), radius 8 Drawing a Circle at:(115, 125), radius 8

Page 36: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Komposition

36

Page 37: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Motivation: Wir wollen die Struktur für eine Anwendung im Personalwesen modellieren.

37

MSFT

VB C#

DevHR

AndersErikPaul

Firma

Abteilungen

Unter-abteilungen

Angestellte

Page 38: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Ein Klassendiagramm für eine Anwendung im Personalwesen

38

Verwendung von Komposition (Teil-Ganzes-Beziehung)

Page 39: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

https://github.com/101companies/101simplejava/tree/master/contributions/

javaComposition

39

Page 40: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Vererbung versus

Komposition

40

Page 41: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

https://github.com/101companies/101simplejava/tree/master/contributions/

javaInheritance

41

Page 42: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Zusammenfassung OO Grundbegriffe

Erste Anfänge von UMLAusblick

Vertiefung von UMLProgrammieren mit Ausnahmen

Programmieren mit Generics

Spezifikation und Implementation von Datentypen...

Page 43: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Prof. Kristen Nygaard

27.8.1926 - 10.8.2002

Norwegischer Informatiker

Erfand die Programmiersprache SIMULA 67, was die Einführung des Klassenkonzeptes bedeutete (zusammen mit Ole-Johan Dahl).

Erfand die Programmiersprache BETA (zusammen mit B. B. Kristensen, O. L. Madsen, B. Møller-Pedersen).

Die “Erfinder” von OO?

43

Page 44: Ist es nicht offensichtlich, dass die Gurkenscheiben OO ...softlang/oopmcourse/slides/oo.pdf · (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau Neue bzw. ausgeweitete Begriffe

(C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau

Prof. David Parnasgeb. 10.2.1941Amerikanischer InformatikerPropagierte “information hiding” (1971)Unterstütze modulare Spezifikationen (1972)Trennung von Spezifikation und ImplementationPionier des Software Engineering (seit 1975)

Die “Erfinder” von OO?

44