PDA

View Full Version : مقایسه چند روش پیاده سازی در شی گرایی



hrbaban
چهارشنبه 12 آبان 1389, 15:22 عصر
با سلام . . .

تفاوت پیاده سازی های زیر چیه ؟
شما کدوم روش پیاده سازی رو بهتر میدونید و چرا ؟


صورت سوال :
یه کلاس نوشتیم که مقدار number رو میتوان مورد استفاده قرار بدیم و هم بخونیم و هم توش بنویسیم .
حالا فرق این دو کد زیر چیه ؟ چرا بعضی ها یه جور پیاده سازی می کنند ؟




public class Test
{
public int number;
}
==============================

public class Test
{
private int number;

public void setNumber(int i)
{
number= i ;
}
public int getNumber()
{
return number;
}


}

محسن شامحمدی
چهارشنبه 12 آبان 1389, 17:08 عصر
اگر از لحاظ اصولی حساب کنی روش دوم درسته.
البته در سی شارپ می تونی از property استفاده کنی که مثل یک متغیر می می مونه ولی امکان کدنوشتن بر قسمت های get ,set اش هم وجود داره و کد بسیار زیباتر می شه.

یعنی کدتون رو به این صورت تغییر بدید

private int m_id;
int number {
get
{
return m_id;
}
set
{
m_id = value;
}
}

Salar Ashgi
چهارشنبه 12 آبان 1389, 17:32 عصر
و با استفاده از دات نت 3.5 :



class Number
{
public int num { get; set; }
}

Amir Oveisi
چهارشنبه 12 آبان 1389, 17:50 عصر
هر دو روش درست هستند اما در روش اول شما هیچ کنترلی بر روی مقادیری که برای متغیر number میتونه بگیره ندارین و number اجازه داره هر مقداری رو بگیره.
در روش دوم چون number رو بصورت private تعریف کردید پس دسترسی بهش از بیرون کلاس وجود نداره و برای مقدار دادن و گرفتن به number باید از متد های تعریف شده استفاده کرد. در این متد ها شما میتونین اعتبارسنجی مورد نیاز خودتون رو اعمال کنید. مثلا اگر مقدار number حتما باید بزرگتر از صفر باشه میتونین در داخل تابع SetNumber این شرط رو بررسی کنید و در صورت صحیح بودن شرط این مقدار رو به number اختصاص بدین. اما استفاده از توابع برای اینکار در C# دیگه احتیاج نیست چون میتونین از property ها برای این کار استفاده کنید که در پست های بالا دوستان نمونه اش رو قرار دادند.

در آخر توصیه می کنم که همیشه از همین property ها استفاده کنید.

موفق باشید