آموزش کاربردی C# و برنامهنویسی شیءگرا
یادگیری C# با تمرکز بر منطق برنامهنویسی، شیءگرایی، LINQ، مدیریت خطا و ساخت برنامههای قابل نگهداری.
سرفصل جلسات دوره
15 جلسه<div class='lesson-rich-content'> <h2>جلسه 1: شروع C# و ساخت اولین برنامه؛ از .NET تا اجرای کد</h2> <h3>تمرکز جلسه</h3> <p> شناخت .NET، SDK، ساختار پروژه، فایل Program و مسیر اجرای یک برنامه C#. </p> <h3>چرا این مبحث مهم است؟</h3> <p> اگر ساختار اجرای برنامه را درست درک نکنید، در ادامه هنگام کار با پروژههای بزرگتر فقط Syntax حفظ میکنید. </p> <h3>در عمل چه کار میکنیم؟</h3> <p> یک Console App ایجاد میکنید، ورودی از کاربر میگیرید و خروجی را در ترمینال نمایش میدهید. </p> <h3>اشتباه رایج</h3> <p> شروع مستقیم با کدنویسی بدون شناخت پروژه و وابستگیهای .NET. </p> <h3>چالش جلسه</h3> <p> یک برنامه خط فرمان طراحی کنید که اطلاعات اولیه یک سفارش را دریافت کند و خلاصه سفارش را نمایش دهد. </p> <h3>ارتباط با پروژه نهایی</h3> <p> این مبحث در ادامه دوره در پروژه نهایی استفاده میشود. هدف این است که مفهوم جلسه فقط به یک مثال آموزشی محدود نماند و بتوانید آن را در یک مسئله واقعی به کار بگیرید. </p> </div>
<div class='lesson-rich-content'> <h2>جلسه 2: متغیرها و نوع داده؛ انتخاب نوع درست برای هر مقدار</h2> <h3>تمرکز جلسه</h3> <p> انواع داده، متغیرها، string، عددها، bool و تبدیل دادهها. </p> <h3>چرا این مبحث مهم است؟</h3> <p> انتخاب نوع داده روی خوانایی، اعتبارسنجی و رفتار برنامه تأثیر مستقیم دارد. </p> <h3>در عمل چه کار میکنیم؟</h3> <p> برنامه ثبت اطلاعات مشتری میسازید و ورودیهای متنی را به نوع مناسب تبدیل میکنید. </p> <h3>اشتباه رایج</h3> <p> استفاده بیدلیل از string برای همه چیز که منطق اعتبارسنجی را در چند نقطه پخش میکند. </p> <h3>چالش جلسه</h3> <p> فرمی برای ثبت مشتری طراحی کنید که سن، موجودی و وضعیت فعال بودن را با نوع داده مناسب نگه دارد. </p> <h3>ارتباط با پروژه نهایی</h3> <p> این مبحث در ادامه دوره در پروژه نهایی استفاده میشود. هدف این است که مفهوم جلسه فقط به یک مثال آموزشی محدود نماند و بتوانید آن را در یک مسئله واقعی به کار بگیرید. </p> </div>
<div class='lesson-rich-content'> <h2>جلسه 3: شرطها؛ طراحی تصمیمهای قابل فهم</h2> <h3>تمرکز جلسه</h3> <p> if، else، switch و ساخت منطق تصمیمگیری بدون شرطهای پیچیده و تو در تو. </p> <h3>چرا این مبحث مهم است؟</h3> <p> بخش زیادی از منطق کسبوکار از تصمیمها تشکیل شده و کیفیت همین قسمتها روی نگهداری اثر میگذارد. </p> <h3>در عمل چه کار میکنیم؟</h3> <p> قیمت نهایی سفارش را بر اساس مبلغ خرید، وضعیت مشتری و کد تخفیف محاسبه میکنید. </p> <h3>اشتباه رایج</h3> <p> قرار دادن همه تصمیمها در یک شرط بزرگ که تغییر یک قانون را پرهزینه میکند. </p> <h3>چالش جلسه</h3> <p> سیستم تخفیفی طراحی کنید که چند قانون مستقل داشته باشد. </p> <h3>ارتباط با پروژه نهایی</h3> <p> این مبحث در ادامه دوره در پروژه نهایی استفاده میشود. هدف این است که مفهوم جلسه فقط به یک مثال آموزشی محدود نماند و بتوانید آن را در یک مسئله واقعی به کار بگیرید. </p> </div>
<div class='lesson-rich-content'> <h2>جلسه 4: حلقهها؛ پیمایش داده بدون تکرار دستی</h2> <h3>تمرکز جلسه</h3> <p> for، foreach، range و الگوهای متداول پیمایش مجموعهها. </p> <h3>چرا این مبحث مهم است؟</h3> <p> تقریباً هر برنامه واقعی با مجموعهای از دادهها کار میکند و پیمایش صحیح یک مهارت پایه است. </p> <h3>در عمل چه کار میکنیم؟</h3> <p> فهرست سفارشها را پیمایش میکنید و تعداد، مجموع مبلغ و سفارشهای لغوشده را محاسبه میکنید. </p> <h3>اشتباه رایج</h3> <p> استفاده از حلقههای پیچیده برای کاری که با پیمایش ساده قابل حل است. </p> <h3>چالش جلسه</h3> <p> گزارشی بسازید که چند شاخص آماری را بدون پیمایشهای غیرضروری استخراج کند. </p> <h3>ارتباط با پروژه نهایی</h3> <p> این مبحث در ادامه دوره در پروژه نهایی استفاده میشود. هدف این است که مفهوم جلسه فقط به یک مثال آموزشی محدود نماند و بتوانید آن را در یک مسئله واقعی به کار بگیرید. </p> </div>
<div class='lesson-rich-content'> <h2>جلسه 5: Array، List و Dictionary؛ انتخاب ساختار داده مناسب</h2> <h3>تمرکز جلسه</h3> <p> تفاوت Array، List و Dictionary و انتخاب بر اساس نوع دسترسی مورد نیاز. </p> <h3>چرا این مبحث مهم است؟</h3> <p> ساختار داده مناسب منطق برنامه را سادهتر و دسترسی را سریعتر و قابل فهمتر میکند. </p> <h3>در عمل چه کار میکنیم؟</h3> <p> یک دفترچه مشتریان میسازید که افزودن، جستوجو، ویرایش و حذف اطلاعات را پشتیبانی کند. </p> <h3>اشتباه رایج</h3> <p> انتخاب Collection بر اساس عادت بدون توجه به نحوه دسترسی به دادهها. </p> <h3>چالش جلسه</h3> <p> برای سه سناریو تصمیم بگیرید کدام Collection مناسبتر است و دلیل انتخاب را مستند کنید. </p> <h3>ارتباط با پروژه نهایی</h3> <p> این مبحث در ادامه دوره در پروژه نهایی استفاده میشود. هدف این است که مفهوم جلسه فقط به یک مثال آموزشی محدود نماند و بتوانید آن را در یک مسئله واقعی به کار بگیرید. </p> </div>
<div class='lesson-rich-content'> <h2>جلسه 6: متدها؛ شکستن منطق بزرگ به واحدهای قابل استفاده</h2> <h3>تمرکز جلسه</h3> <p> پارامتر، مقدار بازگشتی، overload و تعیین مسئولیت مناسب برای هر متد. </p> <h3>چرا این مبحث مهم است؟</h3> <p> متدهای کوچک و هدفمند کد را تستپذیر و قابل استفاده مجدد میکنند. </p> <h3>در عمل چه کار میکنیم؟</h3> <p> منطق ثبت سفارش را به چند متد مشخص تقسیم میکنید و تکرار کد را کاهش میدهید. </p> <h3>اشتباه رایج</h3> <p> متدهایی که همزمان چند مسئولیت دارند و به نقاط پرریسک پروژه تبدیل میشوند. </p> <h3>چالش جلسه</h3> <p> عملیات ثبت سفارش را طوری بازطراحی کنید که اعتبارسنجی، محاسبه و ثبت نتیجه جدا باشند. </p> <h3>ارتباط با پروژه نهایی</h3> <p> این مبحث در ادامه دوره در پروژه نهایی استفاده میشود. هدف این است که مفهوم جلسه فقط به یک مثال آموزشی محدود نماند و بتوانید آن را در یک مسئله واقعی به کار بگیرید. </p> </div>
<div class='lesson-rich-content'> <h2>جلسه 7: Class و Object؛ مدلسازی موجودیتهای واقعی</h2> <h3>تمرکز جلسه</h3> <p> Class، Object، property و Encapsulation و نحوه نمایش موجودیتهای دامنه در کد. </p> <h3>چرا این مبحث مهم است؟</h3> <p> برنامههای واقعی باید داده و رفتار مرتبط با آن را در قالب مدلهای قابل فهم قرار دهند. </p> <h3>در عمل چه کار میکنیم؟</h3> <p> کلاسهای Customer و Order را طراحی میکنید و قوانین تغییر وضعیت سفارش را داخل مدل قرار میدهید. </p> <h3>اشتباه رایج</h3> <p> ساخت کلاسهایی که فقط property عمومی دارند و هیچ مسئولیتی در قبال قواعد دامنه ندارند. </p> <h3>چالش جلسه</h3> <p> مدل سفارش را طوری طراحی کنید که تغییر وضعیت آن فقط از مسیرهای معتبر انجام شود. </p> <h3>ارتباط با پروژه نهایی</h3> <p> این مبحث در ادامه دوره در پروژه نهایی استفاده میشود. هدف این است که مفهوم جلسه فقط به یک مثال آموزشی محدود نماند و بتوانید آن را در یک مسئله واقعی به کار بگیرید. </p> </div>
<div class='lesson-rich-content'> <h2>جلسه 8: Inheritance و Polymorphism؛ مدیریت رفتارهای متفاوت</h2> <h3>تمرکز جلسه</h3> <p> ارثبری، override و چندریختی و بررسی اینکه چه زمانی استفاده از آن منطقی است. </p> <h3>چرا این مبحث مهم است؟</h3> <p> چندریختی زمانی ارزشمند است که چند رفتار متفاوت باید از یک مسیر مشترک مدیریت شوند. </p> <h3>در عمل چه کار میکنیم؟</h3> <p> انواع روشهای پرداخت را مدل میکنید و اجرای عملیات پرداخت را از طریق یک قرارداد مشترک انجام میدهید. </p> <h3>اشتباه رایج</h3> <p> استفاده افراطی از inheritance برای حذف چند خط کد که ساختار را پیچیدهتر میکند. </p> <h3>چالش جلسه</h3> <p> سه روش پرداخت متفاوت طراحی کنید که بدون تغییر منطق اصلی سفارش قابل اضافه شدن باشند. </p> <h3>ارتباط با پروژه نهایی</h3> <p> این مبحث در ادامه دوره در پروژه نهایی استفاده میشود. هدف این است که مفهوم جلسه فقط به یک مثال آموزشی محدود نماند و بتوانید آن را در یک مسئله واقعی به کار بگیرید. </p> </div>
<div class='lesson-rich-content'> <h2>جلسه 9: Interface و Composition؛ وابستگیهای قابل تعویض</h2> <h3>تمرکز جلسه</h3> <p> Interface، Dependency و ترکیب اجزای برنامه بهجای وابستگی مستقیم به پیادهسازی. </p> <h3>چرا این مبحث مهم است؟</h3> <p> وابستگیهای قابل تعویض تستپذیری و انعطاف پروژه را بالا میبرند. </p> <h3>در عمل چه کار میکنیم؟</h3> <p> سرویس ارسال را پشت یک Interface قرار میدهید تا Providerهای مختلف را جایگزین کنید. </p> <h3>اشتباه رایج</h3> <p> ساخت Interface برای هر کلاس بدون نیاز واقعی که تعداد abstractionها را زیاد میکند. </p> <h3>چالش جلسه</h3> <p> یک سرویس اعلان طراحی کنید که بدون تغییر منطق سفارش با Email و SMS کار کند. </p> <h3>ارتباط با پروژه نهایی</h3> <p> این مبحث در ادامه دوره در پروژه نهایی استفاده میشود. هدف این است که مفهوم جلسه فقط به یک مثال آموزشی محدود نماند و بتوانید آن را در یک مسئله واقعی به کار بگیرید. </p> </div>
<div class='lesson-rich-content'> <h2>جلسه 10: Exception و Validation؛ خطا را مدیریت کنیم، نه پنهان</h2> <h3>تمرکز جلسه</h3> <p> try/catch، throw، انتخاب Exception مناسب و مرزبندی خطاهای فنی و کسبوکار. </p> <h3>چرا این مبحث مهم است؟</h3> <p> مدیریت خطا بخشی از طراحی نرمافزار است و روی تجربه کاربر و پشتیبانی اثر دارد. </p> <h3>در عمل چه کار میکنیم؟</h3> <p> ورودی سفارش را اعتبارسنجی میکنید و خطاهای قابل انتظار را از خطاهای غیرمنتظره جدا میکنید. </p> <h3>اشتباه رایج</h3> <p> گرفتن همه Exceptionها در یک catch عمومی و نادیده گرفتن آنها. </p> <h3>چالش جلسه</h3> <p> برای چند سناریوی نامعتبر سفارش خطاهای مشخص تعریف کنید و رفتار برنامه را تعیین کنید. </p> <h3>ارتباط با پروژه نهایی</h3> <p> این مبحث در ادامه دوره در پروژه نهایی استفاده میشود. هدف این است که مفهوم جلسه فقط به یک مثال آموزشی محدود نماند و بتوانید آن را در یک مسئله واقعی به کار بگیرید. </p> </div>
<div class='lesson-rich-content'> <h2>جلسه 11: LINQ؛ جستوجو و تبدیل دادهها با کد خوانا</h2> <h3>تمرکز جلسه</h3> <p> Where، Select، OrderBy، FirstOrDefault و الگوهای رایج Query روی مجموعهها. </p> <h3>چرا این مبحث مهم است؟</h3> <p> LINQ بخش بزرگی از پردازش داده در پروژههای .NET را کوتاهتر و خواناتر میکند. </p> <h3>در عمل چه کار میکنیم؟</h3> <p> روی فهرست سفارشها گزارشهای مختلف ایجاد میکنید و دادهها را به ViewModel ساده تبدیل میکنید. </p> <h3>اشتباه رایج</h3> <p> زنجیره کردن تعداد زیادی عملیات LINQ بدون توجه به خوانایی. </p> <h3>چالش جلسه</h3> <p> یک گزارش سفارش طراحی کنید که فیلتر، مرتبسازی و تبدیل داده را با LINQ انجام دهد. </p> <h3>ارتباط با پروژه نهایی</h3> <p> این مبحث در ادامه دوره در پروژه نهایی استفاده میشود. هدف این است که مفهوم جلسه فقط به یک مثال آموزشی محدود نماند و بتوانید آن را در یک مسئله واقعی به کار بگیرید. </p> </div>
<div class='lesson-rich-content'> <h2>جلسه 12: LINQ پیشرفته؛ GroupBy و Join برای گزارشهای واقعی</h2> <h3>تمرکز جلسه</h3> <p> گروهبندی، Join، Aggregate و ترکیب چند مجموعه برای تولید گزارش. </p> <h3>چرا این مبحث مهم است؟</h3> <p> گزارشهای واقعی معمولاً فقط یک فیلتر ساده نیستند و نیاز به ترکیب و خلاصهسازی داده دارند. </p> <h3>در عمل چه کار میکنیم؟</h3> <p> فروش را بر اساس محصول و ماه گروهبندی میکنید و پرفروشترین دسته را مشخص میکنید. </p> <h3>اشتباه رایج</h3> <p> استفاده از Queryهای بسیار طولانی و غیرقابل خواندن که اصلاح گزارش را سخت میکند. </p> <h3>چالش جلسه</h3> <p> گزارش فروش ماهانهای طراحی کنید که تعداد سفارش و مبلغ فروش هر گروه را نمایش دهد. </p> <h3>ارتباط با پروژه نهایی</h3> <p> این مبحث در ادامه دوره در پروژه نهایی استفاده میشود. هدف این است که مفهوم جلسه فقط به یک مثال آموزشی محدود نماند و بتوانید آن را در یک مسئله واقعی به کار بگیرید. </p> </div>
<div class='lesson-rich-content'> <h2>جلسه 13: Async و Await؛ اجرای عملیات زمانبر بدون قفل کردن برنامه</h2> <h3>تمرکز جلسه</h3> <p> Task، async/await و تفاوت اجرای همگام و غیرهمگام در عملیات ورودی و خروجی. </p> <h3>چرا این مبحث مهم است؟</h3> <p> در برنامههای واقعی عملیات فایل، دیتابیس و شبکه میتوانند زمانبر باشند. </p> <h3>در عمل چه کار میکنیم؟</h3> <p> یک سرویس خواندن اطلاعات را asynchronous طراحی میکنید و مسیر مدیریت خطای آن را بررسی میکنید. </p> <h3>اشتباه رایج</h3> <p> استفاده از async فقط برای اضافه کردن await بدون درک جریان Task. </p> <h3>چالش جلسه</h3> <p> یک سرویس دریافت اطلاعات طراحی کنید که چند عملیات I/O را به شکل قابل کنترل اجرا کند. </p> <h3>ارتباط با پروژه نهایی</h3> <p> این مبحث در ادامه دوره در پروژه نهایی استفاده میشود. هدف این است که مفهوم جلسه فقط به یک مثال آموزشی محدود نماند و بتوانید آن را در یک مسئله واقعی به کار بگیرید. </p> </div>
<div class='lesson-rich-content'> <h2>جلسه 14: اصول طراحی و Refactoring؛ کد خوب فقط کد کارکرده نیست</h2> <h3>تمرکز جلسه</h3> <p> Single Responsibility، نامگذاری، وابستگی سالم و شناسایی کدهای سخت برای نگهداری. </p> <h3>چرا این مبحث مهم است؟</h3> <p> پروژههای واقعی بیشتر با تغییر و نگهداری کد موجود رشد میکنند تا با نوشتن کد جدید. </p> <h3>در عمل چه کار میکنیم؟</h3> <p> یک بخش شلوغ از پروژه را بازبینی میکنید و مسئولیتها را بین کلاسها و متدهای مشخص تقسیم میکنید. </p> <h3>اشتباه رایج</h3> <p> بازنویسی کامل یک بخش بدون شناخت رفتار فعلی که باگهای پنهان وارد میکند. </p> <h3>چالش جلسه</h3> <p> یک کلاس بزرگ را تحلیل کنید و فقط با تغییرات کوچک ساختار آن را بهبود دهید. </p> <h3>ارتباط با پروژه نهایی</h3> <p> این مبحث در ادامه دوره در پروژه نهایی استفاده میشود. هدف این است که مفهوم جلسه فقط به یک مثال آموزشی محدود نماند و بتوانید آن را در یک مسئله واقعی به کار بگیرید. </p> </div>
<div class='lesson-rich-content'> <h2>جلسه 15: پروژه نهایی؛ سامانه مدیریت سفارش</h2> <h3>تمرکز جلسه</h3> <p> ترکیب C#، OOP، Collections، LINQ، Exception، Interface و اصول طراحی در یک پروژه یکپارچه. </p> <h3>چرا این مبحث مهم است؟</h3> <p> پروژه نهایی نشان میدهد آیا مفاهیم مختلف را واقعاً به هم متصل کردهاید یا فقط هر مبحث را جدا یاد گرفتهاید. </p> <h3>در عمل چه کار میکنیم؟</h3> <p> یک سامانه مدیریت مشتری و سفارش را از مدلسازی تا منطق کسبوکار، گزارشگیری و مدیریت خطا پیادهسازی میکنید. </p> <h3>اشتباه رایج</h3> <p> تمرکز صرف بر اجرای پروژه و بیتوجهی به ساختار و قابلیت تغییر. </p> <h3>چالش جلسه</h3> <p> سامانه را تکمیل کنید، چند سناریوی واقعی تعریف کنید و ساختار را برای توسعه آینده آماده کنید. </p> <h3>ارتباط با پروژه نهایی</h3> <p> این مبحث در ادامه دوره در پروژه نهایی استفاده میشود. هدف این است که مفهوم جلسه فقط به یک مثال آموزشی محدود نماند و بتوانید آن را در یک مسئله واقعی به کار بگیرید. </p> </div>