PDA

View Full Version : درخواست پروژه شی گرایی



محسن شامحمدی
یک شنبه 14 شهریور 1389, 18:03 عصر
دوستان یک پروژه ای واقعی که توش شی گرایی رعایت شده باشه سراغ دارین؟
منظورم اینه که نمونه الکی از کلاس car و نمی دونم اینطور چیزا نباشه بلکه یکی برنامه ای رو که نوشته. توش شی گرایی رو رعایت کرده باشه.
من شی گرایی رو فهمیدم فقط در اجراش ( استفاده از اون در برنامه هام) مشکل دارم
از این نمونه های شی گرایی خودم یکی دارم می زارم شما هم استفاده کنید


یک سوال درمورد شی گرایی داشتم
با استفاده از ارث بری می شه مخشخصات از کلاس پدر به ارث کرفته بشه و تغییر (override ) داده بشه.
حالا سوالم اینه که می شه مثلا یک متدشو کلا حذف کرد :متفکر:

مثلا از کلاس تکست باکس ارث بری کنیم و خاصیت enabled اونو پاک کنیم .:کف:

اَرژنگ
یک شنبه 14 شهریور 1389, 18:20 عصر
یک سوال درمورد شی گرایی داشتم
با استفاده از ارث بری می شه مخشخصات از کلاس پدر به ارث کرفته بشه و تغییر (override ) داده بشه.
حالا سوالم اینه که می شه مثلا یک متدشو کلا حذف کرد :متفکر:

مثلا از کلاس تکست باکس ارث بری کنیم و خاصیت enabled اونو پاک کنیم .:کف:
چنین کاری خلاف اصول پلی مورفیزم است، هر چی که در کلاسهایی که ازشان ارث بری میشه باید در کلاسهایه فرزندشان هم صدق کنه.
این اصل شیگرائی را :http://en.wikipedia.org/wiki/Liskov_substitution_principle
را مطالعه کنید.

محسن شامحمدی
دوشنبه 15 شهریور 1389, 11:29 صبح
آقا آرژنگ از توضیحتون ممنون.
شرمنده داشتم اصول شی گرائی رو نقض می کردم


دوستان یک پروژه ای واقعی که توش شی گرایی رعایت شده باشه سراغ دارین؟
بابت این سوال کسی چیزی نداره؟

fjm11100
دوشنبه 15 شهریور 1389, 11:52 صبح
میتونی متد را مخفی کنی
در ضمن اگر میخوای خوب بفهمی سعی کن خودت یک پروژه بنویسی و تمام نکات را در آن پیاده سازی کنی. اگر مفاهیم را درست فهمیده باشی پیاده سازیش کاری نداره. هنر اصلی در برنامه نویسی شی گرا در OOD و OOA است یعنی بتونی شی گرایی آنالیز و طراحی کنی. ببینی چه کلاس هایی حکم پدر بودن پیدا می کنن کجا کدت reuse میشه و ...
مگه اینکه پروژه دانشجویی بخوای شیطون!!!

محسن شامحمدی
دوشنبه 15 شهریور 1389, 18:51 عصر
سعی کن خودت یک پروژه بنویسی و تمام نکات را در آن پیاده سازی کنی
الان من دارم یک پروژه می نویسم که این آخریا دارم سعی می کنم شی گرا کار کنم ولی خب بعضی جاها واقعا نمی دونم باید چطور این متدامو دسته بندی کنم(یا همون اطلاعاتو)


مگه اینکه پروژه دانشجویی بخوای شیطون!!!
نه بابا
دانشجو هستم ولی اینقدری عاشق برنامه نویسی هستم که دنبال اینطور چیزا باشم.
من فقط واسه کاربردش و مدیریت پروژه هام می خوام.
برای مثال من الان دارم کم کم تو کدا گم می شم و مدیریت سورس ها واسم سخت شده
من دنبال شی گرائی ام فقط به خاطر جلوگیری از همینطور مسائل

محسن شامحمدی
جمعه 19 شهریور 1389, 13:34 عصر
دوستان چی شد
واقعا هیچکس تاحالا یک پروژه که بصورت شی گرا نوشته شده باشه رو ندیدید.
حداقل یک مثال (از یک پروژه واقعی) بزنید
بازم می گم من نه سورس می خوام نه پروژه.من فقط می خوام ببینم مثلا یک برنامه مدیریت بقالی :شیطان: رو چطوری شی گرا بنویسم
-----------------
از شما که خبری نشد خودم در برنامم از یک کلاس واسه کنترل کاربرها استفاده کردم و سعی کردم خوب بنویسمش.
می ذارم واسه دانلود تا شما هم استفاده کنید

