Farzad Afi Logo

FarzadAfi

آموزش تخصصی برنامه نویسی

Generic in java First section

📖توضیحات درس

🎥 این ویدیو قسمت هفتاد و ششم از بوت‌کمپ رایگان جاواست. 📚 Generics in Java – مقدمه کامل و اصول پایه جنریک‌ها در این جلسه وارد یکی از مهم‌ترین مباحث پیشرفته جاوا می‌شیم: جنریک‌ها (Generics). توی این ویدیو اول از همه یک تعریف شفاف و قابل‌فهم از مفهوم جنریک ارائه می‌کنیم و بعد با مثال‌های واقعی بررسی می‌کنیم که اگه جنریک نداشتیم چه مشکلاتی به وجود میاد و چرا Type Casting با Object می‌تونه خطرناک و دردسرساز باشه. در این جلسه یاد می‌گیریم: ✨ جنریک چیست و چرا در جاوا اهمیت زیادی دارد ⚠️ مشکل‌های رایج در نبود جنریک و خطاهای احتمالی 🔄 تفاوت کدنویسی با Object و مزایای تایپ ایمنی در جنریک‌ها 🛡️ جلوگیری از ClassCastException با استفاده اصولی از Generics 📘 چرا استفاده از Generics باعث تمیزتر و قابل اعتمادتر شدن کد می‌شود در انتهای جلسه یک مرور کامل داریم تا دید بهتری نسبت به مفهوم جنریک پیدا کنید و آمادگی ورود به مباحث پیشرفته‌تر را داشته باشید. لینک داکیومنت تدریس: https://github.com/farzadafi/ProgrammingByFarzadAfi/tree/master/document/generic 💬 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi هر سوالی داشتی می‌تونی داخل گروه بپرسی؛ من یا مربی‌های گروه با حوصله کمکتون می‌کنیم 💬 🎯 بوت‌کمپ رایگان جاوا – آموزش پروژه‌محور برای یادگیری عمیق و ورود به بازار کار 🔥 اگر قصد داری مفاهیم جاوا رو اصولی و حرفه‌ای یاد بگیری، این پلی‌لیست مخصوص توئه!
00:12:01🎯رایگان

📄جزوه

مفاهیم کلیدی

  • Generics ویژگی‌ای در جاوا که به برنامه‌نویس اجازه می‌دهد نوع داده‌ها را به صورت پارامتری تعیین کند. این ابزار مانند قالب‌هایی عمل می‌کند که می‌توان آن‌ها را با انواع مختلف داده (مانند String ،Integer یا کلاس‌های سفارشی) پر کرد، بدون اینکه نیاز به بازنویسی کد باشد.

  • Type Safety تضمین امنیت نوع داده در زمان کدنویسی. این ویژگی باعث می‌شود که اشتباهات مربوط به نوع داده، به جای زمان اجرا، در همان زمان کامپایل شناسایی شوند.

  • Casting فرآیند تبدیل صریح یک شیء از نوع عمومی (مانند Object) به یک نوع خاص‌تر (مانند Person). پیش از جنریک‌ها، برای بازیابی داده‌ها از لیست‌های عمومی، استفاده از Casting الزامی بود.

  • ClassCastException یک خطا یا Exception که در زمان اجرا (Runtime) رخ می‌دهد. این خطا زمانی ایجاد می‌شود که برنامه سعی کند شیئی را به کلاسی کست کند که با آن همخوانی ندارد (مثلاً تبدیل یک خودرو به یک انسان).

  • Compile Time vs Runtime زمان کامپایل دوره‌ای است که کدهای نوشته شده توسط کامپایلر بررسی و ترجمه می‌شوند. زمان اجرا دوره‌ای است که برنامه در حال کار است. جنریک‌ها خطاها را از زمان اجرا به زمان کامپایل منتقل می‌کنند تا برنامه در حین استفاده کرش نکند.

  • Code Reusability قابلیت استفاده مجدد از کد. جنریک‌ها اجازه می‌دهند یک کلاس یا متد را یک‌بار بنویسیم و با انواع مختلف داده از آن استفاده کنیم، که این کار باعث تمیزتر شدن و بهینه شدن برنامه می‌شود.

موارد مصاحبه ای

  • چرا استفاده از Generics نسبت به استفاده از کلاس Object برتری دارد؟ هرچند کلاس Object قابلیت ذخیره هر نوع داده‌ای را فراهم می‌کند و باعث Reusability می‌شود، اما امنیت نوع ندارد. با Object خطاهای کستینگ در زمان اجرا (Runtime) مشخص می‌شوند و باعث کرش برنامه می‌شوند، اما با Generics این خطاها در زمان کامپایل (Compile-time) شناسایی می‌شوند.

  • مزایای اصلی استفاده از Generics در جاوا چیست؟ ۱. افزایش امنیت نوع (Type Safety). ۲. حذف نیاز به Explicit Casting (کست کردن دستی). ۳. شناسایی باگ‌ها در زمان کامپایل. ۴. کدنویسی تمیزتر و قابلیت استفاده مجدد.

  • Generics از کدام نسخه به جاوا اضافه شد؟ این ویژگی از نسخه Java 5 معرفی شد.

  • در چه بخش‌هایی از برنامه می‌توان از Generics استفاده کرد؟ جنریک‌ها در کلاس‌ها (مانند کلاس Stack)، متدها و اینترفیس‌ها (مانند Comparable یا Iterator) قابل استفاده هستند.

سناریو کاربردی

در این آموزش، یک کلاس DynamicArray (لیست پویا) بررسی شده است که از آرایه‌ای از جنس Object برای ذخیره داده‌ها استفاده می‌کند.

مشکل سناریو بدون جنریک: وقتی می‌خواهیم اشیایی از کلاس Person را در این لیست ذخیره کنیم، هنگام بازپس‌گیری داده، متد خروجی از جنس Object است. برای دسترسی به ویژگی‌های کلاس Person (مثلاً متد printFullName)، مجبوریم خروجی را به Person کست کنیم.

خطر جدی: اگر برنامه‌نویس به اشتباه بخواهد داده‌ای را که از جنس Person است به کلاس دیگری مثل Car کست کند، کامپایلر جاوا متوجه این اشتباه نمی‌شود. در نتیجه، برنامه اجرا شده و ناگهان در زمان اجرا با خطای ClassCastException متوقف (Crash) می‌شود.

راهکار با جنریک: با استفاده از جنریک، ما از همان ابتدا به لیست می‌گوییم که فقط اجازه ورود و خروج نوع Person را دارد. در این حالت، دیگر نیازی به نوشتن کدهای کستینگ نیست و اگر اشتباهی در نوع داده رخ دهد، کامپایلر اجازه اجرای برنامه را نمی‌دهد و همان لحظه به برنامه‌نویس هشدار می‌دهد.

بیشتر بدانید

  • کاربرد در کتابخانه‌های جاوا مفهوم جنریک به وفور در ساختار کالکشن‌های جاوا و اینترفیس‌های مهمی مثل Comparable و Function استفاده شده است.

  • تمیزی کد (Clean Code) استفاده از جنریک‌ها باعث می‌شود کدهای اضافه مربوط به تبدیل انواع (Casting) حذف شوند، که این امر منجر به خوانایی بیشتر و نگهداری آسان‌تر کد می‌شود.