دوره مجازی #C (جلسه 7): آشنایی با برنامه نویسی شی گرا

دسته بندی: آموزش
زمان مطالعه: 2 دقیقه
۰۷ مرداد ۱۳۹۴

در این جلسه برنامه نویسی شی گرا و مفهوم و کاربرد آن را معرفی خواهیم کرد. پیش از آن با NetFramework. و بخش های مهم و کاربردی آن و همینطور با نحوه ی ترجمه ی کد های برنامه نویسی به برنامه های قابل اجرا توسط کامپایلر زبان #C آشنا می شویم. پس از آشنایی با مفهوم برنامه نویسی شی گرا برای درک کاربرد و اهمیت آن یک برنامه را ابتدا با دانش گذشته خود نوشته و سپس آن را با استفاده از مفاهیم شی گرایی طراحی و تولید می کنیم. این برنامه بازی دوز می باشد که در محیط کنسول اجرا می شود. نحوه ی برنامه نویسی شی گرا را نیز در حین نوشتن این برنامه فرا خواهیم گرفت. البته هدف از مطالب ارائه شده در این جلسه صرفا آشنایی با اهمیت و کاربرد برنامه نویسی شی گرا می باشد و مطالب و جزئیات در جلسات آینده به تفصیل مورد بررسی قرار خواهد گرفت.

مطالب آموزش داده شده در این جلسه به قرار زیر می باشند:

  • آشنایی با NetFramework. و قسمت های مهم آن
  • آشنایی با نحوه ی کامپایل و تولید برنامه های قابل اجرا از کد های نوشته شده
  • معرفی برنامه نویسی شی گرا
  • آشنایی با مفهوم کلاس و شی
  • معرفی المان های موجود در برنامه نویسی شی گرا
  • ذکر یک مثال کامل برای فهم برنامه نویسی شی گرا
  • آشنایی با field و property
  • معرفی constructor و method ها در برنامه نویسی شی گرا
  • انجام یک پروژه به دو صورت شی گرا و غیر شی گرا

در جلسه ی آینده علاوه بر تمرین پیرامون مطالب ارائه شده در این جلسه، با مفهوم ارث بری در برنامه نویسی شی گرا آشنا می شویم.

:: توجه

این مطلب یک جلسه از دوره آموزش #C می باشد و برای مشاهده آن باید در دوره ثبت نام کنید.

ثبت نام در دوره آموزش #C

چه امتیازی به این مقاله می دید؟
نویسنده آرین زارعی

جلسات دوره

نظرات کاربران

MdBeiran

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

Nima Arian

امروز جلسه 7 رو دیدم هیچی از شی گرایی متوجه نشدم 😥 یعنی اصلا ذهنیت من تغییر کرد من اینجوری فهمیده بودم که توی شی گرایی ما از کل به جز می رسیم اول نگاه می کنیم برنامه ما چه چیز هایی نیاز داره و برنامه اصلی رو مینویسیم و بعد به ترتیب اون چیزهایی که داخل برنامه اصلی نیاز به پیاده سازی داره رو پیاده سازی می کنیم 🙄 اما آقای زارعی شما یهو منو غافل گیر کردین و از جز بازم رسیدین به کل یا یه جورایی از وسط رسیدین به جز و کل یعنی اومدین اول بورد رو طراحی کردین بعد سل و بعد برنامه اصلی هیچی دیگه حالا من با این ذهن آشفته الان چه کنم؟ 🙄 😕

آرین زارعی

ببینید دوست عزیز. بحثی که شما میفرمایید یعنی رسیدن از جزء به کل و یا بلعکس ارتباطی به مفاهیم شی گرایی نداره. این مباحث مباحث مهندسی نرم افزار و تحلیل برنامه ها هست. ما به مباحث مهندسی نرم افزار به اندازه ی نیاز میپردازیم در ادامه ی دوره ولی در کل مباحثی پیشرفته و تکمیلی هستند این مباحث. درباره ی رسیدن از جزء به کل یا بلعکس در مفاهیم موجود در تحلیل و طراحی سیستم های اطلاعاتی، هر دوی این رهیافت ها وجود دارند و جزئیات خاص خودشون رو دارن. سعی کنید این مباحث رو با هم قاطی نکنید. شی گرایی میپردازه به ایجاد این نقطه نظر که تمام موجودیت های موجود رو به شکل اشیا ببینیم که صفت و عملکرد دارند و … . برید جلو تر و چند مثال رو ببینید مطمئنا حل میشه مشکلتون

پژمان

ببخشید سه پسته شد.

در متد GameplaneHasEmptySpace نیز تقریبا شرایط مشابه برای فرمان return false که در بالا ذکر شد وجود دارد. ضمن اینکه در حلقه و هنگام پیمایش آرایه اگر شرط برای یکی از خانه ها مثلا خانه اول برقرار باشد باز بیجهت کل حلقه تا به انتها طی میشود!! . بنابراین به نظرم نیاز به فرمان break بعد از فرمان return true میباشد. ولی باز مشکلی که هست اینجاست که به محض break ایندکس آدرس کدها دقیقا جلوی فرمان return false یعنی اولین فرمان بعد از پایان حلقه for ، قرار میگیرد. به نظر من در این حالت باز متد تحت هر شرایطی false را برمیگرداند. مگر جای فرمان return false تغییر یابد. میبخشید طولانی شد. ممنون میشم راهنمایی بفرمایید البته آنچه که معلوم است علی الظاهر برنامه درست کار میکنه!!!

