Fachkonzept - Interaktion zwischen Objekten

Wie interagieren Objekte?

Zur Beschreibung der Arbeitsweise von Objekten werden oft Sprechweisen benutzt, die diesen Vorgang in Analogie zur Lebenswelt setzen.

Eine Pizzeria bietet Pizza ausliefern als Dienst an. Durch eine Nachricht an die Pizzeria kann man diesen Dienst in Anspruch nehmen, d.h. die Pizzeria auffordern, ihren Dienst auszuführen. Ein Kunde muss die Pizzeria kennen, um eine Bestellnachricht an sie senden zu können und mit ihr in der gewünschten Weise interagieren zu können.

Die im Kontext Pizzeria benutzten Begriffe werden jetzt auf die Welt der Software-Objekte übertragen.

Objekte können (in aller Regel) bestimmte Operationen mit den von ihnen verwalteten Daten ausführen. Die Ausführung einer Operationen wird als Dienst anderen Objekten zur Verfügung gestellt. Andere Objekte können den zur Verfügung gestellten Dienst dann nutzen. Hier wird also die Anbieter-Nutzer-Sichtweise benutzt.

Wenn ein Objekt den Dienst eines anderen Objekt nutzen will, dann schickt es ihm eine Nachricht. Das Senden einer Nachricht bedeutet, ein Objekt zu veranlassen, eine seiner als Dienste zur Verfügung gestellten Operationen auszuführen.

Das Versenden von Nachrichten wird als Interaktion zwischen Objekten gedeutet. Voraussetzung für eine Interaktion zwischen Objekten ist, dass diese miteinander in Beziehung stehen.

Beispiel: Ampelsteuerung

Die oben beschriebene Sichtweise soll im Kontext Ampelsystem verdeutlicht werden. Wir betrachten hierzu die Implementierung in der Datei ampelsystem.py und schauen uns die Arbeitsweise der Methode schalteAmpeln genauer an.

#------------------------------------------------------------------------------
# Ampel
#------------------------------------------------------------------------------

class Ampel(object):

    ...

    def schalten(self):
        if self.zustand == 'rot':
            self.zustand = 'rotgelb'
        elif self.zustand == 'rotgelb':
            self.zustand = 'gruen'
        elif self.zustand == 'gruen':
            self.zustand = 'gelb'
        elif self.zustand == 'gelb':
            self.zustand = 'rot'

    ...

#------------------------------------------------------------------------------
# Ampelmanager
#------------------------------------------------------------------------------

class AmpelManager(object):
    
    ...
	
    def schalteAmpeln(self):
        self.ampel1.schalten()
        self.ampel2.schalten()
        self.ampel3.schalten()
        self.ampel4.schalten()

#------------------------------------------------------------------------------
# Test
#------------------------------------------------------------------------------

ampelNS = Ampel('rot')
ampelOW = Ampel('gruen')
ampelSN = Ampel('rot')
ampelWO = Ampel('gruen')
ampelmanager = AmpelManager(ampelNS, ampelOW, ampelSN, ampelWO)
ampelmanager.schalteAmpeln()
# ...

Ein Ampelmanager-Objekt bietet den Dienst schalteAmpeln() an. Wenn es diesen Dienst ausführt, dann schickt es die Nachricht schalten() an die verwalteten Ampel-Objekte .

Das Ampelmanager-Objekt interagiert also hier mit den Ampel-Objekten. Dies alles ist deshalb möglich, weil das Ampelmanager-Objekt in Beziehung zu den betreffenden Objekten steht und diese geeignete Dienste anbieten.

Zur Darstellung solcher Interaktionsprozesse benutzt man häufig sogenannte Sequenzdiagramme:

Sequenzdiagramm

Die Analogien zur Lebenswelt ermöglichen es, die Ausführung objektorientierter Programme in Rollenspielen zu verdeutlichen, bei denen Personen die Rolle von Objekten übernehmen.

Rollenspiel
X

Fehler melden

X

Suche