PDA

View Full Version : پیاده سازی کلاسهایی که در رابطه Gen-Spec شرکت می کنن



resident
شنبه 13 بهمن 1386, 23:09 عصر
سلام.
کلاسهایی که در رابطه Gen-Spec شرکت می کنن ، چطور پیاده سازی میشن؟
مثلا اگه ما یک کلاس (Abstract)کارمند به عنوان یک کلاس عمومی داشته باشیم و 2 کلاس قراردادی و رسمی هم به عنوان کلاسهای اختصاصی داشته باشیم چه جور باید پیاده سازی کنم؟ در کلاس کارمند چه جوری مشخص کنم که کاربر قصدش وارد کردن اطلاعات کدوم نوع کارمند است و اطلاعات مربوط به کدوم کلاسه؟
با سپاس فراوان

resident
یک شنبه 14 بهمن 1386, 09:03 صبح
اساتید عزیز، شدیدا به کمکتون نیاز دارم.خواهش می کنم...:ناراحت::عصبانی++:

resident
یک شنبه 14 بهمن 1386, 11:45 صبح
اگه جواب نمیدید ، حداقل بگید چرا جواب نمیدید؟

sinpin
یک شنبه 14 بهمن 1386, 13:30 عصر
سلام.
کلاسهایی که در رابطه Gen-Spec شرکت می کنن ، چطور پیاده سازی میشن؟
مثلا اگه ما یک کلاس (Abstract)کارمند به عنوان یک کلاس عمومی داشته باشیم و 2 کلاس قراردادی و رسمی هم به عنوان کلاسهای اختصاصی داشته باشیم چه جور باید پیاده سازی کنم؟ در کلاس کارمند چه جوری مشخص کنم که کاربر قصدش وارد کردن اطلاعات کدوم نوع کارمند است و اطلاعات مربوط به کدوم کلاسه؟
با سپاس فراوان
با پیاده سازی رفتارهای پلی مورفیک...
برای مثال یک متود انتزاعی Enrollment‌ یا CalculateSalary رو در بالا داشته باشید که در سطح کلاسهای فرزند اونها رو پیاده سازی میکنید. حالا در سطح پدر برای مثال میتونید بگید : "همه فرزندان حقوقشون رو محاسبه و اعلام کنند" بدون توجه به اینکه هرکدوم از چه نوعی هستند (رفع جزییات و پیچیدگیهای بیمورد)

Masoud_TB
یک شنبه 14 بهمن 1386, 13:30 عصر
خوب اجازه بدین کمی در رابطه با این موضوع توضیح دهم:
فرض کنیم که کلاسی داریم به نام Emp که یک کلاس Abstract است:


abstract public class Emp
{
public string Name;
public int EmpId;
abstract public decimal Salary
{
get;
set;
}
abstract public void Print();
}

که در این کلاس نحوه محاسبه حقوق و همین طور چاپ شدن اطلاعات به صورت Abstract تعریف شده است.
دو کلاس HEMP و MEMP که اولی کارمندی ساعتی و دومی کارمند حقوق بگیر ماهیانه می باشد از این کلاس به ارث رفته اند:


public class HEMP : Emp
{
public decimal BaseRate;
public decimal WorkedHourse;

public override decimal Salary
{
get
{
return BaseRate * WorkedHourse;
}
}

public override void Print()
{
Console.WriteLine("HEMP. Name:{0}, BaseRate: {1}, WorkHourse: {2}, Salary:{3}", Name, BaseRate, WorkedHourse, Salary);
}
}
public class MEMP : Emp
{
public decimal BaseMonthlySalalry;
public decimal AdditionalSalary;

public override decimal Salary
{
get
{
return BaseMonthlySalalry * AdditionalSalary;
}
}

public override void Print()
{
Console.WriteLine("MEMP. Name:{0}, AdditionalSalary: {1}, AdditionalSalary: {2}, Salary:{3}", Name, BaseMonthlySalalry, AdditionalSalary, Salary);
}
}

نحوه محاسبه حقوق کارمند ساعتی به این صورت است که مبنای پایه هر ساعت * تعداد
ساعات کارکرد و موقع چاپ هر سه این اطلاعات به همراه عبارت HEMP چاپ خواهد شد.

