AUTOSAR_AP_EXP_SWArchitecture
FIG-f25fad956c0f54b4
364 × 319 px
1 Release(s)
Figure 8.5: Example of Plugin Class Structure
SHA-256 Inhalts-Fingerabdruck:
f25fad956c0f54b4f950aa3aa978ce39e2f7923630861e3dc0c006fff192762e
✦
KI-generierte Bildanalyse & technische Beschreibung
Modell: gemini-3.8-flash (via agy) · Rezept figure-description@2 · erstellt am 2026-10-07
1. Diagrammtyp & Architektur-Kontext
- Klassifikation: UML-Klassendiagramm (Strukturdiagramm).
- Architektur-Kontext: AUTOSAR Adaptive Platform (AP), Dokument
AUTOSAR_AP_EXP_SWArchitecture(Kapitel 8, Plugin Concept). - Funktionale Einordnung: Entkopplung standardisierter Plattform-Funktionalität (Functional Clusters wie DM, UCM, IAM oder SM) von herstellerspezifischer Logik (OEM-Erweiterungen). Das Schaubild visualisiert das Strategy/Plugin-Entwurfsmuster zur Laufzeit- oder Linkzeit-Erweiterbarkeit des AP-Stacks, ohne den Plattform-Kerncode zu modifizieren.
2. Komponenten, Entitäten & Schnittstellen
- Domänen / Pakete (Boundaries):
Adaptive Platform: Standardisierte Plattformschicht, welche die Schnittstellendefinition und abstrakten Basistypen bereitstellt.Provided by OEM: Herstellerspezifische Domäne für konkrete Implementierungen und Algorithmen.
- Klassen & Signaturen:
XYPlugin(Abstrakte Basisklasse / Interface in derAdaptive Platform):+ GetID(): String: Eindeutige Kennung/Identifikator der Plugin-Instanz bzw. des Plugin-Typs.+ Operation1(): void: Parametrisierte oder zustandsverändernde funktionale Operation.+ Operation2(): int: Berechnungs- oder Statusabfrage-Operation mit ganzzahligem Rückgabewert.
a::b::PluginA(Konkrete Spezialisierung im C++-Namespacea::b, OEM-Domäne):- Realisiert / überschreibt identische Schnittstellenmethoden (
GetID,Operation1,Operation2).
- Realisiert / überschreibt identische Schnittstellenmethoden (
c::d::PluginB(Konkrete Spezialisierung im C++-Namespacec::d, OEM-Domäne):- Realisiert / überschreibt identische Schnittstellenmethoden (
GetID,Operation1,Operation2).
- Realisiert / überschreibt identische Schnittstellenmethoden (
- Beziehungen:
- Generalisierung / Vererbung:
a::b::PluginA→XYPluginundc::d::PluginB→XYPlugin(UML-Generalisierungspfeile mit geschlossener, nicht ausgefüllter Spitze; entspricht C++:public XYPlugin). - Kardinalität: 1:n – Ein definierter Plattform-Plugin-Typ kann durch beliebig viele OEM-spezifische Implementierungen spezialisiert werden.
- Generalisierung / Vererbung:
3. Dynamisches Verhalten & Sequenzablauf
- Laufzeit-Bindung & Discovery:
- Der Functional Cluster lädt das OEM-Plugin zur Initialisierungsphase entweder statisch gebunden oder dynamisch als Shared Object (
.sovia dynamischem Linker / Factory-Funktion wieCreatePlugin()).
- Der Functional Cluster lädt das OEM-Plugin zur Initialisierungsphase entweder statisch gebunden oder dynamisch als Shared Object (
- Identifikation:
- Plattform ruft synchron
GetID()auf, um das Plugin zu verifizieren und im internen Plugin-Registry gegen das Manifest abzugleichen.
- Plattform ruft synchron
- Synchroner Aufrufpfad:
- Der Plattform-Prozess hält Zeiger/Referenzen auf die Basisklasse (
std::unique_ptr<XYPlugin>bzw. Referenz) und delegiert Aufrufe polymorph anOperation1()undOperation2().
- Der Plattform-Prozess hält Zeiger/Referenzen auf die Basisklasse (
- Thread-Kontext & Fehlerpfade:
- Die Methoden laufen synchron im Thread-Kontext des aufrufenden Functional Clusters ab.
- Fehlerbehandlung erfolgt nach AP-Vorgaben über standardisierte Fehlertypen (z. B.
ara::core::Resultbzw.ara::core::ErrorCode), um Plattform-Abstürze durch unhandled Exceptions zu verhindern.
4. Normative Relevanz & Entwickler-Hinweise
- ABI- & C++-Konformität:
XYPluginfungiert als reines C++-Interface (struct/classmit rein virtuellen Methoden= 0und virtuellem Destruktorvirtual ~XYPlugin() = default;).- Bei Auslieferung als dynamische Bibliothek (
.so) müssen OEM und Plattform-Lieferant denselben Compiler-/Toolchain-Stand und dieselbe ABI nutzen (vtable-Layout, String-Implementierungara::core::String).
- Namespace-Kapselung:
- OEM-Plugins müssen in eindeutigen C++-Namespaces gekapselt sein (im Diagramm:
a::bundc::d), um Symbolkollisionen beim dynamischen Laden in denselben Adressraum zu vermeiden.
- OEM-Plugins müssen in eindeutigen C++-Namespaces gekapselt sein (im Diagramm:
- Manifest-Konfiguration & Deployment:
- Die Zuordnung der Plugin-ID (
GetID()) und des Bibliotheksnamens/Pfads muss im Execution Manifest bzw. dem jeweiligen Cluster-Konfigurationsmanifest des Ziel-Prozesses deklariert werden.
- Die Zuordnung der Plugin-ID (