آموزش حوضه های CG

آموزش گرافیک، برنامه نویسی و حوضه های CG

آموزش گرافیک، برنامه نویسی و حوضه های CG

آموزش ها مرتبط با حوضه CG هستند

پربیننده ترین مطالب
پیوندهای روزانه

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


Boxing


همانطور که در قسمت های قبلی گفتیم، سی شارپ یک زبان سئ گرا است، یعنی ما می توانیم بوسیله کلاس ها شئ های مورد نظر خود را ایجاد کنیم. بوسیله کلاس ها نوع های داده ارجاعی یا Reference Type ایجاد می شوند. همینطور با struct ها که وظیفه ایجاد Value Type ها را دارند آشنا شدیم. اما کلیه این نوع های داده از نوع داده object ارث بری می کنند، یعنی فرزند نوع داده object هستند که به صورت پیش فرض در کتابخانه دات نت تعریف شده اند. اگر توضیحی بخواهیم برای عملیات Boxing ارائه دهیم، عملیات تبدیل یک Value Type به نوع داده object را boxing می گویند. مثال:

int number = 12;
object boxed = number;

علاقه مندان مبحث شیرین برنامه نویسی، در خدمت شما هستم با قسمت بیست و پنجم از سری آموزشی برنامه نویسی به زبان سی شارپ. در این قسمت از آموزش با مبحث Operator Overloading و شیوه تعریف کردن Cast های دلخواه آشنا می شویم. ابتدا بهتره با مفهوم Operator Overloading آشنا شده و بعد به سراغ مثال های عملی بریم. Operator Overloading به معنی تعریف کردن نحوه عملکرد یک Operator بر روی یک شئ می باشد. برای مثال، عملگر های جمع، تفریق و ... را در نظر بگیرید، زمانی که ما عملگر جمع را بر روی دو متغیر از نوع int اعمال می کنیم، این عملگر باعث محاسبه حاصل جمع دو عدد می شود، یعنی حال جمع دو عدد را برای ما بر میگرداند:

int n1 = 12;
int n2 = 20;
int result = n1 + n2;

اما فرض کنید کلاسی به صورت زیر تعریف کردیم:

علاقه مندان به مبحث شیرین برنامه نویسی ، بعد از یک وقفه طولانی در خدمت شما هستم با قسمت بیست و چهارم از سری آموزشی برنامه نویسی به زبان سی شارپ. در این قسمت با مبحث Type Casting و انواع Cast ها در زبان سی شارپ آشنا بشیم. ابتدا یک توضیح اولیه راجع موضوع Type Casting بدم و بعد بریم سراغ مثال ها و کدها. همانطور که در قسمت های قبلی گفته شد، در زبان سی شارپ انواع نوع داده برای ذخیره مقادیر وجود دارد. برای مثال، نوع داده int برای ذخیره مقادیر عددی صحیح و نوع داده string برای نوع داده رشته استفاده می شود. اما بعضی اوقات هست که تصمیم داریم یک نوع داده را به یک نوع داده دیگر تبدیل کنیم. به تبدیل انواع داده به یکدیگر در زبان سی شارپ Type Casting می گویند. در قسمت های قبلی با یکی از این تبدیل ها آشنا شدیم: استفاده از متد Parse در نوع های داده اولیه. برای مثال زمانی که می خواستیم نوع داده رشته را به عددی تبدیل کنیم به صورت زیر عمل می کردیم:

int number = int.Parse("12");

سی شارپ و برنامه نویسی شئ گرا، با دو مفهوم بسیار مهم در برنامه نویسی آشنا خواهیم شد، IoC که مخفف Inversion of Control و DI که مخفف Dependency Injection هست.همه ما در طول زندگی با وسایل زیادی سر و کار داریم، از وسایل اولیه زندگی مانند ماشین، یخچال، تلویزیون و ... تا وسایل که هر کس بر اساس نیاز کاری خودش با اونها سر و کار داره، مانند کامپیوتر یا لپ تاپ و گوشی. برای مثال، گوشی هوشمند خود را فرض کنید، این گوشی از قطعات زیادی تشکیل شده، صفحه نمایش، پردازنده، حافظه رم، باتری و کلی قطعات دیگه. حالا اتفاقی پیش میاد و خدای نکرده گوشی شما از دستتون میافته و صفحه نمایش گوشیتون آسیب میبینه.

