PDA

View Full Version : راهنمایی برای یادگیری مفاهیم شی گرایی در C# تحت پروژه عملی



pooryadevil
چهارشنبه 19 اسفند 1394, 18:40 عصر
با سلام خدمت دوستان عزیز

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

من دنبال آموزش تحت پروژه مفاهیم شی گرایی به صورت کامل هستم با زبان C# هستم چون من مفاهیم رو خوندم متحی میخواستم برای مسلط شدن روی این مبحث همینطور جا افتادن مفاهیم چند پروژه عملی انجام بدم و بفهمم در مثال های مختلف چرا چجوری باید از این مفاهیم استفاده کنم

حال دوستان اگر آموزش های پروژه محور تصویری چه فارسی چه انگلیسی رو اگر سراغ دارن ممنون میشم معرفی کنند همینطور اگر روش خاصی برای یادگیریه بهتر و یا منبع خوب هم سراغ دارن معرفی کنن

باتشکر .

ali_md110
جمعه 21 اسفند 1394, 06:57 صبح
سلام
C#‎‎ یک زبان شی گرا هست و هر برنامه ای که با اون نوشته میشه مسلما شی گرا هست یعنی بدون شی گرایی نمیتونید توی سی شار‍پ برنامه بنویسید
همین که یک پروژه ویندوزی رو شروع به نوشتن میکنید در پس زمینه نکات شی گرایی در اون رعایت میشه

شی گرایی چیزی جز ارث بری - abstract- interface و چند ریختی نیست اگر شما این موارد رو توی پروژه هاتون بکار ببرید یعنی برنامه شی گرا نوشتید

اگر میخابد یک برنامه شی گرا بنویسید برید سراغ entity framework و از روش ef code first استفاده کنید توی سایت جستجو بزنید مثال زیاد هست

مثالی میزنم

فرض کنیم برنامه اتوماسیون میخایم بنویسیم
این برنامه 5 تا کلاس داره که این کلاسها بیانگر و معادل جداول بانک اطلاعاتی ماه هستند

کلاس Employe نمونه یکی از این کلاسها هست


public class Employe
{
public int Id { get; set; }
public DateTime DateCreated{ get; set; }
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }



این 5 کلاس همگی دارای 3 فیلد مشترک هستند
ID
DateCreate
UserID
برای اینکه از تکرار این فیلدهای تکراری جلوگیری بکنیم نیاز به یک کلاس پایه داریم تا اون 5 تا کلاس از اون مشتق شده و ارث بری بکنند
پس یکی از گامهای شی گرایی رعایت شد
یک کلاس abstract میسازیم با اون 3 فیلد مشترک


public abstract class EntityBase
{
public virtual int Id { get; set; }
public virtual DateTime DateCreated{ get; set; }
public virtual int UserId { get; set; }
}



و الان کلاس Employeرو تغییر میدهیم بدینصورت


