PDA

View Full Version : تداخل فیلدها در ارث بری



azita90
سه شنبه 06 خرداد 1393, 12:21 عصر
سلام. عید همه مبارک.
من برای پیاده سازی دیزاین پترن ابسترکت فکتوری دچار مشکل شدم. فیلدهای مشترک رو در کلاس پدر به صورت استاتیک تعریف کردم اما هر کدوم از بچه های کلاس پدر با تغییر فیلدهای خودش فیلدهای سایر بچه ها رو هم عوض می کنند. لازم به ذکر است که نمی توان استاتیک بودن را برداشت چون دارم از متود تایمر تیک استفاده می کنم که اگر فیلدها استاتیک نباشن شناسایی نمیشن :(
چکار کنم که هر بچه که فیلد خودش رو تغییر میده فیلد بقیه تغییر نکنه؟

ashkan1234
سه شنبه 06 خرداد 1393, 22:37 عصر
فیلدهاتونو توی پدر بصورت پرایویت تعریف کنید!
تا بچه بهش دسترسی مستقیم نداشته باشه!
بعد اگه خواستید توی بچه بهش مقدار بدید،برای هر فیلد پراپرتی تعریف کنید!
البته طبق چیزی که از سوال متوجه شدم پاسخ دادم!
موفق باشید:لبخند:

mehdi.mousavi
چهارشنبه 07 خرداد 1393, 10:34 صبح
سلام. عید همه مبارک. من برای پیاده سازی دیزاین پترن ابسترکت فکتوری دچار مشکل شدم. فیلدهای مشترک رو در کلاس پدر به صورت استاتیک تعریف کردم اما هر کدوم از بچه های کلاس پدر با تغییر فیلدهای خودش فیلدهای سایر بچه ها رو هم عوض می کنند. لازم به ذکر است که نمی توان استاتیک بودن را برداشت چون دارم از متود تایمر تیک استفاده می کنم که اگر فیلدها استاتیک نباشن شناسایی نمیشن :( چکار کنم که هر بچه که فیلد خودش رو تغییر میده فیلد بقیه تغییر نکنه؟

سلام.
به گمانم مشکل اصلی، برداشت شما از Abstract Factory هستش. برای آگاهی دقیق
از این Design Pattern (و مشاهده مثالی در این ارتباط) لطفا به این URL رجوع کنید (http://www.dofactory.com/Patterns/PatternAbstract.aspx).

موفق باشید.

azita90
چهارشنبه 07 خرداد 1393, 10:43 صبح
فیلدهاتونو توی پدر بصورت پرایویت تعریف کنید!
تا بچه بهش دسترسی مستقیم نداشته باشه!
بعد اگه خواستید توی بچه بهش مقدار بدید،برای هر فیلد پراپرتی تعریف کنید!
البته طبق چیزی که از سوال متوجه شدم پاسخ دادم!
موفق باشید:لبخند:
سوالم دقیقا اینه: فرض کنید که توی یک محیط گرافیکی تعدادی شئ متحرک داریم(هر شئ در یک کلاس جداگانه است) که همه ی اونها فرزند یک abstract class هستند.اگه فیلدهای مشترک اونها که شامل طول و عرض و محل قرار گیری شون توی صفحه است رو ببرم توی کلاس پدر و استاتیک هم باشند، درصورتی که دو یا چندتا از اشیا بخواهند همرمان در صفحه حرکت کنند،وقتی یکی شون حرکت می کنه و محلش عوض میشه روی حرکت یه شئ دیگه که از یه کلاس دیگه هست هم تاثیر میذاره و حرکت اون را از حالتی که براش تعریف کردم منحرف می کنه.
اگه فیلدهای مشترک رو توی پدر پرایویت تعریف کنم،مجبورم عین همون فیلدها رو برای تک تک کلاس ها هم بذارم. آیا این به مفهوم abstractFactory میخوره؟

rahnema1
چهارشنبه 07 خرداد 1393, 11:08 صبح
اصلا شما نباید استاتیک تعریف کنید . تایمر را با کد ایجاد کنید نه با کشیدن آیکون روی صفحه. اگه بتونید کد را بذارید اینجا تا بتونیم ببینیم چه طور نوشتید

azita90
چهارشنبه 07 خرداد 1393, 11:41 صبح
اصلا شما نباید استاتیک تعریف کنید . تایمر را با کد ایجاد کنید نه با کشیدن آیکون روی صفحه. اگه بتونید کد را بذارید اینجا تا بتونیم ببینیم چه طور نوشتید
راستش من امروز پروژه ام رو تحویل دادم.چون فصل امتحانات نزدیکه فعلا نمی تونم روی این موضوع کار کنم.انشا ا... تابستون روش کار می کنم.ممنون از شما.

ashkan1234
چهارشنبه 07 خرداد 1393, 12:02 عصر
سوالم دقیقا اینه: فرض کنید که توی یک محیط گرافیکی تعدادی شئ متحرک داریم(هر شئ در یک کلاس جداگانه است) که همه ی اونها فرزند یک abstract class هستند.اگه فیلدهای مشترک اونها که شامل طول و عرض و محل قرار گیری شون توی صفحه است رو ببرم توی کلاس پدر و استاتیک هم باشند، درصورتی که دو یا چندتا از اشیا بخواهند همرمان در صفحه حرکت کنند،وقتی یکی شون حرکت می کنه و محلش عوض میشه روی حرکت یه شئ دیگه که از یه کلاس دیگه هست هم تاثیر میذاره و حرکت اون را از حالتی که براش تعریف کردم منحرف می کنه.
اگه فیلدهای مشترک رو توی پدر پرایویت تعریف کنم،مجبورم عین همون فیلدها رو برای تک تک کلاس ها هم بذارم. آیا این به مفهوم abstractFactory میخوره؟
اگر کد قرار میدادید که قطعا زودتر به نتیجه میرسیدم!
همونطور که عرض کردم وقتی فیلدها رو Private تعریف کردید،بعدش میایید براشون پراپرتی تعریف میکنید!
میتونید برای هر شی یک فیلد آی دی تعریف کنید که مقدارش Uniq باشه و بقیه روش تاثیر نذارن!
نمیدونم چقدر به سوالتون پاسخ بهینه ای داده باشم!:لبخند:

azita90
چهارشنبه 07 خرداد 1393, 22:08 عصر
اگر کد قرار میدادید که قطعا زودتر به نتیجه میرسیدم!
همونطور که عرض کردم وقتی فیلدها رو Private تعریف کردید،بعدش میایید براشون پراپرتی تعریف میکنید!
میتونید برای هر شی یک فیلد آی دی تعریف کنید که مقدارش Uniq باشه و بقیه روش تاثیر نذارن!
نمیدونم چقدر به سوالتون پاسخ بهینه ای داده باشم!:لبخند:

فیلد location رو همه ی کلاس هام که بچه ی یه کلاس abstract اند دارند.یعنی شما میگید اگه هر کلاس یه آی دی داشته باشه، موقع حرکت دو نوع شئ از دو کلاس مختلف، تغییر کردن هر لوکیشن روی لوکیشن شئ دیگه ای اثر نمیذاره؟ آخه به خاطر استفاده از تایمر مجبور شدم لوکیشن رو استاتیک تعریف کنم!:اشتباه:
ببخشید اینکه راه حل هایی که دوستان پیشنهاد میدن رو روی پروژه م اعمال نمیکنم و نتیجه ش رو نمیگم، به خاطر اینه که امروز پروژه م رو تحویل دادم و چون توی فرجه ها هستم، وقت ندارم که این راه حل ها رو روش اعمال کنم!

ashkan1234
چهارشنبه 07 خرداد 1393, 22:21 عصر
فیلد location رو همه ی کلاس هام که بچه ی یه کلاس abstract اند دارند.یعنی شما میگید اگه هر کلاس یه آی دی داشته باشه، موقع حرکت دو نوع شئ از دو کلاس مختلف، تغییر کردن هر لوکیشن روی لوکیشن شئ دیگه ای اثر نمیذاره؟ آخه به خاطر استفاده از تایمر مجبور شدم لوکیشن رو استاتیک تعریف کنم!:اشتباه:
ببخشید اینکه راه حل هایی که دوستان پیشنهاد میدن رو روی پروژه م اعمال نمیکنم و نتیجه ش رو نمیگم، به خاطر اینه که امروز پروژه م رو تحویل دادم و چون توی فرجه ها هستم، وقت ندارم که این راه حل ها رو روش اعمال کنم!
من دقیقا متوجه نشدم که شما میخوای از یک کلاس ارث بری کنی یا چندتا؟
اصلا میدونید باید abstract باشه پدر؟(abstract کلاسیه که خودش هیچ کارایی نداره،غیر از اینکه بچه هاش ازش ارث ببرن!مثلا پدری که بچه داشته باشه ولی کاری براشون انجام نده!یا مثلا توی یه شرکت کلاس پرسنل رو abstract در نظر بگیرید،خودش به تنهایی معنی نداره،کلاسای فرزندش مثلا میشن پرسنل حسابداری!اونموقعس که معنی پیدا میکنه!این تعریفو کردم که مطمئن بشید دارید استفاده درستی از کلاسها میکنید!)
در مورد عرض بنده هم،وقتی هر فیلد یه آی دی منحصر به فرد داشته باشه،دیگه بقیه موقع مقدار گرفتن کانفلیگ بینشون ایجاد نمیشه!
ولی خودتونم میدونید،این توضیحاتی که بنده یا سایر دوستان میدن،اون تصوریه که از برنامه شما دارن!برای اینکه نتیجه بهتری بگیرید بهتره کد قرار بدید،حالا نه عین کد خودتون،میتونید مشابه اش رو قرار دهید!
در مورد جمله آخرتون هم باید عرض کنم،اگر شما از راه حل های پیشنهادی استفاده نمیکنید،چرا سوال رو مطرح کردید!؟:لبخند: