AUTOSAR_AP_EXP_SWArchitecture
FIG-20af53a0cf7e464c
596 × 660 px
1 Release(s)
Figure 8.12: Variant 2 - std::function
SHA-256 Inhalts-Fingerabdruck:
20af53a0cf7e464c89b037369cea633441a0905b988ebd4102f6293818cae779
✦
KI-generierte Bildanalyse & technische Beschreibung
Modell: gemini-3.8-flash (via agy) · Rezept figure-series@1 · erstellt am 2026-10-08
1. Diagrammtyp & Architektur-Kontext
- Klassifikation: UML-Sequenzdiagramm mit kombinierten Fragmenten (
loop) und Schachtelung von Lebenslinien in eine Prozess-/Komponentengrenze (Application). - Architektur-Kontext: AUTOSAR Adaptive Platform (AP), Release R24-11, Dokument
AUTOSAR_AP_EXP_SWArchitecture(Kapitel 8, Service Implementation Patterns). - Technischer Zweck: Spezifikation des Entwurfsmusters Variant 2 – std::function zur Bereitstellung und Ausführung von Service-Methoden im ARA-Kontext (im Kontrast zu Variant 1 – Skeleton Approach via Vererbung). Dargestellt wird der Lebenszyklus aus Callback-Registrierung, Service-Ankündigung (
Offer), Request-Dispatching via Callable/Funktor und kontrolliertem Service-Rückzug (StopOffer).
2. Komponenten, Entitäten & Schnittstellen
- Akteure & Lebenslinien:
Application(äußerer Begrenzungsrahmen): Prozess-/Adressraum-Grenze der Adaptive Application.Application(Lebenslinie innerhalb der Grenze): Anwendungslogik / Client-Code des Service-Providers.:Service(Lebenslinie innerhalb der Grenze): Instanz des generierten Service-Schnittstellenobjekts (Provider-Wrapper / Dispatcher).Functional Cluster(Lebenslinie außerhalb der Grenze): Plattform-Infrastrukturkomponente der Adaptive Platform (z. B. Communication Management Daemon / Binding / Runtime Broker).
- Schnittstellen & Methoden:
RegisterCallback(function): Synchrones lokales API zur Injektion eines aufrufbaren Objekts (std::function, Lambda oder Funktionszeiger).Offer(): Result: Synchroner Methodenaufruf zur Veröffentlichung des Service-Angebots; liefertara::core::Result<void>.executeCallback(): T: Interne Dispatch-Methode der Service-Instanz zur Auswertung und Rückgabe des ErgebnistypsT.operator(): Aufruf-Operator der übergebenenstd::function-Instanz zur Übergabe des Methodenkontexts an die Applikationslogik.StopOffer(): Lokale API-Methode zur Rücknahme der Service-Sichtbarkeit.
- Stereotypen:
«aapInformative»: Markiert Plattform-interne bzw. stack-spezifische Interaktionen (notify about offer(),enableServiceRequests(),request service(),disableServiceRequests(),notify about stopoffer()), die nicht normativ für die Anwendungs-API, sondern implementationsspezifisch für das Binding zum Functional Cluster sind.
3. Dynamisches Verhalten & Sequenzablauf
Phase 1: Registrierung & Service-Offer
Applicationruft synchronRegisterCallback(function)auf:Serviceauf. Die Callback-Referenz wird im Service-Objekt gebunden.ApplicationinitiiertOffer(): Resultauf:Service.:Servicebenachrichtigt die Plattform vianotify about offer()(«aapInformative»anFunctional Cluster).:Serviceführt die interne AktivierungenableServiceRequests()aus («aapInformative»).:ServiceantwortetApplicationmit dem AusführungsergebnisResult.
Phase 2: Service Request Handling (loop-Fragment)
- Ein Service-Konsument triggert über die Middleware eine Anfrage;
Functional Clusterleitetrequest service()(«aapInformative») synchron an:Serviceweiter. :Servicestößt internexecuteCallback(): Tan.:Serviceinvozierte das registrierte Callback überoperator()synchron auf der LebenslinieApplication.Applicationverarbeitet die Nutzdaten und kehrt mit dem Ergebnis (TypT) zurück.:Servicesendet die Antwortnachricht/den Return-Pfad anFunctional Clusterzurück.
Phase 3: Deregistrierung & Service-Terminierung
ApplicationruftStopOffer()auf:Serviceauf.:Servicedeaktiviert überdisableServiceRequests()(«aapInformative») die Entgegennahme weiterer Requests.:Servicesendetnotify about stopoffer()(«aapInformative») anFunctional Clusterzur Entfernung aus der Service-Registry.:Servicekehrt zuApplicationzurück.
4. Normative Relevanz & Entwickler-Hinweise
- Entkopplung vs. Vererbung: Entwickler müssen für Service-Provider keine abstrakte Skeleton-Basisklasse ableiten (
Variant 1), sondern können Methodenimplementierungen per Komposition (std::function, Funktoren, Member-Funktionszeiger viastd::bindoder C++-Lambdas) dynamisch binden. Dies erleichtert Unit-Testing und Mocking. - Lebenszyklus-Vertrag:
RegisterCallback()muss zwingend vorOffer()aufgerufen werden. EinOffer()ohne vorher registrierten Callback führt im Request-Pfad zu undefiniertem Verhalten (z. B.std::bad_function_call) oder einem standardisierten ARA-Fehlercode.- Nach
StopOffer()eingehende Service-Requests müssen durch den internen GuarddisableServiceRequests()verworfen oder mit Fehler abgewiesen werden.
- Thread-Safety & Reentrancy: Der Aufruf von
operator()erfolgt im Thread-Kontext des Service-Dispatchers/Bindings (Functional Cluster). Die inApplicationbereitgestellte Lambda/Funktion muss reentrant und threadsicher sein, sofern das Service-Binding Multithreading für parallele Client-Requests nutzt. - Speicher- und Copy-Overhead: Im Gegensatz zu virtuellen Methodenaufrufen (
Variant 1) kannstd::functionje nach Größe des Capture-Objekts Heap-Allokationen (Small Buffer Optimization beachten!) und zusätzliche Indirektionskosten verursachen; für harte Echtzeitpfade auf AP-Targets ist der Footprint des Bindings zu profilieren.
Zugeordnete Anforderungen
Diese Angaben zeigt der Versions-Explorer.