آیا می دانید تا کنون 8198 نفر در 16 دوره آموزشی سون لرن ثبت نام کرده اند !

دوره مجازی #C (جلسه 10): آشنایی با Interface، Enumeration و لیست ها

8 2084 ۱۸ مرداد ۹۴
در این جلسه مباحث تکمیلی و به جا مانده از مباحث گذشته را مطرح خواهیم کرد که شامل معرفی Interface، Enumeration و لیست ها و ارائه ی مطالب تکمیلی پیرامون مباحث Method Overloading و Method Overriding و همینطور مبحث Abstraction خواهد بود. همینطور با بیان مثال های کاربردی سعی می کنیم، مطالب ارائه شده را به شکل عملی مورد بررسی قرار دهیم. مطالب آموزش داده شده در این جلسه به قرار زیر می باشند:
  • Method Overloading
  • Method Overriding
  • آشنایی با Interface
  • معرفی Enumeration
  • پیاده سازی Interface ها
  • بررسی عمیق تر و دقیق تر Property ها
  • پیاده سازی یک پروژه ی ساده ی بانکداری
  • آشنایی با Class Diagram
  • معرفی Array list
  • آشنایی با حلقه ی foreach و پیمایش با استفاده از آن بر روی لیست ها
  • پیاده سازی یک پروژه ساده دیکشنری با استفاده از لیست ها
در جلسه ی آینده با مفاهیم پیشرفته تری همچون مبحث Generic ها و مسئله ی Sorting آشنا می شویم.
این مطلب یک جلسه از دوره آموزش جامع #C - پایه تا پیشرفته است و برای دیدن آن باید در این دوره ثبت نام کنید .
توضیحات : با توجه به فراگیر شدن استفاده از پلتفرم .NET به همراه سیستم مدیریت پایگاه داده SQL Server به منظور انجام پروژه های تحت ویندوز در ابعاد بزرگ و همینطور متوسط و کوچک، دوره ی جامع #C را که شامل آموزش پایه تا پیشرفته ی این مفاهیم می باشد برای کاربران محترم وب سایت سون لرن تهیه و تولید کرده ایم. این دوره متشکل از چند فصل کلی می باشد که در سایر منابع آموزشی و کلاس های حضوری معمولا بصورت دوره هایی مستقل و جداگانه و مجموعا با هزینه ای بالغ بر 1 میلیون تومان ارائه می گردند در صورتی که وب سایت سون لرن به منظور حمایت از کاربران محترم، این چند دوره را در یک دوره ی جامع گردآوری کرده است تا شما عزیزان با صرف هزینه ای بسیار کمتر از کلاس های حضوری (در واقع کمتر از 15% هزینه کلاس های حضوری) بتوانید تمامی این مطالب را بصورت کامل فراگیرید. در این دوره مفاهیم کاربردی طراحی و پیاده سازی برنامه های Desktop با زبان #C و همینطور طراحی پایگاه داده با استفاده از SQL Server را بررسی خواهیم کرد. در هر فصل از دوره سعی شده است تا با انجام مینی پروژه ها، مطالب آموزشی بصورت کاملا کاربردی تدریس شود. علاوه بر این در پایان دوره یک پروژه کامل را از صفر تا 100 طراحی و پیاده سازی خواهیم کرد. امید است این دوره ی جامع برای شما دوستان گرامی مفید واقع گردد.
:: مطالب جدید سون لرن را از طریق ایمیل دریافت کنید :

