PDA

View Full Version : شی گرایی (قسمت اول)



zkazemi
جمعه 16 مرداد 1388, 18:11 عصر
مفهوم کلاس‌بندي
Class کلمه کليدي براي کلاس‌بندي است. وقتي شما کلاسي را طراحي مي‌کنيد به صورت مرتب اطلاعات را داخل يک موجود معني‌دار قرار مي‌دهيد.
اين مرتب‌سازي همان کلاس‌بندي است. و فقط برنامه‌نويسان نيستندکه اين کار را انجام مي‌دهند بلکه همه اشخاص توانايي آن را دارند. براي مثال در اتومبيل‌ها, کليه آنها مشابه رفتار مي‌کنند (مثلاً روشن مي‌شوند, راه مي‌افتند, از حرکت مي‌ايستند و همين‌طور خصوصيات مشترکي نظير فرمان اتومبيل, موتور و غيره دارند) مردم از کلمه car (اتومبيل) براي نامگذاري موجودي که نظير اين رفتارها و خصوصيات را دارند استفاده مي‌کنند. زماني که اشخاص اين نامگذاري را قبول کردند کارها خيلي بهتر انجام گرفت. شما مي‌توانيد بصورت پيچيده مطلب خود را بيان کنيد اما نظر بهتر اين است که مطلب ساده بيان شود. بدون کلاس‌بندي (طبقه‌بندي) بسيار سخت مي‌توان فکر کردن که مردم چگونه با کسي ارتباط برقرار مي‌کنند يا در مورد هر چيزي فکر مي‌کنند. مسلماً کلاس‌بندي ريشه عميق‌تري در روشن فکر کردن و ارتباطات ما در زندگي دارد. براي نوشتن برنامه‌اي با استفاده از کلاسها (دسته‌بندي) نياز به يکسري مفاهيم اصلي در مورد خود مسئله و راه حل آنان و سپس مدل کردن اين کلاس بوسيله زبانهاي برنامه‌نويسي است. اين مطلب حقيقتاً همان برنامه‌نويسي شيءگراي جديد است (نظير زبان Microsoft Visual C#) که مي‌تواند از عهده اين کار برآيد.

اهداف کپسوله‌سازي:
وقتي کلاس را تعريف کرديم کپسوله سازي يک اصل مهم خواهد بود که بايد به درستي فهميده شود. مطلب از اين قرار است که برنامه‌اي که از يک کلاس استفاده مي‌نمايد نبايد ونيازي نيست که نگراني در مورد عملکرد داخلي کلاس داشته باشد بلکه فقط کافي است يک نمونه از کلاس مربوطه ايجاد کرده و متدهاي مربوط به کلاس را جهت اجراي فرامين خود صدا بزند. تا زمانيکه متدها به درستي عمليات خود را انجام مي‌دهند برنامه نيازي ندارد تا روش پياده‌سازي متدها را بداند. براي مثال وقتي شما متد Console.WriteLine را صدا مي‌زنيد, شما نيازي به زحمت انداختن خود جهت فهميدن جزئيات پيچيده اينکه کلاس Console بصورت فيزيکي به چه شکل داده‌ها را چيده است تا خروجي مطلوب را بدهد, نداريد. در صورتيکه خود يک کلاس براي اجراي متدهاي مختلف خود بايد همه انواع اطلاعات داخلي خود را نگهداري نمايد و اين چيدمان اطلاعات و فعاليت‌هاي داخلي کلاس از ديد برنامه‌اي که از اين کلاس استفاده مي‌نمايد پنهان خواهد ماند. بنابراين کپسوله‌سازي گاهي اوقات اشاره به مخفي کردن اطلاعات (داخلي کلاس) از برنامه را دارد.
کپسوله‌سازي در حقيقت دو هدف را دنبال مي‌کند:
1) ترکيب متدها و داده‌ها در يک کلاس و به بيان ديگر پشتيباني از کلاس‌بندي.
2) براي کنترل دسترسي به متدها و داده‌ها به بيان ديگر کنترل استفاده از کلاس.

تعريف و استفاده از کلاس
در C# براي تعريف کلاس از کلمه کليدي Class, نام دلخواه براي کلاس { } استفاده مي‌شود.
داده‌ها و متدهاي داخل کلاس در بدنه کلاس و بين {} تعريف مي‌شوند. در مثال زير کلاس بنام circle داريم که شامل يک متد (جهت محاسبه مساحت دايره) و يک داده (جهت نگهداري شعاع دايره) مي‌باشد.




class circle
{
double Area ()
{
return 3.141522 * radius * radius;
}
double radius;
}

بدنه يک کلاس معمولاً شامل متدها (نظير متد Area) و فيلدها (نظير Radius) خواهد بود. اين را به خاطر بسپاريد که به متغيرهاي داخل يک کلاس فيلد گفته مي‌شود.
در فصول قبل فراگرفته‌ ايد که چگونه يک متد و يا متغير را تعريف نماييد. استفاده از کلاس Circle نيز شبيه آن چيزي است که تاکنون ديده‌ايد. شما مي‌توانيد يک متغيري از نوع Circle ساخته در آن داده معتبر قرار دهيد. به مثال زير توجه نماييد:
Circle c; // circle ايجاد يک متغير از نوع
C = new Circle ( ); // مقداردهي اوليه متغير
به استفاده از کلمه کليدي New دقت نماييد. قبلاً وقتي شما مقداردهي اوليه به يک متغيري مثلاً از نوع int و يا float را مي‌کرديد به سادگي به آن متغير مقداري را نسبت مي‌داديد. مثلاً
int i ;
i = 42;
اما نمي‌توانيد نظير کار بالا را در مورد متغيرهايي از نوع کلاس انجام دهيد. يک دليل اين است که C# براي نسبت دادن مقادير به کلاسها روش مشابه متغير (زبان زمان اجرا) براي اختصاص و مديريت فضاي داده شده به متغيرهايي از نوع کلاس استفاده مي‌نمايد (در فصول بعدي در اين مورد مطالبي ارائه خواهد گرديد.) فعلاً فقط بپذيريد براي تعريف يک نمونه جديد از يک کلاس (که معمولاً شيء (Object) ناميده مي‌شود) از کلمه کليدي instance استفاده مي‌شود.

نکته:
دو لغت Class و Object باعث گيج شدن شما نشود. کلاس به خود نوع داده گفته مي‌شود و به هر يک از نمونه‌هاي آن کلاس که در هنگام اجرا ساخته مي‌شود Object (شيء) گفته مي‌شود. براي مثال براحتي شما مي‌توانيد با استفاده از کلمه کليدي new هر چند نمونه‌اي که بخواهيد از روي کلاس Circle بسازيد همانطوري که شما مي‌توانيد هر چند متغير از نوع int که مي‌خواهيد بسازيد. هر نمونه از کلاس circle يک object است که فضاي مخصوص خود را در حافظه اشغال کرده و بصورت مستقل از بقيه نمونه‌ها کار خود را انجام مي‌دهد.