PDA

View Full Version : سوال: آیا مفهوم چند ریختی در معماری شی گرایی این است؟



alireza_tavakol
چهارشنبه 28 مرداد 1388, 01:48 صبح
در کتاب ها و مقاله هایی که در رابطه با شی گرای به رشته تحریر در آمده است تعاریف و مفاهیم متفاوتی از polymorphism گفته شده است!
برای روشن تر شدن منظورم بعضی از این مفاهیم را ذکر میکنم

الف )وقتی در کلاسی متدهایی هم نام با خروجی یکسان داشته باشیم ولی پارامترهای ورودی متفاوتی برای این متد ها تعریف شده باشد اصطلاحا" گفته میشود این متد چند ریخت دارد (Method Overloading)

ب )وقتی در کلاسی عملگر ها (+ - * / % ...) بگونه ای خواص تعریف شوند که باعث شود محاسبات مستقیما" روی اشیا نمونه سازی از کلاس امکان پذیر شود اصطلاحا" گفته میشود این عملگر چند ریخت دارد (Overloaded Operators)

ج )وقتی در کلاس base متدی را به شکل virtual تعریف کرده باشیم و در کلاس Derived آن متد را با استفاده از override منسوخ نماییم اصطلاحا" گفته میشود این متد چند ریخت دارد (Overriding of Methods)

د )وقتی در کلاس base متدی پیاده سازی شده باشد و در کلاس Derived آن متد را مجدا" با کلمه New پیاده سازی نماییم (بدون استفاده از virtual و override )اصطلاحا" گفته میشود این متد در کلاس های والد و فرزند چند ریخت دارد (Localization)

و )امکان انتساب شی فرزند به شی پدر را چند ریختی گویند (Base_Object = Drived_Object)

ی ) . . .



به نظر شما دوست عزیز تعریف علمی و دقیق مفهوم پلی مرفیسم چیست؟

با تشکر/

Amir Oveisi
چهارشنبه 28 مرداد 1388, 02:11 صبح
قسمت 'و' همون مفهوم Polymorphism در معماری Object Oriented هست

Evil 69
چهارشنبه 28 مرداد 1388, 08:21 صبح
امکان این که بتونی اشیا مختلف رو با هم ترکیب کنی رو چند ریختگی میگن مثل اینکه شما یک شی از یک Base مشتق می کنین و بعد توی یک تابع که پارامتری از توع Base می خواد مکی تونین شی مشتق شده رو هم بفرستین

Sociant
چهارشنبه 28 مرداد 1388, 10:21 صبح
Through inheritance, a class can be used as more than one type; it can be used as its own type, any base types, or any interface type if it implements interfaces. This is called polymorphism.

Polymorphism (C# Programming Guide)
MSDN



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

Open-Source
چهارشنبه 28 مرداد 1388, 10:37 صبح
ما چند ریختی رو بیشتر به همون شکل قسمت الف شنیدیم. :متفکر:ولی مابقی رو هم رد نمیکنم.

Alireza_Salehi
چهارشنبه 28 مرداد 1388, 11:27 صبح
در کتاب ها و مقاله هایی که در رابطه با شی گرای به رشته تحریر در آمده است تعاریف و مفاهیم متفاوتی از polymorphism گفته شده است!
برای روشن تر شدن منظورم بعضی از این مفاهیم را ذکر میکنم

الف )وقتی در کلاسی متدهایی هم نام با خروجی یکسان داشته باشیم ولی پارامترهای ورودی متفاوتی برای این متد ها تعریف شده باشد اصطلاحا" گفته میشود این متد چند ریخت دارد (Method Overloading)

ب )وقتی در کلاسی عملگر ها (+ - * / % ...) بگونه ای خواص تعریف شوند که باعث شود محاسبات مستقیما" روی اشیا نمونه سازی از کلاس امکان پذیر شود اصطلاحا" گفته میشود این عملگر چند ریخت دارد (Overloaded Operators)

ج )وقتی در کلاس base متدی را به شکل virtual تعریف کرده باشیم و در کلاس Derived آن متد را با استفاده از override منسوخ نماییم اصطلاحا" گفته میشود این متد چند ریخت دارد (Overriding of Methods)

د )وقتی در کلاس base متدی پیاده سازی شده باشد و در کلاس Derived آن متد را مجدا" با کلمه New پیاده سازی نماییم (بدون استفاده از virtual و override )اصطلاحا" گفته میشود این متد در کلاس های والد و فرزند چند ریخت دارد (Localization)

