مفهوم Polymorphism در شی گرایی
Polymorphism یا چندریختی در شیگرایی به توانایی اجرای یک متد مشترک با رفتارهای متفاوت در اشیای مختلف گفته میشود.
مفهوم Polymorphism در برنامهنویسی شیگرا
Polymorphism یا «چندریختی» یکی از مهمترین مفاهیم برنامهنویسی شیگرا (Object-Oriented Programming) است که به اشیا و متدها اجازه میدهد رفتارهای متفاوتی را در شرایط مختلف از خود نشان دهند.
واژه Polymorphism از دو کلمه یونانی «Poly» به معنی «چند» و «Morph» به معنی «شکل» تشکیل شده است؛ بنابراین معنای لغوی آن «چندشکلی» یا «چندریختی» است.
این مفهوم به توسعهدهندگان کمک میکند تا کدهایی انعطافپذیر، قابل توسعه و قابل نگهداری ایجاد کنند.
در برنامهنویسی شیگرا، معمولاً کلاسهای مختلفی وجود دارند که از یک کلاس پایه یا والد ارثبری میکنند.
اگرچه این کلاسها دارای ویژگیهای مشترکی هستند، اما ممکن است هر کدام رفتار خاص خود را داشته باشند.
Polymorphism این امکان را فراهم میکند که یک رابط مشترک برای چندین پیادهسازی متفاوت تعریف شود.
به این ترتیب، برنامهنویس میتواند با اشیای مختلف به یک روش واحد کار کند، بدون آنکه نیازی به دانستن جزئیات پیادهسازی هر شی داشته باشد.
برای درک بهتر این مفهوم، فرض کنید یک کلاس پایه به نام «حیوان» داریم که دارای متدی به نام «صدا» است.
سپس کلاسهای «سگ»، «گربه» و «پرنده» از این کلاس ارثبری میکنند.
هر یک از این کلاسها متد «صدا» را به شیوه خاص خود پیادهسازی میکنند.
زمانی که متد صدا برای یک شی از نوع سگ فراخوانی شود، صدای سگ تولید میشود و اگر برای یک شی از نوع گربه فراخوانی گردد، صدای گربه نمایش داده خواهد شد.
در این حالت، اگرچه نام متد در همه کلاسها یکسان است، اما رفتار آن بسته به نوع شی متفاوت خواهد بود. این دقیقاً همان مفهوم Polymorphism است.
چندریختی مزایای فراوانی دارد.یکی از مهمترین مزایای آن کاهش وابستگی بین بخشهای مختلف نرمافزار است.
هنگامی که کد بر اساس کلاسهای پایه یا اینترفیسها نوشته میشود، تغییر یا اضافه کردن کلاسهای جدید بدون ایجاد تغییرات گسترده در سایر قسمتهای سیستم امکانپذیر خواهد بود.
این ویژگی باعث افزایش قابلیت توسعهپذیری نرمافزار میشود.
انواع Polymorphism در برنامهنویسی شیگرا در سی شارپ
Polymorphism معمولاً به دو نوع اصلی تقسیم میشود:
1. Compile-Time Polymorphism
این نوع چندریختی در زمان کامپایل مشخص میشود و اغلب از طریق Overloading یا سربارگذاری متدها پیادهسازی میشود.
در این روش، چندین متد با نام یکسان اما با پارامترهای متفاوت در یک کلاس تعریف میشوند.
کامپایلر بر اساس تعداد یا نوع پارامترها تشخیص میدهد که کدام متد باید اجرا شود.
برای مثال، متدی به نام Calculate میتواند یک بار برای جمع دو عدد صحیح و بار دیگر برای جمع سه عدد صحیح تعریف شود.
هنگام فراخوانی متد، کامپایلر نسخه مناسب را انتخاب میکند.
مزیت این روش افزایش خوانایی کد و سهولت استفاده از متدها است، زیرا توسعهدهنده میتواند برای عملیات مشابه از یک نام مشترک استفاده کند.
2. Run-Time Polymorphism
این نوع چندریختی در زمان اجرای برنامه اتفاق میافتد و معمولاً با استفاده از Method Overriding یا بازنویسی متدها پیادهسازی میشود.
در این حالت، یک کلاس فرزند متدی را که در کلاس والد تعریف شده است، مجدداً پیادهسازی میکند.
تصمیمگیری درباره اینکه کدام متد اجرا شود در زمان اجرا و بر اساس نوع واقعی شی انجام میشود.
برای نمونه، اگر یک متغیر از نوع کلاس پایه تعریف شده باشد اما به یک شی از کلاس فرزند اشاره کند، هنگام فراخوانی متد بازنویسیشده، نسخه موجود در کلاس فرزند اجرا خواهد شد.
این ویژگی یکی از قدرتمندترین قابلیتهای برنامهنویسی شیگرا محسوب میشود.
ارتباط Polymorphism با Inheritance در سی شارپ
چندریختی ارتباط نزدیکی با مفهوم وراثت (Inheritance) دارد.
در بسیاری از موارد، Polymorphism بدون وجود ارثبری معنا پیدا نمیکند.
وراثت امکان ایجاد سلسلهمراتب کلاسها را فراهم میکند و Polymorphism اجازه میدهد اشیای این سلسلهمراتب به صورت یکپارچه مدیریت شوند.
برای مثال، در یک سیستم مدیریت کارکنان، ممکن است کلاس پایهای به نام Employee وجود داشته باشد و کلاسهای Manager، Developer و Accountant از آن ارثبری کنند.
هر کدام از این کلاسها میتوانند متد CalculateSalary را به شکل متفاوتی پیادهسازی کنند.
در نتیجه، برنامه میتواند مجموعهای از کارکنان را مدیریت کند و بدون توجه به نوع دقیق هر کارمند، متد محاسبه حقوق را فراخوانی نماید.
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
شرکت در دوره آموزش برنامه نویسی سی شارپ
ارتباط Polymorphism با Interface در سی شارپ
در بسیاری از زبانهای برنامهنویسی مانند #C و Java، اینترفیسها نقش مهمی در پیادهسازی چندریختی دارند.
Interface مجموعهای از قراردادها را تعریف میکند که کلاسهای مختلف باید آنها را پیادهسازی کنند.
فرض کنید یک اینترفیس به نام Printable وجود دارد که شامل متدی به نام Print است.
کلاسهای مختلفی مانند Invoice، Report و Document میتوانند این اینترفیس را پیادهسازی کنند.
در نتیجه، برنامه میتواند بدون آگاهی از نوع دقیق شی، متد Print را فراخوانی کند. این رویکرد باعث افزایش انعطافپذیری و استقلال اجزای سیستم میشود.
مزایای Polymorphism در شی گرایی
استفاده از چندریختی مزایای متعددی در توسعه نرمافزار دارد:
-
افزایش قابلیت توسعه سیستم
-
کاهش تکرار کد
-
بهبود خوانایی و نگهداری کد
-
کاهش وابستگی بین کلاسها
-
تسهیل در پیادهسازی الگوهای طراحی
-
امکان افزودن قابلیتهای جدید بدون تغییر کدهای موجود
-
افزایش قابلیت استفاده مجدد از کدها
به همین دلیل، Polymorphism یکی از اصول کلیدی طراحی نرمافزارهای بزرگ و مقیاسپذیر محسوب میشود.
کاربردهای عملی Polymorphism
در پروژههای واقعی، چندریختی تقریباً در تمام بخشهای نرمافزار کاربرد دارد.
سیستمهای پرداخت، مدیریت کاربران، پردازش فایلها، تولید گزارشها و بسیاری از ماژولهای دیگر از این مفهوم استفاده میکنند.
برای مثال، در یک فروشگاه اینترنتی ممکن است روشهای پرداخت مختلفی مانند کارت بانکی، کیف پول الکترونیکی و پرداخت اعتباری وجود داشته باشد.
هر روش پرداخت میتواند متد PaymentProcess را به شکل متفاوتی پیادهسازی کند.
با استفاده از Polymorphism، سیستم بدون نیاز به دانستن جزئیات هر روش پرداخت، تنها متد مشترک را فراخوانی میکند.
مثال Polymorphism در سی شارپ
فرض کنید یک کلاس پایه به نام Animal داریم و کلاسهای Dog و Cat از آن ارثبری میکنند. هر کدام متد MakeSound را به شکل متفاوتی پیادهسازی میکنند.
using System;
class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("صدای حیوان");
}
}
class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("واق واق");
}
}
class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("میو میو");
}
}
class Program
{
static void Main()
{
Animal animal1 = new Dog();
Animal animal2 = new Cat();
animal1.MakeSound();
animal2.MakeSound();
}
}
خروجی
واق واق
میو میو
چرا این مثال Polymorphism است؟
در هر دو خط زیر:
Animal animal1 = new Dog();
Animal animal2 = new Cat();
نوع متغیر Animal است، اما در زمان اجرا رفتار واقعی شیء مشخص میشود.
وقتی () MakeSound فراخوانی میشود، برنامه تشخیص میدهد که شیء از نوع Dog یا Cat است و متد مناسب را اجرا میکند.
مثال کاربردیتر: سیستم پرداخت
class Payment
{
public virtual void Pay()
{
Console.WriteLine("پرداخت انجام شد");
}
}
class CreditCardPayment : Payment
{
public override void Pay()
{
Console.WriteLine("پرداخت با کارت بانکی");
}
}
class WalletPayment : Payment
{
public override void Pay()
{
Console.WriteLine("پرداخت با کیف پول");
}
}
استفاده:
Payment payment;
payment = new CreditCardPayment();
payment.Pay();
payment = new WalletPayment();
payment.Pay();
خروجی:
پرداخت با کارت بانکی
پرداخت با کیف پول
در این مثال، سیستم فقط با نوع Payment کار میکند و نیازی ندارد بداند پرداخت از چه روشی انجام میشود.
این انعطافپذیری مهمترین مزیت Polymorphism در برنامهنویسی شیگرا است.
جمعبندی
Polymorphism یا چندریختی یکی از چهار اصل بنیادین برنامهنویسی شیگرا در کنار Encapsulation، Inheritance و Abstraction است.
این مفهوم امکان استفاده از یک رابط مشترک برای رفتارهای مختلف را فراهم میکند و باعث میشود نرمافزارها انعطافپذیرتر، قابل توسعهتر و سادهتر شوند.
با بهرهگیری صحیح از Polymorphism، توسعهدهندگان میتوانند ساختارهای نرمافزاری قدرتمندتری طراحی کنند که در برابر تغییرات آینده مقاومتر بوده و نگهداری آنها آسانتر باشد.
به همین دلیل، درک و استفاده صحیح از این مفهوم برای هر برنامهنویس شیگرا ضروری است.


کاربران ما
شما هم نظرتون با ما دریاره “مفهوم Polymorphism در شی گرایی” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید