Wiki: Mathe und Info

Unterrichtsmaterialien für Mathematik und Informatik

Benutzer-Werkzeuge

Webseiten-Werkzeuge


info:sek-ii:q1:oop:l3-uml

UML-Diagramme

Einführung Klassen- und Objektdiagramme

Klassen und Objekte werden in der Informatik sehr häufig benötigt. Um Klassen übersichtlich darstellen zu können, werden Klassen- und Objektdiagramme verwendet. Diese habt ihr bereits gesehen, nun werden wir uns mit der Thematik etwas tiefgehender beschäftigen.

Für das Beispiel unten betrachten wir uns nochmal die animierten Blubber-Blasen aus Lektion 1, insbesondere die darin verwendete Klasse Blubbels.

Klassendiagramme

Betrachten wir zuerst den Quellcode der Klasse Blubbel:

class Blubbel {
  private float x;
  private float y;
  private float r;
 
  public Blubbel(float x, float r) { ... }
 
  public void display() { ... }
 
  public void aufsteigen(float v) { ... }
}
In Klassendiagrammen werden Klassen strukturiert und übersichtlich dargestellt. Sie enthalten die wichtigen Elemente von Funktionen: Attribute, Konstruktoren und Funktionen. Bitte haltet euch auch an diese Reihenfolge, alles andere ist schlechter Stil.

Wichtig ist außerdem (insbesondere für Konstruktoren und Methoden), dass deren komplette Signatur angegeben wird, also Methodenname, alle Parameter und der Rückgabewert.

Da die Klasse einen "Bauplan" für die späteren Objekte darstellt, werden hier noch keine Werte vergeben.

BlubbelfloatxfloatyfloatrBlubbel(floatx,floatr)voiddisplay()voidaufsteigen(floatv)
Objektdiagramme

Betrachten wir nun das laufende Programm. Wir sehen, dass zu jedem Zeitpunkt immer genau vier Blubbel auf dem Bildschirm angezeigt werden:

Objektdiagramme werden seltener verwendet als Klassendiagramme, sind jedoch auch relevant. Am unten aufgeführten Beispiel kann man sehen, dass hier sowohl die Objektnamen, als auch die konkreten Werte der Attribute angegeben werden. Es werden jedoch weder Zugriffsmodifikatoren, noch Konstruktoren oder Funktionen angegeben. Diese müssen dem zugehörigen Klassendiagramm entnommen werden.
b1:Blubbelx = 100y = 50r = 3b2:Blubbelx = 320y = 140r = 5b3:Blubbelx = 260y = 200r = 4b4:Blubbelx = 70y = 75r = 6
Klassendiagramm Ufo-Attacke

Erstelle das Klassen- und Objektdiagramm zur Ufo-Attacke mit draw.io.

Beziehungen zwischen Klassen

Das Darstellen von einzelnen Klassen ist bereits hilfreich bei der Erstellung neuer Programme. Noch hilfreicher werden Klassendiagramme, wenn man die Beziehungen zwischen verschiedenen Klassen darstellt, wie das folgende Beispiel verdeutlicht:

Assoziation

Eine Assoziation drückt allgemein aus, dass zwei Klassen bzw. Objekte zueinander in Beziehung stehen. Ein Beispiel wäre z.B. Person benutzt einen Computer.

PersonStringvornameStringnachnamedategeburtsdatumPerson(...)StringgetVorname()...ComputerintraminthddStringprozessorComputer(...)intgetRam()...wird benutzt von
Aggregation

Eine Aggragation beschreibt eine stärkere Beziehung. Sie impliziert einen Besitz. Als Beispiel könnte man hier z.B. ein Auto anführen, welches mehrere Räder besitzt.

AutoStringfirmaStringmodellintpsAuto(...)StringgetFirma()...RadStringherstellerintzollRad(...)StringgetHersteller()...gehört zu

Wichtig: Beachte die unterschiedlichen Pfeilspitzen!

Klassendiagramm Autofahrt

Erstelle ein Klassendiagramm zur Aufgabe Autofahrt. Ergänze die Modellierung so, dass Bäume, Häuser und das Auto zu einer Autofahrt gehören.

Aufgabe 19

