پلی مورفیسم در برنامه نویسی شی گرا

پلی مورفیسم (Polymorphism) یکی از اصل های برنامه نویسی شی گرا است که به معنی چندشکلی یا چندریختی است. در برنامه نویسی یک شی می تواند شکل های متفاوتی به خود بگیرد و یا پیاده سازی های متفاوتی از یک تابع داشته باشیم.

همانطور که در پست های قبل گفته شد، برنامه نویسی شی گرا اصولی دارد که اگر از آن ها استفاده کنیم، هم خوانایی کد بالا می رود و هم باعث ساده شدن کد نویسی می شود. شاید در زمان پیاده سازی اصولی مثل Abstract، Interface  و یا Polymorphism که در ادامه توضیح می دهم، با خودتان فکر کنید که برنامه نویسی عادی مگر چه اشکالی دارد؟ چرا باید این همه ساختار را رعایت کنیم؟ دلیلش خیلی ساده است، در اصل شما مرحله بعد از کد نویسی را دارید در نظر می گیرید. چرا  که اصولی برنامه نوشتن و کد زدن مزایای بسیاری دارد از جمله:

استفاده دوباره از برنامه (Reusability)

رفع ساده خطا (Debug)

بالا بردن امنیت برنامه (Security)

نگهداری ساده تر برنامه (Maintenance)

تقسیم برنامه به قسمت های کوچکتر و ساده تر (Work Break Down)

 

حالا که مزایای برنامه نویسی شی گرا و اصولی را متوجه شدیم، به مفهوم مهم چند ریختی یا Polymorphism می پردازیم. Polymorphism یک واژه یونانی است که از دو کلمه Poly به معنای چند و morph به معنای شکل، تشکیل شده است. به صورت کلی معنی آن چند ریختی یا چند شکلی است. در برنامه نویسی اگر بخواهیم پلی مورفیسم را معنی کنیم یعنی یک شی چند قابلیت داشته باشد یا اینکه از یک تابع به چند نوع مختلف بتوان استفاده کرد.

 

برای مثال یک فردی که جنسیت آن مونث است می تواند هم دختر فردی باشد، هم همسر مردی باشد، هم مادر بچه ای باشد، هم خاله یا عمه فردی باشد و همچنین در محل کار همکار افرادی باشد. پس یک انسان به صورت همزمان چندین نقش دارد و ممکن است حتی در لحظه مجبور به اجرای آن ها با هم نیز باشد.

 

در برنامه نویسی هم همین مدل تفکر وجود دارد. به عبارتی شما یک تابع یا یک تکه کد دارید که با توجه به تعداد یا نوع ورودی هایی که به آن می دهید، خروجی های متفاوتی را دریافت می کنید. پلی مورفیسم در اصل این گونه کار می کند که یک تابع با یک اسم اما نوع ورودی های متفاوتی داریم. یعنی شما دو تابع به نام plus دارید، اگر دو ورودی عدد به آن بدهید تابع به شما خروجی عدد می دهد یعنی دو عدد را باهم جمع می کند. حال اگر به تابع دو ورودی متنی یا String بدهید، تابع این دو متن را  کنار هم می گذارد و یک خروجی متنی به شما می دهد.

 

یکی دیگر از مثال های پلی مورفیسم این است که شما یک کلاس Shape داشته باشید که متد های (Methods) محاسبه محیط و مساحت دارد. حال برای هر شکل هندسی مثل مربع، مثلث و دایره کلاس های جداگانه نوشته و تابع محاسبه محیط و مساحت را از کلاس والد Override می کنیم. وقتی از هر کلاس شی بسازیم و متد محیط را صدا بزنیم بسته به اینکه از کدام شی، این متد را صدا کردیم نوع محاسبه آن متفاوت می شود، در صورتی که ما عملا 3 متد یا تابع محیط با اسم یکسان اما پیاده سازی متفاوت داریم.

 

Polymorphism دو نوع متفاوت دارد:

1.    چند ریختی پویا (Dynamic Polymorphism) یا چند ریختی زمان اجرا (Run-Time Polymorphism):

این نوع همان استفاده از توابع به صورت Override است که در ارث بری (Inheritance) کاربرد دارد و شما چند تابع با یک نام در چند کلاس مختلف دارید.

 

2.    چند ریختی استاتیک (Static Polymorphism) یا زمان کامپایل (Compile-Time Polymorphism):

در این مدل شما در یک کلاس چند تابع با یک نام دارید که با نام Overloading شناخته می شود. یعنی در یک کلاس یک تابع با نام plus دارید که دو ورودی دارد و یک تابع دیگر با همان نام plus دارید که سه ورودی دارد، بسته به تعداد ورودی مشخص می شود که از کدام تابع استفاده شود.

 

 

زبان های برنامه نویسی زیادی از این مفهوم استفاده می کنند مانند C#، جاوا و پایتون. به عنوان مثال در زبان برنامه نویسی Java یک کلمه کلیدی به نام Final داریم که اگر این کلمه را در اول تعریف تابع در والد (Parent) بنویسیم دیگر به فرزند (Child) اجازه Override کردن را نمی دهیم و یعنی این متد نهایی است و نمی تواند تغییر کند. همچنین کلمه final را برای یک فیلد هم می توانیم استفاده کنیم که در این صورت یا باید همان موقع آن را مقدار دهی کنیم و یا فقط اجازه داریم که در تابع سازنده آن را مقدار دهی کنیم. حتی می توان یک کلاس را به صورت Final تعریف کنیم که در این صورت یعنی نمی توانیم از این کلاس ارث بری کنیم و این کلاس نمی تواند Parent باشد.

 

در این پست مثال های واقعی و برنامه نویسی پلی مورفیسم را توضیح دادیم و گفتیم که دو نوع مختلف دارد. امیدوارم اطلاعات مورد نیازتان را از این پست دریافت کرده باشید. سوالات و نظراتتون رو در بخش کامنت ها با ما در میون بگذارید.

نظرات ارزشمند خود را با ما به اشتراک بگذارید

نظرات :
هنوز نظری ثبت نشده است.