profnami
جمعه 19 شهریور 1389, 13:49 عصر
perfect
ممنون
دستتون درد نکنه
میشه منابع یادگیریتون رو معرفی کنید تا ما هم بیشتر شی گرا شیم ؟

shima2006
جمعه 19 شهریور 1389, 14:18 عصر
091111111111 میشه یک کم در مورد این کدت توضیح بدی؟!

محسن شامحمدی
جمعه 19 شهریور 1389, 14:54 عصر
perfect
ممنون
دستتون درد نکنه
میشه منابع یادگیریتون رو معرفی کنید تا ما هم بیشتر شی گرا شیم ؟
منابعم همین مقالاتی که تو سایت هستش.
البته من هم چیز زیادی از شی گرایی نمی دونم فقط تا حدی با همین تئوری هاش آشنا هستم.
در همون حد سعی کردم کاربرامو اینطوری کنم.
البته از وقتی دارم برناممو شی گرا می کنم احساس می کنم هم کدهایی کمتری نوشته می هم مدیریت رو کار راحت تر شده و هم باگ های احتمالی بوجود نمی یاد.


091111111111 میشه یک کم در مورد این کدت توضیح بدی؟!

چیز پیچیده ای که نداره و فقط سعی کردم نشون بدم که مثلا ساختن یک کاربر جدید . حذفش یا وجودش(exist) یا لوگین کردن رو می شه به جای اینکه هر تکه ای رو در جایی بنویسی می شه همشو توی یک کلاس بنویسی تا مدیریت روش راحت تر بشه البته یک نکته هم داره که متدها و پراپرتی های این کلاس رو بصورت shared تعریف کردم تا دیگه نیازی به ساختن نمونه از روش نباشه.
طرز استفادش اینطوریه
user.username="ali"
user.password="3811"
user.login()
if user.loginsucceed then
msgbox "1"
else
msgbox "2"
end if

اَرژنگ
شنبه 20 شهریور 1389, 10:17 صبح
چنین کاری خلاف اصول پلی مورفیزم است، هر چی که در کلاسهایی که ازشان ارث بری میشه باید در کلاسهایه فرزندشان هم صدق کنه.
این اصل شیگرائی را :http://en.wikipedia.org/wiki/Liskov_substitution_principle
را مطالعه کنید.


میتونی متد را مخفی کنی
در ضمن اگر میخوای خوب بفهمی سعی کن خودت یک پروژه بنویسی و تمام نکات را در آن پیاده سازی کنی. اگر مفاهیم را درست فهمیده باشی پیاده سازیش کاری نداره. هنر اصلی در برنامه نویسی شی گرا در OOD و OOA است یعنی بتونی شی گرایی آنالیز و طراحی کنی. ببینی چه کلاس هایی حکم پدر بودن پیدا می کنن کجا کدت reuse میشه و ...
مگه اینکه پروژه دانشجویی بخوای شیطون!!!

گفتیم که مخفی کردن متدهایه والد خلاف اصول برنامه‌نویسی شیگراست.
مطالعه کتابها و انجام پروژه باهم توصیه میشه.

salehbagheri
شنبه 20 شهریور 1389, 11:25 صبح
از شما که خبری نشد خودم در برنامم از یک کلاس واسه کنترل کاربرها استفاده کردم و سعی کردم خوب بنویسمش.

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

مثلاً در کلاس User شما باید متدهای مربوط به ثبت داده یا ارتباط با SQL رو به متدی دیگر واگذار میکردید.

نکته دوم در نظر گرفتن تمامی خصایص یک شی هست. شما وقتی شئ یا کلاس User رو ایجاد میکنید باید به تمامی Property ها و متدهایی که میتونه داشته باشه دقت کنید و اونها رو برای شئ تعریف کنید.

مثلاً در کلاس User شما متد AddLimit رو تعریف کردید. در حالی که نباید چنین متدی در User تعریف کنید. چرا که یک شئ نباید بتونه خودش رو به جایی بقبولونه یا حذف کنه ... این کار رو باید در شیئ (مثلاً) UsersControl انجام میدادید.
بر خلاف این، شما خیلی از خصایص و متدهایی که یک User باید داشته باشه رو اصلاً برایش تعریف نکردید مثل محل تولد، سن، جنس، علاقه مندی و ...

