PDA

View Full Version : درخواست تمرین جهت تفهیم شی گرایی در سی شارپ



10jafar
پنج شنبه 18 اردیبهشت 1393, 11:22 صبح
سلام
من مفاهیم شی گرایی در سی شارپ رو خوندم و باهاش آشنا شدم. حالا یه سری تمرین (ترجیحا با جواب) میخوام تا بتونم مسلط بشم. ولی هرچی پروژه پیدا میکنم یا خیلی راحته و از شی گرایی خبری نیست یا اینکه از مباحث پیشرفته مثل sql و ... توش استفاده شده. لطفا کمک کنید.:تشویق:

behnam-soft
پنج شنبه 18 اردیبهشت 1393, 17:17 عصر
سلام
منظورتون از مباحث پیشرفته sql همون خوندن و نوشتن در بانکه ؟؟؟ مثال هایی رو که کار کردی بگو تا ببینم در چه سطحی کار کردی تا بعد بشه تمرین بهتری ارائه داد.

10jafar
پنج شنبه 18 اردیبهشت 1393, 19:26 عصر
من کار با بانک اطلاعات،اسمبلی،linq،wpf و... اینجور چیزهارو بلد نیستم. ولی کتاب هاشمیان رو تا فصل یازده و کتاب معمای شی گرایی در C# رو خوندم. توی این کتاب ها مثلا انواع کلاس ها رو توضیح داده و یه مثال خیلی راحت در مورد اون کلاس زده. حالا من یه سری تمرین کاربردی میخوام تا این مفاهیم رو خوب متوجه بشم. تمرین هایی هم که کارکردم تقریبا همونایی که توی این کتاب هاست.

ghazal_mohammady
سه شنبه 06 خرداد 1393, 16:10 عصر
عرض سلام و ادب خدمت اساتید
نیاز به کار برای پروژه ای هستم که به طور جامع مفاهیم شی گرایی را در بر بگیرد، بیشتر مفاهیم شی گرایی مهمه تا کار با بانک های اطلاعاتی، میشه موضوعاتی در این زمینه رو مثال بزنین که بتونم خوب در زمان دو یا سه هفته روش کار کنم؟
باسپاس

NASA's Spaceman
سه شنبه 06 خرداد 1393, 21:33 عصر
سلام
به نظر من اگه بری و با کلاس ها کار کنی خیلی بهتر میشه برات
با سپاس Spaceman

ghazal_mohammady
سه شنبه 06 خرداد 1393, 22:00 عصر
با کلاس ها ؟

NASA's Spaceman
سه شنبه 06 خرداد 1393, 22:21 عصر
بله
کمک زیادی بهت میکنه
با سپاس Spaceman

Davidd
سه شنبه 06 خرداد 1393, 22:57 عصر
شما هر موضوعی که انتخاب کنی میتونی از مفاهیم شی گرایی استفاده کنی. مثلا اگه پایگاه داده داره میتونی یک کلاس مخصوص کار با پایگاه داده داشته باشی. تو این کلاس میتونی چند متد با اسم یکسان و پارامترهای متفاوت داشته باشی که میشه همون پلی مورفیسم. میتونی یک فرم کلی طراحی کنی و فرم هایی که استفاده میکنی از این فرم ارث بری کنند. یا با ارث بری از کلاس TextBox یک تکسباکس مخصوص خودت درست کنی که مثلا اگه موس واردش شد رنگش عوض شه (برای اینکار علاوه بر وراثت از یک مفهوم دیگر پلی مورفیسم هک استفاده میکنی و اون Override کردن بعض متدهای پایه هست).

golinazhad_h
چهارشنبه 07 خرداد 1393, 08:44 صبح
به نظر من بهترین گزینه میتونه سیستم ثبت نام و انتخاب واحد دانشگاه باشه هم ساده است هم کاربردی تر

ghazal_mohammady
یک شنبه 08 تیر 1393, 14:52 عصر
نظرتون در مورد سیستم کتابخانه چیه؟

vb8334
جمعه 13 تیر 1393, 18:10 عصر
سلام

دوستان من میخوام در زمینه object oriented programming خودم رو قوی کنم من در این زمینه مبتدی هستم

اگه میشه لطفآ چند تا پروژه معرفی کنید برای بهتر شدن oop همونطور که میدونید انجام دادن یه پروژه تآثیر خیلی بیشتری داره در فهم برنامه نویسی

با تشکر

