AUTOSAR_AP_EXP_ARARustApplications
FIG-221e855edb7f7922
375 × 334 px
2 Release(s)
Figure 6.5: Trait and implementation
SHA-256 Inhalts-Fingerabdruck:
221e855edb7f79220889a04a02b5fed7d0f134ed1b5c929aa8a4ee9eb7bcbb4a
✦
KI-generierte Bildanalyse & technische Beschreibung
Modell: gemini-3.8-flash (via agy) · Rezept figure-description@2 · erstellt am 2026-10-07
Backing command execution to allow git status check to complete.
1. Diagrammtyp & Architektur-Kontext
- Klassifikation: UML-Klassendiagramm / Metamodell-Mapping mit Rust-spezifischen UML-Stereotypen (
«Trait»,«Struct»,«impl»). - Architektur-Kontext: AUTOSAR Adaptive Platform (AP), Dokument
AUTOSAR_AP_EXP_ARARustApplications(Dokument-ID 1079), Kapitel 6.6.5 (Traits and impl blocks), gültig für Releases R23-11 und R24-11. - Funktionaler Zweck: Formale Abbildung des Rust-Typsystems auf UML. Da Rust keine objektorientierte Klassenvererbung kennt, sondern Datenstrukturen (
struct) und Schnittstellenverträge (trait) strikt über getrennte Implementierungsblöcke (impl Trait for Type) entkoppelt, definiert dieses Diagramm die UML-Modellierungssemantik für explizite Implementierungsblöcke inklusive deren Modullokation (Module Scoping und Rust-Kohärenz-/Orphan-Regeln).
2. Komponenten, Entitäten & Schnittstellen
«Trait» module2::Trait1:- Stereotyp:
«Trait»(UML-Schnittstellenäquivalent). - Gültigkeitsbereich: Modul
module2. - Schnittstellenelemente: Öffentliche Operation/Signatur
+ func1(Deklaration der Trait-Methode ohne inhärenten Rumpf).
- Stereotyp:
«Struct» module1::MyStruct2:- Stereotyp:
«Struct»(Repräsentiert den konkreten Rust-Datentyp /struct). - Gültigkeitsbereich: Modul
module1.
- Stereotyp:
«impl» module2:- Stereotyp:
«impl»(Repräsentiert den konkreten Implementierungsblockimpl Trait1 for MyStruct2). - Physische Lokation: Liegt explizit im Modul
module2.
- Stereotyp:
- Beziehungen & Konnektoren:
- Interface Realization (gestrichelte Linie mit geschlossener, nicht ausgefüllter Dreiecksspitze): Führt von
«impl» module2zu«Trait» module2::Trait1. Kennzeichnet die Realisierung des durch den Trait definierten Funktionsvertrags. - Assoziation / Typ-Bindung (durchgezogene Linie): Verbindet
«impl» module2mit«Struct» module1::MyStruct2. Kennzeichnet den konkreten Zieltyp, für den der Trait implementiert wird. - Rust-Kohärenz / Orphan Rule: Die Zuweisung des
«impl»-Blocks zumodule2modelliert grafisch, dass die Implementierung im Modul des Traits stattfindet (erlaubt nach Rust-Orphan-Rules, daTrait1lokal inmodule2deklariert ist, währendMyStruct2viause crate::module1::MyStruct2;importiert wird).
- Interface Realization (gestrichelte Linie mit geschlossener, nicht ausgefüllter Dreiecksspitze): Führt von
3. Dynamisches Verhalten & Sequenzablauf (falls zutreffend)
- Statisches Bindungsmodell: Rein strukturelles Modell ohne Laufzeit-Zustandsübergänge.
- Compile-Zeit-Auflösung (Monomorphisierung):
- Bei statischem Dispatch (
fn call<T: Trait1>(val: T)) löst der Compiler Methodenaufrufe vonfunc1()direkt auf Maschinencodeebene ohne Indirektion oder Laufzeit-Overhead auf.
- Bei statischem Dispatch (
- Dynamischer Dispatch (Trait Objects):
- Bei Verwendung als
dyn Trait1generiert der Compiler fürMyStruct2eine VTable, deren Funktionszeiger aufmodule2::Trait1::func1verweist.
- Bei Verwendung als
- Fehlerbehandlung: Keine AUTOSAR-spezifischen Laufzeit-Fehlerpfade (DET/DEM); Typprüfung und Gültigkeit der Implementierung erfolgen vollständig zur Übersetzungszeit durch
rustc.
4. Normative Relevanz & Entwickler-Hinweise
- UML-Modellierungskonvention für AP-Rust:
- Die dreiteilige Repräsentation (
«Trait»←«impl»-«Struct») ist die normative Langform. Sie wird zwingend benötigt, sobald:- Der Implementierungsblock in einem anderen Modul als die Struktur liegt (Darstellung der Modul-Zugehörigkeit).
- Zusätzliche Trait Bounds oder Generics spezifiziert werden müssen (z. B.
impl<T: Send> Trait2<String> for Struct1<T>, vgl. Kap. 6.6.6).
- Für rein triviale, modul-lokale Bindungen erlaubt die Spezifikation alternativ eine vereinfachte Kurzform (direkte Realisierungspfeil-Verbindung von
«Struct»auf«Trait»).
- Die dreiteilige Repräsentation (
- Auswirkung auf Anwendungs- und Stack-Entwickler:
- Scope-Sichtbarkeit: Um
func1auf einer Instanz vonMyStruct2aufrufen zu können, muss der Aufrufer den Trait explizit in den Scope importieren (use module2::Trait1;), sofern es sich nicht um eine Inherent-Methode handelt. - Codegenerierung / Toolchain: Modellierungs-Tools und Generatoren für AUTOSAR AP Rust müssen aus dieser Triade exakt den Codeblock generieren:
use crate::module1::MyStruct2; impl Trait1 for MyStruct2 { fn func1() { /* ... */ } }
- Scope-Sichtbarkeit: Um
Zugeordnete Anforderungen
Diese Angaben zeigt der Versions-Explorer.