در شی گرایی مفاهیمی از زندگی و فلسفه اقتباس شده که شناخت هر یک از این مبانی هم به فهم این موضوعات کمک میکند و هم هنگام کار با این مفاهیم احساس لذت بیشتری را دریافت میکنیم. یکی از این مفاهیم پر کاربرد چند ریختی یا polymorphism است.
شفاف ترین راه برای توضیح polymorphism یا چند ریختی استفاده از یک کلاس abstract است. abstract همان انتزاعی خودمان است. حال انتزاع چیست؟ :) . تجرید، جزئی از کل، هر کسی از ظن خود شد یار من و ...
بیایید تا با یک مثال پیش برویم. بشر یا انسانیت یک مفهوم انتزاعی است. معنای بشر مفهومی است که به ذهن مربوط میشود و از جهان ملموس به دور است. پس یک انتزاع است. بشر ما به ازای بیرونی ندارد یعنی نمیتوان بشر را به شخصی نمایش داد.
از جنبه دیگر بنگریم. چند نفر از دوستان را میبینیم وجوه تمایز یعنی آن اوصافی که هر یک را از دیگران متمایز میکند را کنار گذاشته و وجه مشترک همه آنها که انسانیت است را بر میگزینیم. حال انسانیت مفهوم کلی است که بر همگان صادق است. پس میگوییم مفهوم انسانیت از آنها انتزاع شده است. در حالی که اوصاف هر یک با هم متفاوت است.
حال که درباره انتزاع دانستیم کمی فنی تر صحبت کنیم:
ساخت Object از یک کلاس abstract بی معنا است چرا که خود کلاس یک انتزاع است و ما به ازای خارجی اصلا نمیتواند داشته باشد. یا به عبارت تخصصی تر object هایی از یک کلاس Abstract برای ما ارزش افزوده ای به همراه نخواهد داشت. به عنوان مثال «قبض» را در نظر بگیرید. قبض یک انتزاع است و تا وقتی که لفظ «قبض برق» را به کار نبریم ملموس نمیشود.
در رابطه با مفهوم انتزاعی بشر که گفتگو کردیم خواهیم داشت:
این کلاس از نوع abstract تعریف شد چرا که متد goPee() قابل تعریف برای Human نیست. چون Human ذاتا یک مفهوم abstract است.
تابع goPee() تنها برای زیر کلاس های Male و Female تعریف پذیر است.
و
حال میتوانیم به یک اتاق پر از Human بگوییم:
قبض، لپ تاپ، حساب بانکی و ... تماما مفاهیم انتزاعی هستند که خارج از ذهن ماهیت ملموسی ندارند. فرزندان هر یک از این کلاس ها مثل حساب بانکی کوتاه مدت، حساب بانکی قرض الحسنه و ... که از پدر خود ارث برده اند به این انتزاع جسمیت داده و این انتزاع را عینی میکنند. در اینجاست که polymorphism خود را نشان میدهد که با وجود مفهوم یکسان هر فرزندی توانسته عینیت بخشی خود را از آن مفهوم پیاده سازی نماید بدون آنکه در اصل مفهوم تغییری وارد نماید.
امیدوارم مفهوم polymorphism به طور کامل تشریح شده باشد. ضمنا عنوان توابع صرفا مثال است و در آن مناقشه ای نیست :)