اثر پروانه ای

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

اثر پروانه ای

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

اثر پروانه ای

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

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

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

۷ مطلب با کلمه‌ی کلیدی «inheritance» ثبت شده است

  • ۳
  • ۰

بسم الله الرحمن الرحیم

سلام...

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

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

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

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

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

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

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

کلیدواژه virtual

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

public virtual double Area() 
{
    return x * y;
}

پیاده سازی یک عضو مجازی (virtual) را می توان توسط عضو رونویسی کننده در یک کلاس مشتق شده، عوض کرد.

ملاحظات

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

بطور پیش فرض، متدها غیر-مجازی هستند. شما نمی توانید متد غیر مجازی را رونویسی کنید.

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

کلمه کلیدی this

کلمه کلیدی this به نمونه فعلی کلاس رجوع می کند و همچنین به عنوان اصلاحگر اولین پارامتر یک متد الحاقی (Extension Method) کاربرد دارد.

نکته

این تاپیک فقط کاربرد کلیدواژه this با نمونه های کلاس را توضیح می دهد. در مورد متدهای الحاقی بطور خلاصه باید بگویم که : متدهای الحاقی به شما این امکان را می دهند که متد ها را به نوع های موجود "اضافه" کنیم ، بدون اینکه یک نسخه مشتق شده جدید از آن نوع بسازیم ، بدون نیاز به کامپایل مجدد و یا حتی ویرایش نوع اصلی. متدهای الحاقی ، نوع خاصی از متدهای ایستا هستند، اما بگونه ای فراخوانی می شوند که انگار متد نمونه آن نوع الحاقی می باشند. برای کد نوشته شده در #C هیچ تفاوت آشکاری بین فراخوانی یک متد الحاقی و متدهایی که واقعا" در داخل نوع اعلان شده اند وجود ندارد. مشهورترین متدهای الحاقی ، عملگرهای پرس و جوی استاندارد LINQ می باشند که قابلیت های پرس و جو را به نوع های IEnumerable و <IEnumerable<T موجود اضافه می کنند. برای استفاده از عملگرهای پرس و جوی استاندارد، اول آنها را با استفاده از رهنمون using System.Linq به داخل حوزه (scope) بیاورید. از جمله متدهای الحاقی LINQ می توان به GroupBy ، OrderBy و Average اشاره کرد که پس اضافه کردن رهنمون فوق الذکر به نوع شمارشی IEnumerable اضافه می شوند.


موارد زیر کاربردهای معمول کلمه کلیدی this است:

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

کلمه کلیدی sealed

اصلاحگر sealed وقتی به یک کلاس اعمال می شود، از ارث بری کلاس های دیگر از این کلاس جلوگیری می کند. در مثال زیر کلاس B از کلاس A ارث بری می کند، اما هیچ کلاسی نمی تواند از کلاس B ارث بری کند.

class A {}    
sealed class B : A {}

شما همچنین می توانید از اصلاحگر sealed روی پراپرتی یا متدی که یک پراپرتی یا متد مجازی (virtual) را در کلاس پایه رونویسی (override) می کند، استفاده کنید. این کار به شما این امکان را می دهد که به کلاس ها اجازه دهید که از کلاس شما ارث بری کنند و از override کردن برخی متدها یا پراپرتی ها جلوگیری به عمل آورید.

مثال

در مثال زیر ، Z از Y ارث می برد اما Z نمی تواند تابع مجازی F را که در X اعلان شده و در Y مهروموم (sealed) شده را رونویسی (override) کند.

class X
{
    protected virtual void F() { Console.WriteLine("X.F"); }
    protected virtual void F2() { Console.WriteLine("X.F2"); }
}
class Y : X
{
        sealed protected override void F() { Console.WriteLine("Y.F"); }
        protected override void F2() { Console.WriteLine("X.F3");}
}
class Z : Y
{
    // Attempting to override F causes compiler error CS0239.
    // protected override void F() { Console.WriteLine("C.F"); }

    // Overriding F2 is allowed.
    protected override void F2() { Console.WriteLine("Z.F2"); }
}

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

کلمه کلیدی object

نوع object یک نام مستعار برای Object (به حرف بزرگ O دقت کنید) در دات نت فریم وورک است. در سیستم یکپارچه نوع #C، همه نوع ها، چه از پیش تعریف شده و چه کاربر-تعریف، چه نوع های مرجع و چه نوع های مقداری، مستقیما" و یا غیر مستقیم از Object ارث بری می کنند. شما می توانید مقادیر از هر نوعی را به متغیرهای از نوع object انتساب دهید. وقتی یک متغیر از نوع مقداری به نوع object تبدیل می شود، به این عمل اصطلاحا" boxing (بسته بندی) می گویند. به تبدیل نوع object به نوع های مقداری ، اصطلاحا" unboxing می گویند.

مثال

نمونه زیر نشان می دهد که متغیر های از نوع object می توانند مقادیر را از هر نوعی قبول کنند. همچنین چگونگی استفاده متغیرهای از نوع object از متدهای Object از دات نت فریم وورک را نشان می دهد.

class ObjectTest
{
   public int i = 10;
}

class MainClass2
{
   static void Main()
   {
      object a;
      a = 1;   // an example of boxing
      Console.WriteLine(a);
      Console.WriteLine(a.GetType());
      Console.WriteLine(a.ToString());

      a = new ObjectTest();
      ObjectTest classRef;
      classRef = (ObjectTest)a;
      Console.WriteLine(classRef.i);
   }
}
/* Output
    1
    System.Int32
    1
 * 10
*/
  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

اصلاحگر new

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

برای مخفی کردن یک عضو ارثی، آن را در کلاس مشتق شده با یک نام یکسان اعلان کنید و آنرا با اصلاحگر new اصلاح کنید. برای مثال:

public class BaseC
{
    public int x;
    public void Invoke() { }
}
public class DerivedC : BaseC
{
    new public void Invoke() { }
}

در این مثال، BaseC.Invoke توسط DerivedC.Invoke مخفی است. مخفی سازی روی فیلد x مؤثر واقع نمی شود ، به این دلیل که با یک نام مشابه مخفی نشده است.

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