Eine Getränkedose ist ein Behälter, der mit einer bestimmten Menge Flüssigkeit gefüllt werden kann. Eine Dose wird bei der Erzeugung befüllt. Danach kann sie vom Konsumenten geöffnet, ausgetrunken und weggeworfen werden. Modelliert eine Klasse Dose in UML-Notation.

Aufgabe 20

Modelliert eine Klasse Datum in UML-Notation, mit der Datumsangaben mit Datum und Uhrzeit (bis Sekunden) gespeichert werden können.

Aufgabe 21

a) Modelliert die Klassen Kunde und Konto in UML-Notation. Gegeben ist folgender Pflichtenheftauszug:

  • ein Kunde besitzt einen Namen, ein Geburtsdatum und einen Wohnort.
  • zu seinem Konto gehören Kontonummer und Kontostand.

b) Gebt für folgende Beschreibung die Objekte an.

  • Der Kunde Norbert Meier verfügt über ein Konto mit der Nummer 0815 mit einem Guthaben von 4000,00 €.
Aufgabe 22

Entwickelt aus den gegebenen Objekten die dazugehörigen Klassen. Erfindet sinnvolle Konstruktoren und Methoden und setzt passende Beziehungen.

Person3vorname = "Markus"nachname = "Müller"funktion = "Flugbegleiter"gehalt = 2700Flug2nummer = 322von = "Helsinki"nach = "München"am = Datum(31, 12, 2021)preis = 99.0Flugzeug1typ = "Boeing 707"sitzplätze = 120stauraum = 400baujahr = 1970
Aufgabe 40 - Unsere Käferchen1)

Im folgenden wollen wir uns mit ein paar Käfern beschäftigen. Um diese zunächst nicht allzu kompliziert zu gestalten, nehmen wir hier lediglich Kreise. Die Käfer, mit denen wir uns hier beschäftigen, sind recht spezielle Geschöpfe. Im Laufe ihres Lebens wachsen sie bis zu einer bestimmten maximalen Größe heran und werden dann wieder kleiner, bis zu einer minimalen Größe, werden wieder größer usw. Die Geschwindigkeit, mit der die Käfer dies tun, ist zufällig. Alle nötigen Attribute, Konstruktoren und Funktionen seht ihr unten im Klassendiagramm. Implementiert die Klasse und testet euren Code anhand eines Testkäfers.

BugfloatxfloatyfloatsizefloatminSizefloatmaxSizefloatgrowBug(floatx,floaty,floatsize)voidupdate()voiddisplay()
Aufgabe 41 - Klassendiagramm Autos2)

Bisher haben wir Klassen- und Objektdiagramme vor allem ohne Codebezug betrachtet. Um dies zu ändern folgt nun eine Übung, in der ihr Code in ein Klassendiagramm überführen sollt. Nehmt dafür folgenden Beispiel-Sketch und überführt ihn in ein Klassendiagramm und ein Objektdiagramm.

class Car {
  float x;
  float y;
  color c;
 
  Car(float carx, float cary, color carcolor) {
    x = carx;
    y = cary;
    c = carcolor;
  }
 
  void drive(int speed) {
    x = x + speed;
    fill(c);
    rect(x, y, 40, 10);
  }
}
 
Car car1;
Car car2;
 
void setup() {
  size(500, 400);
  car1 = new Car(20, 100, #0AA8F5);
  car2 = new Car(20, 150, #F5470C);
}
 
void draw() {
  background(255);
  car1.drive(1);
  car2.drive(2);
}
Aufgabe 42 - Schwärmen
Nachdem wir in Aufgabe 40 einen Käfer erstellt haben, wollen wir nun diesen Gedanken weiter spinnen und daraus einen Schwarm basteln. Der Schwarm besteht zunächst aus einer Königin und drei Arbeitern. Die Königin ist größer als die Arbeiter und bewegt sich langsam durch das Fenster, ändert aber immer ihre Richtung, wenn sie dem Rand zu nahe kommt. Geschützt wird die Königin von drei Arbeitern, die sie umkreisen. Das gewünschte Verhalten könnt ihr an dem Video erkennen. Erstellt hierfür sowohl einen Sketch als auch Klassen- und Objektdiagramme, welche den Sachverhalt darstellen.
1) , 2)
info/sek-ii/q1/oop/l3-uml.txt · Zuletzt geändert: 2023-11-27 14:10 von yannik.wehr