و )امکان انتساب شی فرزند به شی پدر را چند ریختی گویند (Base_Object = Drived_Object)

ی ) . . .



به نظر شما دوست عزیز تعریف علمی و دقیق مفهوم پلی مرفیسم چیست؟


با تشکر/
Polymorphism یک مفهوم است که به واسطه پیاده سازی آن در زبان های برنامه نویسی قابلیت هایی به آن زبان اضافه می شود، که مواردی که برشمردید برخی از آنها است.
برای اطلاعات بیشتر به لینک های زیر مراجعه کنید:
http://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29
http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming

اَرژنگ
چهارشنبه 28 مرداد 1388, 12:51 عصر
Polymorphism در معماری شئیگرائی مفاهیم مختلفی را به خودش میگیرد. همانطوری که همه زبانهایه آدمیزاد قابلیت بازگو کردن کامل یک مفهوم را در یک کلمه ندارند، بعضی از کلمات به مفاهیم مختلف به کار میرند، به عنوان مثال در فارسی برایه فیزیک فقط یک کلمه به ۲ معنی استفاده میشه: "سرعت"، در انگلیسی ۲ کلمه مختلف و به ۲ مفهوم مختلف وجود دارند :velocity, speed
Polymorphism همه کلمه‌ای است که به دلیل میخ مانندش هر جا چکش دارند ازش استفاده میکنند.

alireza_tavakol
چهارشنبه 28 مرداد 1388, 14:38 عصر
توی کتاب برنامه نویسی به زبان ++C تالیف جعفر نژاد صفحه 303

چند ریختی به دو دسته کلی تقسیم شده است

1) چند ریختی در زمان ترجمه
2) چند ریختی در زمان اجرا

دوستان نظر یا نقدی در باره این نوع تقسیم بندی در معماری شی گرا ندارد:تشویق:

amir_pro
چهارشنبه 28 مرداد 1388, 15:12 عصر
پولی مورفیسم زمان اجرا تقریبا همان توابع مجازی که در زمان اجرا و با توجه به بروز شرایط خاصی کامپایلر تصمیم میگیره که کدوم نسخه از این تابع را اجرا کنه

Sociant
چهارشنبه 28 مرداد 1388, 21:24 عصر
....تالیف جعفر نژاد...
پیشنهاد فوق العاده دوستانه بر حسب تجربه ام اینه که سراغ تالیفات ایشون نرید .
3 تا کتاب ازش دارم که هر سه تا رو گذاشتم کنار واسه سبزی فروش محل:اشتباه:

با نظر آرژنگ نسبتا مخالفم ، ما تو دنیای برنامه نویسی داریم کار میکنیم و البته با زبانهای شی گرا ، که همشون از استانداردهای تعریف شده تو این زمینه تبعیت میکنند. اگرچه درمورد تعریف Polymorphism تو لفظ کاملا یکسان نیستن ولی در مفهوم همه به یک نقطه اشاره میکنن.

پیشنهادمم به alireza_tavakol اینه که تو پیدا کردن جواب واسه سوالای به این اندازه پایه ای و مفهومی به مراجع معتبر رجوع کنند مگه اینکه هدفشون جلب مشارکت بچه ها باشه یا به شکل غیر مستقیم یاد دادن به کسایی که یا نمیدونن یا فکر میکنن که میدونن


یا فکر میکنن که میدوننمنظورم خودم بودم چون تا قبل از این تاپیک از دید دیگه ای به این مسئله نگاه میکردم

meysam_pro
چهارشنبه 28 مرداد 1388, 22:19 عصر
) چند ریختی در زمان اجرا

چند ریختی در زمان اجرا فکر میکنم زیباترین شکل Poly Morphism هستش(معادل مفهوم Late binding). به شخصه فکر میکنم قوی ترین وجه این تکنیک همینه چون تشخیض OverLoading(فرقی نمیکنه، چه متد، چه اپراتور) واسه ابتدایی ترین برنامه نویسهای OO ممکنه. ولی Late binding رو حتی با اینکه یاد می گیری ولی طول میکشه تا بتونی تو یه برنامه ازش به صورت درست استفاده بکنی.

