جلسه شماره 20رایگان

OOP in Java Fourth Section | شی گرایی در جاوا قسمت چهارم

02:19:31

توضیحات جلسه

🎥 این ویدیو قسمت بیستم از بوت‌کمپ رایگان جاواست. 🧩 آموزش شی‌گرایی در جاوا – قسمت چهارم 📝 در این قسمت وارد یکی از مفاهیم کلیدی و عمیق دنیای شی‌گرایی می‌شویم: انتزاعی‌سازی (Abstraction). 🔍 یاد می‌گیریم چطور با مخفی کردن جزئیات پیاده‌سازی و فقط نمایش رفتار مورد نیاز، برنامه‌ای انعطاف‌پذیرتر و قابل نگهداری‌تر بنویسیم. 🧠 سپس با مفاهیم بسیار مهمی مثل ثابت‌ها (Constants)، Interface، و تفاوت کلاس انتزاعی (Abstract Class) با Interface آشنا می‌شیم. 🛠️ در طول مسیر، با تمرین‌های عملی متعدد این مفاهیم رو به‌صورت کاربردی و پروژه‌محور یاد می‌گیریم و درک عمیق‌تری از طراحی شی‌گرا پیدا می‌کنیم. 💻 سورس‌کد این قسمت در گیت‌هاب: 🔗 github.com/farzadafi/ProgrammingByFarzadAfi/tree/master/src/l_oop 👥 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi ❓ اگه سوالی داشتی، می‌تونی توی گروه بپرسی؛ خودم یا مربی‌های گروه همراهت هستیم 🎓 بوت‌کمپ رایگان جاوا – آموزش تمرین‌محور برای یادگیری عمیق و ورود به بازار کار.

جزوه و مستندات

مفاهیم کلیدی

Abstraction

انتزاع (Abstraction) فرایندی است که در آن جزئیات پیاده‌سازی از کاربر پنهان می‌شوند و فقط عملکردهای اصلی نمایش داده می‌شوند.

به‌عبارت دیگر، تمرکز بر این است که یک بخش از برنامه «چه کاری» انجام می‌دهد، نه اینکه آن کار را «چگونه» انجام می‌دهد.

Abstract Class

کلاس انتزاعی (Abstract Class) با کلمه کلیدی abstract تعریف می‌شود و نمی‌توان مستقیماً از آن شیء (Object) ساخت.

این کلاس می‌تواند شامل متدهای انتزاعی، یعنی متدهای بدون بدنه، و متدهای معمولی، یعنی متدهای دارای بدنه، باشد.

Interface

اینترفیس (Interface) ساختاری کاملاً انتزاعی است که مجموعه‌ای از رفتارها را به‌صورت یک قرارداد تعریف می‌کند.

کلاس‌هایی که یک Interface را با کلمه کلیدی implements پیاده‌سازی می‌کنند، موظف‌اند متدهای تعریف‌شده در آن را پیاده‌سازی کنند.

Constant

ثابت (Constant) متغیری است که مقدار آن پس از مقداردهی قابل تغییر نیست.

در جاوا، ثابت‌ها معمولاً با ترکیب static final تعریف می‌شوند تا به کلاس وابسته باشند و پس از مقداردهی تغییر نکنند.

Polymorphism

چندریختی (Polymorphism) توانایی یک مرجع (Reference) از نوع کلاس والد یا Interface برای اشاره به اشیایی از انواع مختلف کلاس‌های فرزند و اجرای رفتار ویژه هر یک از آن‌ها است.

نکات مهم مصاحبه‌ای

تفاوت اصلی Abstract Class و Interface در چیست؟

کلاس abstract می‌تواند دارای وضعیت (State)، یعنی فیلدهای غیراستاتیک، و همچنین Constructor باشد. ارث‌بری از کلاس در جاوا تک‌گانه است؛ یعنی هر کلاس فقط می‌تواند از یک کلاس والد ارث‌بری کند.

اما Interface معمولاً برای تعریف رفتارها یا قابلیت‌ها (Capabilities) استفاده می‌شود، Constructor ندارد و امکان پیاده‌سازی چند Interface را برای یک کلاس فراهم می‌کند.

آیا Abstract Class می‌تواند Constructor داشته باشد؟

بله. با وجود اینکه نمی‌توان مستقیماً از یک کلاس abstract نمونه‌سازی کرد، Constructor آن هنگام ساخته‌شدن نمونه‌ای از کلاس فرزند فراخوانی می‌شود تا فیلدهای کلاس والد مقداردهی اولیه شوند.

چرا نمی‌توان از یک Abstract Class نمونه ساخت؟

یک کلاس abstract ممکن است شامل متدهای abstract باشد که بدنه و پیاده‌سازی ندارند.

در این شرایط، JVM نمی‌داند هنگام فراخوانی چنین متدی چه عملیاتی باید اجرا شود؛ بنابراین نمی‌توان مستقیماً از کلاس abstract شیء ساخت.

کاربرد متدهای default در Interfaceها چیست؟

متدهای default در جاوا نسخه 8 معرفی شدند تا بتوان بدون شکستن کدهای قبلی، یعنی حفظ Backward Compatibility، متدهای جدیدی به Interfaceهایی اضافه کرد که پیش‌تر توسط کلاس‌های زیادی پیاده‌سازی شده‌اند.

مثال یا سناریوی کاربردی

در این سناریو، یک سیستم مدیریت پارکینگ طراحی می‌شود:

۱. یک کلاس abstract با نام Vehicle تعریف می‌کنیم. این کلاس ویژگی‌های مشترکی مانند licensePlate و یک متد انتزاعی با نام calculateParkingFee برای محاسبه هزینه پارکینگ دارد.

۲. کلاس‌های فرزند Car، Motorcycle و Truck از کلاس Vehicle با کلمه کلیدی extends ارث‌بری می‌کنند. هر کلاس، فرمول اختصاصی محاسبه هزینه را در متد calculateParkingFee پیاده‌سازی می‌کند.

۳. یک Interface با نام Loggable برای ثبت رویدادها در کنسول تعریف می‌کنیم. کلاس‌ها می‌توانند علاوه بر ارث‌بری از کلاس والد، این Interface را نیز با implements پیاده‌سازی کنند.

بیشتر بدانید

IDE Tip

در محیط IntelliJ، اگر یک کلاس متدهای انتزاعی موردنیاز را پیاده‌سازی نکرده باشد، روی نام کلاس کلیدهای Alt + Enter را فشار دهید تا قالب متدهای لازم به‌صورت خودکار ایجاد شود.

Naming Convention

طبق قراردادهای نام‌گذاری در جاوا، متغیرهای ثابت که با static final تعریف می‌شوند، باید با حروف بزرگ نام‌گذاری شوند و کلمات آن‌ها با علامت _ از هم جدا شوند؛ برای مثال، MAX_CAPACITY.