parvizwpf
جمعه 13 تیر 1393, 18:14 عصر
http://www.dotnettips.info/post/1195

elec60
جمعه 13 تیر 1393, 22:45 عصر
شما هر موضوعی که انتخاب کنی میتونی از مفاهیم شی گرایی استفاده کنی. تو این کلاس میتونی چند متد با اسم یکسان و پارامترهای متفاوت داشته باشی که میشه همون پلی مورفیسم.

اين مفهوم پلی مورفیسمه؟! این که شما نوشتین Method Overloading هست نه Polymorphism.

Polymorphism به نقل از کتاب جوزف البهاری:




public class Asset
{
public string Name;
}



public class Stock : Asset // inherits from Asset
{
public long SharesOwned;

}



public class House : Asset // inherits from Asset
{
public decimal Mortgage;
}



References are polymorphic. This means a variable of type x can refer to an object
that subclasses x. For instance, consider the following method:



public static void Display (Asset asset)
{
System.Console.WriteLine (asset.Name);
}


This method can display both a Stock and a House, since they are both Assets:




Stock msft = new Stock ... ;
House mansion = new House ... ;
Display (msft);
Display (mansion);



Polymorphism works on the basis that subclasses (Stock and House) have all the
features of their base class (Asset). The converse, however, is not true. If Display
was modified to accept a House, you could not pass in an Asset:


