Chapter 5 (Programmier-Paradigmen für Software Produktlinien 1) Flashcards
Was ist der Unterschied zwischen Variabilität zur Laufzeit und Compilezeit?
Zur Laufzeit:
- Gesamter Quelltext aller Konfigurationen wird kompiliert
- Belegung der featureparameter variiert den Kontrollfluss der Programmausführung
Zur Compilezeit:
- Nur für die Konfiguration benötigter Quelltext wird kompiliert
- Belegung der Featureparameter variiert den übersetzen Quelltext.
Was sind Vorteile und Nachteile von Präprozessoren?
+ In vielen Sprachen bereits enthalten/ einfach verwendbare Tools
+ Den meisten Entwicklern bereits bekannt
+ Sehr einfaches Programmierkonzept: markieren und entfernen
+ Sehr flexibel/ ausdrucksstark, beliebige Granularität
+ Nachträgliche Einführung von Variabilität in bestehendes Programm einfach
- Vermischung von zwei Sprachen
- Kontrollfluss schwer nachvollziehbar
- Lange Annotationen schwer zu finden
- Zusätzliche Zeilenumbrüche zerstören Layout
- Vermischung von syntaktischer Variation und Programmsemantik
- Hohe Komplexität durch beliebige Schachtelung
- Fehleranfälligkeit durch Komplexität und unstrukturierten Einsatz
- Feature Code ist komplett verstreut => Feature Traceability problem
- verhindert erschwert Toolsupport.
Was ist Feature- Traceability?
Ziel: Zusammenhang zwischen Code und features explizit machen
- Im Idealfall: Pro Feature ein Modul
- Andernfalls sind Umwege und Notlösungen unausweichlich, wenn Modularisierung nicht möglich
- > Kommentare oder Annotationnen im Quelltext
- > Namenskonventionen
- > Zusätzliche Werkzeuge
Was sind Komponentensysteme?
Komponenten sind abgeschlossene, modulare Implementierungseinheiten mit fester Schnittstelle.
- Komponenten bieten Dienst an Umgebung an.
- ”” werden zusammen mit anderen kompatiblen Komponenten (auch von anderen herstellern) zu Softwaresystemen zusammengesetzt (Komposition und Aggregation)
Unterschied/Gemeinsamkeit von Komponente und Objekte/Klassen?
- Ähnliches Konzept: Kapselung, Interfaces, Geheimnisprinzip
- Objekte strukturieren ein Problem
- Komponenten bieten anwendbare Teilfunktionalität
- Objekte sind üblicherweise kleiner als Komponenten
- Objekte haben oft Abhängigkeiten zu anderen Objekten und Komponenten haben eher wenig Kopplung
- Interfaces von Objekten sind häufig Implementierungsnah; Komponenten sind eher auf einer höheren Abstraktionsebene.
Was sind Frameworks?
- Sammlung abstrakter und konkreter Klassen
- Abstrakte Struktur, die für einen bestimmten Zweck instanziiert/angepasst/erweitert werden kann.
- Wiederverwendbare Lösung für eine Problemfamilie in einer Domäne.
- Punkte, an denen Erweiterungen vorgesehen sind: hot spots (variation points, extension points)
- Umkehrung der Kontrolle, das Framework bestimmt die Aufrufreihenfolge von Diensten.
Was sind Plug-Ins
- kapseln Erweiterungen eines Frameworks
- Ermöglichen es, spezielle Funktionen bei Bedarf hinzuzufügen
- Üblicherweise getrennt vom Framework kompilierbar
Was vertseht man unter Produktlinien als Frameworks?
- Vollautomatisierung möglich
- Modular
- In der Praxis verbreitet und bewährt
- Erstellungsaufwand und Laufzeit- Overhead für Framework/Architektur
- Vorplanung nötig , erfordert Erfahrung
- Schwierige Wartung, Evolution
- Geringe Granularität oder iesige Interfaces
Was sind Crosscutting Concerns?
Nicht alle belange( Features ) in einem Programm können mittels Objekten(Komponenten, Plugins) modularisiert werden.
- Belange sind semantisch zusammenhängende Einheiten
- Aber ihre Implementierung ist häufig verstreut, vermischt und repliziert im Code.
Was ist Code Scattering und Tangling?
● Verstreuter Feature-Code (code scattering)
– Code, der zu einem Feature gehört, ist nicht modularisiert, sondern im gesamten Programm verteilt
– Häufig kopierter Code (auch wenn es je nur ein einzelner Methodenaufruf ist)
– Oder stark verteilte Implementierung von (komplementären) Teilen eines Features
● Vermischter Feature-Code (code tangling)
– Code, der zu verschiedenen Features gehört, ist in einem Modul (oder einer Methode) vermischt
Was bedeutet Dominante Dekomposition?
● Viele Belange können modularisiert werden, jedoch nicht immer gleichzeitig
– Problemstellung nur in einer Richtung modularisierbar
– Im Graph können Farben modularisiert werden…
– …dann sind aber die Datenstrukturen (Node, Edge) verteilt (oder umgekehrt)
● Entwickler wählen eine „dominante“ Dekomposition aus (z.B. Operationen, Authentifizierung, Datenstrukturen), aber einige andere Belange „schneiden quer“
● Gleichzeitige Modularisierung entlang verschiedener Dimensionen nicht möglich