شماره:IRCAR201507266
تاريخ: 31/04/94
دومين موضوعي كه در برنامه نويسي امن با زبان جاوا مورد توجه قرار ميگيرد اعلانها و مقدار دهي اوليه است. در ادامه به سومين قانون (DCL02-J) ذيل اين موضوع پرداخته خواهد شد.
قانون DCL02-J – عدم تغيير مولفههاي مجموعه در حين استفاده از عبارت for بهبود يافته
عبارت for بهبود يافته براي تكرار(iteration) از طريق مجموعهها و آرايهها طراحي شده است.
مشخصات زبان جاوا (JLS) مثال زير را براي عبارت for بهبود يافته ارائه كرده است:
قالب عبارت for بهبود يافته با عبارت for پايهاي يكي است:
#i، شناسه اي است كه به صورت خودكار توليد شده است و از هر شناسه ديگري در محدوده اي (Scope) كه در آن عبارت for بهبود يافته وجود دارد متمايز است.
برخلاف عبارت for پايهاي، انتسابها به متغير حلقه نميتواند ترتيب تكرار حلقه را براي مجموعه شيهاي مربوطه تحت تاثير قرار دهد. در نتيجه، انتساب مقداري به متغير حلقه معادل تغيير متغيري محلي در بدنه حلقه است كه مقدار اوليه آن متغير محلي، همان شيء است كه توسط متغير تكرار حلقه مورد ارجاع قرار مي گيرد. اين تغيير لزوماً نادرست نيست اما ميتواند منجر به ابهام در عملكرد حلقه يا برداشت اشتباه در پياده سازي عبارت for بهبود يافته گردد.
تمام متغيرهاي حلقۀ عبارت for بهبود يافته را به صورت final اعلان كنيد. اعلان به صورت final منجر به برچسب زدن و رد كردن هر انتسابي به متغير حلقه توسط كامپايلرهاي جاوا مي شود.
يك نمونه ناسازگار با قانون
در اين مثال مجموعهاي از اعداد صحيح با استفاده از حلقه for بهبود يافته پردازش ميشود. هدف از اين برنامه، تغيير مولفهاي در مجموعه در حال پردازش است:
همانطور كه خروجي اين برنامه نشان ميدهد، اين كد محتواي ليست را تغيير نميدهد:
راه حل سازگار با قانون
اعلان متغير i به صورت final منجر به عدم اجازۀ انتساب مقدار جديدي به متغير i توسط كامپايلر ميشود:
راه حل سازگار با قانون
در اين راه حل، ليست "تغييريافته" پردازش شده اما ليست اصلي بدون تغيير باقي ميماند:
ارزيابي خطر
انتساب مقادير به متغير حلقۀ يك حلقه for بهبود يافته ترتيب كلي تكرار را تحت تاثير قرار نميدهد، منجر به اشتباه كردن برنامه نويس ميشود، و ميتواند داده را در حالتي شكننده يا ناسازگار قرار دهد.
تشخيص خودكار
اين قانون با تحليل استاتيك به راحتي اعمال ميشود.
مطالب مرتبط:
برنامهنويسي امن با زبان جاوا – آشنايي
برنامهنويسي امن با زبان جاوا – قانون اعلانها و مقدار دهي اوليه- قانون DCL00-J – بخش اول
برنامهنويسي امن با زبان جاوا – قانون اعلانها و مقدار دهي اوليه- قانون DCL00-J – بخش دوم
برنامهنويسي امن با زبان جاوا – عدم استفاده مجدد از شناسههاي عمومي كتابخانه استاندارد جاوا- قانون DCL01-J
منبع:
نظرات