اثر پروانه ای

برنامه نویسی حرفه ای کامپیوتر به زبان سی شارپ - لیست کامل کلمات کلیدی در ʚĭɞ - ßữʈʨɾflỵ ⓔⓕⓕⓔⓒⓣ

اثر پروانه ای

برنامه نویسی حرفه ای کامپیوتر به زبان سی شارپ - لیست کامل کلمات کلیدی در ʚĭɞ - ßữʈʨɾflỵ ⓔⓕⓕⓔⓒⓣ

اثر پروانه ای

اثر پروانه‌ای نام پدیده‌ای است که به دلیل حساسیت سیستم‌های آشوب‌ناک به شرایط اولیه ایجاد می‌شود. این پدیده به این اشاره می‌کند که تغییری کوچک در یک سیستم آشوب‌ناک چون جو سیارهٔ زمین (مثلاً بال‌زدن پروانه) می‌تواند باعث تغییرات شدید (وقوع توفان در کشوری دیگر) در آینده شود.

ایده‌ٔ این‌که پروانه‌ای می‌تواند باعث تغییری آشوبی شود نخستین بار در ۱۹۵۲ در داستان کوتاهی به نام آوای تندر اثر ری بردبری مطرح شد. عبارت «اثر پروانه ای» هم در ۱۹۶۱ در پی مقاله‌ای از ادوارد لورنتس به وجود آمد. وی در صد و سی و نهمین اجلاس ای‌ای‌ای‌اس در سال ۱۹۷۲ مقاله‌ای با این عنوان ارائه داد که «آیا بال‌زدن پروانه‌ای در برزیل می‌تواند باعث ایجاد تندباد در تکزاس شود؟»

آخرین نظرات
  • ۱۳ بهمن ۰۱، ۱۵:۳۱ - حسنا سادات و سما سادات
    عالی

۱۰ مطلب با کلمه‌ی کلیدی «generic» ثبت شده است

  • ۱
  • ۰

دات نت فریم وورک کلاس های مخصوصی را برای ذخیره و بازیابی داده ها ارائه داده است. این کلاس ها پشتیبانی از لیست ها، پشته ها، صف ها و جداول هش (جدول هایی که یک سری کلید را به مقادیر خاصی مرتبط می کند) را فراهم می کنند. اکثر کلاس های کلکسیونی رابط های مشابهی را پیاده سازی می کنند، و این رابط ها را می توان برای ساختن کلاس های کلکسیونی جدید که منطبق با نیازهای ذخیره سازی تخصصی تر هستند بکار برد.

نکته

اپلیکیشن های نوشته شده با نسخه 2.0 و بالاتر دات نت فریم وورک می بایست از کلاس های کلکسیونی جنریک موجود در فضای نام  System.Collections.Generic که امنیت-نوع و کارایی بیشتری نسبت به نسخه غیر-جنریک خود دارند، استفاده کنند.

ArrayList list = new ArrayList();
list.Add(10);
list.Add(20);

بررسی کلاس های کلکسیونی

کلاس های کلکسیونی دارای خوصوصیات زیر می باشند:

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

کلاس ها و ساختارها (Struct) دو تا از زیربناهای اساسی سیستم نوع عمومی (common type system) در دات نت فریم وورک می باشند. هرکدام دراصل یک ساختار داده است که یک مجموعه از داده ها و رفتارهایی که باهم در ارتباط هستند را تحت یک واحد منطقی کپسوله (یعنی در یک واحد مشترک قرار دادن) قرار می دهد. داده ها و رفتارها ، در واقع "اعضای" کلاس و struct هستند و شامل متدها، پراپرتی ها، رویدادها و غیره می شوند؛ که هر یک از این موارد شرح داده خواهند شد.

اعلان یک کلاس یا ساختار مانند یک طرح اولیه (بلوپرینت) است که برای ساختن نمونه ها یا اشیاء در زمان اجرا بکار می رود. اگر شما یک کلاس یا ساختار به نام Person تعریف کنید، Person نام آن نوع است. چندین نمونه از Person را می توان تولید کرد، و هر نمونه می تواند مقادیر مختلفی در پراپرتی ها و فیلدهایش داشته باشد.

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

  • غلامعلی حسینی بهجانی
  • ۲
  • ۰

کلیدواژه volatile

کلمه کلیدی volatile (فرّار) نشان می دهد که یک فیلد می تواند توسط چندین ریسمان (thread) که همزمان درحال اجرا هستند، دستکاری شود. فیلدهایی که بصورت volatile اعلان شده اند، مورد بهینه سازی های کامپایلری ای که فرضشان دسترسی تک ریسمانی است قرار نمی گیرند. این کار تضمین می کند که مقدار فیلد در همه زمان ها به روز ترین مقدار است.