نحوه محاسبه حقوق کارمند ماهیانه به این صورت است که مبنای پایه هر ماه + مبلغ اضافه کاری و موقع چاپ هر سه این اطلاعات به همراه عبارت MEMP چاپ خواهد شد.

az_farzaneh
یک شنبه 14 بهمن 1386, 14:49 عصر
سلام .امیدوارم این کد هم براتون مفید باشه.

resident
یک شنبه 14 بهمن 1386, 16:54 عصر
sinpinجان، Masoud-TB جان ،az_farzaneh جان از همگی تون ممنونم. زحمت کشیدید.
حالا چند تا سوال برام پیش اومد:
1. برای کلاس abstract ای که ایجاد کردیم در دیتابیس که جدولی ایجاد نمی کنیم .درسته؟
2. وقتی میخواهیم اطلاعاتی که کاربر وارد کرده رو تو دیتابیس وارد کنیم دیگه نیازی به کلاس abstract نیست؟ یعنی ما از کلاس abstract فقط برای اینکه کلاسهای مشتق شده فیلدهاومتدهای مشرک رو از اون به ارث می برن لازم داریم؟ بعد از اینکار برای کلیه کارهامون(insert,delete,..) از کلاسهای مشتق شده استفاده می کنیم؟
بازهم متشکرم.

resident
دوشنبه 15 بهمن 1386, 01:22 صبح
اساتید عزیز، منتظر جوابتونم ها!!!!

sinpin
دوشنبه 15 بهمن 1386, 07:46 صبح
sinpinجان، Masoud-TB جان ،az_farzaneh جان از همگی تون ممنونم. زحمت کشیدید.
حالا چند تا سوال برام پیش اومد:
1. برای کلاس abstract ای که ایجاد کردیم در دیتابیس که جدولی ایجاد نمی کنیم .درسته؟
2. وقتی میخواهیم اطلاعاتی که کاربر وارد کرده رو تو دیتابیس وارد کنیم دیگه نیازی به کلاس abstract نیست؟ یعنی ما از کلاس abstract فقط برای اینکه کلاسهای مشتق شده فیلدهاومتدهای مشرک رو از اون به ارث می برن لازم داریم؟ بعد از اینکار برای کلیه کارهامون(insert,delete,..) از کلاسهای مشتق شده استفاده می کنیم؟
بازهم متشکرم.
در دیتابیس چیزی رو ذخیره میکنیم که وجود داشته باشه و قابل ذخیره کردن باشه!
در مورد سئوال شما یک کارمند انتزاعی ساخته شد صرفا برای راحتی و رفع پیچیدگیها (چون مشخصات اون به فرزندانش منتقل میشه و فرزندانش هم یکسری خواص و رفتار جدید برای خودشون دارند و اون هم کاری نداره که فرزندش از چه نوعیه : پس کلاس مجرد - با ایجاد یک رفتار پلیمورفیک - صرفا کار پیاده سازی رو راحتتر و طبیعی تر کرده)
احتمالا در دیتابیس فقط ایجاد یک جدول "کارمندان" و احتمالا یک جدول "نوع کارمند" کافی باشه (هرچند که به دومی واقعا نیازی نیست)
به این شکل که در دیتابیس جدولی ایجاد میکنید با همه ی فیلدهای مورد نیاز و در مورد هر کارمند اون فیلدهای لازم رو پر میکنید. یه مقدار افزونگی اطلاعات داره اما در این مورد خاص شاید بهتر باشه تا همین حد از نرمالسازی کفایت کنیم. اما اگر احساس میکنید که فرزندان اختلاف زیادی با هم دارند واسه هر کدوم یک جدول ایجاد کنید...

Masoud_TB
دوشنبه 15 بهمن 1386, 11:07 صبح
ببین اصولا شما وقتی داری از ساختار های Object Oriented استفاده می کنی برای ذخیره سازی آن ها در بانک اطلاعاتی باید ساختار OOP رو به ساختار Relational بانک های اطلاعاتی مثل SQL Server تبدیل کنی. می تونی این کار رو خودت انجام بدی یا اینکه از نرم افزار هایی که به نام ORM:Object Relational Mapper استفاده کنی. به عنوان نمونه می تونی به این سایت یک سری بزنی:
http://www.genom-e.com/ (http://www.genom-e.com)