کاری که می کنید باید گوشی رو به یک نمایندگی برده و صفحه نمایش رو تغییر بدید. حالا فرض کنید که گوشی شما جوری طراحی شده باشه که با آسیب دیدن صفحه نمایش نیاز باشه تا یک گوشی جدید تهیه کنید!!!! یا برای کارتون یک لپ تاپ تهیه کردید. بعد از مدتی نیاز دارید تا حافظه رم لپ تاپ رو افزایش بدید. در این حالت شما لپ تاپ رو پیش نمایندگی یا یک کارشناس در این زمینه می برید و حافظه رم لپ تاپ شما افزایش داده میشه. حال فرض کنید که لپ تاپ شما همچین قابلیتی نداشته باشه و شما نیاز باشه برای تغییر یا ارتقا حافظه یک لپ تاپ جدید خریداری کنید! برای حل این مشکل لوازم الکتریکی از قطعات مختلفی تشکیل شدند که قابلیت تغییر یا تعویض دارند. به این قابلیت طراحی ماژولار گفته میشه. در پیاده سازی سیستم های نرم افزاری نیز شما نیز به عنوان برنامه نویس باید با همچین دیدی نسبت به پیاده سازی نرم افزار اقدام کنید. ما در اینجا در مورد تغییر یکی از قسمت های نرم افزار صحبت خواهیم کرد که ارتباط مستقیمی به interface ها و IoC و DI دارد.برای آشنایی بیشتر با این مفاهیم، با یک مثال جلو میرویم. فرض کنید سیستمی پیاده سازی کردید که اعضاء می توانند در این سامانه اقدام به ثبت نام کنند. برای عملیات های مرتبط با مدیریت اعضاء کلاسی با نام Members می نویسیم:

در قسمت قبلی سری آموزشی با مفهوم interface ها آشنا شدیم. interface ها نقش بسیار موثری در روند نوشتن یک برنامه بازی می کنند و در صورتی که یک برنامه نویس با نحوه استفاده صحیح از interface ها آشنا باشه، توانایی ایجاد کدهایی ساختاریافته و قابل گستری و نگهداری رو داره. در این قسمت از سری آموزشی زبان سی شارپ و برنامه نویسی شئ گرا، با دو مفهوم بسیار مهم در برنامه نویسی آشنا خواهیم شد، IoC که مخفف Inversion of Control و DI که مخفف Dependency Injection هست.همه ما در طول زندگی با وسایل زیادی سر و کار داریم، از وسایل اولیه زندگی مانند ماشین، یخچال، تلویزیون و ... تا وسایل که هر کس بر اساس نیاز کاری خودش با اونها سر و کار داره، مانند کامپیوتر یا لپ تاپ و گوشی. برای مثال، گوشی هوشمند خود را فرض کنید، این گوشی از قطعات زیادی تشکیل شده، صفحه نمایش، پردازنده، حافظه رم، باتری و کلی قطعات دیگه. حالا اتفاقی پیش میاد و خدای نکرده گوشی شما از دستتون میافته و صفحه نمایش گوشیتون آسیب میبینه.

کاری که می کنید باید گوشی رو به یک نمایندگی برده و صفحه نمایش رو تغییر بدید. حالا فرض کنید که گوشی شما جوری طراحی شده باشه که با آسیب دیدن صفحه نمایش نیاز باشه تا یک گوشی جدید تهیه کنید!!!! یا برای کارتون یک لپ تاپ تهیه کردید. بعد از مدتی نیاز دارید تا حافظه رم لپ تاپ رو افزایش بدید. در این حالت شما لپ تاپ رو پیش نمایندگی یا یک کارشناس در این زمینه می برید و حافظه رم لپ تاپ شما افزایش داده میشه. حال فرض کنید که لپ تاپ شما همچین قابلیتی نداشته باشه و شما نیاز باشه برای تغییر یا ارتقا حافظه یک لپ تاپ جدید خریداری کنید! برای حل این مشکل لوازم الکتریکی از قطعات مختلفی تشکیل شدند که قابلیت تغییر یا تعویض دارند. به این قابلیت طراحی ماژولار گفته میشه. در پیاده سازی سیستم های نرم افزاری نیز شما نیز به عنوان برنامه نویس باید با همچین دیدی نسبت به پیاده سازی نرم افزار اقدام کنید. ما در اینجا در مورد تغییر یکی از قسمت های نرم افزار صحبت خواهیم کرد که ارتباط مستقیمی به interface ها و IoC و DI دارد.برای آشنایی بیشتر با این مفاهیم، با یک مثال جلو میرویم. فرض کنید سیستمی پیاده سازی کردید که اعضاء می توانند در این سامانه اقدام به ثبت نام کنند. برای عملیات های مرتبط با مدیریت اعضاء کلاسی با نام Members می نویسیم:

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