static void Main() { Display (new Asset()); } // Compile-time error
public static void Display (House house) // Will not accept Asset
static void Main() { Display (new Asset()); } // Compile-time error
public static void Display (House house) // Will not accept Asset
{

{

Davidd
شنبه 14 تیر 1393, 11:25 صبح
اين مفهوم پلی مورفیسمه؟! این که شما نوشتین Method Overloading هست نه Polymorphism.


پلي مورفيسم دو نوع داره: پلي مورفيسم استاتيك (يا انقياد زودهنگام early binding) كه بهش Method Overloading ميگن و پلي مورفيسم دايناميك (انقياد زمان اجرا runtime binding) كه به Method Overriding معروفه.
پلي مورفيسم استاتيك يعني در زمان كامپايل با توجه به نوع و تعداد پارامترها ميتونه تشخيص بده كه كدوم يك از متدها بايد صدا زده بشه. Operator overloading هم يه حالت خاص از اين نوع پلي مورفيسمه. نكته مهم اينه كه در اين نوع، متدهاي هم نام در يك كلاس قرار دارند.
پلي مورفيسم دايناميك يعني در زمان اجرا مشخص ميشه كه كدوم متد (متد كلاس فرزن يا متد كلاس پايه) صدا زده بشه.نكته مهم اينه كه در اين نوع، متدهاي هم نام در دو كلاس مجزا قرار دارند.
بازم توضيح بدم؟!

elec60
شنبه 14 تیر 1393, 11:33 صبح
پلي مورفيسم دو نوع داره: پلي مورفيسم استاتيك (يا انقياد زودهنگام early binding) كه بهش Method Overloading ميگن و پلي مورفيسم دايناميك (انقياد زمان اجرا runtime binding) كه به Method Overriding معروفه.
پلي مورفيسم استاتيك يعني در زمان كامپايل با توجه به نوع و تعداد پارامترها ميتونه تشخيص بده كه كدوم يك از متدها بايد صدا زده بشه. Operator overloading هم يه حالت خاص از اين نوع پلي مورفيسمه. نكته مهم اينه كه در اين نوع، متدهاي هم نام در يك كلاس قرار دارند.
پلي مورفيسم دايناميك يعني در زمان اجرا مشخص ميشه كه كدوم متد (متد كلاس فرزن يا متد كلاس پايه) صدا زده بشه.نكته مهم اينه كه در اين نوع، متدهاي هم نام در دو كلاس مجزا قرار دارند.
بازم توضيح بدم؟!

توضيحاتتون خوب بود ولي يكم اشكال داره، تو stackoverflow.com بحث شده:

?Is Method Overloading considered polymorphism (http://stackoverflow.com/questions/2400284/is-method-overloading-considered-polymorphism)


No, overloading is not. Maybe you refer to method overriding (http://en.wikipedia.org/wiki/Method_overriding) which is indeed part of polymorphism.
To further clarify, From the wikipedia:
Polymorphism is not the same as method overloading or method overriding.1 (http://en.wikipedia.org/wiki/Method_overriding) Polymorphism is only concerned with the application of specific implementations to an interface or a more generic base class.


So I'd say method overriding AND method overloading and convenient features of some language regarding polymorphism but notthe main concern of polymorphism (in object oriented programming) which only regards to the capability of an object to act as if it was another object in its hierarchy chain.


البته به نظر من مهم نيست كه حالا كدوم رو پلي مورفيسم بگيم كدم رو نگيم، مهم اينه كه مفاهيم رو كامل درك كنيم و درست بتونيم استفاده كنيم.

Davidd
شنبه 14 تیر 1393, 11:43 صبح
.



البته به نظر من مهم نيست كه حالا كدوم رو پلي مورفيسم بگيم كدم رو نگيم، مهم اينه كه مفاهيم رو كامل درك كنيم و درست بتونيم استفاده كنيم.

درسته. تو اين مورد اختلاف نظر وجود داره. مهم همون مفهوم و كاربرده نه اسامي و دسته بندي

ghazal_mohammady
یک شنبه 15 تیر 1393, 14:54 عصر
شما هر موضوعی که انتخاب کنی میتونی از مفاهیم شی گرایی استفاده کنی. مثلا اگه پایگاه داده داره میتونی یک کلاس مخصوص کار با پایگاه داده داشته باشی. تو این کلاس میتونی چند متد با اسم یکسان و پارامترهای متفاوت داشته باشی که میشه همون پلی مورفیسم. میتونی یک فرم کلی طراحی کنی و فرم هایی که استفاده میکنی از این فرم ارث بری کنند. یا با ارث بری از کلاس TextBox یک تکسباکس مخصوص خودت درست کنی که مثلا اگه موس واردش شد رنگش عوض شه (برای اینکار علاوه بر وراثت از یک مفهوم دیگر پلی مورفیسم هک استفاده میکنی و اون Override کردن بعض متدهای پایه هست).

عرض سلام و ادب و احترام و سپاس بابت راهنماییتون
میشه یه مثال از همین نوع تکس باکس بزنین؟ این کار رو برای دکمه ها اگه بخوام میشه انجام بدم؟

Davidd
یک شنبه 15 تیر 1393, 15:09 عصر
عرض سلام و ادب و احترام و سپاس بابت راهنماییتون
میشه یه مثال از همین نوع تکس باکس بزنین؟ این کار رو برای دکمه ها اگه بخوام میشه انجام بدم؟
خواهش مي كنم. فرقي نداره براي تمام كنترل هاي ويندوز ميشه اينكارو انجام داد.
براي ساخت كنترل جديد در Solution Explorer روي اسم پروژه كليك راست كنيد و Add UserControl انتخاب كنيد. در حالت پيش فرض از كلاس Control ارث بري ميكنه كه ميتوني تغييرش بدي و مثلا از كلاس Button ارث بري كني. مثال زير يك دكمه هست كه زماني كه موس واردش ميشه رنگش سبز ميشه و وقتي موس خارج ميشه رنگش به حالت اول برميگرده. رنگ پس زمينه دكمه در _permanentBackColor ذخيره ميشه تا پس از خروج موس رنگ به حالت اولش برگرده. كدش فك كنم واضح باشه :

public partial class myButton : Button
{
Color _permanentBackColor;

public myButton()
{

InitializeComponent();
_permanentBackColor = this.BackColor;
}


protected override void OnMouseEnter(EventArgs e)
{
_permanentBackColor = this.BackColor;
this.BackColor = Color.Green;
base.OnMouseEnter(e);
}
protected override void OnMouseLeave(EventArgs e)
{
this.BackColor = _permanentBackColor;
base.OnMouseLeave(e);
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
}
}
پ.ن: كلمه كليدي base براي اشاره به كلاس پايه (كلاس پدر) استفاده مي شود. Override هم يعني اين متد در كلاس پايه وجود داره و در كلاس فرزند دوباره پياده سازي ميشه. با تايپ public override ليست propertyها و متدهاي كلاس پايه نشون داده ميشه.

ghazal_mohammady
یک شنبه 15 تیر 1393, 15:34 عصر
سپاس
اونوقت چطور میشه از این یوزر کنترل روی فرم استفاده کرد؟

Davidd
دوشنبه 16 تیر 1393, 08:09 صبح
سپاس
اونوقت چطور میشه از این یوزر کنترل روی فرم استفاده کرد؟
يه بار كه پروژه build بشه كنترل جديد به toolbox اضافه ميشه.