PDA

View Full Version : سوالی در مورد وراثت



mostafa_cpp
جمعه 14 بهمن 1384, 00:06 صبح
سلام

کلاسی داریم به نام Point
چطور میشه کلاسی از کلاس Point به نام Rectangle مشتق کرد که چهار گوشه مستطیل چهار نقطه باشند ؟

Inprise
جمعه 14 بهمن 1384, 16:00 عصر
"چطور" اش وابسته به قالب کلاس پدر و هدفت از تولید کلاس فرزنده . قاعده مشخص و کلی ای وجود نداره . اما معمولا" یک کلاس رو از پدری کلی تر مشتق میکنند ، مثلا معمولا یک کلاس Shape وجود داره که برخی ویژگیهای اولیه یک شکل رو ارائه میکنه و بعد یک کلاس مستطیل یا دایره از اون مشتق میشه ؛

mostafa_cpp
جمعه 14 بهمن 1384, 18:44 عصر
همینطوره
من کلاس پایه ای دارم به نام shape و point رو از اون مشتق کردم
حالا میخوام کلاس rectangle ر. از point مشتق کنم ولی نمیخوام که کلاس مستطیل طول و عرض داشه باشه ، بلکه به جای طول و عرض چهار نقطه به عنوان چهار گوشه مستطیل داشته باشه

Inprise
جمعه 14 بهمن 1384, 19:53 عصر
کار جالبی نیست ، اما بهر حال این به خودت مربوطه ؛ یک کلاس از Point مشتق کن که غیر از مختصات یک نقطه ، که از کلاس پدر بهش ارث میرسه ، سه تا مشخصهء نقطهء دیگه هم داشته باشه . میتونی بجای کلاس ، یک Struct بسازی که چهار عضوش یعنی چهار نقطه مختصاتی اش چهار نمونه از کلاس Point هستند

mostafa_cpp
جمعه 14 بهمن 1384, 21:59 عصر
یک کلاس از Point مشتق کن که غیر از مختصات یک نقطه ، که از کلاس پدر بهش ارث میرسه

یعنی فقط x1,x2 رو به ارث ببره و باقی x ها و y ها مربوط به خود کلاس مستطیل باشه ؟


یک Struct بسازی که چهار عضوش یعنی چهار نقطه مختصاتی اش چهار نمونه از کلاس Point هستند

منظورت استفاده از ترکیب بجای وراثته ؟

Inprise
شنبه 15 بهمن 1384, 01:38 صبح
اگه کلاس نقطه فقط یک x داره ، کلاس مستطیل غیر از به ارث بری اون میتونه سه تا x هم خودش ارائه کنه ، یا هر چیزی شبیه به این .

- بله ؛ وقتی قراره موجودی بسازی که منطقا فقط تشکیل شده از چند عنصر ، بهتره بجای اینکه با ساختن یک کلاس ، طراحی ات رو پیچیده تر کنی ، یک Struct براش در نظر بگیری و اجزاء اش رو از اون عنصر خاص بسازی . یعنی اگه قراره یک طراحی شیء گرای واقعی داشته باشی بهتره مستطیل رو از Shape مشتق کنی ، اما اگه مستطیل فقط و فقط تشکیل میشه از چهار نقطه ، خوب یک ساختار ، حاوی چهار نمونه از کلاس Point میتونه پیشنهاد بهتری باشه ؛ و در هر حال اینا همه پیشنهادهای کلی هستند ، قانون مشخصی وجود نداره ، باید خودت تصمیم بگیری و تشخیص بدی کدوم یکی برای کد تو مناسب تره .

mostafa_cpp
شنبه 15 بهمن 1384, 08:53 صبح
یک دنیا ممنون