اصلاحگر volatile معمولا" برای فیلدی که بدون بیان lock توسط چندین ریسمان مورد دسترسی قرار می گیرد، استفاده می شود.

کلمه کلیدی volatile را می توان رو فیلدهایی از نوع های زیر اعمال کرد:

  • نوع های مرجع.
  • نوع های اشاره گر (در یک زمینه نا امن (unsafe contenxt)). توجه کنید که با اینکه اشاره گر خودش می تواند volatile باشد، شیئی که اشاره گر به آن اشاره می کند نمی تواند volatile باشد. به بیانی دیگر، شما نمی توانید "اشاره گر به volatile" اعلان کنید.
  • نوع هایی مثل sbyte، byte، short، ushort، int، uint، char، float و bool.
  • نوع شمارشی ای که نوع پایه آن یکی از نوع های byte، sbyte، short، ushort، int یا uint باشد.
  • پارامتر نوع جنریکی که بصورت نوع مرجع شناخته شده باشد.
  • IntPtr و UIntPtr .

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

کلیدواژه typeof

برای بدست آوردن شیئ System.Type مربوط به یک نوع کاربرد دارد. یک عبارت typeof به شکل زیر است:

System.Type type = typeof(int);

ملاحظات

برای بدست آوردن نوع زمان-اجرای یک عبارت ، می توانید از متد دات نتی GetType بصورت زیر استفاده کنید:

int i = 0;
System.Type type = i.GetType();

عملگر typeof را نمی توان overload کرد.

عملگر typeof همچنین می تواند در نوع های جنریک باز مورد استفاده قرار گیرد. نوع هایی که دارای بیش از یک پارامتر نوع هستند، باید تعداد متناسبی وریگول (کاما) در خصوصیتشان باشند. مثال زیر چگونگی تعیین اینکه آیا نوع خروجی یک متد از نوع جنریک IEnumerable است یا نه را نشان می دهد. فرض کنید این متد نمونه ای از یک نوع MethodInfo باشد:

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

اصلاحگر جنریک out

برای پارامترهای نوع جنریک، کلمه کلیدی out مشخص می کند که پارامتر نوع covariant است. شما می توانید از کلیدواژه out در رابط های جنریک و وکیل ها استفاده کنید.

کواریانس این توانایی را به شما می دهد که از نوع بیشتر مشتق شده (غیر پایه ای تر، از ریشه دورتر) نسبت به آن نوعی که پارامتر جنریک تعیین کرده استفاده کنید. این تکنیک اجازه تبدیل ضمنی کلاس هایی که اینترفیس های گوناگون را پیاده سازی کرده اند و همچنین تبدیل ضمنی نوع های وکالتی را می دهد.

