AUTOSAR_AP_EXP_ARARustApplications
FIG-199b911f6d5f62dd
401 × 383 px
1 Release(s)
Figure 6.8: Detailed representation of generic trait and implementation
SHA-256 Inhalts-Fingerabdruck:
199b911f6d5f62ddb899531a4703d46fd97d68cf0a15e01615fa16cb7918573c
✦
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-Klassendiagramm unter Verwendung des AUTOSAR-spezifischen UML-Profils für Rust-Sprachkonstrukte (Stereotypen
«Trait»,«Struct»,«impl»mit Template-Bindungen). - Architektur-Kontext: AUTOSAR Adaptive Platform (AP), Dokument
AUTOSAR_AP_EXP_ARARustApplications(Releases R23-11, R24-11), Kapitel zur formalen UML-Repräsentation von Rust-Code. - Technischer Zweck: Spezifikationsmuster zur Abbildung von parametrischer Polymorphie (Generics), Trait-Bounds (
Send,Display), Lifetimes ('a) und entkoppelten Implementierungsblöcken (impl Trait for Struct) im modellbasierten Architekturentwurf für Rust-basierte Adaptive Applications (ARA).
2. Komponenten, Entitäten & Schnittstellen
«Trait» Module3::Trait2:- Stereotyp & Modul:
«Trait»im Namespace/ModulModule3(Modellierung eines Rust-Traits als Interface-Konstrukt). - Generischer Parameter: Template-Parameter
T(im gestrichelten Parameter-Kasten). - Operationen:
+ convert_to(T): void– öffentliche Trait-Methode mit Übergabeparameter vom TypTund Rückgabetypvoid(entspricht()/ Unit in Rust).
- Stereotyp & Modul:
«Struct» Module3::Struct1:- Stereotyp & Modul:
«Struct»im Namespace/ModulModule3(Modellierung einer Rust-Datenstruktur). - Generischer Parameter & Bound:
T > Send(Notation für Trait-Bound-ConstraintT: Send, erzwingt Thread-Sicherheit bezüglich Ownership-Transfer). - Attribute:
+ var1: &'a T– öffentliches Feld mit expliziter Lifetime-Annotation'aauf eine unveränderliche Referenz vom TypT.
- Stereotyp & Modul:
«impl» Module3:- Stereotyp:
«impl»(Repräsentation eines konkreten Rust-Implementierungsblocks). - Beziehungen / Kanten:
- Realisierungspfeil (gestrichelt mit geschlossener, nicht ausgefüllter Spitze) zu
Module3::Trait2: Spezifiziert die Trait-Implementierung mit Parameter-Bindung< T->String >(Bindung des Trait-ParametersTanString). - Assoziations-/Bindungslinie (durchgezogen) zu
Module3::Struct1: Verbindet den Implementierungsblock mit der Zielstruktur unter Verschärfung der Typschranken auf< T->Send + Display >.
- Realisierungspfeil (gestrichelt mit geschlossener, nicht ausgefüllter Spitze) zu
- Stereotyp:
- Generierte Rust-Code-Entsprechung:
impl<'a, T> Module3::Trait2<String> for Module3::Struct1<'a, T> where T: Send + Display, { fn convert_to(&self, arg: String) { // Implementierung } }
3. Dynamisches Verhalten & Sequenzablauf
- Entfällt: Reines statisches Typ- und Strukturmodell.
- Compile-Time-Dispatch: Die Bindungen werden zur Übersetzungszeit monomorphisiert (
static dispatch). Es entsteht kein virtueller Methoden-Overhead (vtable/dyn Trait). - Kompilierzeit-Restriktionen: Typen, die für
Struct1instanziiert werden, müssen zur Compile-Zeit die Trait-KombinationSend + Displayerfüllen, andernfalls wird die Instanziierung vonconvert_todurch den Compiler (rustc) abgewiesen.
4. Normative Relevanz & Entwickler-Hinweise
- UML-zu-Rust-Modellierungsrichtlinie:
- In AUTOSAR Adaptive für Rust existiert keine C++-artige Klassenvererbung. Vererbungs- und Implementierungsbeziehungen müssen zwingend über explizite
«impl»-Artefakte modelliert werden, die Trait und Zielstruktur trennen.
- In AUTOSAR Adaptive für Rust existiert keine C++-artige Klassenvererbung. Vererbungs- und Implementierungsbeziehungen müssen zwingend über explizite
- Verschärfung von Trait-Bounds:
- Das Schaubild demonstriert normativ, dass ein
«impl»-Block restriktivere Bounds fordern darf als die Struktur selbst (Struct1verlangt primär nurSend, die Trait-ImplementierungTrait2<String>verlangt zusätzlichDisplay).
- Das Schaubild demonstriert normativ, dass ein
- Lifetime- und Referenzsemantik:
- Lifetimes (
'a) sind expliziter Bestandteil der UML-Typdefinition (&'a T). Code-Generatoren müssen daraus korrekte Lifetime-Parameter (<'a, T>) ableiten, um den Anforderungen des Rust Borrow-Checkers im generierten ARA-Stack zu genügen.
- Lifetimes (