PDA

View Full Version : Polymorphism چیست ؟



mehdi3683
دوشنبه 15 فروردین 1384, 12:59 عصر
Polymorphism چیه و انواع آن چیه؟

titbasoft
دوشنبه 15 فروردین 1384, 13:19 عصر
خیلی ساده و زیر دیپلمیش رو اگر بخوام بگم ، در net. حتما دیدید که مثلا یک به یک متد گاهی می توان بیش از یک نوع پارامتر پاس کرد که به کدام از آنها Pholymorphism های آن متد می گویند.
مثلا

da.fill(ds,"tbl1")
OR
da.fill(ds)

Behrouz_Rad
دوشنبه 15 فروردین 1384, 13:48 عصر
Polymorphism یکی از چهار حالت برنامه نویسی شی گراست.

1) Inheritance
2) Abstraction
3) Encapsolution
4) Polymorphism

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

به عنوان یک مثال ساده تر مثلا یک گربه رو در نظر بگیرید.
گربه هم جز کلاس گربه سانان هست و هم جز کلاس موجودات زنده.
در پاره ای مواقع، خصوصیات خودش رو از کلاس گربه سانان به ارث می بره و در مواقعی نیز از کلاس موجودات زنده.
چیزی شبیه Overloading در دات نت که جناب titbasoft اشاره کردند.
:wise1:

mehdi3683
دوشنبه 15 فروردین 1384, 15:26 عصر
ممنون
اگه مشگلی نیست inheritance polymorphism و interface polymorphism را هم توضیح بدین :wise1:

M.GhanaatPisheh
دوشنبه 15 فروردین 1384, 21:51 عصر
Pholymorphism : فرض کنید به کلاغ فرمان می دید برو به هواپیما هم همین دستور رو می دید یعنی برو
پیغام یکسان به هر دو فرستادید ولی دو عکس العمل متفاوت نشون می دن.

؛ارسال پیغام یکسان به دو کلاس و بروز رفتارهای متفاوت از سوی آنها؛

Behrouz_Rad
دوشنبه 15 فروردین 1384, 23:27 عصر
Inheritance Polymorphism: نوعی از پولیمرفیسم است که پایه و اساس آن بر مبنای به ارث بری بنا نهاده شده.
به عنوان مثال اگر قرار است مقداری از کلاس پدر دریافت کنیم، این مقدار می تواند از کلاس فرزند آن گرفته شود.

Interface Polymorphism: اگر کلاسی با یک Interface (مثلا یک فرم) سر و کار داشته باشد، می توان متغیرهایی از نوع آن کلاس تعریف کرد و به اجزای Interface نسبت داد.

titbasoft
دوشنبه 15 فروردین 1384, 23:35 عصر
اگه مشگلی نیست inheritance polymorphism و interface polymorphism را هم توضیح بدین
اگر اشتباه نکنم شما دارید کتاب training kit MSPress رو مطالعه می کنید.به این دو کد توجه کنید

Public Interface IShape
' ...
End Interface
---
Public Class Circle
Implements IShape
End Class
---
Public Sub calArea(ByVal s As IShape)
'...
End Sub
---
DIM c1 AS NEW Circle
calArea (Circle)
(کلاس هایی که طبق IShape ا Impliment شده اند می تونند به calArea پاس بشن)
و


Public Class Shape
' ...
End Class
---
Public Class Circle
Inherits Shape
End Class
---
Public Sub calArea(ByVal c As Circle)
'...
End Sub
---
DIM c1 AS NEW Circle
calArea (Circle)

اگر فرقش رو متوجه نشدید می تونم یک DOC که دو فصل از همون کتاب است رو براتون upload کنم . ببخشید که بلد نیستم درست و حسابی توضیح بدم :wink:

mehdi3683
دوشنبه 15 فروردین 1384, 23:56 عصر
از همه ممنون
titbasoft :oops:

Peyman_Ranjbar
سه شنبه 16 فروردین 1384, 02:33 صبح
ضمن عرض سلام خدمت همه اساتید محترم :flower:

اگه میشه در مورد Interface Polymorphism یه مثال کاربردی بزنید
من کاملا منظور interface رو متوجه هستم ولی نحوه به کاربردن اون (کجا باید استفاده بشه) رو کاملا متوجه نشدم :strange:
من مثالی رو که در جزوه آقای نصیری بود رو خوندم ولی می خواستم اگه بشه یه مثال که ملموس تر باشه ارایه کنید.

خیلی ممنون

M.GhanaatPisheh
سه شنبه 16 فروردین 1384, 02:44 صبح
http://search.microsoft.com/search/results.aspx?qu=Interface+Polymorphism&View=msdn&s t=b&c=0&s=1&swc=0
:wink:

mehdi3683
سه شنبه 16 فروردین 1384, 04:36 صبح
فرض کن شما چند کلاس دار ی از انواع مختلف ماشین که همه این کلاس ها interface ای با نام IDrivable را Implement می کنن
حالا اگر یک member از یک کلاس به صورت زیر تعریف شده باشه

Public Sub GoSomewhere(ByVal V As IDrivable)
Implementation omitted'
End Subشما می توانی هر ابجکتی از کلاسهای ماشین های فوق را به عنوان پارامتر به این member پاس بدی که در این صورت ان ابجکت به طور ضمنی به interface تبدیل میشه و به member پاس داده میشه


موفق باشی :wise1:

titbasoft
سه شنبه 16 فروردین 1384, 09:59 صبح
من کاملا منظور interface رو متوجه هستم ولی نحوه به کاربردن اون (کجا باید استفاده بشه) رو کاملا متوجه نشدمزمانی که می خواهید مثلا یک plan مشخص کنید که همه کلاس های شما مجبورند طبق آن پیاده سازی بشن می تونید از interface استفاده کنید. در inheritance شما مجبور نیستید که member هاتون رو دوباره پیاده سازی کنید اما زمانی که دارید از interface استفاده می کنید فقط structure کلاستون مشخص شده و تازه باید member هاتون رو پیاده سازی کنید.
مثلا می دانیم که هر شکل هندسی حتما مساحت داره اما به این سوال می تونید جواب بدید که "مساحت شکل هندسی با چه فرمولی بدست می آید؟" در اینجا لازمه یک interface به نام شکل هندسی تعریف کنید و بعد برای هر شکل هندسی جداگانه فرمولی بنویسید که مساحت اون رو بدست بیاره. فرض کنید می خواستید این کار رو با inheritance انجام بدید ، کاملا مشخصه که هیچ جوری نمیشه مساحت شکل هندسی رو پیاده سازی کرد پس مجبوریم در کلاس shape متدی برای محاسبه مساحت نزاریم. ولی ممکنه بگید که خوب اول شکل هندسی رو inherit می کنیم و بعد توی کلاس مثلا دایره این متد رو پیاده سازی می کنیم ، اما developer شما ممکنه حتی ندونه که باید برای دایره متد مساحت بنویسه.

Peyman_Ranjbar
شنبه 20 فروردین 1384, 05:54 صبح
خیلی ممنون از توضیحاتتون
:flower: :flower: :flower: :flower: :flower: