بسم الله الرحمن الرحیم
سلام.
امیدوارم به اندازه کافی تمرین کرده باشید. خوب بدون معطلی به ادامه درس می پردازیم. تا اینجا فقط داریم در مورد خود زبان سی شارپ یه چیزایی (هرچند خیلی ساده و مقدماتی) یاد می گیریم. اما به نظر میرسه برای اینکه بتونیم واقعا برنامه نویس باشیم به چیزی بیش از یادگیری تئوری یک زبان برنامه نویسی نیاز هست و آن هم 3 چیز مهم هست. تمرین تمرین تمرین!!
در این درس می خواهیم در مورد Class ها بیشتر صحبت کنیم. باید بدونیم که برنامه نویسی سی شارپ کلا" بر اساس اشیاء و کلاس ها می باشد، در صورتی که اکثر افرادی که در این زبان برنامه نویسی میکنند، با این روش (برنامه نویسی شئ گرا) برنامه نویسی نمی کنند. یعنی ممکن است یک زبان برنامه نویسی ذاتا" شئ گرا باشد، اما یک برنامه نویس کمترین استفاده را از این امکان فوقالعاده برنامه نویسی داشته باشد. اما قبل از اینکه بتوانیم برنامه ای را بصورت شئ گرا بنویسیم باید اساس این روش برنامه نویسی که همان Class ها هستند را بهتر بشناسیم. قبلا از لحاظ تئوریک با مفهوم کلاس ها و اشیاء آشنا شدیم.
یک شئ می تواند علاوه بر متد ها (درس 13) دارای اجزای دیگری هم باشد. به هر کدام از اجزای کلاس ها اصطلاحا عضو (member) می گویند. از جمله این اجزاء می توان به موارد زیر اشاره کرد:
- فیلد: فیلدها متغیرهایی (از هرنوع) هستند که مستقیما در داخل کلاس، ساخته می شوند.
- ثابت: ثابت ها اعضایی هستند که فقط در هنگام برنامه نویسی، قابل تغییر هستند و مقدار آنها در هنگام اجرای برنامه غیر قابل دستکاری است.
- خصوصیت (property): در سراسر این وبلاگ هرجایی که از کلمه پراپرتی نام می بریم، منظورمان همین عضو از کلاس هست. پراپرتی ها این امکان را برای ما بوجود می آورند که بتوانیم با امنیت بیشتری متغیرهای داخلی را مقداردهی کنیم و یا اینکه متغیرهای داخلی کلاس را در قالب بهتری به خارج از کلاس ارسال کنیم. پراپرتی ها شبیه متغیرها هستند اما امکانات بیشتری را در اختیار ما قرار می دهند.
- متد: یک بلوک برنامه هست که حاوی دستوراتی برای اجرا می باشد. به عبارتی متدها همیشه یک کار خاص را برایمان انجام می دهند و اعضای اجرایی کلاس ها به شمار میروند. در درس 13 مقداری در مورد این عضو صحبت کردیم.
- سازنده: یک متد خاص است که در همه کلاس ها وجود دارد، حتی اگر ما این متد را ایجاد نکرده باشیم. این متدها به مجرد اینکه از کلاس، یک شئ ساخته شود، اجرا می شوند. همچنین این متدها همیشه هم نام کلاس خود هستند.
- مخرب: یک متد خاص است که در هنگام از بین رفتن اشیائی که از کلاس ساخته شده اند، اجرا می شوند. اما در زبان سی شارپ کار از بین بردن و تخریب اشیاء موجود در حافظه، به عهده بخشی به نام آشغال جمع کن( GC یا Garbage Collector) است!
- رویداد: رویدادها یا Events اعضایی هستند که به کلاس ها و اشیاء اجازه می دهند تا چیزی را به کلاس ها و اشیاء دیگر گوشزد کنند. البته بحث در مورد این عضو از کلاس، بسیار مفصل است، ولی در همین وبلاگ می توانید مطالب بسیار مهم و جذابی در مورد رویداد ها بیاموزید. به احتمال زیاد در مورد این عضو از کلاس، در این سلسله دروس صحبتی به میان نمی آوریم. مگر به درخواست شما...
- شاخصگر: شاخصگرها به کلاس اجازه می دهند که با آنها مثل یک آرایه رفتار شود.
- عملگر: عملگرها در واقع متدهایی هستند که در قالب یک علامت هستند. مثلا عملگر + . درسته! ما می توانیم خودمان یک یا چند عملگر برای کلاس خود طراحی کنیم.
- وکیل: وکیل ها ارتباط تنگاتنگی با رویدادها دارند و اصلا رویدادها را با استفاده از وکیل ها میسازند. در این مورد هم در همین وبلاگ بسیار صحبت کرده ایم. وکیل ها را اگر بخواهیم خیلی ساده تعریف کنیم، متغیرهایی از نوع متد هستند!!
در این درس به چند مورد دیگر از اعضایی که می توانند در یک کلاس قرار بگیرند، می پردازیم. اما اجازه دهید قبل از آن در مورد اصلاحگرهای سطح دسترسی صحبت کنیم.
همانطور که قبلا هم توضیح دادم، یکی از اهداف مهم در ایجاد و استفاده از کلاس ها و اشیاء مقوله ای به نام کپسوله سازی است. یعنی تمام جزئیات و رفتارهای کلاس در مکانی خاص قرار بگیرند تا از پراکندگی آنها جلوگیری شود. به این روش نظم بهتری به برنامه داده می شود و برنامه نویسی راحتتر و ایمنتری خواهیم داشت.
علت اینکه می گوییم برنامه نویسی ایمن چیست؟ علت این است که مثلا تغییرات ناخواسته بسیار کمتری در متغیرها رخ می دهد.
برای جلوگیری از پراکندگی اجزاء تشکیل دهند برنامه، بهترین جای ممکن، کلاس است. البته باید اجزایی که مرتبط با یکدیگر هستند را در یک کلاس قرار بدهیم وگرنه علاوه بر اینکه از پراکندگی جلوگیری نکرده ایم، به سردرگمی خودمان هم می افزاییم.
خوب بعد از اینکه همه اجزای برنامه را در واحدهای کلاس، دسته بندی کردیم، می بایست سطوح دسترسی دیگر اجزای برنامه را تعیین کنیم. با این کار مشخص می کنیم که کدامیک از اجزای برنامه حق دارند که به فلان عضو کلاس دسترسی داشته باشند. اینجاست که ایمنی برنامه را بالا برده ایم.
سطوح دسترسی مختلفی را می توان برای اعضای کلاس تعیین کرد:
- عمومی (public) : هر عضوی از کلاس که دارای این سطح از دسترسی باشد، این قابلیت را دارد که هر کلاس دیگری از این عضو استفاده کند. یعنی اگر از این کلاس، یک شیئ بسازید، می توانید از اعضای public استفاده کنید. به بیانی دیگر، اگر نام شیئ را نوشته و یک نقطه بگذارید، در لیست ظاهر شده، نام همان عضو public را خواهید دید.
- خصوصی (private) : اعضای خصوصی فقط برای اعضای خود کلاس، قابل دستیابی هستند و از بیرون کلاس، قابل دستیابی نییستند.
- محافظت شده (protected) : اگر یک کلاس دیگر از کلاس مورد نظر، ارث بری کند، اعضای محافظت شده، برای آن کلاسی که ارث بری کرده، قابل دسترسی هستند.
از حالا برای اینکه بهتر بتونیم مطالب رو متوجه بشیم، برنامه نویسی ها رو برای محیط Console انجام خواهیم داد. برای این کار از منوی File گزینه New سپس گزینه Project را انتخاب کرده و در پنجره باز شده، از زیر مجموعه #Visual C گزینه Windows را برگزینید و در کادر وسط، گزینه Console Application را انتخاب کنید. در قسمت Name یک نام مناسب برای پروژه انتخاب کرده و دکمه OK را بزنید.
برنامه زیر بصورت پیش فرض نوشته شده. البته قسمت
Console.WriteLine("Hello World!);
را خودم اضافه کرده ام. شما هم همین قسمت رو اضافه کنید و برنامه رو اجراکنید. اگر همه چیز بر وفق مراد باشه با یک پنجره سیاه رنگ مواجه خواهید شد. به این پنجره Console می گوییم.
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine("Hello world!"); } } }
شکل پنجره ی نتیجه برنامه بالا:
اما این پنجره سریع بسته می شود! برای اینکه از این وضعیت جلوگیری کنید، دستور زیر را بعد از دستوری که قبلا نوشتید، بنویسد.
Console.ReadKey();
این دستور باعث می شود که برنامه منتظر بماند تا شما یک کلید از صفحه کلید را فشار دهید.
قسمت های عمومی (public) ، خصوصی (private) و محافت شده (protected) که در بالا مختصری درموردشون توضیح دادم، در همان بالا بصورت لینک هستند. به لینک آنها مراجعه کنید و در موردشون مطالعه کنید و سعی کنید کدهای آنها را در همین پروژه Console Application پیاده سازی کنید.
بعدا سعی کنید سطح دسترسی اعضای کلاس را تغییر دهید، سپس آزمایش کنید که این اعضا چگونه قابل دسترسی هستند. در چه حالت هایی می توان به این اعضا دسترسی داشت؟
حتما این کارهایی که گفتم را انجام دهید. این کار باعث می شود تا برایتان سوال مطرح شود.
هر سوالی داشتید بپرسید تا ان شاء الله پاسخ بدهم...
موفق باشید.