دیدگاه ها 8 دیدگاه برای این مطلب ارسال شده است.

  • ‏‏

    سلام عرض شد
    دوتا سوال دارم ، اول اینکه کی از این محیط کنسول میاید بیرون ؟
    دوم اینکه پروژه تا حدی پیش میره که ما بتونیم (یا خودتون) اونو تحت وب هم کار کنیم؟

    • ‏‏
      آرین زارعی(۱۹ مرداد ۱۳۹۴)

      سلام.
      در فصل بعدی که کارمون با پایگاه داده هست و اصلا به این محیط کاری نداریم و فصل 4 هم حدود 3-4 جلسه با محیط کنسول کار می کنیم. بعد از اون دیگه وارد محیط گرافیکی میشیم. علت اینکار هم این هست که شما با مفاهیم برنامه نویسی سی شارپ کاملا آشنا بشید در یک محیط خیلی ساده و سپس درگیر مسائل گرافیکی بشید.
      بله ببینید تحت وب یا دسکتاپ بودن پروژه تفاوتش تقریبا در لایه ی پرزنتیشن پروژه هست. یعنی شما پایگاه داده تون یکسان هست، لایه های ارتباطی ما بین هم یکسان خواهد بود و فقط برنامه ای که کاربر نهایی با اون کار می کنه متفاوت می شه که می تونه یک برنامه دسکتاپ باشه یا یک وب سایت یا حتی یک نرم افزار موبایل و …
      شما اگر معماری وب رو بدونید، می تونید این پروژه رو ببرید بر روی وب، و با asp اون رو بنویسید.

  • ‏‏
    حجت قربانی(۲۵ اردیبهشت ۱۳۹۵)

    سلام آقای زارعی
    من یک سوال فنی برام پیش آمده بود که حتی با سرچ توی اینترنت هم نتونستم اون رو بفهمم دیگه به عنوان آخرین راه از شما بپرسم:
    سوالم اینکه ما دونوع پراپرتی داریم
    public int YearOfOpenning { get; set; }
    که نوع بالا نوع ساده ی پراپرتی هست . میدونیم که نوع دیگری از پراپرتی وجود داره که برای مقداردهی و عوض کردن و بدست آوردن مقدار متغیر های درون یک شی استفاده میشه و تقریبا مثل تابع تعریف میشه
    ولی شما اینجا از خود پراپرتی به عنوان متغیر استفاده کردین. مثل این میمونه که ما از تابع به عنوان یک متغیر استفاده کنیم
    وحتی در کد زیر پیاده سازی ای برای پراپرتی نداریم یعنی get و set رو تعریف نکردیم ولی جوری از اونها اسفاده کردید که انگار get و set دارن. یعنی به پراپرتی به عنوان متغیر نگاه کردین و از مزیت های پراپرتی توی تغییر و خوندن مقدار استفاده کردین بدون اینکه پیاده سازی داشته باشیم. این دو نکته رو اصلا اشاره نکردین

    int OpenningTotalMonth = base.YearOfOpenning*12 + base.MonthOfOpenning;

    • ‏‏
      آرین زارعی(۲۵ اردیبهشت ۱۳۹۵)

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

  • ‏‏

    سلام جناب زارعی . ضمن تبریک پیشاپیش عید نوروز 96 برای شما و تیم پرتلاش و موفق سون لرن
    دو سه ابهام دارم که اگر راهنمایی بفرمایید ممنون میشم.
    1- در قسمتهای پیشین اشاره نموده اید که فیلدها در صورت اعلان باید پنهان باشند(یعنی Private) و فقط از طریق property ، کلاسهای دیگر میتوانند به آنها دسترسی داشته باشند. چه لزومی دارد در کلاس JariAccount با وجود پراپرتیهایی که بصورت public و از اینترفیس IAccount انتزاع شده اند فیلدهای مرتبط با آنها بصورت Public اعلان شوند!!؟؟ قانون encapsulation رعایت نشده. ممنون میشم توضیح بفرمایید.
    2-در کلاس SepordehAccount دو فیلد
    public int YearOfOpenning { get; set; }
    public int MonthOfOpenning { get; set; } بصورت پراپرتی و صرفا جهت معرفی دو فیلد مذکور و بدون باز کردن دو عمل set و get نوشته شده اند شما چگونه در متد main و هنگام ساختن آبجکت از نوع ShortTermSepordehAccount حتی با اینکه constructor ی هم از آن کلاس ساخته نشده به دو فیلد YearOfOpenning و MonthOfOpenning مقدار دادید!!؟ مگه میشه به این شکل معرفی، مقداری از خارج بپذیرند؟
    3-متاسفانه با اینکه کدها رو عینا مانند شما و خط به خط فیلم آموزشی، کدزنی کردم ولی پراپرتی بررسی محتوای CurrentAmount پیغام لازم را هنگام منفی شدن مقدار فیلد مورد نظر صادر نمیکند و مقدار منفی 200 را درون فیلد قرار میدهد!!!! . بارها بررسی کردم ولی متاسفانه نمیدانم مشکل از کجاست.

    پ.ن: در ضمن مثال Shape در فصل نهم حاوی ارور میباشد یعنی اگر شما بجای وارد کردن عدد شکل مورد نظر ناخودآگاه enter کنید با ارور exception handling مواجه شده و از برنامه خارج میشوید. من گمان میکنم که این مورد مربوط به خالی بودن قسمت Default عبارت switch در کلاس InputManager میباشد. حال آنکه علی الظاهر باید درست کار کند. بازم ممنون

    • ‏‏
      آرین زارعی(۳ فروردین ۱۳۹۶)

      سلام دوست عزیز. نوروز شما هم مبارک
      خیلی خوبه که دقت دارید به تمام مفاهیم. ولی توجه کنید که YearOfOpenning یک property هست و نه فیلد. فیلد مربوط به آن به صورت hidden و ضمنی توسط خود IDE تعریف میشود. یعنی وقتی که از تعریف سریع proprty (به کمک زدن تب) استفاده کنیم، این اتفاق میافتد و فیلد به صورت private و hidden تعریف میشود. در گزینه ی اول هم به نظر میاد همین اشتباه رو کرده باشید.
      وقتی هم Set و get رو باز نمیکنیم به این معناست که صرفا هیچ کنترلی را فعلا انجام نمیدهند و به سادگی فقط عمل خواندن و نوشتن در field رو انجام میدن ولی شاید در اینده نیاز به تغییر باشه. در مورد سوال سه نمیشه حدس زد چرا برای شما کار نمیکنه باید دیباگ کنید کدتون رو تا مشکل رو متوجه بشید.
      در کل یه نکته رو بگم خدمتتون و اونم اینه که شما باید فکر ارور های مختلف رو کنید و حواستون باشه بهشون . در توضیحی که در پایان دادید این فرض رو کرده بودیم که کسی مقدار خالی وارد نکند ولی در برنامه های بزرگی که مینویسید حتما باید در نظر بگیرید این امکان رو.
      موفق باشید

  • ‏‏

    سلام دوباره. جناب زارعی در مثال MyDictionary ابتدا به ساکن گمان میکردم که همچون مثال XOBorad کلاس Word رو بصورت آرایه ای در constructor کلاس MyDictionary فراخوانی خواهید کرد ولی از اونجا که دایره لغات نامحدودن این کار انجام نشد و با معرفی متغیری دیگر به نالم Words از نوع ArrayList در کلاس MyDictionary ودر هنگام فراخوانی متد Add ، کلاس Word رو به صورت لوکال فراخوانی کرده و مقدار دهی نموده اید و این کاملا سیر منطقی داره و قابل قبوله…. . پیشنهادی دارم، آیا امکانپذیرهست که کلاس Word رو به عنوان فرزند کلاس ArrayList معرفی کرده و از انجا که متد Add در کلاس ArrayList بصورت Virtual میباشد این متد رو درون کلاس Word بصورت override بازسازی کرد و آنگاه حال که به این متد درون خود کلاس Word دسترسی داریم همین کلاس Word را با ساختن آبجکتی بصورت آرایه ای از نوع کلاس Word (همچون مثال XOBorad)،درون کلاس MyDctionary ایجاد و با یک حلقه مراقبت- کنترل تکرار و معرفی یک متغیر Enum به عنوان SentinelValue در constructor کلاس MyDictionary دیکشنری رو مقدار دهی کرد؟ البته روش شما هم راه حل خوبی هست اما به طرز عجیبی احساس میکنم این مثال شبیه به مثال XOBoard باید حل بشه. ممنون از پاسخ شما

    • ‏‏
      آرین زارعی(۳ فروردین ۱۳۹۶)

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

  • نکته : برای پاسخگویی سریعتر و بهتر، بخش نظرات این مطلب مختص پرسش و پاسخ های کاربران ثبت نامی در دوره ی دوره آموزش جامع #C - پایه تا پیشرفته است .
    اگر قبلا در این دوره ثبت نام کرده اید پس از ورود به سایت می توانید تمامی پرسش و پاسخ ها و نظرات مطرح شده ی این مطلب را مشاهده و اگر سوالی دارید در همینجا مطرح کنید.

    ورود/عضویت سریع با اکانت فیسبوک/جیمیل شما

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

    ورود به سایت

    ورود سریع با :
    در حال اتصال ...

    جستجو در سون لرن

    عبارت :
    7LearnTelegram