Menu Close

Objektorientierte Analyse und Design (Vorlesung 10)

Start: Seite 209

Besprechung Schachspiel

  • Komposition zwischen Figuren und Mannschaft nötig, damit man weiß, dass genau 1 König zu der Mannschaft gehört.

Multiplizitäten

  • Umsetzung von Klassen und Assoziationen
    • Attribute und Methoden können in objektorientierten Sprachen direkt umgesetzt werden
    • Generalisierung wird mittels Vererbung umgesetzt
    • Schnittstellen finden sich in abstrakten Klassen mit rein virtuellen Methoden wieder
    • Umsetzung von einfachen Assoziationen geschieht über Referenz auf ein anderes Objekt
      • Die Multiplizitäten „0..1“ und „1..1“ werden mittels eines Zeigers umgesetzt
      • Die Multiplizitäten „0..*“ bzw. „1..*“ werden über Zeigermengen dargestellt, wie z.B. Vektoren oder Arrays
      • Der Name des Attributs  ist der Name der assoziierten Klasse
    Die obige Umsetzung kann automatisch mittels eines Generators durchgeführt werden.// Spezifikation von Veranstaltung class Veranstaltung { protected: Dozent* Referent; public: ... } } // Spezifikation von Dozent Liste<Veranstaltung*> gehaltene_Veranstaltung; public: class Dozent { protected: ... }

Assoziationsklassen

  • Realisierung durch „Einschub“ einer Klassen zwischen den bestehenden Klassen
  • Die Rollen-Namen werden auch in den Zwischenklassen-Zeigern beibehalten
  • Die Zwischenklasse braucht Zeiger auf beide verbundenen Klassen
  • Multiplizitäten an den Klassen werden substituiert und durch 1 ersetzt A *             ↔       1..* B A 1 ↔ 1..* C * ↔ 1 B
class Anstellung {
  protected:
    Firma* m_Arbeitgeber; // Referenz auf assoziiertes Objekt
    Person* m_Arbeitnehmer; // Referenz auf assoziiertes Objekt
    unsigned int Gehalt; // Attribut der Assoziation
    string urlaub_von_bis; // Attribut der Assoziation  ...
  public:
    virtual Person* getArbeitnehmer (void) const{ return (m_Arbeitnehmer); }
    virtual Anstellung* setArbeitnehmer (const Person* einArbeitnehmer){
      m_Arbeitnehmer = einArbeitnehmer;
      return (this);
    }
    virtual Firma* getArbeitgeber (void) const{ return (m_Arbeitgeber);}
    virtual Anstellung* setArbeitgeber (const Firma* einArbeitgeber){
      m_Arbeitgeber = einArbeitgeber;
      return (this);
    }
    virtual void Urlaub_beantragen (string anfang_ende){
      urlaub_von_bis = anfang_ende;
};
...
}
class Person {
  protected:
    Liste<*Anstellung> m_Arbeitgeber;
  public:
    Anstellung* getAnstellung (const Firma* dieFirma) const {
      // Navigieren auf dem Container gemäß gegebener Datenstruktur (Liste).
      // Liefert die Referenz auf das Objekt der Assoziationsklasse, das die
      // Referenz auf die übergebene Firma hält. So ist das Setzen und Lesen von
      // Attributen bzw. das Ausführen von Methoden der Assoziation möglich.
}
    virtual unsigned getAnstellungsGehalt (const Firma* derArbeitgeber) const {
      // Zugriff auf ein Assoziationsklassen-Attribut:
    return (getAnstellung (derArbeitgeber)-> getGehalt());
}
    void do_Anstellung_Urlaub_beantragen (const Firma* derArbeitgeber, string anfang_ende){
      // Ausführen einer Assoziationsklassen-Methode:
      getAnstellung(derArbeitgeber)->Urlaub_beantragen(string anfang_ende);
}
...

}

Gesprächs-Ebenen

  • A: Analyse
  • T: Design

Aggregation und Komposition

  • Aggregation: Wird mit einem Zeiger realisiert
  • Komposition: Teilklassen sind Member-Attribute der Komposition

Kommunikation zwischen Objekten

  • Objekte kommunizieren mittels Methoden miteinander
    • Objekt X sagt Objekt Y „Führe y.a() aus“.
    • Objekt Y gibt den Wert zurück
  • Aufrufe
    • Synchron: 
      • Während Y.a() ausgeführt wird, ist X im idle-Modus (tut nichts)
      • Deterministisch: a b
      • Ausgefüllter Pfeil
    • Asynchron: 
      • X arbeitet direkt weiter und übergibt Y die „Verantwortung“
      • Nicht deterministisch: / b a / a b / …
      • Pfeilspitzen

Klausur

  • Sequenzdiagramme sind wichtig!

Sequenzdiagramme

  • Objekte die oben stehen, existieren bereits zu beginn
  • Objekte, die tiefer stehen, werden erst im Verlauf erzeugt
  • Returnpfeile sind optional, aber sind empfohlen
  • Jedes Objekt hat seine eigene Bahn
  • So ist eindeutig, wer Nachrichten an wen übermittelt
  • Nachrichten, die geschickt werden, sind genau die Methoden, die angeboten werden

Synchrone Nachrichten

  • Nach Senden einer Nachricht, wartet der Sender, bis der Empfänger die Nachricht empfangen hat und diese vollständig abgearbeitet wurde. Dann kann er weitersenden.
  • Die Kontrolle wird abgegeben
  • Synchrone Nachrichten sind Methodenaufrufe.
    • Wird eine Methode aufgerufen, so wird gewartet, bis die Methode abgearbeitet wurde.
  • Darstellung: schwarz gefüllter Pfeil

Asynchrone Nachrichten

  • nach Senden einer Nachricht, kann der Sender sofort weitersenden, während der Empfänger die Nachricht abarbeitet.
  • paralleles Arbeiten von Sender und Empfänger
  • Benachrichtigungen an bzw. vom Benutzer sind immer asynchron.
    • Eingaben, Ausgaben
  • Darstellung: normaler Pfeil

Der Unterschied zwischen synchronen und asynchronen Nachrichten ist wahrscheinlich Teilthema der Klausur. Objekte, die sich in einem Sequenzdiagramm am oberen Rand befinden, sind zu Beginn des Szenarios schon vorhanden. Objekte, die sich weiter unten befinden werden erst später erstellt.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahren Sie, wie Ihre Kommentardaten verarbeitet werden.

Index