# 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.

- 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 ::