antisocial
چهارشنبه 28 مرداد 1388, 22:19 عصر
پیشنهاد فوق العاده دوستانه بر حسب تجربه ام اینه که سراغ تالیفات ایشون نرید .
3 تا کتاب ازش دارم که هر سه تا رو گذاشتم کنار واسه سبزی فروش محل:اشتباه:


دقیقا درست میگن.من فکر میکنم ایشون قصد دیگه ای از کتاب چاپ کردن دارن.
تو بعضی از کتاب های خارجی کار به حدی پیچیده است که هر فصل کتاب رو یک نفر مینویسه .اما ایشون فکر کنم هرسال دو سه تا کتاب چاپ میکنه. که به غیر از مزخرفات چیز دیگه ای توش پیدا نمیکنید.تمام مطالبش اشتباه و گمراه کنندس.

polymorphism فرآیندی است که بر اساس آن میتوان یک متد را با نام مشابه اما به شکل های مختلف و دستورالعمل های متفاوت اجرا نمود.فرآیند چندریختی را میتوان به دو روش انجام داد :
با استفاده از مفهوم ارث بری
با استفاده از Interface ها
..................................................

linux
پنج شنبه 29 مرداد 1388, 00:35 صبح
ج )وقتی در کلاس base متدی را به شکل virtual تعریف کرده باشیم و در کلاس Derived آن متد را با استفاده از override منسوخ نماییم اصطلاحا" گفته میشود این متد چند ریخت دارد (Overriding of Methods)
و )امکان انتساب شی فرزند به شی پدر را چند ریختی گویند (Base_Object = Drived_Object)
به نظر شما دوست عزیز تعریف علمی و دقیق مفهوم پلی مرفیسم چیست؟
با تشکر/

"ج" و "و" در مجموع چیزی هست که شما به دنبال آن می گردید.
به کلمه چند ریختی توجه کنید .
اگر خواستید بگویید تا با یک مثال مساله را بیشتر روشن کنم.

alireza_tavakol
پنج شنبه 29 مرداد 1388, 00:56 صبح
Late binding رو حتی با اینکه یاد می گیری ولی طول میکشه تا بتونی تو یه برنامه ازش به صورت درست استفاده بکنی.

میشه یکم بیشتر توضیح بدین:کف:

alireza_tavakol
پنج شنبه 29 مرداد 1388, 00:59 صبح
polymorphism فرآیندی است که بر اساس آن میتوان یک متد را با نام مشابه اما به شکل های مختلف و دستورالعمل های متفاوت اجرا نمود.فرآیند چندریختی را میتوان به دو روش انجام داد :
با استفاده از مفهوم ارث بری
با استفاده از Interface ها
..................................................

میشه در رابطه با بخش قرمز رنگ توضیحات بیشتری ارائه نمایید:کف:

alireza_tavakol
پنج شنبه 29 مرداد 1388, 01:05 صبح
مفهوم پلی مورفیزم اغلب به وسیله (( یک رابط ، چند متد )) بیان می شود. مثلا" حس بویایی سگها نمونه ای از پلی مورفیزم است ، چنانچه بوی گربه ای به مشام سگی برسد در آن صورت پارس میکند و به دنبال گربه خواهد رفت.اما اگر بوی غذا به مشامش برسد ، بزاق آن ترشح خواهد و به طرف ظرف غذا خواهد رفت.


داشتم با یکی از مهندسین تحصیل کرده در دانشگاه پیام نور این جملات رو می خوندم ، ولی دوستم برداشت جالبی از این مطلب کرد ، گفتم خالی از لطف نیست این نظریه رو اینجا ثبت کنم ببینم نظر اساتید چیه؟

دوستم گفت اگه فرض رو بر درست بودن این تعریف بگذاریم پس توابع با نوع خروجی نامعلوم هم در مفهوم چند ریختی میگنجه! گفتم یعنی چی ؟ کد های زیر رو توی #C واسم نوشت .

public ali initialize<ali>(object value)
{
return (ali)value;
}

نحوه صدا زدن متد بالا برای دو متغییر متفاوت

int a = initialize<int>(15);
object b = initialize<object>("17");

دوستم میگفت همون طوری که دستگاه بویایی سگ یک چیز ثابت و واحدی است و فقط نسبت به ورودی های مختلف (بوی گربه ، بوی غذا ) خروجی های (پارس کردن ، ترشح بزاق) متفاوتی داره پس تابع initialize هم ماهیت ثابتی داره ولی خروجی های متفاوتی داره و در حیطه این مثال می گنجه!

