
آموزش پروژه محور برنامه نویسی شی گرا در سی شارپ
آموزش پروژه محور برنامه نویسی شی گرا در سی شارپ یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته آموزشی اصول برنامه نویسی شی گرا در سی شارپ است که با نام اصلی #Object -Oriented Programming Fundamentals in C از شرکت Pluralsight منتشر شده است.
برنامه نویسی شی گرا چیست؟
برنامه نویسی شی گرا یا همان Object-Oriented Programming یا بطور اختصارOOP یعنی همه چیز در مورد ایجاد object ها. یک شی یا همان object گروهی از متغیرها و توابع مرتبط با یکدیگر است. این متغیرها اغلب به عنوان ویژگی های شی و توابع به عنوان behavior آبجکت ها نامیده می شوند. این شی ها ساختار بهتر و واضحی را برای برنامه فراهم می کنند. برنامه نویسی شی گرا به این دلیل معروف است که موجودیت های دنیای واقعی مانند اشیاء و ارث بری و... را در برنامه نویسی پیاده سازی می کند. این نوع برنامه نویسی تجسم را آسان تر می کند زیرا به سناریوهای دنیای واقعی نزدیک است.
به عنوان مثال، یک ماشین می تواند یک شی باشد. اگر ماشین را به عنوان یک object در نظر بگیریم، ویژگیهای آن عبارتند از: رنگ، مدل، قیمت و غیره. و behavior و عملکرد آن شتاب، کاهش سرعت، تعویض دنده خواهد بود.
ویژگی های برنامه نویسی شی گرا
برنامه نویسی شی گرا بر اساس مفهوم اشیا یا همان object ها است. در برنامه نویسی شی گرا، ساختارهای داده یا اشیاء تعریف می شوند که هر کدام دارای ویژگی ها یا ویژگی های خاص خود هستند. هر شیء همچنین می تواند شامل رویه ها یا روش های خاص خود باشد. نرم افزاری که با استفاده از اشیایی که با یکدیگر تعامل دارند طراحی می شود. مزایای مختلفی را ارائه می دهد، مانند:
- اجرای سریعتر و آسانتر
- ارائه یک ساختار واضح برای یک برنامه
- ساده تر کردن کد برای اصلاح، اشکال زدایی و نگهداری
- استفاده مجدد از کد را آسان تر می کند
زبان های شی گرا متنوع هستند، اما محبوب ترین آنها زبان های کلاس محور هستند که در آنها اشیا نمونه هایی از کلاس ها هستند. زبان های مهم شی گرا عبارتند از جاوا، ++C و سی شارپ و پایتون و جاوا اسکریپت.
طراحی کلاس ها بر اساس نیازمندی های نرم افزار در C#
در یک پروژه نرم افزاری، پیش از نوشتن کلاس ها باید نیازمندی های برنامه را بررسی کنید و مشخص کنید چه اطلاعاتی باید نگهداری شوند و چه رفتارهایی موردنیاز هستند. برای مثال، در یک سیستم مدیریت سفارش ممکن است به موجودیت هایی مانند سفارش، مشتری و محصول نیاز داشته باشید. هر یک از این موجودیت ها می توانند در قالب یک کلاس در C# تعریف شوند تا اطلاعات و رفتارهای مرتبط با آن ها در یک ساختار مشخص قرار بگیرند.

طراحی کلاس ها بر اساس نیازمندی ها کمک می کند ساختار کد با مفاهیم واقعی مسئله هماهنگ باشد. اگر مسئولیت های هر کلاس به درستی مشخص شوند، توسعه قابلیت های جدید و اصلاح بخش های موجود آسان تر خواهد بود. در مقابل، کلاس هایی که وظایف نامرتبط زیادی بر عهده دارند، معمولاً نگهداری دشوارتری پیدا می کنند. یادگیری این روش طراحی برای توسعه دهندگانی مفید است که می خواهند از نوشتن کدهای پراکنده عبور کنند و ساختار منظم تری برای برنامه های C# ایجاد کنند.
مفهوم Entity Class در سی شارپ و کاربرد آن
`Entity Class` کلاسی است که برای نمایش یک موجودیت در دامنه مسئله به کار می رود. برای مثال، در یک سیستم فروشگاهی می توانید کلاس `Product` را برای نگهداری اطلاعات محصول و کلاس `Customer` را برای نمایش مشتری تعریف کنید. این کلاس ها معمولاً ویژگی هایی دارند که وضعیت موجودیت را نشان می دهند و در صورت نیاز می توانند رفتارهای مرتبط با آن را نیز در خود جای دهند. انتخاب نام های معنادار برای کلاس ها و ویژگی ها، درک ساختار برنامه را ساده تر می کند.

