---
# System prepended metadata

title: Table of Contents

---

# Table of Contents

1.  [A 2.1 Schichten](#orga9d1c5e)
2.  [A 2.2 Pipes und Filters](#orga6b559c)
3.  [A 2.3 Service-Orientierte Architektur](#orgacb6e3d)
4.  [A 2.4 Model-View Controller](#org9de533a)


<a id="orga9d1c5e"></a>

# A 2.1 Schichten

-   Erklären Sie die Grundzüge des Schichten Architekturmusters:
    
        Die Software und Ihre komponenten werden in verschiedene Schichten
        eingeteilt, sodass die Aufgabenverteilung in der Software in modularen
        Teilen implementiert wird. Interfaces verbinden Schichten miteinander
        für einen klaren Datenfluss.
        
        Probleme entstehen oft bei der Trennung von Schichten, sowie bei der
        verwaltung von States - da hier oft Probleme verschiedene Schichten
        durchlaufen.

-   Kann eine Schicht `n` die Dienste einer Schicht `n-2` direkt benutzen?
    
        (Annahme: Root als oberste schicht mit n = 0)
        Eine Schicht n ist _nicht_ in der Lage dazu, die Dienste einer Schicht
        n-2 zu benutzen. Ansonsten wurde _nicht_das Schichtenmodell benutzt.


<a id="orga6b559c"></a>

# A 2.2 Pipes und Filters

-   Erklären Sie die Grundzüge des Pipes und Filters Architekturmusters.
    
        Beim Pipes- und Filtermodell werden die Ergebnisse nach einem
        Verarbeitungsschitt (Filter) auf Daten durch eine 'Verbindung' (Pipe) zum
        nächsten Verarbeitungschritt geleitet.
        Des Gesamtsystem besitzt dann viele unabhängige (o.a. pure) Komponenten die
        durch Nacheinanderschalten das geforderte Problem lösen.

-   Gehen Sie davon aus, dass Sie folgende Filter zur Verfügung haben.
    
    -   **read        :** Liest aus einer Quelle eine Liste von Namen und Vornamen ein.
        Die Ausgabe besteht aus einer mit Zeilenumbrüchen getrennte Liste.
        Jeder Eintrag enthält Kommas um den Vornamen vom Nachnamen zu
        trennen.
    -   **sortName    :** Sortiert einen übergebene Liste nach Nachnamen.
    -   **sortForeName:** Sortiert eine übergeben Liste nach Vornamen.
    
    Verwenden Sie das Zeichen | um zwei Filter durch einen Pipe zu verbinden
    (analog zu den Unix-Shells). Schreiben Sie einen Ausdruck, der eine Liste von
    Namen einließt und nach Nachname, dann nach Vorname sortiert. Beispiel:
    – Ulrich, Albrecht
    – Manual, Maier
    – Sigi, Maier
    – Hans, Papenheimer

    read | sortForeName | sortName

-   Gehen Sie davon aus, dass Sie in Java in Form von statischen Methoden in
    einer Klasse die drei oben genannten Filter zur Verfügung haben. Geben Sie
    mögliche Typsignaturen der Methoden an, und schreiben Sie den Java Ausdruck
    für das Sortieren der Liste wie in der vorherigen Teilaufgabe beschrieben
    auf.

    ```java
    class NameList {
        public NameList()                   { ... } // constructor
        public NameList read(Source source) { ... } // read source
        public NameList sortName()          { ... } // sort by last name
        public NameList sortForeName()      { ... } // sort by forename
    }

Verwendung wie folgt:

    NameList nm = new NameList();
    nm.read(source).sortForeName().sortName();


Alternativ:
```java

    class Name { ... }
    
    class NameProcessing {
        public List<Name> read(Source source) { ... } // read source
        public List<Name> sortName()          { ... } // sort by last name
        public List<Name> sortForeName()      { ... } // sort by forename
    }
```

Verwendung wie folgt (innerhalb der NameProcessing-Klasse):
    
    List<Name> nm = sortName(sortForeName(read(source)));



-   Wenn Sie das Muster Pipes und Filters in Java und in Form von Befehlen
    vergleichen, was fällt Ihnen auf?
    
        Das funktionsprinzip ist gleich, nur die Syntax geändert


<a id="orgacb6e3d"></a>

# A 2.3 Service-Orientierte Architektur

-   Erklären Sie die Grundzüge einer Service-Orientierten Architektur.

    Bei der Service Orientieren Architektur wird die Organisation des Codes an den
    Geschäftsprozessen orientiert.
    - Ein Dienst ist eine IT-Repräsentation von fachlicher Funktionalität.[4]
    - Ein Dienst ist in sich abgeschlossen (autark) und kann eigenständig genutzt werden.
    - Ein Dienst ist in einem Netzwerk verfügbar.
    - Ein Dienst hat eine wohldefinierte veröffentlichte Schnittstelle (Vertrag). Für die Nutzung reicht es, die Schnittstelle zu kennen. Kenntnisse über die Details der Implementierung sind hingegen nicht erforderlich.
    - Ein Dienst ist plattformunabhängig, d. h. Anbieter und Nutzer eines Dienstes können in unterschiedlichen Programmiersprachen auf verschiedenen Plattformen realisiert sein.
    - Ein Dienst ist in einem Verzeichnis registriert.
    - Ein Dienst ist dynamisch gebunden, d. h. bei der Erstellung einer Anwendung, die einen Dienst nutzt, braucht der Dienst nicht vorhanden zu sein. Er wird erst bei der Ausführung lokalisiert und eingebunden.
    - Ein Dienst sollte grobgranular sein, um die Abhängigkeit zwischen verteilten Systemen zu senken.

![img](../../../orgmode/assets/A_2.3_Service-Orientierte_Architektur/2019-10-24_08-23-53_465px-SOA_Elements.png)

-   Erklären Sie die Rollen von Serviceanbieter, Servicebenutzer und
    Serviceverzeichnis.
    
        - Serviceanbieter    :: Stellt einen Dienst zur verfügung
        - Servicebenutzer    :: Sucht und benutzt dienste die im Serviceverzeichnis angeboten werden
        - Serviceverzeichnis :: Gibt verfügbare Services an


<a id="org9de533a"></a>

# A 2.4 Model-View Controller

Skizzieren Sie die Implementierung einer MVC Lösung für das Telefonbuch wie
aus SE II bekannt, indem Sie die Schnittstellen der drei beteiligten
Komponenten aufschreiben.

    - Model      ::
    - View       ::
    - Controller ::