تعریف interface ها


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

{access-modifier} interface {name}
{
    {members}
}

همانطور که در قسمت های اولیه آموزش گفتیم، زبان سی شارپ یک زبان Strongly Typed است. یعنی تمامی نوع های داده در آن مشخص می باشند. اما کلیه نوع های داده در سی شارپ به دو دسته تقسیم می شوند:

  1. Reference Types
  2. Value Types

تفاوت این دو نوع داده، در شیوه برخورد زبان سی شارپ و شیوه تخصیص حافظه و مدیریت آنها می باشد. در این قسمت به تفصیل در مورد این دو نوع داده صحبت کرده و در انتها با struct ها در زبان سی شارپ آشنا خواهیم شد.

در بستر دات نت، متغیرها هنگام ایجاد در دو حافظه مختلف ایجاد می شوند:

  1. حافظه stack
  2. حافظه heap

در قسمتی که در مورد کلاس ها و اشیاء صحبت کردیم، گفتیم زمانی که شما کلاسی را تعریف می کنید باید از روی آن کلاس شئ ای بسازید تا به اعضای آن دسترسی داشته باشید. اما حالت هایی وجود دارد که شما می توانید یک کلاس و اعضای آن را به صورتی تعریف کنید که دسترسی به اعضای آن کلاس بدون تعریف شئ از آن امکان پذیر باشد. در طول این دوره آموزشی با یکی از این کلاس ها کار کرده ایم. کلاس Console که شما می توانستید بدون ساختن شئ از روی آن متدهای آن را صدا بزنید. برای مثال متد WriteLine:

Console.WriteLine("Welcome to ITPro.ir");

دلیل این امر، تعریف کلاس Console و اعضای آن به صورت static است.

در قسمت قبل با کلمات کلیدی abstract و sealed آشنا شدیم. در این قسمت و قسمت بعد تصمیم دارم برخی نکات تکمیلی که از بخش برنامه نویسی شئ گرا مانده را خدمت دوستان آموزش بدم. مواردی که در این بخش با آنها آشنا خواهید شد به شرح زیر است:

  1. سازنده ها در کلاس های فرزند و پدر
  2. سطح دسترسی protected
  3. مخفی کردن متدها با کلمه کلیدی new
  4. فیلدهای Readonly

در قسمت قبلی آموزش با مفهوم polymorphism آشنا شدیم. در ادامه قصد داریم با کلاس های abstract و sealed آشنا شویم. زمانی که شروع به نوشتن برنامه ای می کنیم، بعد از مشخص کردن موجودیت های برنامه و طراحی کلاس های مربوطه، باید یکسری محدودیت ها برای استفاده از کلاس ها وضع کرد. برای مثال، کلاس پایه ای داریم که این کلاس نباید مورد استفاده قرار بگیرد و تنها باید از کلاس های فرزند قابلیت ایجاد شئ وجود داشته باشد یا کلاسی نوشته ایم و نباید اجازه ایجاد کلاس فرزند از روی آن کلاس داده شود. این قابلیت ها بخصوص در مواقعی که در تیم شما، افرادی از کدهای نوشته شده توسط شما استفاده می کنند یا کدی را برای استفاده از سایر برنامه نویس ها بر روی اینترنت منتشر می کنید کاربرد دارند. راه حل برای این شرایط استفاده از کلاس های abstract و کلاس های sealed می باشد.

کلاس ها و اعضاء abstract