هنگام طراحی Entity Class باید به این موضوع توجه کنید که هر کلاس چه اطلاعاتی را مالک است و چه تغییراتی می تواند روی آن ها انجام دهد. برای مثال، می توانید اطلاعات مربوط به سفارش را در کلاس `Order` نگهداری کنید و رفتارهای مرتبط با وضعیت سفارش را در همان کلاس تعریف کنید. این کار به جلوگیری از پراکندگی منطق برنامه کمک می کند. شناخت نحوه تعریف موجودیت ها و افزودن متدهای مناسب، یکی از مهارت های پایه ای در طراحی نرم افزار با C# و اصول شی گرایی است.
اصل تفکیک مسئولیت ها و طراحی کلاس های قابل نگهداری
اصل تفکیک مسئولیت ها به این معناست که هر کلاس یا کامپوننت باید وظایف مشخص و مرتبطی داشته باشد. برای مثال، در یک برنامه فروشگاهی، مسئولیت محاسبه مبلغ سفارش با مسئولیت ارسال اعلان به کاربر یکسان نیست. اگر همه این عملیات در یک کلاس قرار بگیرند، تغییر یک بخش ممکن است روی بخش های دیگر نیز اثر بگذارد. جدا کردن مسئولیت ها باعث می شود ساختار برنامه روشن تر باشد و توسعه دهندگان بتوانند هر بخش را مستقل تر بررسی و اصلاح کنند.
طراحی مسئولیت محور همچنین به آزمایش و استفاده مجدد از کد کمک می کند. وقتی یک کلاس وظیفه مشخصی داشته باشد، معمولاً بررسی رفتار آن ساده تر خواهد بود و تغییر نیازمندی های نامرتبط کمتر بر آن اثر می گذارد. این رویکرد با اصول طراحی شی گرا ارتباط نزدیکی دارد و در پروژه های کوچک و بزرگ قابل استفاده است. با تمرین تفکیک مسئولیت ها در C#، می توانید کلاس هایی طراحی کنید که فهمیدن، گسترش دادن و نگهداری آن ها در طول زمان آسان تر باشد.
استفاده مجدد از کد با Inheritance و Interface در C#
در طراحی شی گرا، گاهی چند کلاس ویژگی ها یا رفتارهای مشترکی دارند. در چنین شرایطی، `Inheritance` یا وراثت می تواند امکان تعریف یک کلاس پایه و استفاده از قابلیت های آن در کلاس های مشتق شده را فراهم کند. برای مثال، اگر چند نوع حساب بانکی ویژگی های مشترکی داشته باشند، می توان بخش مشترک را در یک کلاس پایه قرار داد. با این حال، وراثت باید زمانی استفاده شود که رابطه میان کلاس ها از نظر مفهومی مناسب باشد، نه صرفاً برای کاهش تعداد خطوط کد.
`Interface` راه دیگری برای تعریف قرارداد میان بخش های مختلف برنامه است. یک اینترفیس مشخص می کند یک نوع داده چه اعضایی را باید ارائه کند، بدون اینکه الزاماً نحوه پیاده سازی آن ها را تعیین کند. این قابلیت باعث می شود کلاس های متفاوت بتوانند از یک قرارداد مشترک پیروی کنند و در بخش های دیگر برنامه به شکل یکسان مورد استفاده قرار بگیرند. درک تفاوت وراثت و اینترفیس به شما کمک می کند وابستگی های مناسب تری طراحی کنید و کامپوننت هایی بسازید که قابلیت استفاده مجدد بیشتری داشته باشند.
سرفصل مطالب آموزش ویدئویی آموزش پروژه محور برنامه نویسی شی گرا در سی شارپ
فصل اول: مقدمه این دوره آموزشی- مقدمه
- مقدمه
- تفاوت آبجکت ها و کلاس ها
- بررسی واژگان
- برنامه نویسی شی گرا چیست؟
- بکارگیری هرآنچه از این دوره یاد می گیرید
- طرح کلی دوره
- مقدمه
- تجزیه و تحلیل کردن Business Problem
- شروع کردن با اسم ها
- تعریف کردن اعضای (Member) مناسب
- در نظر گرفتن زمان
- بررسی Abstraction
- بررسی Encapsulation
- جمع بندی
- مقدمه
- لایه بندی کردن اپلیکیشن
- ساختن لایه Business Logic
- ساختن یک کلاس با Property ها
- استفاده از Snippet ها
- تست کردن کلاس
- تست کردن کلاس با مقادیر معتبر
- تست کردن کلاس با مقادیر نامعتبر
- کار با Object ها
- Object ها در نقش Reference Type عمل می کنند
- بررسیStatic Modifier
- جمع بندی
- مقدمه
- ساختن کلاس با Method ها
- تست کردن Method ها
- مقررات
- ساختن یک کلاس با توابع سازنده
- ساختن کلاس های باقی مانده
- جمع بندی
- مقدمه
- بررسی اصل Separation of Concerns
- بازبینی نمودار کلاس
- ایجاد کردن Address Class
- ایجاد کردن Repository Class
- تست کردن یک Repository Class
- ساختن Repository های دیگر
- جمع بندی
- مقدمه
- تعریف رابطه ها
- انواع رابطه ها
- بررسی رابطه Collaboration
- بررسی رابطه Composition
- رابطه Composition و Reference ها
- مقدار دهی کردن Referenced Object ها
- تست کردن یک رابطه Composition
- رابطه Composition با استفاده از Id
- وراثت
- جمع بندی
- مقدمه
- اسرار استفاده مجدد کد
- بررسی کلاس Object در دات نت
- Override کردن عملکرد های یک Base Class
- بررسی Polymorphism
- ساختن یک Base Class
- آموزش عملی: ساختن یک Base Class
- آماده کردن اعضای Base Class برای Override کردن
- جمع بندی
- مقدمه
- بررسی سناریو
- ساختن کامپوننت Reusable
- تست کردن کامپوننت Reusable
- استفاده از کامپوننت Reusable
- بررسی کلاس های Static
- بررسی Extension Method ها
- مقایسه Static Method با Extension Method
- جمع بندی
- مقدمه
- بررسی کلاس Interface
- بررسی دقیق تر مفهوم Interface ها
- راه اندازی دمو
- تعریف یک Interface
- پیاده سازی یک Interface
- پیاده سازی Polymorphism مبتنی بر Interface ها
- جمع بندی
- مقدمه
- جمع بندی
- مراحل بعدی