به هرحال برای برنامه نویسی شئ گرا، انسان باید هر شئ رو با محیط اطرافش تطبیق بده! بر روی وظایف اونها خوب فکر کنه، بر روی توانایی های اونها خوب فکر کنه و سپس اون شئ رو طراحی کنه ...

محسن شامحمدی
شنبه 20 شهریور 1389, 16:55 عصر
بابت توضیحات کاملتون ممنونم
------------------------------

مثلاً در کلاس User شما باید متدهای مربوط به ثبت داده یا ارتباط با SQL رو به متدی دیگر واگذار میکردید.
اونطوری خیلی شلوغ نمی شه؟؟
متدی که کلا کارش اضافه کردن یک رکورده باز بیاد از یک متد دیگه استفاده کنه؟


مثلاً در کلاس User شما متد AddLimit رو تعریف کردید. در حالی که نباید چنین متدی در User تعریف کنید. چرا که یک شئ نباید بتونه خودش رو به جایی بقبولونه یا حذف کنه ... این کار رو باید در شیئ (مثلاً) UsersControl انجام میدادید.
متاسفانه متوجه نشدم . یعنی چی بقبولونه؟اگر یک توضیح مختصر بدید ممنون می شم
فکر کنم یعنی اینکه باید این متدهای(add,remove) رو تو یک کلاس دیگه می ذاشتم. درسته؟


بر خلاف این، شما خیلی از خصایص و متدهایی که یک User باید داشته باشه رو اصلاً برایش تعریف نکردید مثل محل تولد، سن، جنس، علاقه مندی و ...
جدا؟؟؟؟؟؟؟؟؟؟؟؟؟
من اصلا این خاصیت هایی رو که گفتید رو نه از کاربر می گیرم نه تو بانک اطلاعاتی ذخیره می کنم و نه بدرد برنامه می خوره . حالا با این اوصاف بازهم نیازه که این اطلاعات هم در شی باشه؟

و در آخر از تمامی دوستانی که در این بحث به من کمک می کنند تشکر ویژه دارم :قلب:

salehbagheri
شنبه 20 شهریور 1389, 21:13 عصر
اونطوری خیلی شلوغ نمی شه؟؟
متدی که کلا کارش اضافه کردن یک رکورده باز بیاد از یک متد دیگه استفاده کنه؟


بحث اگه شلوغ نشدنه، چرا اصلاً از شئ گرایی استفاده میکنید؟ تمام کدهاتون رو در یک متد بنویسید.


متاسفانه متوجه نشدم . یعنی چی بقبولونه؟اگر یک توضیح مختصر بدید ممنون می شم
فکر کنم یعنی اینکه باید این متدهای(add,remove) رو تو یک کلاس دیگه می ذاشتم. درسته؟

بذارید یک مثال بزنم:
شما (User) در سن 7 سالگی قرار دارید و تازه میخواهید که در مدرسه ثبت نام کنید. شما به مدرسه مراجعه میکنید و مدیر (UserControler) به شما فرم ثبت نام رو میده و شما باید ویژگی ها و خصایص انحصاری خودتون (Properties) رو وارد فرم کنید. پس از طی مراحلی (AddMethod) که توسط مدیر (UserControler) انجام میشه، شما ثبت نام میشید. پس از ثبت نام شما در کلاس درس حاضر میشید و معلم متن و محتوای درس رو به مغز شما منتقل میکنه (یعنی LearningMethod شما رو فعال میکنه یا فراخوانی میکنه)!

خب طبق این مثال باید بدونید که کدوم وظیفه برای کدوم شخص هست.
اما در کلاس User شما، متد Add وجود داره، یعنی دانش آموز خودش، خودش رو ثبت نام میکنه که این خلاف قوانین هست.


من اصلا این خاصیت هایی رو که گفتید رو نه از کاربر می گیرم نه تو بانک اطلاعاتی ذخیره می کنم و نه بدرد برنامه می خوره . حالا با این اوصاف بازهم نیازه که این اطلاعات هم در شی باشه؟

در برنامه، همیشه سعی کنید بیشترین اطلاعات رو دریافت کنید. زیرا ممکنه شما در نسخه اول برنامه نیازی نداشته باشید اما در نسخه های بعدی ممکنه نظرتون عوض بشه و امکانی به برنامه اضافه کنید که نیاز به سن کاربران داره و اونوقت باید کل دیتابیس + کدنویسی مربوط به اون رو از اول بسازید و بنویسید.
حالا این کار الزامی نیست ولی من توصیه میکنم.