public class Employe:EntityBase
{
public string FirstName { get; set; }
public string LastName { get; set; }
{


با اضافه کردن virtual به فیلدهای کلاس پایه یکی از موارد دیگر شی گرایی هم رعایت شد

بکار گیری Interface هم از موارد ارث بری چندگانه هست و شی کرایی در سی شارپ

حالا اگر ازیک orm مثل entity framework بهره ببریم میتونیم این کلاسها را به یک بانک اطلاعاتی مثل اسکیول سرور نگاشت کنیم (جداول رو بسازیم)
و از عبارات لامبدا هم برای واکشی اطلاعات و درج و بروز رسانی بکار ببریم

خیلی خلاصه گفتم امیدوارم منظورم رسونده باشم

alireza4474
جمعه 21 اسفند 1394, 11:24 صبح
من دو ساله دارم برنامه مینویسم و برنامه نویسی شی گرایی هنوز کامل برام جا نیافتاده و هر روز به چیز های جالبی از این روش یادمیگیرم باید برای خودت مسیله طرح کنی و با استفاده از سی گرایی حلشون کنی اینجوری یاد میگیری البته اموزشی که دوست عزیزمون گذاشتن هم خیلی مفیده

pooryadevil
جمعه 21 اسفند 1394, 12:07 عصر
سلام
C#‎‎‎ یک زبان شی گرا هست و هر برنامه ای که با اون نوشته میشه مسلما شی گرا هست یعنی بدون شی گرایی نمیتونید توی سی شار‍پ برنامه بنویسید
همین که یک پروژه ویندوزی رو شروع به نوشتن میکنید در پس زمینه نکات شی گرایی در اون رعایت میشه

شی گرایی چیزی جز ارث بری - abstract- interface و چند ریختی نیست اگر شما این موارد رو توی پروژه هاتون بکار ببرید یعنی برنامه شی گرا نوشتید

اگر میخابد یک برنامه شی گرا بنویسید برید سراغ entity framework و از روش ef code first استفاده کنید توی سایت جستجو بزنید مثال زیاد هست

مثالی میزنم

فرض کنیم برنامه اتوماسیون میخایم بنویسیم
این برنامه 5 تا کلاس داره که این کلاسها بیانگر و معادل جداول بانک اطلاعاتی ماه هستند

کلاس Employe نمونه یکی از این کلاسها هست


public class Employe
{
public int Id { get; set; }
public DateTime DateCreated{ get; set; }
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }



این 5 کلاس همگی دارای 3 فیلد مشترک هستند
ID
DateCreate
UserID
برای اینکه از تکرار این فیلدهای تکراری جلوگیری بکنیم نیاز به یک کلاس پایه داریم تا اون 5 تا کلاس از اون مشتق شده و ارث بری بکنند
پس یکی از گامهای شی گرایی رعایت شد
یک کلاس abstract میسازیم با اون 3 فیلد مشترک


public abstract class EntityBase
{
public virtual int Id { get; set; }
public virtual DateTime DateCreated{ get; set; }
public virtual int UserId { get; set; }
}



و الان کلاس Employeرو تغییر میدهیم بدینصورت


public class Employe:EntityBase
{
public string FirstName { get; set; }
public string LastName { get; set; }
{


با اضافه کردن virtual به فیلدهای کلاس پایه یکی از موارد دیگر شی گرایی هم رعایت شد

بکار گیری Interface هم از موارد ارث بری چندگانه هست و شی کرایی در سی شارپ

حالا اگر ازیک orm مثل entity framework بهره ببریم میتونیم این کلاسها را به یک بانک اطلاعاتی مثل اسکیول سرور نگاشت کنیم (جداول رو بسازیم)
و از عبارات لامبدا هم برای واکشی اطلاعات و درج و بروز رسانی بکار ببریم

خیلی خلاصه گفتم امیدوارم منظورم رسونده باشم

والا صحبتهایی که کردین درسته کل C# از پایه روی شی گرایی هست ولی مساله ی من این نیست مساله ی من طراحی سیستم هست ببینید مثال شما میخوایید یک سیستم رو از صفر تا 100 پیاده سازی کنید مشکل من اینجاست که نمیدونم برای مثال باید چندتا کلاس برای این سیستم در نظر گرفت کجا Abstrac گرفت کجا Interface گرفت کجا Sealed کرد کلاس و بقیه ی موارد الان کسی به من بگه مثلا برای این سیستم باید این تعداد کلاس در نظر بگیری و اینجوری پیداه سازی کنی خوب من مشکل سینتکسی ندارم و میتونم پیاده سازی کنم ولی اینکه خودم بفهمم کجا باید چیکار کنم رو نمیدونم

برای همین گفتم چندتا پروژه بزرگ رو اگر به صورت توتریال انجام بدم بتونم درک این مفهوم طراحی شی گرا رو متوجه بشم

pooryadevil
جمعه 21 اسفند 1394, 12:08 عصر
من دو ساله دارم برنامه مینویسم و برنامه نویسی شی گرایی هنوز کامل برام جا نیافتاده و هر روز به چیز های جالبی از این روش یادمیگیرم باید برای خودت مسیله طرح کنی و با استفاده از سی گرایی حلشون کنی اینجوری یاد میگیری البته اموزشی که دوست عزیزمون گذاشتن هم خیلی مفیده
بله منم مشکلم همینه ...

ali_md110
شنبه 22 اسفند 1394, 15:02 عصر
به نظر من شما هنوز درک درستی از abstractو sealed و interface ندارید
کلاسهای abstract کلاسهای پایه هستند ولی sealed نمیتونه به عنوان یک کلاس پایه استفاده بشه
بعضی از مسائل برنامه نویسی به خلاقیت برنامه نویس هم بر میگرده شما میتونید یک برنامه رو با تعداد کمتر و کلاس کمتر پیاده کنید
شما باید به مهندسی نرم افزار و تجزیه و نحلیل اولیه هم توجه بکنید
طراحی یک سیستم به نیازهای شما بستگی داره مثلا یک برنامه تور هواپیمایی در نظر بگیرید این برنامه ممکنه دارای موجودیتهای زیر باشه

1- اشخاص و مشتریان
2-کارکنان
3-مکانهای دیدنی
4-رزو بلیط
در وهله اول ممکنه بگید من چهار تا کلاس باید بسازم برای این 4 تا موجودیت ولی وقتی سراغ پیاده سازی میرید متوجه میشید به چند تا موجودیت دیگه هم نیاز هست
5-نوع وسیله مثلا اتوبوس
6-تبلیغات

نوشتن و مثال زدن یک پروژه در این تاپیک امکان نداره ولی من سعی میکنم یه زودی یک تاپیک آموزشی تحت همین عنوان بنویسیم

pooryadevil
شنبه 22 اسفند 1394, 19:06 عصر
به نظر من شما هنوز درک درستی از abstractو sealed و interface ندارید
کلاسهای abstract کلاسهای پایه هستند ولی sealed نمیتونه به عنوان یک کلاس پایه استفاده بشه
بعضی از مسائل برنامه نویسی به خلاقیت برنامه نویس هم بر میگرده شما میتونید یک برنامه رو با تعداد کمتر و کلاس کمتر پیاده کنید
شما باید به مهندسی نرم افزار و تجزیه و نحلیل اولیه هم توجه بکنید
طراحی یک سیستم به نیازهای شما بستگی داره مثلا یک برنامه تور هواپیمایی در نظر بگیرید این برنامه ممکنه دارای موجودیتهای زیر باشه

1- اشخاص و مشتریان
2-کارکنان
3-مکانهای دیدنی
4-رزو بلیط
در وهله اول ممکنه بگید من چهار تا کلاس باید بسازم برای این 4 تا موجودیت ولی وقتی سراغ پیاده سازی میرید متوجه میشید به چند تا موجودیت دیگه هم نیاز هست
5-نوع وسیله مثلا اتوبوس
6-تبلیغات

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