فا

‫ برنامه‌نويسي امن با زبان جاوا – عدم استفاده مجدد از شناسه‌هاي عمومي كتابخانه استاندارد جاوا- قانون DCL01-J

شماره:IRCAR201507265
تاريخ: 16/04/94
دومين موضوعي كه در برنامه نويسي امن با زبان جاوا مورد توجه قرار مي‌گيرد اعلان‌ها و مقدار دهي اوليه است. در ادامه به دومين قانون (DCL01-J) ذيل اين موضوع پرداخته خواهد شد.
قانون DCL01-J – عدم استفاده مجدد از شناسه‌هاي عمومي كتابخانه استاندارد جاوا
از اسامي مرتبط با شناسه‌هاي عمومي نمايان، كلاس‌هاي ابزار عمومي، واسط‌ها يا بسته‌ها در كتابخانه استاندارد جاوا استفاده مجدد نكنيد.
زمانيكه توسعه دهنده نرم افزار از شناسه‌اي كه نامي يكسان با كلاس عمومي مانند Vector دارد استفاده مي‌كند، پشتيباني كننده نرم افزار ممكن است از عدم تعلق اين شناسه به java.util.Vector آگاه نبوده و ناخواسته از نوع Vector سفارشي شده به جاي كلاس java.util.Vector استفاده كند. نوع سفارشي شده Vector مي‌تواند سايۀ كلاس java.util.Vector بوده و منجر به بروز رفتار ناخواسته در برنامه شود.
توضيح عبارات ورود ساده مي‌تواند چنين مواردي را برطرف كند. با اين وجود، زماني كه از تعاريف نام هايي كه توسط بسته هاي ديگر وارد شده است استفاده مجدد مي شود، استفاده از اعلان type-import-on-demand declaration مي تواند تصميم گيري برنامه نويس براي استفاده از تعريف خاصي كه مورد نظر است را پيچيده كند. علاوه بر اين، كار متداولي كه مي‌تواند منجر به خطاهايي شود، ايجاد عبارات import بعد از نوشتن كد برنامه (و اغلب از طريق شمول عبارات import بوسيله IDE) است كه با توجه به نام‌ها ابهام بيشتري ايجاد مي‌كند. زماني كه نوع سفارشي زودتر از نوع درنظر گرفته شده در جاوا بيآيد، جستجوهاي بعدي انجام نخواهد شد. در نتيجه، نوع اشتباه مورد قبول قرار مي‌گيرد.
 
يك نمونه ناسازگار با قانون (نام كلاس)
در اين مثال، از نام كلاس java.util.Vector استفاده مجدد شده است. اين كلاس شرط متفاوتي را براي متد isEmpty() تعريف كرده است. پشتيباني كننده نرم افزار ممكن است متد isEmpty() را با متد java.util.Vector.isEmpty() اشتباه گرفته و به همين خاطر رفتار ناخواسته‌اي از برنامه بروز كند.
 
 
راه حل سازگار با قانون (نام كلاس)
اين راه حل سازگاري، از نامي ديگر براي كلاس استفاده مي‌كند تا از اشتباه شدن احتمالي كلاس كتابخانه استاندارد جاوا، با اين كلاس جلوگيري كند.
 
زماني كه توسعه دهنده، كلاس پنهان شده اصلي را كنترل مي كند، ممكن است تغيير استراتژي طراحي با توجه به مورد 16 از Bloch's Effective Java "ترجيح واسط ها به كلاس‌هاي Abstract" ترجيح داشته باشد. تغيير كلاس اصلي به واسط ، منجر به پياده سازي واسط Vector فرضي توسط كلاس MyVector مي‌شود. با اين روش، كد سمت كلاينت كه از MyVector استفاده مي‌كند با كدي كه از پياده سازي اصلي Vector استفاده مي‌كند سازگار خواهد ماند.
 
ارزيابي خطر
استفاده مجدد از شناسه‌هاي عمومي خوانايي و نگهداري كد را كاهش مي‌دهد.
 
تشخيص خودكار
يك ابزار خودكار مي‌تواند استفاده مجدد از مجموعه نام‌هايي را كه بيانگر كلاس‌هاي عمومي يا واسط هايي از كتابخانه استاندارد جاوا است به راحتي تشخيص دهد.
 
مطالب مرتبط:
برنامه‌نويسي امن با زبان جاوا – آشنايي
برنامه‌نويسي امن با زبان جاوا – قانون اعلان‌ها و مقدار دهي اوليه- قانون DCL00-J – بخش اول
 
منبع:
 

نظرات

بدون نظر
شما برای نظر دادن باید وارد شوید

نوشته

 
تاریخ ایجاد: 23 تیر 1394

دسته‌ها

امتیاز

امتیاز شما
تعداد امتیازها: 0