رابطی که دارای پارامتر نوع covariant است، به متدهایش این امکان را می دهد که نوع هایی بیشتر مشتق شده نسبت به آنهایی که توسط پارامتر نوع مشخص شده، برگشت دهند. برای مثال، چون در دات نت فریم وورک 4، در <IEnumerable<T ، نوع T کواریانت است، شما می توانید شیئی از نوع (IEnumerable(of String را به شیئی از نوع (IEnumerable(of Object انتساب دهید، بدون اینکه به هیچ متد تبدیل خاصی نیاز داشته باشید.

یک وکیل (delegate) کواریانت می تواند به وکیل های دیگر از نوع یکسان انتساب داده شود ، ولی با یک پارامتر نوع جنریک بیشتر مشتق شده.

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

کلمه کلیدی out

کلیدواژه زمینه ای out در دو زمینه (context) زیر مورد استفاده دارد:

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

قید new

توضیح مختصری در مورد قید ها (Constraint) : 

وقتی یک کلاس جنریک (وابسته به جنس و نوع ورودی) تعریف می کنید، می توانید یکسری محدودیت ها را درمورد نوع ورودی کلاس اعمال کنید. نوع ورودی همان نوعی است که بعدا" کاربر در هنگام نمونه سازی از کلاس جنریک آنرا بصورت پارامتر به کلاس می دهد. اگر کاربری که می خواهد از کلاس جنریک استفاده کند، تلاش کند که کلاس شما را با یک نوع که بوسیله قید مشخص نکرده اید را نمونه سازی کند، کامپایلر یک خطا تولید می کند. این محدودیت های ایجاد شده را قید یا (Constraint) می گویند. قید ها با کلمه کلیدی زمینه ای where مورد استفاده قرار می گیرند.

قید new مشخص می کند که هر آرگومان نوع در اعلان کلاس جنریک (generic/وابسته به جنس) باید دارای یک متد سازنده بدون پارامتر باشد. برای استفاده از قید new ، نوع (type) نباید abstract (چکیده) باشد.

مثال

وقتی که کلاس جنریک شما نمونه هایی جدید از نوعی خاص می سازد، قید new را به آن پارامتر نوع اعمال کنید. بصورتی که در مثال زیر نشان داده شده:

class ItemFactory<T> where T : new()
{
    public T GetNewItem()
    {
        return new T();
    }
}

هرگاه قید new را به همراه قیود دیگر بصورت همزمان استفاده می کنید، قید new باید آخرین قید باشد:

public class ItemFactory2<T>
        where T : IComparable, new()
{
}

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

روند زیر چگونگی افزودن رویدادهایی که از الگوی استاندارد دات نت پیروی می کنند را به کلاس ها و ساختارها ، توضیح می دهد. همه رویدادها در کتابخانه کلاس Net Framework. بر پایه وکیل EventHandler می باشند، که بصورت زیر تعریف شده اند:

public delegate void EventHandler(object sender, EventArgs e);

نکته

نسخه 2.0 دات نت فریم وورک یک نسخه جنریک (generic) از این وکیل (delegate) بصورت <EventHandler<TEventArgs معرفی می کند. مثال های زیر چگونگی استفاده از هر دو نسخه را نشان می دهد. هر چند رویدادهای موجود در کلاس هایی که شما تعریف می کنید، می توانند بر پایه هر وکیل معتبری باشند؛ حتی وکیل هایی که یک مقدار را برگشت می دهند، عموما" پیشنهاد می شود که با استفاده از EventHandler ، رویداد هایتان را روی الگوی دات نت فریم وورک ، پایه گزاری کنید. بصورتی که در مثال زیر نشان داده شده است.

  • غلامعلی حسینی بهجانی
  • ۲
  • ۰

کلمه کلیدی in

با سلام!

مطلبی رو که امروز براتون آماده کردم. یه کم با مطالب قبلی تفاوت داره. احتمالا یه کم پیچیده تر.


ترمینولوژی:

Variant : چیزی که به چیزهای دیگر وابستگی دارد اما دقیقا مشابه نیست، گوناگون، متغیر

پیشوند Contra : ضد، مخالف، نقیض

پیشوند Co : با، باهم


برای پارامترهای نوع Generic (عام)، کلمه کلیدی in تعیین می کند که پارامتر آن نوع عام Contravariant است. شما می توانید از این کلمه کلیدی (in) در رابط های (Interface) عام و نماینده ها (delegate) استفاده کنید.

کنتراواریانس این توانایی رو به شما می دهد که از نوع کمتر مشتق شده (پایه ای تر، ریشه ای تر) نسبت به آن نوعی که پارامتر generic تعیین کرده استفاده کنید. که اجازه تبدیل ضمنی کلاس هایی که اینترفیس های گوناگون را پیاده سازی کرده اند را می دهد.

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

کلیدواژه default

کلمه کلیدی default در زبان برنامه نویسی #C عمدتا" به دوشکل استفاده می شود:

  1. در بیان switch (بیان معادل کلمه انگلیسی statement است)
  2. در کلاس های Generic (در مورد این نوع کلاس ها انشاءالله در پست های بعدی مفصل صحبت خواهم کرد. اما فعلا بطور خلاصه می تونم بگم که نوعی کلاس هستند که نوع داده ای که قرار است کلاس با آن کار کند را در زمان نمونه سازی آن مشخص می کنیم. مثلا" <MyClass<int )

این کلیدواژه اگر در بیان switch استفاده شود، مجموعه دستورالعمل هایی را، در صورت نادرست بودن عبارات case قبلی اجرا می کند.

اما بحث من در این پست بیشتر سر استفاده از کلمه کلید default در کلاس ها و متدهای جامع (Generic) است:

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

  1. آیا T نوع مرجع است یا نوع مقداری (Value type or Reference type)
  2. اگر T از نوع مقداری است، آیا مقدار عددی خواهد داشت یا struct (چون نوع struct دز زبان سی شارپ در رده ی نوع های مقداری قرار میگیرد)

فرضا" متغر t از نوع T  پارامتری شده داده شده باشد، عبارت t=null فقط وقتی درست است که t از نوع مرجع باشد و t=0 فقط برای نوع عددی کار می کند و نه برای struct ها.

اما تا اینجا همه مقدمه بود!

راه حل استفاده از کلیدواژه default است که برای نوع های مرجع null برمیگرداند و صفر را برای نوع عددی و همچنین برای نوع struct هر کدام از اعضای آنرا بسته به نوع عددی یا مرجع بودن با صفر یا null برمیگرداند. در صورتی که نوع عددی nullable باشد، کلیدواژه default،

 System.Nullable<T> 

را که مثل هر struct دیگری مقدار دهی شده را برمیگرداند.

مثال زیر از نحوه استفاده از این کلمه کلیدی را در کدهای جامع (Generic) نشان می دهد:

  • غلامعلی حسینی بهجانی