آموزش #C – بخش هشتم | شی گرایی در سی شارپ (قسمت اول)

شی گرایی در سی شارپ

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

مفاهیم اصلی شی گرایی در سی شارپ

کلاس (Class)

یکی از پایه‌ترین مفاهیم شی گرایی در سی شارپ، کلاس‌ می‌باشد. کلاس به ما اجازه می‌دهد نوع داده‌ای تعریف کنیم که شامل فیلدها، خواص و متدهاست. شیء متغیری از نوع کلاس است که از فیلدها، خواص و متدهای کلاس پیروی می‌کند. در زیر نحوه تعریف کلاس در سی شارپ را مشاهده می‌کنید. فیلدها اعضای داده‌ای هستند که کلاس برای ذخیره نتایج محاسبات، اعمال و رفتارها استفاده می‌کند. متدها در واقع رفتارها یا کارهایی هستند که کلاس می‌تواند انجام دهد.

نحوه ایجاد شیء و نحوه دسترسی به فیلدها و متدهای کلاس از طریق شی را در زیر مشاهده می‌کنید.

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

به توضیح برنامه خواهیم پرداخت؛ یک کلاس به نام Rectangle ایجاد کردیم که دارای دو فیلد (width و height) و دو متد (Area و Perimeter) است؛ با مقداردهی طول و عرض، مساحت و محیط را به دست آوردیم. با توجه به این که طول و عرض مقادیر داده‌ای هستند از فیلد استفاده کرده‌ایم. اما برای به دست آوردن مساحت و محیط چون نیاز به محاسبه هست از متد استفاده کرده‌ایم.

سازنده (Constructor)

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

در زیر نحوه تعریف سازنده آورده شده است:

همانطور که انتظار می‌رود، سازنده، نوع خروجی ندارد و هم‌نام کلاس است. حال مثال قبل را با سازنده بازنویسی کرده و طول و عرض (width , height) مستطیل را هنگام ایجاد شیء مقداردهی می‌کنیم.

مقداردهی پارامترهای سازنده در سی شارپ، هنگان استفاده از دستور ایجاد شیء، ما بین پرانتزها انجام می‌شود. در این مثال مقدار 10 به پارامتر width و مقدار 5 به پارامتر height ریخته می‌شود. در داخل متد سازنده مقدار پارامترهای width و height در فیلدهای width و height قرار می‌گیرد.

اما کلمه کلیدی this چیست؟ اگر دقت کنید متوجه خواهید شد که نام پارامترهای متد سازنده و فیلدهای کلاس یکسان است. بنابراین اگر متد سازنده را بدون this بنویسیم، فیلدهای width و height مربوط به کلاس مقداردهی نشده و نتیجه نهایی اشتباه می‌شود. اما کلمه this مشکل ما را حل می‌کند. در واقع می‌توان گفت که در استفاده از شی گرایی در سی شارپ، در واقع کلمه کلیدی this نام مستعار شیءِ فراخوان‌کنندۀ متدِ سازنده است.

مخرب (Destructor)

مخرب‌ها نقطه مقابل سازنده‌ها در سی شارپ هستند. مخرب‌ وقتی اجرا می‌شوند که یک شیء از بین برود و یک شیء زمانی از بین می‌رود که برنامه از محدوده خارج شود. در زیر دستور نوشتن مخرب را مشاهده می‌کنید.

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

همانطور که مشاهده می‌کنید وقتی برنامه از محدوده‌ی در دسترس بودن شی تعریف شده خارج شود. مخرب اجرا می‌شود.

فیلدهای فقط خواندنی (readonly)

برای تعریف فیدهای فقط خواندنی در سی شارپ، از کلمه کلیدی readonly استفاده می‌شود. این نوع فیلدها بسیار شبیه به ثابت‌ها هستند اما یک تفاوت بسیار مهم دارند؛ و آن تفاوت این است که می‌توان این فیلدها را بدون مقدار تعریف کرده و فقط آن‌ها را از طریق سازنده مقداردهی کرد. بعد از مقداردهی دیگر نمی‌توان مقدار فیلد را عوض کرد. برای درک این مفهوم مثال زیر را ببینید.

از آن جایی که فیلدهای readonly تنها باید یکبار مقدار بگیرند و همینطور سازنده یه کلاس هم تنها یکبار در زمان ساخت شی اجرا می‌شود، پس فقط و فقط فیلدهای readonly در داخل سازنده قابل تغییر بوده و در دیگر متدها یا بیرون از کلاس نمی‌توان مقدار آن را تغییر داد.

دوستان به اتمام این بخش از آموزش رسیدیم و سعی شد مفاهیم کلاس، سازنده و مخرب در برنامه نویسی به روش شی گرایی در سی شارپ ، به همراه کاربرد فیلدهای فقط خواندنی (readonly) بیان شود. باز هم یادآوری می‌کنم که شما دوستان عزیز می‌تونید از این لینک مفاهیم مرتبط با شی‌گرایی در ++C را مطالعه کنید.

برای قسمت تکمیلی این آموزش کلیک نمایید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *