PDA

View Full Version : سوال: کدام روش مشتق گرفتن از کلاس بهتره؟



NewLife2008
چهارشنبه 17 شهریور 1389, 08:05 صبح
سلام
دوستان عزیز اگه ممکنه در مورد مسله زیر، یه مشورتی به من بدید.
اگر در یک فرم ، از یک کلاس ، در ایونت های مختلف استفاده بشه ، کدوم روش بهتره: اینکه در هر رویداد یکبار از کلاس مشتق بگیریم یا اینکه به صورت سراسری یکبار از کلاس مشتق بگیریم و بعد در ایونت ها از اون استفاده کنیم؟
مثلا کلاسی داریم به نام class1 و در رویداد های Button1_click، text1_change و Button2_Click از این کلاس استفاده میکنیم.حالا آیا بهتره در هر کدوم از این ایونتها بطور جدا گانه class1 رو new کنیم؟ یا یکبار به صورت عمومی class1 رو new کنیم و در این سه ایونت از اون استفاده کنیم؟
دوستان اگه میشه لطف کنید و با دلیل بگین.

اَرژنگ
چهارشنبه 17 شهریور 1389, 08:16 صبح
سلام
دوستان عزیز اگه ممکنه در مورد مسله زیر، یه مشورتی به من بدید.
اگر در یک فرم ، از یک کلاس ، در ایونت های مختلف استفاده بشه ، کدوم روش بهتره: اینکه در هر رویداد یکبار از کلاس مشتق بگیریم یا اینکه به صورت سراسری یکبار از کلاس مشتق بگیریم و بعد در ایونت ها از اون استفاده کنیم؟
مثلا کلاسی داریم به نام class1 و در رویداد های Button1_click، text1_change و Button2_Click از این کلاس استفاده میکنیم.حالا آیا بهتره در هر کدوم از این ایونتها بطور جدا گانه class1 رو new کنیم؟ یا یکبار به صورت عمومی class1 رو new کنیم و در این سه ایونت از اون استفاده کنیم؟
دوستان اگه میشه لطف کنید و با دلیل بگین.
مشتق گرفتن یا نمونه گرفتن؟
سوالی که میپرسید به نمونه گرفتن ربط دارد، یا اینکه سوال اصلاً یک چیزه دیگری است.
قبل از ادامه در بحث لطفاً مشخص کنید مشتق گرفتن یا نمونه گرفتن مورد نظرتان است.

NewLife2008
چهارشنبه 17 شهریور 1389, 08:24 صبح
ببخشید من با اصطلاحات زیاد آشنا نیستم.
وقتی به اینصورت عمل میکنیم ()class1 cls1=new class1 ، میشه نمونه گرفتن یا مشتق گرفتن؟
فکرکنم همون نمونه گرفتن میشه:لبخندساده:

اَرژنگ
چهارشنبه 17 شهریور 1389, 08:43 صبح
ببخشید من با اصطلاحات زیاد آشنا نیستم.
وقتی به اینصورت عمل میکنیم ()class1 cls1=new class1 ، میشه نمونه گرفتن یا مشتق گرفتن؟
فکرکنم همون نمونه گرفتن میشه:لبخندساده:
بله نمونه گرفتن.
بستگی دارد که :
اگر کلاس ۱ ، یک عضوی از کلاس فرم باشد، همانطوری که میدونید میشه یکبار نمونه گرفت و باهاش کار کرد،
ولی دلیل اینکار برایه اینکه مداوم نمونه نساخت و کمتر کد نوشت نیست. مثلاً در ماشین هروقت که فرمان را به چپ و یا راست میچراخانید، وجود داشتن چرخهایه جلو بهش مرتبط نیستند، بلکه یک ماشین باید ۲ تا چرخ جلو را داشته باشد.
ولی اگر کلاس ۱، به فرم ربطی ندارد و فقط در اون ایونت برایه کاری به وجود میاد و بعد لازم نیست، در هر ایونت بوجود آوردنش درست است.
حالت اول در مورد ساختاری است، و کلاس ۱ به عنوان قسمتی از فرم به نظر میاد (مثل چرخهایه ماشین).
حالت دوم حالت رفتاری است، و کلاس ۱ مانند یک کلاس کمک کنند استفاده میشه، (مانند یک کسی که شیشه ماشین را پاک میکنه بعدش غیبش میزنه).
اگرچه از لحاض خارجی نمیشه تفاوتی در عملکرد هر دو روش در زمان اجرا دید ولی از لحاض فلسفه کاری و بیان رابطه بین کلاس۱ و فرم در کد تفاوت دارند.
برایه روشهایه دیگر به Dependency Injection (DI) و Inversion of Control
(IoC) نگاه بندازید.

NewLife2008
چهارشنبه 17 شهریور 1389, 09:12 صبح
حالت اول در مورد ساختاری است، و کلاس ۱ به عنوان قسمتی از فرم به نظر میاد (مثل چرخهایه ماشین).
حالت دوم حالت رفتاری است، و کلاس ۱ مانند یک کلاس کمک کنند استفاده میشه، (مانند یک کسی که شیشه ماشین را پاک میکنه بعدش غیبش میزنه).
از شرح کاملتون ممنونم.
فقط یه سوال.آیا منظورتون از حالت ساختاری اینه که کلاس 1 تمام کدها و اعمال مربوط به فرم 1 رو در خودش داره؟ و در مورد حالت رفتاری منظور اینه که ممکنه در فرم1 در یه ایونت نیاز به کلاس2 داشته باشیم ؟

اَرژنگ
چهارشنبه 17 شهریور 1389, 09:35 صبح
از شرح کاملتون ممنونم.
فقط یه سوال.آیا منظورتون از حالت ساختاری اینه که کلاس 1 تمام کدها و اعمال مربوط به فرم 1 رو در خودش داره؟
خیر، شاید باید میگفتم حالت ترکیبی (از لحاظ ساخته شدن)، مثلاً چرخهایه ماشین با شاسی و موتور و دنده و ... همه ترکیب شدن و ماشین را ساختن (ماشین از ترکیب شدن همه اون قطعات بوجود اومده).
در فرم ، وقتی که ۱ باتن قرار میدید، در حقیقت دارید یک فرم دلخاهتان را با ترکیب کردن کنترلهایه مختلف بوجود میارید (composition).

کلاس ۱ فقط کدها و اعمال مربوط به خودش را دارد ولی جزو فرم ۱ قرار گرفته (یک قطعه‌ای از فرم ۱ هستش).



و در مورد حالت رفتاری منظور اینه که ممکنه در فرم1 در یه ایونت نیاز به کلاس2 داشته باشیم ؟
شاید نباید بهش حالت رفتاری میگفتم ، به نظرم بیشتر گمراه کننده میاد تا توجیح کننده.
کلاسهایه کمک کننده، Helper Classes ، که جزوی از کلاس نیستند، مثلاً یک مکانیک را ما جزو ماشین نمیدانیم، ولی وقتی که ماشین به سرویس میره :
Car.Service ، یک نمونه از مکانیک ساخته میشه و بررویه ماشین اعمالی انجام میده.

فقط در داخل اون ایونت استفاده از یک نمونه از اون کلاس بکار میاد و در خارج از اون ایونت داشتن یک نمونه از اون کلاس ۱ مفهومی ندارد.