PDA

View Full Version : شي گرايي (قسمت چهارم)



zkazemi
شنبه 17 مرداد 1388, 09:02 صبح
قوانين و قراردادهاي نامگذاري متدها و فيلدها:
.NET Framework براي نام‌گذاري متدها و فيلدها قراردادي را به قرار زير پيشنهاد مي‌کند که در آن نامگذاري با توجه به سطح دسترسي به کلاس صورت مي‌گيرد:
1) شناسه‌هايي که (متدها يا فيلدها) قرار است بصورت public و عمومي تعريف شوند نام ابتداي آنها با حروف بزرگ آغاز گردد براي مثال در کلاس Circle که قبلاً مشاهده کرديد Area با حروف بزرگ شروع شد چون يک متد public بود. اين روش بنام Pascal Naming شناخته مي‌گردد زيرا اولين بار در زبان پاسکال استفاده گرديد.
2) شناسه‌هايي که public نيستند و شامل متغيرهاي محلي مي‌باشند بايد با حروف کوچک آغاز گردند براي مثال در همان کلاس circle فيلد radius با r کوچک تعريف گرديد زيرا بصورت Private استفاده شده بود. اين سيستم نامگذاري بنام Camel Case Naming معروف مي‌باشد.
فقط يک استثناء براي اين قانون وجود دارد و آن هم اين است که کليه نام کلاسها بايد با نام بزرگ شروع شود و نامConstrucor هم دقيقاً بايد مثل نام کلاس باشد در نتيجه Private Constructor هم با وجوديکه Private است ولي با حرف بزرگ شروع خواهد شد.

متدها و متغيرهاي Static:
خيلي اوقات ملاحظه مي‌کنيد که متدها واقعاً به يک نمونه از کلاس تعلق ندارند. اين متدها, متدهاي سودمندي هستند که چون وابستگي به هيچ از نمونه‌هاي کلاس ندارند براي ما داراي ارزش مي‌باشند.
براي مثال اگر متد sqrt يک متد نمونه‌اي از کلاس Math باشد (کلاس Math کلاس کار با توابع رياضي و متد sqrt متدي براي گرفتن جذر يک عدد است.) براي استفاده از آن بايد ابتدا يک نمونه (instance) از کلاس Math ايجاد نمود تا بتوان از آن متد نيز استفاده کرد مثلاً:


Math m = new Math ();
Double d= m.Sqrt (42.24);

اين کار بسيار کار طاقت فرسا و خسته‌کننده‌اي خواهد بود. در اينجا همانطور که مي‌بينيد شيء و نمونه کلاس Math نقشي در محاسبه ريشه دوم عدد ندارند. تمام اطلاعاتي که sqrt نياز دارد بصورت پارامترهاي ورودي دريافت مي‌نمايد و يک خروجي را به صدا کننده متد بازگشت خواهد داد.
کلاسها واقعاً به اين روش نيازي ندارند و اين روش ايده خوبي به نظر نمي‌رسد. کلاس Math شامل متدهاي رياضي ديگري نظير sin, cos, tan و log نيز مي باشد همچنين اين کلاس شامل فيلدهاي مفيدي نظير PI که در محاسبه مساحت دايره استفاده مي‌شود نيز مي‌شود:

public double Area ()
{
return Math.PI * radius * radius
}

در C# کليه متدها بايد در داخل کلاسها مقداردهي شوند. با اين حال اگر شما يک متد يا فيلد را بصورت Static تعريف نماييد شما مي‌توانيد با استفاده از نام کلاس به متد و يا فيلد دسترسي پيدا نماييد و نيازي به تعريف instance (نمونه) جديد از کلاس نخواهد بود. در زير به شما نشان داده شده که چگونه متد Sqrt از کلاس Math اعلان گشته است:


class Math
{
public Static double Sqrt (double d) {…}

}

به خاطر داشته باشيد که متدهاي Static بوسيله يک Object و نمونه صدا نمي‌شوند. وقتي شما يک Static Method تعريف مي‌کنيد.