Skip to content
This repository has been archived by the owner on May 28, 2023. It is now read-only.

Eine Beispiel-Implementation des Entwurfsmusters Fassade aus dem Bereich der Softwareentwicklung

Notifications You must be signed in to change notification settings

dotWee/se_doa_WI201718-facade

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Beispielcode zum Entwurfsmuster Fassade

Dieses Projekt stellt eine Beispiel-Implementierung in C++ des Entwurfsmusters Fassade aus dem Bereich der Softwareentwicklung dar.

Inhaltsverzeichnis

  1. Komponenten
  2. Ausführung
  3. Referenzen

Komponenten

Klassendiagramm Typenhierarchie

Die Klasse Motor soll einen mechanischen Motor symbolisieren, welcher durch einen Aufruf der Funktion Motor::zünden() zum Starten gebracht werden.

Die Klasse Frontscheinwerfer ist eine fiktive Komponente, welche durch die Schnittstelle Frontscheinwerfer::einschalten() angesprochen werden kann.

Die Klasse Automobil soll ein Modell eines Auto symbolisieren, welches durch einen Aufruf der Funktion Automobil::schlüsseldrehen() gestartet werden kann. Dieses fiktionale Auto besteht aus mehreren Bestandteilen, unteranderem einem Motor und Frontscheinwerfer. Bim Drehen des Autoschlüssels wird der Motor gezündet und die Frontscheinwerfer werden eingeschaltet.

Die Datenstruktur der Klasse Automobil bildet hier eine Art Fassade, bei der die Schnittstellen des Motors (Motor::zünden()) und der Frontscheinwerfer (Frontscheinwerfer::einschalten()) hinter einer einzelnen Schnittstelle (Automobil::schlüsseldrehen()) verborgen wird:

#include "Automobil.h"
#include "Motor.h"

void Automobil::schlüsseldrehen() {
    // Zünde den Motor
    motor.zünden();

    // Schalte die Frontscheinwerfer ein
    frontscheinwerfer.einschalten();

    [...]
    // Auto wurde gestartet!
}

Das Fahrer-Modell soll abstrakte Clients simulieren, welche auf verschiedene Zugriffsarten die Komponenten Motor und Frontscheinwerfer anprechen sowie aktivieren.

Der "manuelle" Fahrer spricht die Komponenten Motor und Frontscheinwerfer direkt an, überprüft deren Status selbst und hat volle Kontrolle über deren Schnittstellen.

#include "Fahrer.h"
#include "Motor.h"
#include "Frontscheinwerfer.h"

class ManuellerFahrer : public Fahrer {
private:
    Motor motor;
    Frontscheinwerfer frontscheinwerfer;
public:
    void starten() {
        cout << "ManuellerFahrer: Beginne das Auto zu starten..." << endl;

        // Zünde den Motor
        cout << "ManuellerFahrer: Versuche den Motor zu zünden..." << endl;
        motor.zünden();

        // Schalte die Frontscheinwerfer ein
        cout << "ManuellerFahrer: Versuche die Frontscheinwerfer einzuschalten..." << endl;
        frontscheinwerfer.einschalten();

        // Läuft
        cout << "ManuellerFahrer: Motor und Frontscheinwerfer gestartet!" << endl;
    }
};

Der "automatische" Fahrer spricht über die Fassadenklasse Automobil die Komponenten Motor und Frontscheinwerfer an, es findet keine direkte Kommunikation zwischen den Schnittstellen statt.

#include "Fahrer.h"
#include "Automobil.h"

class AutomatischerFahrer : public Fahrer {
private:
    Automobil automobil;
public:
    void starten() {
        cout << "AutomatischerFahrer: Beginne das Auto zu starten..." << endl;

        // Schlüssel drehen
        automobil.schlüsseldrehen();

        // Läuft
        cout << "AutomatischerFahrer: Motor und Frontscheinwerfer gestartet!" << endl;
    }
};

Ausführung

Ablaufdiagramm

Ablauf "automatischer" Fahrer Ablauf "manueller" Fahrer
AblaufdiagrammAutomatisch AblaufdiagrammManuell

Voraussetzungen

Ein aktueller C++-Compiler (g++) und das GNU Make Tool (make) werden vorausgesetzt.

Zu Beginnt wird mit $ make executable die Kompilierung des Quellcodes gestartet und im Anschluss die generierten Binaries mit den nötigen Rechten für eine Ausführung versehen.

Zuletzt wird mit $ make run die Ausführung gestartet.

Beispielausführung

Lukas-MacBook:se_doa_WI201718-facade lukas$ make
g++ -Wall -I./src src/main.cpp src/ManuellerFahrer.cpp src/AutomatischerFahrer.cpp src/Automobil.cpp src/Frontscheinwerfer.cpp src/Motor.cpp -o Automobil
chmod +x Automobil
./Automobil
-------------------------------------
ManuellerFahrer: Beginne das Auto zu starten...
ManuellerFahrer: Versuche den Motor zu zünden...
Motor: Motor wurde gezündet.ManuellerFahrer: Versuche die Frontscheinwerfer einzuschalten...
Frontscheinwerfer: Frontscheinwerfer wurden eingeschaltet.
ManuellerFahrer: Motor und Frontscheinwerfer gestartet!
-------------------------------------
AutomatischerFahrer: Beginne das Auto zu starten...
Automobil: Versuche das Auto mit Motor und Frontscheinwerfer zu starten...
Automobil: Versuche den Motor zu zünden...
Motor: Motor wurde gezündet.
Automobil: Versuche die Frontscheinwerfer einzuschalten...
Frontscheinwerfer: Frontscheinwerfer wurden eingeschaltet.
Automobil: Auto wurde gestartet!
AutomatischerFahrer: Motor und Frontscheinwerfer gestartet!
-------------------------------------
rm -f Automobil

Referenzen

About

Eine Beispiel-Implementation des Entwurfsmusters Fassade aus dem Bereich der Softwareentwicklung

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published