پژمان

در ضمن در ادامه مطلب قبلی باید عرض کنم درون خود متد IsPlayerWonTheGame اگر دقت بفرمایید در صورتیکه مثلا شرط اول برقرار باشد باز بی جهت خطوط بعدی هم تست میگردند در صورتیکه برقراری یک شرط برای ما کافیست!! . به نظر من از شرط دوم باید یک else به همه آنها اضافه گردد.
دیگر اینکه آقای زارعی اگر مثلا یکی از شروط برقرار باشد وقتی به انتهای متد میرسیم فرمان return false قرار دارد. حال این شک بوجود میآید که از آنجا که تا متد بصورت کامل پایان نیافته Stack frame ایندکس را به آدرس بلوک فراخواننده متد جاری و از سطر مربوطه برنمیگرداند به نظر شما اآیا متد تحت هر شرایطی false برنمیگرداند!!؟ چون به نظر من اینجا هم قبل از فرمان return false; نیاز به یک else داریم.

آرین زارعی

این کد رو که میفرمایید اگر میتونید تست کنید برای مثال های مختلف، و اگر درست بود نظرتون، که انجام بهینه سازی ای که میفرمایید خوب هست. صرفا هدف از ارائه ی این مثال آشنایی با یک سری مفاهیم بود.

پژمان

چشم. ممنون از پاسخگویی به موقع شما

پژمان

سلام و خسته نباشید به شما.
جناب زارعی در کدهای مربوط به مثال اول بازی دوز احساس میکنم دو تا ایراد به لحاظ بهینه سازی برنامه هست که اگر ممکنه توضیح بفرمایید. از اونجاکه مقداری طولانی هست در دو پست مطرح میکنم.
ایراد اول: مربوط هست به نحوه فراخوانی متد ()IsPlayerWonTheGame . مشکل اینجاست که اگر نتیجه خروجی
FirstPlayerWon = IsPlayerWonTheGame(GamePlane,’X’); true باشد. از اونجا که این زبان همچون جاوا بصورت Sequence کدها رو دنبال میکند بی جهت فرمان بعدی هم اجرا خواهد شد!!! یعنی:
SecondPlayerWon = IsPlayerWonTheGame(GamePlane,’O’); بنابراین به نظر من بهتر است که ضمن خارج کردن بررسی موضوع فرد پیروز به خارج از حلقه while ، فرمان بررسی SecondPlayerWon درون شرط قرار بگیرد یعنی کدها به شکل زیر تغییر کند:از بعد از پایان حلقه while
FirstPlayerWon = IsPlayerWonTheGame(GamePlane,’X’);

if (FirstPlayerWon)
{
Console.WriteLine(“FirstPlayer WON the game !!!!! “);
}
else
{
SecondPlayerWon = IsPlayerWonTheGame(GamePlane, ‘O’);
if (SecondPlayerWon)
{
Console.WriteLine(“SecondPlayer WON the game !!!!! “);
}
}
else
{
Console.WriteLine(“The Game is Draw !!!!! “);
}

آرین زارعی

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

Emad Roghani

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

آرین زارعی

انشاالله خیلی زود بررسی می کنیم و مشکلی اگر بود حل میشه حتما.

محمد روشن

سلام اقای زارعی
من هنگام نوشتن حلقه While برای بازی دوز، وقتی از عملگر && استفاده میکنم خطای زیر رو میده:
operator && cannot be applied to operands type of bool or object
چی کار باید بکنم؟
با تشکر

آرین زارعی

سلام.
هر دو طرف AND باید از نوع منطقی یا همون bool باشند. این ارور میگه که شما دارید این عملگر رو بین یک bool و یک object اعمال می کنید. کدتون رو بررسی کنید و ببینید کدوم طرف ایراد داره.

محمد روشن

ممنون مشکل حل شد

Behdad Khateri

سلام ممنون از زحماتتون.
آیا لازم هست الان روی برنامه بازی XO وقت بزارم و کامل یاد بگیریم نوشتن این برنامه رو ؟ چون یه مقدار پیچیده هستش این برنامه

لقمان آوند

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

سید احسان عظیمی

آموزش این قسمت خوب بود ولی برای کسی مثل من که با این مفاهیم از قبل آشنایی داشتم،نظر کلی م اینه که اگر مبحث مهمی مثل شی گرایی با یک مثال ساده تر و کم حجم تر از نظر کد نویسی آموزش داده می شد و بعدش میرفتیم سراغ برنامه بازی XoGame بهتر بود.با تشکر از زحماتتون

سید احسان عظیمی

بله واقعا مباحث خیلی مهمیه،حتما به فکرش باشید،ممنونم

آرین زارعی

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

سید احسان عظیمی

به نظرم توضیحات آقای زارعی کامل هست ولی پیشنهاد شما هم خیلی خوبه…ممنون 😀

پایان زمان پشتیبانی

دانشجوی گرامی، بازه پشتیبانی فعال برای این دوره ۳ ماه است که برای شما به پایان رسیده است.

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

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.