تبلیغات
banner
banner
banner
تبلیغات
banner

فیلم های آموزشی : 36 +

تعداد کاربران : 34 +

تعداد کل مطالب : 338 +

تعداد نظرات : 29 +

حضرت محمد (ص) : طلب علم بر هر انسانی واجب است ،همانا خداوند علم آموزان را دوست دارد.

آموزش مقدماتی تا پیشرفته سی شارپ بخش صد و بیستم


به نام پروردگار جهان

آموزش مقدماتی تا پیشرفته سی شارپ بخش صد و بیستم

سلام به همه کاربران وبسایت لندلرن

قسمت صد و بیستم


چند شكلي بودن: كلمه اي ترسناك، مفهومي ساده

يكي ديگر از اصول مهم برنامه نويسي شيئ گرا، مفهوم چند شكلي بودن است. احتمالاً اين مفهوم يكي از سـخت تـرين مفـاهيم شيئ گرايي به نظر مي آيد، اما درك آن بسيار راحت است .

در حقيقت تاكنون در برنامه هـاي قبلـي خـود نيـز از چنـد شـكلي بـودن استفاده كرده ايد .

بار ديگر به كد زير برنامه ي DisplayCarDetails توجه كنید:

همانطور كه در خط اول مشاهده مي كنيد، اين متد پارامتري از نوع Car به عنوان ورودي دريافت مي كند.

اما هنگام فراخـواني آن پارامتري از نوع SportsCar به آن فرستاده مي شود .

سوالي كه پيش مي آيد اين است كه چگونه مي توان به متدي كه پارامتري از نوع Car دارد، شـيئ از نـوع SportsCar را فرستاد؟

خوب، چند شكلي بودن به اين معني است كه يك شيئ از كلاس مشتق شده بتواند در مواقعي كه به يك شيئ از كـلاس پايـه نيـاز است، همانند شيئ اي از كلاس پايه عمل كند .

در اين مثال شما مي توانيد با شيئ اي از SportsCar هماننـد يـك شـيئ از كلاس Car رفتار كنيد، زيرا كلاس SportsCar از كلاس Car مشتق شده است .

چند شكلي بودن به اين دليل است كه همانطور كه در بخش وراثت گفتيم، هر شيئ از كلاس مشتق شده بايد داراي تمام قابليتهاي يك شيئ از كلاس پايـه باشـد؛ اگرچـه مي تواند متدها و يا خاصيتهاي بيشتري نيز داشته باشد.

به اين ترتيب اگر بخواهيم متدي را از كلاس Car فراخواني كنيم، كـلاس SportsCar نيز حتماً داراي اين متد خواهد بود .

البته واضح است كه عكس اين مورد درست نيست . متد DisplaySportsCarDetails كه به صورت زير تعريف شده است :

نمي تواند يك شيئ از نوع Car را نيز به عنوان پارامتر دريافت كند .

كلاس Car تضمين نمي كند كه هر متد و يا خاصـيتي كـه در كلاس SportsCar وجود دارد را داشته باشد،

زيرا متدها و يا خاصيت هايي در كلاس SportsCar وجود دارند كـه در كلاس Car تعريف نشده است.

به عبارت ديگر SportsCar نوع خاصي از Car است .

Override كردن متدهاي بيشتر :

اگرچه در قسمت قبلي متد سازنده كلاس Car را در كلاس override ، SportsCar  كرديم،

اما بهتـر اسـت كـه بـا نحوه override كردن يك تابع معمولي نيز آشنا شويم .

 

همانطور كه مي دانيد براي اينكه بتوانيم يك متد را override كنيم ، بايد آن متد در كـلاس پايـه وجـود داشـته باشـد .

متـد Accelerate در كلاس Car و كلاس SportsCar نبايد تفاوتي داشته باشد، زيرا عملكرد آن در هر دو نوع مشابه
است.

همچنين متد IsMoving هم فقط براي راحتي كاربر اضافه شده است و به عنوان رفتار شيئ به شمار نمي رود كـه آن را override كنيم .

بنابراين نياز داريم كه متد جديـدي بـه نـام CalculateAccelerationRate اضـافه كنيم.

فرض مي كنيم كه در يك اتومبيل عادي اين مقدار يك عدد ثابت است، اما در اتومبيل هاي مسابقه اي بايد محاسبه شـود .

در بخش امتحان كنيد بعد، متد جديدي براي override كردن اضافه مي كنيم .

امتحان كنيد: اضافه كردن و override كردن يك متد ديگر

  • متد زير را به كلاس Car اضافه كنید:
  • حال براي تست اين متد، زير برنامه ي DisplayCarDetails را به صورت زير تغيير دهيد:
  • برنامه را اجرا کنید تا خروجی را به وضوح ببینید.
  • براي اينكه بتوانيم يكي از متدهاي كلاس پايه را در كلاس مشتق شده override كنيم، آن متد در كـلاس پايـه بايد با كلمه كليدي virtual تعريف شده باشد .
  • بنابراين در متد جديد كـلاس Car ،كلمـه virtual را بـه صورت زير اضافه كنيد:
حـــال مـــي توانيـــد متـــد CalculateAccelerationRate را در كـــلاس  override  ، SportsCar براي این کار باید متدی در كلاس SportsCar  ايجاد كنيد كه نام، تعداد پارامتر ها و نیز مقدار برگشتي آن دقيقاً مشابه اين متد در كلاس Car باشد و همچنين در تعر يف متد از كلمه كلیدی override استفاده كنيد.

متد زير را به كلاس SportsCar اضافه كنید.

حال برنامه را اجرا كنيد . همانطور كه مـشاهده مـي كنيـد، ايـن مرتبـه از متـد تعريـف شـده در كـلاس SportsCar استفاده شده است.

برای درک بهتر این مفهوم به قسمت ۱۲۱ مراجعه کنید

جهت حمایت از ما سایت ما را به دوستانتان معرفی کنید.


درباره نویسنده
سجاد اسدی
   سجاد اسدی

سجاد اسدی هستم دانشجوی رشته نرم افزار و علاقه مند به تدریس و یادگیری دروس مرتبط با تکنولوژی نرم افزار و اینترنت اشیاء جهت ارتباط با بنده مراجعه شود به آیدی سروش و تلگرام : @ordervira و پیج بنده در اینستاگرام instagram.com/sajjadred11 ""اللهم صل علی محمد و آل محمد"" برای شروع هیچ وقت دیر نیست. "الهم عجل لولیک الفرج"

دیدگاه بگذارید

avatar
  اشتراک  
اطلاع رسانی

aparat کانال آپارات

soroush کانال سروش

کانال آی گپ