حالا چند تا مبحث مطرح میشه
1-کتاب مذکور مثال مناسبی رو واسه انتقال مفهوم انتخاب نکرده
2-دوست من افکار منحرفی داره و نظریه پردازی غلطی کرده *
3-هم کتاب مثالش مناسب بوده و هم افکار دوست من منحرف نبود => کد های زیر نوعی از چند ریختی رو نشان میدهند!
* من با گزینه دوم موافقم

Sociant
پنج شنبه 29 مرداد 1388, 02:05 صبح
به نظرم مثال کتاب یا حتی تعریفش غلط اندازه!
مشکل از دوستتون نیست ، مثال کتاب آدمو منحرف میکنه:لبخند:
شاید بهتر بود همون مثال نسبتا معروف صدای حیونها رو میزد
اینکه هر حیونی صدایی از خودش در میاره اما هر حیوون صدای مخصوص به خودش رو داره

JaguarXF
پنج شنبه 29 مرداد 1388, 06:48 صبح
چون توی تالار سی شارپ این سوال گفته شده
بهترین مثال و پیاده سازی از اون میتونه استفاده از اینترفیس ها و پیاده سازی اونها باشه.

اَرژنگ
پنج شنبه 29 مرداد 1388, 07:07 صبح
با نظر آرژنگ نسبتا مخالفم ، ما تو دنیای برنامه نویسی داریم کار میکنیم و البته با زبانهای شی گرا ، که همشون از استانداردهای تعریف شده تو این زمینه تبعیت میکنند. اگرچه درمورد تعریف Polymorphism تو لفظ کاملا یکسان نیستن ولی در مفهوم همه به یک نقطه اشاره میکنن.
استانداردی در این زمینه؟ چه استانداردی و در چه زمینه‌ای؟تا جایی که من میدونم استانداردی وجود ندارد، فقط هرکی هر جوری دلش میخواهد استاندارد یک زبان جدید را خودش درست میکند، ولی اگر شما چیزی دیگری شنیده‌اید من مشتاق دانستن هستم.
بله به یک نقطه اشاره میکنند، ولی از جهات مختلف :)
http://en.wikipedia.org/wiki/Type_polymorphism
حتی در برنامه نویسی شئیگرا معنیها مختلفی را به خود میگیره:
Type Polymorphism, Behaviour Polymorphisim, Interface Polymorphism, Method Signature Polymorphisim, ...
چیزی را که باید درک کرد این است که Polymorphisim یک مفهوم را میرساند، ولی این مفهوم به شکلهایه مختلف و برایه نیازهایه مختلف استفاده میشه.
اول مفهوم وجود داشت و بعدش زبانهایه برنامه نویسی از این مفهومات کمک گرفتن. اصل این به فلسفه بر میگرده و اگر دنبال تعریف بگرید از برنامه ریزی فاصله میگیرید و به فلسفه نزدیک میشید.
به جایه تمرکز به معنی و تعریف ( تعریف فقط بدرد قبول شدن در امتحان میخورد)، به کاربردهایه مختلف در زمینه‌هایه مختلف نگاه بندازید، بیشتر فایده میبرید.
تعریف هندانه مزه‌ای ندارد!

meysam_pro
پنج شنبه 29 مرداد 1388, 14:03 عصر
کد زیر رو در نظر بگیرید:

public interface IDoor
{
void openDoor();
}

یک اینترفیس تعریف کردم که یک متد داره برای باز کردن در(دقت کنید که در امضای متد Modifier نمیاریم)

internal Home:IDoor
{
void openDoor()
{
//any implementation e.g:
this.openTheWindow
}
}
و همینطور:

internal Car:IDoor
{
void openDoor()
{
//any implementation e.g:
this.openTheWindow
}
}
هم خونه و هم ماشین در دارن و برای باز کردن هر دوش ما میگیم "در را باز کن". خب این در زمان اجرا(وقتی که میفهمیم در خونه است یا ماشین) اونرو باز میکنیم.

IDoor openDoor=new Home
در اینجا ما در زمان اجرا(یعنی همون Late Binding) میفهمیم که در خونه قراره باز بشه یا در ماشین.
خب این یک نوع چند ریختیه که من بهترین نوعش میدونم و یه کم زمان میبره تا بشه به صورت عملی استفاده اش کرد.

