يجمع خصائص مشغلات العتاد في كائن قيمة آمن من الاستثناءات لتمريره إلى واجهات SHWA.
السياق
تُعد الفئة ara::shwa::PropertyList جزءاً من الوحدة shwa (Smart Hardware Actuator) ضمن AUTOSAR Adaptive Platform. تحدد المواصفة هذا النوع كفئة نهائية (class PropertyList final)، مما يستبعد مسبقاً الاشتقاق من قِبل فئات المستخدم. ويتمثل الدور الأساسي للفئة في تجميع الخصائص وتمريرها بشكل منظم. عبر قالب المنشئ [AP_SWS_SHWA_00802]، تستقبل الفئة عدداً متغيراً من كائنات الخصائص. تفسير: يُرجح أن تعمل الفئة داخل الوحدة كحاوية تجميع آمنة للأنماط تلخص التكوينات غير المتجانسة أو سمات العتاد للمشغلات والمستشعرات وتمررها إلى الواجهات المعالجة. سؤال Q-70687f2df4a18776 (مفتوح)
في إطار التفاعل مع المكونات الأخرى، تعمل الفئة كناقل للمعلومات. يجمع المستدعي الخصائص الخاصة بالتطبيق، بينما يستقبل النظام الفرعي SHWA هذه القوائم للتحكم في العمليات القريبة من العتاد. ونظراً لأن تعريف الفئة نهائي، تشكل PropertyList بنية بيانات مغلقة تمنع التسلسل الهرمي المباشر للتوارث وبالتالي تفرض دلالات موحدة عند تمرير المعلمات.
دورة الحياة
تبدأ دورة حياة مثيل من ara::shwa::PropertyList بالتهيئة المباشرة عبر المنشئ متغير الوسائط template <typename... Properties> PropertyList(Properties... props) وفقاً لـ [AP_SWS_SHWA_00802]. وبفضل الإعلان باستخدام noexcept، يُضمن أن إنشاء مثيل يتم بأمان تام من الاستثناءات مع مراعاة أمان الاستثناءات (Exception Safety) ([AP_SWS_SHWA_00802]). وإذا حدثت أخطاء أثناء تمرير المعلمات أو المعالجة الداخلية، يؤدي ذلك بسبب ضمان noexcept إلى إنهاء البرنامج المباشر عبر std::terminate، في حال قامت العمليات الأساسية برمي استثناءات.
فيما يتعلق بسلوك التزامن، تحدد المواصفة أن الفئة ليست آمنة خيطياً (not thread-safe) ([AP_SWS_SHWA_00802]). وهذا يعني أنه لا يجوز استخدام المثيلات من قِبل خيوط متعددة في الوقت نفسه أثناء إنشائها وخلال جميع العمليات اللاحقة دون آليات مزامنة خارجية. تفسير: يُرجح عادةً إنشاء مثيلات PropertyList ككائنات قيمة محلية (Value Objects) على المكدس أو تمريرها عبر دلالات النقل (Move-Semantik) إلى الدوال المستدعاة، مما يحقق ملكية خاصة بالخيوط دون حالة مشتركة. سؤال (مفتوح)
تتبع نهاية دورة الحياة القواعد المعتادة لكائنات C++ التلقائية أو الديناميكية. ونظراً لعدم وجود مدمرات افتراضية أو توارث، يتم تحرير كافة الموارد المتضمنة بشكل حتمي عند تدمير الكائن.
مسار الاستخدام
يتضمن مسار الاستخدام المعتاد لـ ara::shwa::PropertyList تجميع الخصائص ذات الصلة وتمرير الكائن المجمع إلى النظام الفرعي SHWA:
- إنشاء المثيل: ينشئ المستخدم كائناً من الفئة عن طريق تمرير الخصائص المطلوبة مباشرةً إلى المنشئ متغير الوسائط ([AP_SWS_SHWA_00802]). وبفضل القالب، يمكن دمج أنواع خصائص مختلفة بما يتوافق مع الأنواع في استدعاء واحد.
- التمرير: يتم تمرير المثيل الذي تم إنشاؤه إلى الدوال أو الواجهات الهدف المقابلة للوحدة
shwa. تفسير: بعد البناء، يُفترض أن يكون الوصول إلى القيم المجمعة للقراءة فقط من قِبل المكونات المعالجة للنظام الفرعي للعتاد. سؤال Q-350de0ec77d53e28 (مفتوح)
- التنظيف: بعد اكتمال المعالجة أو عند مغادرة نطاق الصلاحية، يتم تدمير المثيل تلقائياً دون الحاجة إلى خطوات إلغاء تهيئة صريحة.
سيناريوهات الأخطاء
نظراً لأن منشئ ara::shwa::PropertyList معلن صراحة كـ noexcept، فلا تحدث استثناءات C++ عند الاستدعاء ([AP_SWS_SHWA_00802]). تم تحديد أمان الاستثناءات صراحةً في مواصفات المتطلبات كـ exception safe ([AP_SWS_SHWA_00802]). وبالتالي، لا يتعين على المستخدمين وضع كتل try-catch حول بناء قوائم الخصائص.
يكمن سيناريو خطأ جوهري في تجاهل أمانية الخيوط. ونظراً لأن PropertyList مصنفة كـ not thread-safe وفقاً لـ [AP_SWS_SHWA_00802]، فإن الوصول المتزامن غير المحمي لعدة مسارات تنفيذ إلى المثيل نفسه يؤدي إلى حالات تسابق (Race Conditions) وسلوك غير محدد. يجب على المطورين التأكد من تشغيل المثيلات إما بشكل محلي داخل الخيط حصرياً أو حمايتها من عمليات الوصول المتزامنة باستخدام بدائيات مزامنة مناسبة مثل كائنات المزامنة (Mutexe).
تم إنشاء هذا الدليل بواسطة ذكاء اصطناعي استنادًا إلى مواصفات AUTOSAR R25-11.
gemini-3.8-flash-low· 2026-10-13 · الأصل الألماني