09982292579
info@mehraeen.ac.ir
فارسی پرچم
فارسی
یک زبان را انتخاب کنید
فارسی پرچم
فارسی
0
دسته ها
خانه تقویم‌آموزشی مدرس وبلاگ چارت‌‌دروس تماس‌با‌ما درباره‌ما انجمن‌ها
برنامه سازی پیشرفته

جلسه 13مدیریت خطا و استثنا 

خلاصه نکات کلیدی : هدف اصلی: جلوگیری از کرش کردن ناگهانی برنامه و ارائه بازخورد مناسب به کاربر یا ثبت خطا برای رفع اشکال. تمایز: بین خطاهای نحوی (که کامپایلر می‌گیرد) و خطاهای زمان اجرا (که برنامه در حال اجرا با آن‌ها مواجه می‌شود) تفاوت قائل شوید. استثناءها بخشی از خطاهای زمان اجرا هستند. try و catch/except: این دو بلوک، هسته اصلی مدیریت استثناء هستند. try کدی را که ممکن است مشکلی ایجاد کند در بر می‌گیرد و catch/except واکنشی است به مشکلی که رخ داده است. finally: همیشه اجرا می‌شود. این بلوک برای کارهایی مانند بستن فایل یا آزادسازی حافظه بسیار حیاتی است، زیرا تضمین می‌کند که این اقدامات حتی اگر خطایی رخ دهد، انجام شوند. استثناءهای سفارشی: وقتی خطاهای پیش‌فرض زبان کافی نیستند، می‌توانید خطاهای خودتان را تعریف کنید تا وضعیت‌های خاص برنامه را بهتر نشان دهید. پیام‌های خطا: پیام‌های خطا نباید فقط برای برنامه‌نویسان قابل فهم باشند، بلکه باید به کاربر نهایی نیز در درک مشکل کمک کنند. کنترل جریان: از استثناءها برای کنترل عادی جریان برنامه استفاده نکنید. به عنوان مثال، اگر انتظار دارید یک ورودی عددی باشد، نباید از استثناء برای مدیریت حالتی که کاربر متن وارد می‌کند استفاده کنید، بلکه باید ورودی را اعتبارسنجی کنید.
  1. مقدمه و اهمیت مدیریت خطا:


  • تعریف خطا (Error) و استثناء (Exception).

  • چرا مدیریت خطا مهم است؟ (پایداری نرم‌افزار، تجربه کاربری بهتر، اشکال‌زدایی آسان‌تر).

  • تفاوت بین خطا و استثناء در زبان‌های برنامه‌نویسی مختلف.


  1. انواع خطاها:


  • خطاهای زمان کامپایل (Compile-time Errors): خطاهای نحوی (Syntax Errors)، خطاهای معنایی (Semantic Errors).

  • خطاهای زمان اجرا (Run-time Errors):

  • خطاهای منطقی (Logic Errors): برنامه اجرا می‌شود اما خروجی نادرست است.

  • خطاهای پیش‌بینی نشده (Unexpected Errors): مانند تقسیم بر صفر، دسترسی به حافظه نامعتبر، خطای I/O.


  1. مفهوم استثناء (Exception):


  • استثناء به عنوان یک رویداد غیرمنتظره در زمان اجرا که اجرای عادی برنامه را مختل می‌کند.

  • تفاوت استثناء با خطاهای معمول.


  1. چرخه حیات مدیریت استثناء (Exception Handling Lifecycle):


  • ایجاد (Throwing/Raising): زمان وقوع یک استثناء.

  • انتشار (Propagation): استثناء از یک تابع به تابع فراخواننده (caller) منتقل می‌شود.

  • دریافت و مدیریت (Catching/Handling): بلاکی از کد که استثناء را دریافت و پردازش می‌کند.


  1. تکنیک‌های مدیریت استثناء:


  • بلوک try-catch (یا try-except):

  • مفهوم try: کدی که ممکن است باعث بروز استثناء شود.

  • مفهوم catch/except: کدی که استثناء را مدیریت می‌کند.

  • مدیریت انواع مختلف استثناءها.

  • دسته‌بندی استثناءها (مثلاً خطاهای ورودی/خروجی، خطاهای محاسباتی، خطاهای شبکه).

  • بلوک finally:

  • اجرای کد بدون توجه به رخ دادن یا عدم رخ دادن استثناء (مناسب برای آزادسازی منابع).

  • ایجاد استثناءهای سفارشی (Custom Exceptions):

  • زمان و دلیل ایجاد استثناءهای سفارشی.

  • نحوه تعریف و استفاده از آن‌ها.


  1. بهترین شیوه‌ها (Best Practices):


  • مدیریت استثناءها در سطوح مناسب.

  • نوشتن پیام‌های خطای گویا و مفید.

  • پرهیز از نادیده گرفتن استثناءها (Empty Catch Blocks).

  • آزادسازی منابع (مانند فایل‌ها، اتصالات شبکه) در بلوک finally یا با استفاده از روش‌های مدیریت منابع خودکار (مانند using در C# یا try-with-resources در Java).

  • استفاده از استثناءها برای شرایط استثنایی، نه برای کنترل جریان برنامه.


خلاصه نکات کلیدی :


  • هدف اصلی: جلوگیری از کرش کردن ناگهانی برنامه و ارائه بازخورد مناسب به کاربر یا ثبت خطا برای رفع اشکال.

  • تمایز: بین خطاهای نحوی (که کامپایلر می‌گیرد) و خطاهای زمان اجرا (که برنامه در حال اجرا با آن‌ها مواجه می‌شود) تفاوت قائل شوید. استثناءها بخشی از خطاهای زمان اجرا هستند.

  • try و catch/except: این دو بلوک، هسته اصلی مدیریت استثناء هستند. try کدی را که ممکن است مشکلی ایجاد کند در بر می‌گیرد و catch/except واکنشی است به مشکلی که رخ داده است.

  • finally: همیشه اجرا می‌شود. این بلوک برای کارهایی مانند بستن فایل یا آزادسازی حافظه بسیار حیاتی است، زیرا تضمین می‌کند که این اقدامات حتی اگر خطایی رخ دهد، انجام شوند.

  • استثناءهای سفارشی: وقتی خطاهای پیش‌فرض زبان کافی نیستند، می‌توانید خطاهای خودتان را تعریف کنید تا وضعیت‌های خاص برنامه را بهتر نشان دهید.

  • پیام‌های خطا: پیام‌های خطا نباید فقط برای برنامه‌نویسان قابل فهم باشند، بلکه باید به کاربر نهایی نیز در درک مشکل کمک کنند.

  • کنترل جریان: از استثناءها برای کنترل عادی جریان برنامه استفاده نکنید. به عنوان مثال، اگر انتظار دارید یک ورودی عددی باشد، نباید از استثناء برای مدیریت حالتی که کاربر متن وارد می‌کند استفاده کنید، بلکه باید ورودی را اعتبارسنجی کنید.


تمرین پایان فصل:



















  1. پیاده‌سازی try-catch: برنامه‌ای بنویسید که از کاربر یک عدد دریافت کند و سپس آن را بر عدد دیگری (مثلاً 0) تقسیم کند. این تقسیم باید درون یک بلوک try قرار گیرد و خطای تقسیم بر صفر باید در بلوک catch/except مدیریت شود. در صورت بروز خطا، یک پیام مناسب به کاربر نمایش داده شود.

  2. استفاده از finally: در تمرین قبل، یک بلوک finally اضافه کنید که پیامی مانند “عملیات تقسیم به پایان رسید.” را نمایش دهد، صرف نظر از اینکه خطا رخ داده باشد یا خیر.

  3. ایجاد استثناء سفارشی: تابعی بنویسید که سن کاربر را دریافت کند. اگر سن کمتر از 0 یا بیشتر از 120 بود، یک استثناء سفارشی (مثلاً InvalidAgeError) ایجاد کند. این تابع باید درون یک بلوک try-catch فراخوانی شود تا این استثناء سفارشی را دریافت و مدیریت کند.
درس متنی 13/19
در حال مشاهده
جلسه 13مدیریت خطا و استثنا