اصول برنامه نویسی شیئ گرا- قسمت اول
انواع داده ای موجود در C# خود، یک کلاس هستند. مثلا کلاس Int کلاس Double کلاس Char کلاس String و... .همانطور که می دانید هر یک از این کلاس ها خصوصیاتی دارند.مثلا انواع عددی int فقط اعداد صحیح رامی پذیرند ویا محدوده آن ها برای نوع 16بیتی از 32768- تا 32767+ می باشد.علاوه برخصوصیات یکسری عمیلات هم برای این کلاس ها تعریف شده است. مثلا برای کلاس های اعداد صحیح و اعشاری اعمال محاسباتی و مقایسه ای را میتوان اعمال کرد. و یا برای کلاس رشته ها ،عمل اتصال رشته ها(Concat) را می توان انجام داد. برای کاراکتر ها نیز می توان از متد ()ISDigit استفاده نمود که مشخص می کند آیا یک کاراکتر وارد شده عددی است یا خیر.
زبان های برنامه نویسی از جمله C# توانایی رفع تمام نیاز های برنامه نویسان را بطور مستقیم ندارند.توجه کنید; بطور مستقیم.
مطمئنا ما علاوه بر کلاس های نعریف شده در زبان برنامه نویسی به کلاس های دیگری نیز نیازمند می شویم که از قبل تعریف شده نیستند (بطور پیش فرض در زبان برنامه نویسی وجود ندارند). مثلا شما برنامه ای مینویسید برای ثبت نام دانشجویان.یقینا شما به کلاس دانشجویان نیاز پیدا خواید کرد.با خصوصیاتی مانند: نام دانشجو، نام خانوادگی، رشته تحصیلی، مقطع تحصیلی، سال ورود و غیره. و همچنین متدها یا عملیاتی برای نمونه هایی که از کلاس دانشجویان ساخته می شوند لازم دارید. مانند:ثبت دانشجو، جستجوی دانشجو،حذف دانشجو ،ویرایش وغیره. چنین کلاسی در هیچ زبان برنامه نویسی وجود ندارد. اما زبان های برنامه نویسی شیئ گرا نسبت به رفع این مشکل اقدام نموده اند.
نکته برای بعد(تمام زبانهای شی گرا تعریف کلاس ها را پشتیبانی می کنند اما کسی که در این زبان ها برنامه نویسی کند ممکن است قئاعد شیئ گرایی را رعایت نکرده باشد. Vb ارث بری را پشتیبانی نمیکند.به همین دلیل گفته میشود که یک زبان شی گرای کامل نیست.)
برنامه نویسان توسط کلاس ها میتوانند چنین کلاسی را تعریف نمایند. پس یکی از اهداف اولیه کلاس ها، تعریف نوع های جدید طبق نیاز های برنامه نویس می باشد. البته کلاس ها مزایای بسیار دیگری از دید مهندسی نرم افزار دارند.مزایایی مانند: قابلیت درک بیشتر کد، سرعت بیشتر در برنامه نویسی ، قابلیت نگهداری و اطلاح کد در حد شاید عالی و سه تا نقطه. که در ادامه در حد توان و اطلاعات این جانب به آن ها خواهیم پرداخت.
علی ایحال از خطوط بالا چنین برمی آید که هر کلاس دارای یکسری اعضا میباشد(از اعضایی تشکیل شده است). این اعضا عبارتند از: خصوصیات و متدها. البته از اینجا به بعد بنده بجای خصوصیات از واژه فیلد استفاده می نمایم. به دو دلیل.
اولا اینکه، خصوصیات(Property ها) خود در C# تعریفی جداگانه دارند که به آنها نیز خواهیم پرداخت. ثانیا واژه فیلد نزد برنامه نویسان و کسانی که با پایگاه داده کار می کنند، واژه ای معنادار و آشنا می باشد که منظور از آن هر ویژگی می باشد که می خواهیم درباره آن اطلاعاتی را ذخیره کنیم. مثلا در کلاس دانشجویان فیلد Name ذخیره کننده نام دانشجو است ویا فیلد Birth Day سال تولد فرد را نگهداری می کند.
متدها: با توابع حتما آشنا هستید. در برنامه نویسی شیئ گرا،و در کلاس ها بجای واژه تابع از واژه متد استفاده می گردد. پس متد ها همان توابع هستند. اگر کسی نظر کاملتری دارد، در قسمت نظر بدهید،مطلب خود را قرار دهد تا نوشته اینجانب اصلاح گردد.
متدها به زبان ادبیات افعال هستند. یعنی کارهای که قصد انجام دادن آن ها را در کلاس داریم. از طرف دیگر متدها معمولا تغییر دهنده فیلدها میباشند.یطور نمونه اگر ما کلاسی مخصوص انسان ها تعریف کرده باشیم، و اگر فرضا یکی از فیلدهای این کلاس، وزن، و یکی از متدهای آن خوردن باشد،مطمئنا متد خوردن،فیلد وزن را تغییر میدهد(وزن بیشتر میشود).
به فیلدها و متدها یک کلاس، اعضای آن کلاس گفته می شود.
و اما تعریف کلاس:
برای تعریف کلاس ابتدا بر روی نام پروژه در قسمت Solution Explorer کلیک راست میکنید. در منویی ظاهر میشود بر روی فرمان Add رفته تا زیر منوی آن باز شود.از زیر منوی بازشده فرمان Class را انتخاب مینمایید. کادری باز میشود که در آن میتوانید نامی را برای کلاس خود برگزینید. البته در قسمت تعریف اعضای کلاس(فیلدها و متدها)می توانید نام دیگری را برای کلاس خود برگزینید. بر روی دکمه Add که کلیک کنید فایل تعریف کلاس ایجاد و نمایان میشود. همانطور که در قسمت کد میبینید برای تعریف یک کلاس از کلمه کلیدی Class استفاده می گردد.
Class class_Name
}
//Class Members
{
اکنون بین آکولادها میتوانید متدها و فیلدهای کلاس را تعریف کنید.بصورت زیر:
class Student
{
private string first_Name;
private string last_Name;
private string reshteh_Tahsily;
private string maghtae_Tahsily;
public void register(string f_name,string l_name,string r_tahsily,string m_tahsily)
{
first_Name=f_name;
last_Name=l_name;
r_tahsily = reshteh_Tahsily;
m_tahsily = maghtae_Tahsily;
}
}
برای استفاده از کلاس هایی که تعریف می کنیم، باید از آن ها نمونه سازی کنیم. منظور از نمونه سازی این است که، یک شئ از کلاس خود ایجاد نماییم. برای توضیح بیشتر، اگر ما کلاس Student را تعریف نموده ایم،برای استفاده از این کلاس یک شیئ تعریف می کنیم با نام مثلا Ahmad بصورت زیر:
Student Ahmad = new Student();
و حالا متدها را بر روی شیئ احمد که این شیئ یک نوع از کلاس دانشجو است اعمال می کنیم. مثلا عمل ثبت نام را برای او انجام می دهیم(احمد را ثبت نام مینماییم).
Ahmad.register("ahmad","akbari","Computer","Kardani");
پس به هر نمونه ای که از کلاس ساخته می گردد شیئ گفته میشود.
هنگام ایجاد نمونه، از کلاس انواع داده ای مانند Int ،عمل New را دیگر انجام نمیدهیم و فقط می نویسیم int I; . این بدان دلیل است این کلاس ها Value Type (مقداری)هستند. تمام انواع داده ای از این نوع هستند. از طرف دیگر کلاس های تعریف شده توسط برنامه نویس Refrenced Type (ارجاعی) هستند و حتما باید New شوند. آرایه ها نیز از این نوع اند(ارجاعی هستند). تفاوت انواع ارجاعی و مقداری این است که انواع ارجاعی در قسمتی از حافظه به نام Heap قرار میگیرند اما انواع مقداری در قسمت Stack حافظه.
ما به هر تعداد که بخواهیم می توانیم از یک کلاس تعریف شده، نمونه سازی نماییم. این عمل مانند آن است که شما یک الگوریتم و روشی را برای پختن نوعی از غذاها دارید، ولی از آن الگوریتم nبار برای پختن غذا استفاده می کنید(به یاد خونه دانشجویی). این یعنی نمونه سازی.
انواع سطوح دسترسی شامل(Private,Public,Internal,Protected):
همانطور که در تعریف کلاس Student می بینید، بعضی از اعضاء از سطح دسترسی private برخوردارند وبعضی دیگر public . اعضایی که بصورت public تعریف میشوند بصورت مستقیم توسط نمونه های کلاس(اشیاء) قابل دسترسی هستند و در اصطلاح، توسط نمونه های کلاس دیده می شوند. برای مثال بعد از ایجاد نمونه ای با نام Ahmad از کلاس Student ،شیئ Ahmad تنها توان شناسایی متد register را دارد. بصورت زیر:
Ahmad.register("ahmad","akbari","Computer","Kardani");
اعضای private توسط نمونه های کلاس مسقیما قابل دستیابی نیستند و درون خود کلاس (اغلب متدها)استفاده میشوند. مثلا نمیتوان نوشت Ahmad.last_Name = "akbri"; . بلکه برای انجام اینکار از متد register استفاده می کنیم.کد تعریف کلاس Student را دوباره ملاحظه کنید.همانطور که می بینید درون متد register که از اعضای public کلاس است مقدار اعضای private تنظیم شده است. در واقع ما پس از تعریف شیئ Ahmad مقادیری را به متد register ارسال کرده ایم و این متد مقادیر دریافتی را در فیلدهای مربوطه قرار داده است.
سطح دسترسی Internal: هنگامی که پروژه جدیدی را ایجاد می نمایید یک namespace با نام پروژه تان به برنامه اضافه می شود.
اگر سطح دسترسی متدی را Internal تعریف کنید،آن متد تنها در همان فضای نام که کلاس تعریف شده قابل شناسایی است(در واقع تنها درهمان پروژه قابل شناسایی است). و این مورد را هنگامیکه قصد ایجاد DLL دارید باید حتما مد نظر داشته باشید.زیرا DLL را در یک پروژه تعریف می کنید ولی در تعداد زیادی از برنامه ها قصد استفاده از آن را دارید. نحوه تعریف DLL و چگونگی استفاده از آن نیز ان شاالله در پایان آموزش آورده خواهد شد.
سطح Protected نیز در قسمت ارث بری از کلاس ها توضیح داده می شود.
اما اینکه چرا بعضی از اعضای کلاس را private تعریف می کنیم و بعضی را Public ،Protected یا Internal،برمی گردد به اصول و ارکان اصلی شیئ گرایی که در ادامه تعریف میگردد.
خورشید را باور دارم حتی اگر پشت ابرها باشد...