اگر تا به حال در دنیای برنامهنویسی شیگرایی فعالیت کردهاید، احتمالاً با اصطلاح “پلی مورفیسم” مواجه شدهاید. این مفهوم یکی از ارکان اصلی برنامهنویسی شیگراست و در زبان جاوا نیز بهوفور استفاده میشود. در این مقاله، بهصورت کامل و جامع به این سوال پاسخ میدهیم: پلی مورفیسم در جاوا چیست؟
پلی مورفیسم چیست؟
پلی مورفیسم، یا به فارسی «چند ریختی»، به توانایی اشیاء برای داشتن چندین فرم یا رفتار مختلف اشاره دارد. این مفهوم به برنامهها اجازه میدهد که با استفاده از یک رابط مشترک، عملیاتهای مختلفی را اجرا کنند. به بیان سادهتر، پلی مورفیسم امکان استفاده از یک متد با ورودیهای مختلف و خروجیهای مختلف را فراهم میکند.
در ادامه مفهوم چند ریختی در برنامه نویسی و به خصوص در جاوا به صورت کامل مورد بررسی قرار خواهد گرفت.
پلی مورفیسم در برنامه نویسی چیست؟
پلی مورفیسم در برنامهنویسی به این معناست که یک متد یا یک کلاس میتواند به اشکال مختلف پیادهسازی شود. این مفهوم کمک میکند تا کدهای تکراری حذف شوند و کد تمیزتر و قابل فهمتری نوشته شود. در زبانهای شیگرا مثل جاوا، پلی مورفیسم از طریق ارثبری و پیادهسازی اینترفیسها انجام میشود.
چند ریختی در جاوا
پلی مورفیسم در جاوا چیست و به چه صورت پیاده خواهد شد؟ در جاوا، چند ریختی به دو صورت اصلی پیادهسازی میشود:
- پلی مورفیسم زمان کامپایل (Compile-time Polymorphism): که از طریق Overloading متدها به دست میآید.
- پلی مورفیسم زمان اجرا (Runtime Polymorphism): که از طریق Overriding متدها به دست میآید.
پلی مورفیسم زمان کامپایل
پلی مورفیسم زمان کامپایل به معنی تعریف چندین متد با یک نام اما با پارامترهای مختلف است. این نوع پلی مورفیسم از طریق Overloading متدها به دست میآید.
مثال از Overloading در جاوا:
class MathOperation {
int add(int a, int b) {
return a + b;
}
int add(int a, int b, int c) {
return a + b + c;
}
}
پلی مورفیسم زمان اجرا
پلی مورفیسم زمان اجرا به معنی پیادهسازی مجدد یک متد در کلاس فرزند است که در کلاس والد تعریف شده است. این نوع پلی مورفیسم از طریق Overriding متدها به دست میآید.
مثال از Overriding در جاوا:
class Animal {
void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("Dog barks");
}
}
در این مثال، متد sound() در کلاس Dog مجدداً پیادهسازی شده است تا رفتار متفاوتی از خود نشان دهد.
پیشنهاد مطالعه: آموزش Swing در جاوا: طراحی رابط کاربری کاربرپسند
یک مثال عملی از چند ریختی در جاوا
برای درک بهتر مفهوم چند ریختی (پلی مورفیسم) در جاوا، یک مثال عملی ارائه میدهیم که شامل استفاده از ارثبری و Overriding متدها است. در این مثال، کلاسهایی ایجاد میکنیم که نشاندهنده حیوانات مختلف هستند و هر یک از آنها صداهای مختلفی تولید میکنند. سپس این رفتارها را با استفاده از چند ریختی پیادهسازی میکنیم.
مرحله 1: ایجاد کلاس پایه
ابتدا یک کلاس پایه به نام Animal ایجاد میکنیم که یک متد به نام sound دارد. این متد باید توسط کلاسهای فرزند (مانند Dog و Cat) بازنویسی (Override) شود.
class Animal {
void sound() {
System.out.println("Animal makes a sound");
}
}
مرحله 2: ایجاد کلاسهای فرزند
در این مرحله، دو کلاس فرزند به نامهای Dog و Cat ایجاد میکنیم که از کلاس Animal ارثبری میکنند و متد sound را بازنویسی میکنند.
کلاس Dog:
class Dog extends Animal {
@Override
void sound() {
System.out.println("Dog barks");
}
}
کلاس Cat:
class Cat extends Animal {
@Override
void sound() {
System.out.println("Cat meows");
}
}
مرحله 3: استفاده از چند ریختی
اکنون که کلاسهای پایه و فرزند را ایجاد کردهایم، میتوانیم چند ریختی را با استفاده از نوع متغیر مرجع (reference variable) نشان دهیم. یک متغیر مرجع از نوع Animal میتواند به اشیاء کلاسهای فرزند (مانند Dog و Cat) اشاره کند و متد sound آنها را فراخوانی کند.
public class PolymorphismExample {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.sound();
myCat.sound();
}
}
شرح کامل مثال فوق از پلی مورفیسم در جاوا:
- ایجاد کلاس پایه (Animal):
- یک کلاس به نام Animal داریم که یک متد به نام sound دارد. این متد صداهای حیوانات را شبیهسازی میکند.
- این متد به طور پیشفرض پیغام “Animal makes a sound” را چاپ میکند.
- ایجاد کلاسهای فرزند (Dog و Cat):
- دو کلاس به نامهای Dog و Cat داریم که از کلاس Animal ارثبری میکنند.
- این کلاسها متد sound را بازنویسی میکنند تا صدای مخصوص خود را تولید کنند. کلاس Dog صدای “Dog barks” و کلاس Cat صدای “Cat meows” را چاپ میکند.
- استفاده از چند ریختی:
- یک متغیر مرجع از نوع Animal میتواند به اشیاء کلاسهای فرزند مانند Dog و Cat اشاره کند.
- وقتی متد sound فراخوانی میشود، جاوا به طور خودکار متد مناسب را بر اساس نوع واقعی شیء (که در زمان اجرا مشخص میشود) فراخوانی میکند.
- به عبارت دیگر، اگر متغیر مرجع به یک شیء Dog اشاره کند، متد sound مربوط به Dog اجرا میشود و اگر به یک شیء Cat اشاره کند، متد sound مربوط به Cat اجرا میشود.
مزیتهای چند ریختی:
- کد سادهتر و قابل فهمتر: شما میتوانید از یک متد واحد برای انجام عملیاتهای مختلف استفاده کنید.
- انعطافپذیری بیشتر: میتوانید به راحتی کلاسهای جدید اضافه کنید و رفتار آنها را تغییر دهید بدون اینکه نیاز به تغییر کدهای موجود باشد.
با استفاده از این مثال ساده، میتوانید ببینید که چگونه چند ریختی در جاوا به برنامهنویسان کمک میکند تا کدهای تمیزتر و قابل نگهداریتری بنویسند.
مزایای پلی مورفیسم در جاوا
در این بخش به مهمترین مزایای پلی مورفیسم در جاوا اشاره خواهیم کرد:
- کد تمیزتر و قابل نگهداریتر: با استفاده از پلی مورفیسم، میتوان از کدهای تکراری جلوگیری کرد و کدهایی تمیزتر و قابل نگهداریتر نوشت. به عنوان مثال، میتوان از یک اینترفیس برای تعریف رفتارهای مشترک استفاده کرد و سپس کلاسهای مختلف آن را پیادهسازی کنند.
- افزایش انعطافپذیری کد: پلی مورفیسم به کد اجازه میدهد که انعطافپذیرتر باشد و به راحتی بتواند تغییرات را مدیریت کند. با استفاده از پلی مورفیسم، میتوان به راحتی کلاسهای جدید اضافه کرد بدون اینکه نیاز به تغییرات زیادی در کدهای موجود باشد.
- افزایش قابلیت استفاده مجدد کد: پلی مورفیسم به برنامهنویسان اجازه میدهد تا از کدهای نوشته شده مجدداً استفاده کنند. به عنوان مثال، میتوان از یک متد عمومی برای انجام عملیاتهای مختلف استفاده کرد.
پلی مورفیسم در شی گرایی
پلی مورفیسم یکی از چهار اصل اصلی شیگرایی است. این اصل به همراه ارثبری، انتزاع و کپسولهسازی، پایه و اساس برنامه نویسی شیگرا در جاوا و سایر زبانهای شیگرا را تشکیل میدهد. در زیر به بررسی هر یک از این اصول میپردازیم:
۱. ارثبری (Inheritance)
ارثبری به یک کلاس اجازه میدهد که ویژگیها و رفتارهای یک کلاس دیگر را به ارث ببرد. این اصل به برنامهنویسان اجازه میدهد تا کدهای مشترک را در یک کلاس پایه قرار دهند و از تکرار کد جلوگیری کنند.
پیشنهاد مطالعه: آموزش متغیرها در جاوا به زبان ساده + مثال عملی
۲. انتزاع (Abstraction)
انتزاع به معنای پنهان کردن جزئیات پیادهسازی و ارائه یک رابط ساده و واضح به کاربران است. این اصل به برنامهنویسان کمک میکند تا پیچیدگیهای سیستم را مدیریت کنند و کدهای قابل فهمتری بنویسند.
۳. کپسولهسازی (Encapsulation)
کپسولهسازی به معنای مخفی کردن جزئیات پیادهسازی و فراهم کردن دسترسی به دادهها از طریق متدها است. این اصل به محافظت از دادهها و جلوگیری از دسترسی مستقیم به آنها کمک میکند.
۴. پلی مورفیسم (Polymorphism)
پلی مورفیسم به معنای توانایی یک متد یا کلاس برای داشتن چندین شکل مختلف است. این اصل به برنامهنویسان اجازه میدهد تا کدهای قابل انعطافتر و قابل استفاده مجددتری بنویسند.
کاربردهای پلی مورفیسم در جاوا
از کاربردهای پلی مورفیسم در جاوا میتوان به موارد زیر اشاره کرد:
۱. طراحی سیستمهای پیچیده
پلی مورفیسم در طراحی سیستمهای پیچیده بسیار مفید است. با استفاده از این مفهوم، میتوان سیستمهایی با اجزاء مختلف را به صورت ساده و قابل فهم طراحی کرد.
۲. پیادهسازی الگوهای طراحی (Design Patterns)
بسیاری از الگوهای طراحی معروف، مانند الگوی استراتژی (Strategy Pattern) و الگوی وضعیت (State Pattern)، بر اساس پلی مورفیسم پیادهسازی میشوند. این الگوها به برنامهنویسان کمک میکنند تا کدهای قابل انعطافتری بنویسند و تغییرات را به راحتی مدیریت کنند.
۳. تست و نگهداری کد
پلی مورفیسم به برنامهنویسان اجازه میدهد تا کدهای خود را به صورت موثرتر تست و نگهداری کنند. با استفاده از این مفهوم، میتوان به راحتی تستهای واحد (Unit Tests) نوشت و کدهای تستپذیرتری داشت.
پلی مورفیسم در جاوا چگونه پیادهسازی میشود؟
پلی مورفیسم در جاوا از طریق Overloading و Overriding متدها پیادهسازی میشود.
تفاوت بین پلی مورفیسم زمان کامپایل و زمان اجرا چیست؟
پلی مورفیسم زمان کامپایل از طریق Overloading متدها و پلی مورفیسم زمان اجرا از طریق Overriding متدها به دست میآید.
چه مزایایی دارد پلی مورفیسم در جاوا؟
پلی مورفیسم به کد تمیزتر، قابل نگهداریتر، انعطافپذیرتر و قابل استفاده مجدد کمک میکند.
پیشنهاد مطالعه: آموزش برنامه نویسی سوکت در جاوا با مثالی عملی
آیا پلی مورفیسم تنها در جاوا استفاده میشود؟
خیر، پلی مورفیسم در بسیاری از زبانهای برنامهنویسی شیگرا مانند سیپلاسپلاس، سیشارپ و پایتون نیز استفاده میشود.
چگونه میتوانم پلی مورفیسم را در پروژههای خود به کار بگیرم؟
با استفاده از ارثبری، پیادهسازی اینترفیسها و تعریف متدهای Overloaded و Overridden، میتوانید پلی مورفیسم را در پروژههای خود به کار بگیرید.
کلام پایانی
پلی مورفیسم در جاوا یک مفهوم کلیدی و ضروری است که به برنامهنویسان کمک میکند تا کدهای قابل انعطافتر، قابل استفاده مجدد و قابل نگهداریتری بنویسند. با درک عمیق این مفهوم و استفاده از آن در پروژههای خود، میتوانید کیفیت کدهای خود را بهبود بخشید و به یک برنامهنویس حرفهای تبدیل شوید.
اگر به فکر یادگیری کامل جاوا هستید و دوست دارید در زمینه جاوا به یک برنامه نویس تمام عیار تبدیل شوید، پیشنهاد ما به شما استفاده از دورههای آموزش جاوا و آموزش برنامه نویسی در مکتب خونه است. در مکتب خونه انواع دوره آموزش برنامه نویسی با قابلیت ارائه گواهینامه موجود است.
منبع