PDA

مشاهده نسخه کامل : سوالی درباره برنامه نویسی به روش شی گرا در سی شارپ



Speed Racer
11-12-19, 01:00
درود استاد آرمین

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

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

به نظر شما اگه من یک فرم درست می کنم و چند تا کنترل روش قرار میدم و کدها رو می نویسم کلا شی گرایی رو پیاده سازی کردم یا اینکه برنامه نویسی به روش شی گرایی در سی شارپ یک اصولی داره که باید به صورت حرفه ای رعایت بشه؟

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

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

ravegoat
14-12-19, 09:36
سلام آرشان جان،

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

این که شی گرایی اصولی داره یا نه که مسلما داره و یه کد شی گرا می تونه هم درست و هم نادرست پیاده بشه. یعنی برای شی گرا کردن یه کد تنها یه کد شی گرا وجود نداره بلکه این شی گرایی می تونه اشکال مختلفی داشته باشه. مثلا یه کد شی گرا می تونه رفتار بهینه تری با حافظه داشته باشه نسبت به یه کد شی گرای دیگه با منطق مشابه.
آیا شی گرا کردن الزاما به معنی بهتر کردن برنامه است؟ نه، نیست! مثلا در برنامه نویسی یه بازی رایانه، بخش هایی رو به شکل داده گرا (و نه شی گرا) می نویسن چون رفتار بسیار بهینه تری در مقایسه با کد شی گرا برای به کارگیری حافظه ی نهان پردازنده داره و این سبب میشه میزان تاخیر در بازی کاهش پیدا کنه.

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

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

آرمین :11():

SajjadKhati
14-12-19, 19:47
درود استاد آرمین

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

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


سلام بر یک دانه پسر :Love-ssa~! (1): . خوبی؟
ببین ، شما در سی شارپ ، یا باید یه کلاس static تعریف کنی یا اعضای static تعریف کنی و اونها را فراخونی کنی که در این صورت ، اعضای غیر شی گرا خواهی داشت و شی نمیسازی . در واقع ، در این صورت ، از کلمه ی کلیدی new برای شی ساختن استفاده نمیکنی . مثل متد MessageBox.Show (در جلسه ی 41 اعضای استاتیک گفته شد) .
تازه ، استفاده از اعضای استاتیک که شی گرا نیست ، حداقل در پروژه های بجز کنسول (مثل پروژه های ویدوز فرم) در سی شارپ ، معنا نداره . چون در متد Main ، شی ای از کلاس Form1 مون ساخته میشه و ما داخل این شی ، داریم اعضای استاتیک را فراخونی و استفاده میکنیم.

یا باید کلاس یا اعضای غیر static تعریف کنی و ازش استفاده کنی که در این صورت ، قطعا باید از این کلاس ات شی درست کنی .
پس این از قضیه ی شی گرا و غیر شی گرا.

اما اینکه منظور طرف چی بود را دقیقا نمیدونم چون درخواست شو بصورت کلی مطرح کرد و وارد جزئیاتش نشده بود .
قطعا این طور نباید میبود که اعضای و کدهاش را بصورت static نوشته باشه (غیر شی گرا) ، و از طرف مقابلش خواسته باشه که بصورت غیر static (شی گرا) پیاده سازی اش کنن . همچین چیزی ، بعیده . چون کسی که عضو static را بتونه بنویسه ، قطعا میتونه عضو غیر static را هم بنویسه .
احتمال میدم که منظورش این بوده باشه که یا قوانین ارث بری را بصورت دقیق برای کد اش پیاده سازی کنن یا اینکه معماری 3 لایه را پیاده سازی کنن .




به نظر شما اگه من یک فرم درست می کنم و چند تا کنترل روش قرار میدم و کدها رو می نویسم کلا شی گرایی رو پیاده سازی کردم یا اینکه برنامه نویسی به روش شی گرایی در سی شارپ یک اصولی داره که باید به صورت حرفه ای رعایت بشه؟


احتمالا منظورت از کدها ، پیاده سازی و نوشتن کدهای مربوط به رویدادهای اون کنترل هست .
ولی بله . باز هم کدهات بصورت شی گرا هستن . چون کدهایی که مینویسی در کلاس Form1 هست . این کلاس هم چه خودش و چه اعضاش بصورت static نیستن .
همچنین در متد Main ، از این کلاسِ Form1 ، شی ساخته میشه و کلمه ی کلیدیِ this ای که در این کلاس استفاده میکنی ، اشاره گرِ به شی ای هست که در متد Main از این کلاس Form1 ساخته شده .
کلمه ی کلیدی this را در 2 قسمت متفاوت از آموزش ها توضیح داده شد .

شی گرایی ، که اصول زیاد داره . مخصوصا ارث بری اش . باید آموزشش را ببینی (از قسمت 26 تا 60)




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


برنامه نویسی 3 لایه ، چیز خاصی نیست . کلا میگه پروژه ای که میسازی را در چند کلاسِ کلی ای که هر کدوم ، کار مربوط به خودش را انجام بده را بنویس . یه کلاس ، مربوط به user interface باشه . یه کلاس مربوط به بدنه ی اصلی برنامه که کار محاسبات اون برنامه را انجام میده باشه . یه کلاس هم برای ارتباط برقرار کردن با دیتابیس .
به هر کدوم از این کلاس ها ، حالا فرض کن که لایه میگن .
کلا هر برنامه ای ، همین 3 کار اصلی را انجام میده دیگه . قسمتی برای ui داره و قسمتی که کار اصلی اش را انجام بده و قسمتی هم برای ارتباط برقرار کردن با دیتابیس.
البته این ، مفهوم کلی اش بود .