OOP in Java Fourth Section | شی گرایی در جاوا قسمت چهارم
📖توضیحات درس
📄جزوه
مفاهیم کلیدی
Abstraction فرآیندی که در آن جزئیات پیادهسازی از کاربر پنهان شده و فقط عملکردهای اصلی نمایش داده میشود. به عبارت دیگر، تمرکز بر روی "چه کاری انجام میشود" (What) است نه "چگونه انجام میشود" (How).
Abstract Class
کلاسی که با کلمه کلیدی abstract تعریف میشود و نمیتوان مستقیماً از آن object ساخت. این کلاس میتواند شامل متدهای انتزاعی (بدون بدنه) و متدهای معمولی (با بدنه) باشد.
Interface
یک ساختار کاملاً انتزاعی که مجموعهای از رفتارها را به صورت قرارداد تعریف میکند. کلاسهایی که یک interface را پیادهسازی میکنند، موظف به اجرای تمامی متدهای آن هستند.
Constant
متغیرهایی که مقدار آنها غیرقابل تغییر است. در جاوا معمولاً با ترکیب static final تعریف میشوند تا به کلاس وابسته باشند و پس از مقداردهی، تغییر نکنند.
Polymorphism توانایی یک مرجع (Reference) از نوع کلاس والد یا اینترفیس برای اشاره به اشیایی از انواع مختلف فرزندان و اجرای رفتارهای مختص به هر کدام.
نکات مهم مصاحبهای
تفاوت اصلی کلاس Abstract و Interface در چیست؟
کلاس abstract میتواند دارای وضعیت (state) یا همان فیلد غیر ثابت و constructor باشد و ارثبری در آن تکگانه است. اما interface اصولاً برای تعریف رفتارها (Capabilities) استفاده میشود، سازنده ندارد و اجازه ارثبری چندگانه (Multiple Inheritance) را فراهم میکند.
آیا کلاس Abstract میتواند Constructor داشته باشد؟
بله، با وجود اینکه نمیتوان از خود کلاس abstract نمونهسازی کرد، اما سازنده آن زمانی که کلاس فرزند instantiate میشود، فراخوانی میگردد تا فیلدهای والد را مقداردهی کند.
چرا نمیتوان از یک کلاس Abstract نمونه ساخت؟
زیرا این کلاس ممکن است دارای متدهای abstract باشد که پیادهسازی و بدنه ندارند؛ بنابراین جیویام (JVM) نمیداند در صورت فراخوانی آن متدها چه عملیاتی را باید انجام دهد.
کاربرد متدهای default در اینترفیسها چیست؟ این متدها در جاوا ۸ معرفی شدند تا بدون شکستن کدهای قبلی (Backward Compatibility)، بتوان متدهای جدیدی را به اینترفیسهایی که قبلاً توسط کلاسهای زیادی پیادهسازی شدهاند، اضافه کرد.
مثال یا سناریوی کاربردی
در ویدیو برای درک بهتر این مفاهیم، سیستم مدیریت پارکینگ طراحی شد:
- یک کلاس
abstractبه نامVehicleتعریف شد که ویژگیهای مشترک مانندlicensePlateو متدی انتزاعی برای محاسبه هزینه پارکینگ (calculateParkingFee) داشت. - کلاسهای فرزند مانند
Car،MotorcycleوTruckاین کلاس راextendکرده و هر کدام فرمول خاص خود را برای محاسبه هزینه در متد مربوطه پیادهسازی کردند. - یک
interfaceبه نامLoggableبرای ثبت وقایع در کنسول تعریف شد که کلاسها میتوانستند در کنار ارثبری از والد، آن را همimplementsکنند.
بیشتر بدانید
IDE Tip
در نرمافزار IntelliJ، استفاده از کلیدهای ترکیبی Alt + Enter روی نام کلاسی که متدهای انتزاعی را پیادهسازی نکرده، به شما کمک میکند تا به صورت خودکار قالب متدها را ایجاد کنید.
Naming Convention
طبق قراردادهای برنامهنویسی، متغیرهای ثابت (static final) باید با حروف بزرگ و جداکننده _ نامگذاری شوند (مثلاً: MAX_CAPACITY).
