Mit Hilfe einer Sammlung von Zustandsklassen werden Attribute gekapselt und darüber funktional miteinander in Verbindung gebracht. Das Framework bietet insbesondere Unterstützung für das Lifecycle-Management von Services in Verteilten Systemen.
Inhaltsverzeichnis
1. Einleitung
2. Grundlegende Begriffsdefinitionen
2.1. Zustand
2.2. Framework
2.3. Design Patterns
3. Das SDS-Projekt
3.1. SDS Container
3.2. Zustände von SDS Components
3.3. Zustände von Services
3.4. Abhängigkeiten zu verschiedenen Komponentenzuständen
4. Motivation
5. Konzeption
5.1. Modell eines Zustandsobjekts
5.2. Transitionsalgorithmus
5.3. Elementare Arten von Zustandsobjekten
5.3.1. Einfache Zustandsobjekte
5.3.2. Aggregierte Zustandsobjekte
5.3.3. Maskierte Zustandsobjekte
5.3.4. Geschaltete Zustandsobjekte
5.3.5. Strebsame Zustandsobjekte
5.4. Zusammengesetzte Arten von Zustandsobjekten
5.4.1. Kombinierte Zustandsobjekte
5.4.2. Integrierte Strebsame Zustandsobjekte
5.4.3. Gemeinsame IS-Zustandsobjekte
6. Entwurf
6.1. Klasse StateBase (Grundversion)
6.2. Klasse State
6.3. Klasse AggregateState
6.4. Klasse MaskedState
6.5. Klasse SwitchedState
6.6. Klasse StrivingState
6.7. Klassen ComboState, ISState, SharedISState und CompositeState
6.8. Klasse MaskPool für ISState
6.9. TransitionMode und ActivityHandler für StateBase
7. Anwendung im SDS Container
7.1. ComponentManager
7.2. ServiceManager
7.3. Beispielszenarien für den LifecylceState
8. Mögliche Erweiterungen
8.1. Ein weiteres Zustandsobjekt: Das Funktions-ZO
8.2. Konfiguration der Zustandsobjekte mittels Annotations und XML
9. Die Zustandsorientierte Programmierung
Zielsetzung & Themen
Die Arbeit verfolgt das Ziel, ein flexibles Software-Framework für die zustandsorientierte Programmierung zu entwickeln und zu implementieren, um das komplexe Lifecycle-Management von Software-Komponenten innerhalb eines Service-Containers in einem verteilten System zu vereinfachen und besser wartbar zu gestalten.
- Entwicklung eines Frameworks für zustandsorientierte Programmierung
- Modellierung und Implementierung verschiedener Arten von Zustandsobjekten
- Anwendung des Frameworks im SDS (Siemens Distributed System) Service-Container
- Einsatz von Design Patterns zur Strukturierung und Flexibilisierung
- Lösung von Synchronisationsproblemen durch Event-Queues und Zustandsabhängigkeiten
Auszug aus dem Buch
Die Zustandsorientierung und das Zustandsframework
Diese Ausarbeitung beschreibt ein Framework zur Unterstützung der Zustandsorientierten Programmierung. Mit zustandsorientierter Programmierung ist hier ein Programmierparadigma gemeint, das Variablen und deren Zustände in den Mittelpunkt stellt. Die Variablen werden funktional in Beziehung gesetzt. Ändert sich der Zustand einer Variablen, so werden die davon abhängigen Variablen angepasst.
Die Zustandsorientierung kann auf der Objektorientierung basieren. Genau dies ist beim hier beschriebenen Framework (im Folgenden auch Zustandsframework genannt) der Fall. Das Zustandsframework ist in der objektorientierten Programmiersprache C# entwickelt. Es umfasst hauptsächlich die Zustandsklassen und erlaubt eine zustandsorientierte Programmierung, indem Attribute von Klassen durch jene Zustandsklassen gekapselt sind. Die Zustandsklassen fungieren gewissermaßen als Container für Attribute und kontrollieren deren Zugriff, insbesondere deren Manipulation. Hierzu ein einfaches Beispiel:
class Boss { AggregateState<double> staffPerformance; void PerformanceChanged() { if (staffPerformance < 0.98) FireSomeEmployees(); } } class Employee { State<double> performance; void Work() { ... } }
Mitarbeiter (Employee) haben eine Arbeitsleistung (performance). Deren Chef (Boss) wacht über ihre durchschnittliche Arbeitsleistung (staffPerformance). Sinkt diese unter 98%, so werden ein paar Mitarbeiter entlassen. Die beiden Performance-Attribute sind eigentlich vom Typ double, werden aber durch eine sog. Einfache Zustandsklasse (State) bzw. eine Aggregierte Zustandsklasse (AggregateState) gekapselt. Im Code-Listing nicht abgebildet ist die Konfiguration der entsprechenden Zustandsobjekte. Insbesondere die Aggregierten Zustandsobjekte müssen durch eine Aggregatsfunktion zur Durchschnittsbildung parametrisiert werden und die zugehörigen Einfachen Zustandsobjekte müssen als Kind-Zustände definiert werden. Darüber hinaus ist die Methode PerformanceChanged() als sog. Transitions-Listener für staffPerformance zu definieren. Ändert sich also die durchschnittliche Arbeitsleistung der Belegschaft bzw. findet diesbezüglich ein Zustandsübergang bzw. eine Transition statt, so wird PerformanceChanged() aufgerufen.
Zusammenfassung der Kapitel
1. Einleitung: Einführung in das Paradigma der zustandsorientierten Programmierung und Vorstellung des entwickelten Frameworks sowie dessen Kontext.
2. Grundlegende Begriffsdefinitionen: Definition zentraler Begriffe wie Zustand, Framework und Design Patterns im Kontext der objektorientierten Programmierung.
3. Das SDS-Projekt: Vorstellung des verteilten Systems von Siemens, insbesondere des Service-Containers und der zu verwaltenden Zustände von Komponenten.
4. Motivation: Analyse der Komplexität des Zustandshandlings im SDS Container und Begründung, warum ein flexibles Framework notwendig ist.
5. Konzeption: Detaillierte Vorstellung des Modells für Zustandsobjekte, des Transitionsalgorithmus sowie verschiedener elementarer und zusammengesetzter Arten von Zustandsobjekten.
6. Entwurf: Konkrete Implementierung der Klassen für die verschiedenen Zustandsobjekte unter Anwendung bewährter Design Patterns.
7. Anwendung im SDS Container: Praxisbeispiel für die Integration des Frameworks in den ComponentManager und den ServiceManager zur Steuerung des Lifecycles.
8. Mögliche Erweiterungen: Ausblick auf weitere Typen von Zustandsobjekten (Funktions-ZO) und Verbesserungspotenziale durch Annotations und XML-Konfiguration.
9. Die Zustandsorientierte Programmierung: Einordnung der Arbeit in das Paradigma der zustandsorientierten Programmierung und Fazit zur Flexibilität des Frameworks.
Schlüsselwörter
Zustand, Zustandsobjekt, Framework, Zustandsübergang, Transition, SDS Container, Lifecycle-Management, C#, Design Patterns, Abhängigkeiten, Zustandsorientierte Programmierung, Komponente, Service, Event-Queue, Objektorientierung
Häufig gestellte Fragen
Worum geht es in dieser Arbeit grundsätzlich?
Die Arbeit behandelt die Entwicklung eines Software-Frameworks, das die zustandsorientierte Programmierung unterstützt. Dabei werden Variablen und deren Zustände in den Mittelpunkt gestellt, um funktionale Abhängigkeiten zwischen Attributen in einer objektorientierten Umgebung sauber zu verwalten.
Was sind die zentralen Themenfelder der Arbeit?
Die zentralen Themen sind das Modellieren und Kapseln von Zuständen, die Implementierung von Transitionslogik für zustandsabhängige Systeme, das Lifecycle-Management von Software-Komponenten in verteilten Systemen sowie die Anwendung gängiger Software-Entwurfsmuster.
Was ist das primäre Ziel der Forschungsarbeit?
Das primäre Ziel ist es, ein flexibles und wiederverwendbares Framework zu schaffen, das die komplexe Logik des Zustandsmanagements von Komponenten entkoppelt und so die Wartbarkeit und Erweiterbarkeit der Software verbessert.
Welche wissenschaftliche Methode wird verwendet?
Die Arbeit folgt dem Ansatz des Software-Engineerings. Dies beinhaltet die Analyse bestehender Anforderungen, die konzeptionelle Modellierung, den Entwurf einer Klassenstruktur basierend auf objektorientierten Design Patterns sowie deren praktische Umsetzung und Validierung in einem beispielhaften Service-Container.
Was wird im Hauptteil der Arbeit behandelt?
Der Hauptteil gliedert sich in die theoretische Konzeption von Zustandsobjekten und deren Transitionsmechanismen, die detaillierte Umsetzung dieser Konzepte in C#-Klassen und deren Anwendung auf das Lifecycle-Management im Siemens Distributed System (SDS).
Welche Schlüsselwörter charakterisieren die Arbeit?
Zustand, Zustandsobjekt, Framework, Transition, Lifecycle-Management, C#, Design Patterns, Zustandsabhängigkeit und objektorientierte Programmierung.
Wie löst das Framework das Problem von fehlerhaften Zustandsübergängen?
Das Framework verwendet Event-Queues, um Transitionsereignisse zu sammeln und in der korrekten Reihenfolge abzufeuern. Dadurch werden Probleme verhindert, die durch verschachtelte Ereignisauslöser entstehen können, bei denen Listener in einer falschen oder inkonsistenten Reihenfolge benachrichtigt würden.
Warum spielt das "Strategy Pattern" bei der Implementierung von `AggregateState` eine Rolle?
Das Strategy Pattern wird verwendet, um die Logik der Aggregation (z.B. Durchschnittsbildung oder Minimumsbestimmung) von der `AggregateState`-Klasse zu entkoppeln. Dadurch kann die Aggregatsfunktion flexibel konfiguriert und ausgetauscht werden, ohne die Kernlogik der Zustandsverwaltung anpassen zu müssen.
- Quote paper
- Christian Silberbauer (Author), 2007, Framework für Zustandsorientierte Programmierung, Munich, GRIN Verlag, https://www.grin.com/document/186431