Linux شما هم یه مثال بزنید لطفا.

antisocial
پنج شنبه 29 مرداد 1388, 14:57 عصر
میشه در رابطه با بخش قرمز رنگ توضیحات بیشتری ارائه نمایید:کف:
سلام
چون توضیحات طولانی میشه.
یه مثال نوشتم.که کاملا همه چیز توش مشخصه....

alireza_tavakol
پنج شنبه 29 مرداد 1388, 16:09 عصر
کتاب : آموزش برنامه نویسی شیء گرا در 21 روز / نویسنده :آنتونی سنتیس / مترجم : عباس ریاضی - مهدی بنواری/صفحه 125

امروز داشتم فهرست مطالب این کتاب رو ورق می زدم رسیدم به بخش "چند شکلی بودن بیاموزیم" ، این بخش فصل های مختلفی داشت
گفتم حالا که بحث چند ریختی داغ ، شاید عنوان کردن بعضی از فصل های جالب این کتاب خالی از لطف نباشه (البته اگه اساتید در رابطه با هر کدام از موارد توضیح دهند)

تک شکلی ( Monomorphic )
متغییر چند شکلی ( Polymorphic Variable )
چند شکلی بودن از نوع در برداشتن ( درونی - Inclusion )
چند شکلی بودن پارامتری ( Parametric )

البته syntax این کتاب زبان JAVA می باشد و شاید همه موارد بالا قابل پیاده سازی در #C نباشد

linux
پنج شنبه 29 مرداد 1388, 22:59 عصر
این مثال را ببنید
35622

meysam_pro
جمعه 30 مرداد 1388, 10:50 صبح
این مثال را ببنید
35622

مثال خوبی بود، ولی به نظر شما این مثال چقدر از مفهوم (%) پلی مورفیسم رو میگیره؟

در مورد مثالی که من زدم چی میگین؟

linux
جمعه 30 مرداد 1388, 11:29 صبح
مثال خوبی بود، ولی به نظر شما این مثال چقدر از مفهوم (%) پلی مورفیسم رو میگیره؟
در مورد مثالی که من زدم چی میگین؟
طبق تعاریفی که در کتابهای مختلف آموزش سی شارپ خوانده ام پلی مورفیسم یعنی همین کار . مثال شما هم یک استفاده از پلی مورفیسم بود.

Sociant
شنبه 31 مرداد 1388, 00:06 صبح
...
در اینجا ما در زمان اجرا(یعنی همون Late Binding) میفهمیم که در خونه قراره باز بشه یا در ماشین...

فکر میکنم در مورد Late binding دچار اشتباه شدین دوست من
مثال شما ارتباط خیلی کمی با Late binding داره
البته طبق مطالبی که تو کتاب Pro C# 2008 and .Net 3.5 Platform در این مورد گفته شده

#aliyari_C
شنبه 31 مرداد 1388, 01:26 صبح
شاید بهتر بود در زبانمان می گفتیم چیز گرا تا شی گرا چون کلمه "چیز" وجود خارجی اش را بیشتر به نوعی می توان بهتر در کرد تا "شی" , چون ما در object oreinted دنیای واقعی را به دنیای مجازی تبدیل می کنیم
برای اینکه بهتر حرف های من را در کنید بیاید object oreinted خود را طراحی کنید (شخص خود را).

meysam_pro
شنبه 31 مرداد 1388, 11:28 صبح
البته طبق مطالبی که تو کتاب Pro C# 2008 and .Net 3.5 Platform در این مورد گفته شده

کدوم صفحه؟

Sociant
شنبه 31 مرداد 1388, 22:46 عصر
کدوم صفحه؟
صفحه 539 Understanding Late Binding




Simply put, late binding is a technique in which you are able to create an instance of a given type and invoke its members at runtime without having hard-coded compile-time knowledge of its existence. When you are building an application that binds late to a type in an external assembly, you hav e no reason to set a reference to the assembly; therefore, the caller’s manifest has no direct listing of the assembly.

meysam_pro
یک شنبه 01 شهریور 1388, 19:02 عصر
صفحه 539 Understanding Late Binding
شما فکر نمی کنید اینی که تو این کتاب گفته علاوه بر تایید گفته های من ، یه کاربردی از مفهوم Late Bining هستش؟
Any misconception?