اثر پروانه ای

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

مشخصات بلاگ
اثر پروانه ای

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

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

آخرین نظرات
  • ۱۱ بهمن ۹۵، ۱۷:۱۸ - فاروق کریمی زاده
    خوب بود.
اثر پروانه ای

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

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

سلام.

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

در جلسه قبل در مورد سطوح دسترسی اعضای کلاس توضیحاتی ارائه شد. در این درس سعی می کنیم شما رو با دو مفهوم بسیار مهم در برنامه نویسی شیئ گرا آشنا کنیم. مفاهیم Overload و Override هرچند بسیار شبیه به هم هستند، اما در ادامه، ضمن توضیح در مورد معنی این دو کلمه، به بررسی تفاوت های آنها می پردازیم.

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

سلام.

امیدوارم به اندازه کافی تمرین کرده باشید. خوب بدون معطلی به ادامه درس می پردازیم. تا اینجا فقط داریم در مورد خود زبان سی شارپ یه چیزایی (هرچند خیلی ساده و مقدماتی) یاد می گیریم. اما به نظر میرسه برای اینکه بتونیم واقعا برنامه نویس باشیم به چیزی بیش از یادگیری تئوری یک زبان برنامه نویسی نیاز هست و آن هم 3 چیز مهم هست. تمرین تمرین تمرین!!

در این درس می خواهیم در مورد Class ها بیشتر صحبت کنیم. باید بدونیم که برنامه نویسی سی شارپ کلا" بر اساس اشیاء و کلاس ها می باشد، در صورتی که اکثر افرادی که در این زبان برنامه نویسی می‌کنند، با این روش (برنامه نویسی شئ گرا) برنامه نویسی نمی کنند. یعنی ممکن است یک زبان برنامه نویسی ذاتا" شئ گرا باشد، اما یک برنامه نویس کمترین استفاده را از این امکان فوق‌العاده برنامه نویسی داشته باشد. اما قبل از اینکه بتوانیم برنامه ای را بصورت شئ گرا بنویسیم باید اساس این روش برنامه نویسی که همان Class ها هستند را بهتر بشناسیم. قبلا از لحاظ تئوریک با مفهوم کلاس ها و اشیاء آشنا شدیم.

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

سلام.

افتخار می کنیم که شما بازدیدکنندگان محترم این وبلاگ با پیشنهادات ارزشمند و انتقادات سازنده خود ما را در هرچه بهتر شدن این وبلاگ یاری می کنید. همچنین از همه برادران و خواهرانی که به هر نحو به هرچه بهتر شدن این وبگاه کمک می کنند تشکر می‌کنم.

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

درس 13 را به نحوه ساخت Class اختصاص دادیم و قبلا گفته بودیم که کلاس ها حاوی اجزایی می‌باشند. کلاس ها اجزای داده ای و عملیاتی مرتبط با هم را، دسته بندی می‌کنند. همان طور که ملاحضه فرمودید، متد factorial را در کلاس Math ایجاد کردیم.

اجازه دهید کمی در مورد فاکتوریل صحبت کنیم. (هرچند این صحبت، حاشیه ای بر این درس هست) به احتمال زیاد با این تابع ریاضی آشنایی دارید، اما برای عزیزانی که آشنایی ندارند کمی توضیح می‌دهم. فاکتوریل عدد n بصورت زیر محاسبه می شود: 

n! = 1 × 2 × 3 × 4 × ... × n-2 × n-1 × n

به عبارت دیگر، اعداد 1 تا n را در هم ضرب می کنیم.

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

سلام...

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

قبلا تا حدودی با "کلاس" و "شئ" آشنایی پیدا کردید. اما لازم هست که چند نکته رو در این مورد گوشزد کنم.

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

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

سلام...

پیرو درخواست های مکرر برخی دوستان ، مبنی بر آموزش ساخت رابط کاربری برنامه "8 وزیر" در محیط گرافیکی #C ، تصمیم گرفتم این مطلب رو به همین موضوع اختصاص بدم. البته قطعا این مبحث زود هنگام در بلاگ قرار گرفت و امکان اینکه برای برخی از دوستان مبتدی ، درک این مفاهیم مشکل باشد، وجود دارد. قبلا از بقیه دوستان عذر خواهی می کنم.

ما در این درس قصد داریم برنامه ای بسازیم که در آن 64 شیء PictureBox وجود داشته باشد. هر کدام از این اشیاء دارای خصوصیات و رفتارهای مربوط به خود باشد (متمایز از بقیه اشیاء). اما قرار دادن 64 کنترل (شیئ) PictureBox روی فرم برنامه بصورت دستی و از طریق Toolbox ، کار طاقت فرسایی به نظر می‌رسد. بنابراین راهی جز تولید این 64 کنترل با استفاده از کدنویسی وجود ندارد.

در زبان برنامه نویسی #C دات نت ، با هر چیزی بصورت یک شیئ برخورد می شود. هرچیزی! هر شیئ دارای یک کلاس هست که قالب و طرح کلی آن شیئ را در خود دارد. برای مثال شیئ آچار دارای یک قالب ریخته‌گری است، که با ریختن مواد مذاب در داخل آن ، آچار بوجود می آید.

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

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

نکته

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

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

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

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

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

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

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

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

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

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

ملاحظات

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

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

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

نکته

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


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