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



visibility  
mode_comment   ۳۵

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

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

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

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

info توجه

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

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

comment دیدگاه کاربران
Behnam Nassiri replyپاسخ

سلام،
فایل تصویری دانلود نمیشه

لقمان آوند

تست شد . مشکلی نداره …

آرمین نادری replyپاسخ

سلام آقای زارعی یه سوال داشتم اگه من بخوام در یک آرایه دو نوع داده هم عددی و هم رشته ای در آرایه قرار بدم باید چی کار کنم چون در زبانی مثل php میشه اینکار رو کرد ممنون میشم توضیح بدید .

آرین زارعی

سلام.
این امکان به شکلی که در زبان PHP وجود داره در زبان سی شارپ وجود نداره. خیلی ها این امکان زبان PHP رو خوب می دونن و خیلی ها اون رو یک مشکل می بینن.
در زبان سی شارپ یه راه برای اینکار این هست که آرایه را از جنس object بگیرید. میدانیم که تمام انواع داده ای و کلاس ها از این کلاس ارث بری می کنند. بعد شما می توانید خیلی راحت اشیا و مقادیر مختلف را داخل آرایه بریزید. حال برای استفاده باید بررسی کنید که مقدار خانه ی مثلا n ام آرایه از چه نوعی است (مثلا با استفاده از دستور typeof) بعد اون رو cast کنید به نوع داده ای که از type اون هست و ازش استفاده کنید. باید بحث ارث بری رو ویدیوش رو مشاهده کنید تا منظورم رو کامل متوجه بشید. فکر می کنم جلسه ی بعدی هست که بر روی سایت قرار می گیره.
من بهتون پیشنهاد می کنم که این کار رو انجام ندید. یعنی سعی کنید که طوری برنامه تون رو بنویسید که لازم به این کار نباشه. چرا که در زبان سی شارپ خیلی کار اصولی و درستی نیست. اگرچه شاید در php کار خیلی مفید و خوبی هم باشد.

آرمین نادری

چشم ممنون یه سوال دیگه هم داشتم اون کلمه void دقیقا برای چیه ؟

آرین زارعی

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

وحید صالحی

سلام آرمین و با اجازه آقای زارعی
بصورت ساده اگر بخواهیم بگیم کلمه void برای این هست که نشون بدیم یک تابع مقدار یا به عبارتی value یی رو برنمیگردونه یا هیچ پارامتری نداره یا هر دوی این دو…

آرین زارعی

خواهش می کنم آقای صالحی
کاملا صحیح، ممنون از توضیح خوبتون.

وحید صالحی

سلامت باشید آقای زارعی عزیز

آرمین نادری

ممنون از شما اساتید عزیز

وحید صالحی

سلامت باشی آرمین جان

محمد رضا احمدی replyپاسخ

سلام آقای زارعی
بنده به کدهای جلسه 7 یک سری comment فارسی برای توضیح قسمتهای مختلف اضافه کردم اگر مایل بودید براتون بفرستم تا اگه خوب بود بچه ها استفاده کنند
و اگه امکان داره خواهشا خودتون برای فهم بیشتر کدها این کارو انجام بدید
ممنون

آرین زارعی

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

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

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

امیرحسین فاطمی replyپاسخ

سلام به استاد عزیز استاد امکان داره یه توضیحی در موردwindow service بدید.با تشکر

آرین زارعی

سلام.
اگر منظورتون Windows service باشه باید بگم که در ویندوز ، برنامه ها و کارهایی وجود دارند که در پشت صحنه در حال اجرا هستند و در ظاهر وجود ندارند. این ها به صورت سرویس های ویندوزی هستند. البته سرویس های ویندوزی خیلی گسترده تر هستند و تقریبا بیشتر برنامه های ویندوزی یک سرویس دارند که در بک گراند اجرا میشه. بگزارید براتون یک مثال بزنم. Sql server engine یک سرویس هست که به طور پیش فرض در پشت صحنه در حال اجراست.

سید احسان عظیمی replyپاسخ

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

آرین زارعی

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

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

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

سید احسان عظیمی replyپاسخ

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

Behdad Khateri replyپاسخ

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

لقمان آوند

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

محمد روشن replyپاسخ

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

آرین زارعی

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

محمد روشن

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

Emad Roghani replyپاسخ

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

آرین زارعی

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

پژمان replyپاسخ

سلام و خسته نباشید به شما.
جناب زارعی در کدهای مربوط به مثال اول بازی دوز احساس میکنم دو تا ایراد به لحاظ بهینه سازی برنامه هست که اگر ممکنه توضیح بفرمایید. از اونجاکه مقداری طولانی هست در دو پست مطرح میکنم.
ایراد اول: مربوط هست به نحوه فراخوانی متد ()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 !!!!! “);
}

آرین زارعی

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

پژمان replyپاسخ

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

آرین زارعی

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

پژمان

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

پژمان replyپاسخ

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

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

Nima Arian replyپاسخ

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

آرین زارعی

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

ارسال نظرات

کاربر گرامی، امکان ارسال نظر و پشتیبانی برای دوره های مجازی فقط برای دانشجویان این دوره امکان پذیر می باشد.