PDA

View Full Version : سوال: لطفا class رو برایم توضیح دهید.



hafez1
جمعه 15 اردیبهشت 1391, 00:05 صبح
می خواستم یه دوست عزیزی کلاسا رو ار اولش برام توضیح بده.
فک کنید من هیچی نمی دونم.

سوداگر
جمعه 15 اردیبهشت 1391, 01:48 صبح
فک کنید من هیچی نمی دونم.
http://www.askdin.com/images/smilies/Small/pir.gif نه خیر. فکر می کنیم که شما با مفهوم متغیر، متد و برنامه نویسی آشنایی دارید و حالا می خواهید بفهمید کلاس چه هستش!

خوب با این فرض شروع می کنیم که به شما گفته اند یک بازی فوتبال برایمان بساز. شما با فرضیات بالا میایید و متغیرهای زیر را برای شبیه سازی تیم برزیل تعریف می کنید:

//Ronaldinho features
int ronaldinioAge;
int ronaldinioHeight;
int ronaldinioPower;
int ronaldinioSkills;
int ronaldinioTechnic;
string ronaldinioName;
//Carlos features;
int carlosAge;
int carlosHeight;
int carlosPower;
int carlosSkills;
int carlosTechnic;
string carlosName
//other players feasures
.....
.....
.....

فرض کنید که برای نگهداری اینهمه متغیر و تعریف آنها برای تک تک بازیکنان، خواندن کدها در فصل آینده برای تغییر در آنها! چه قدر خون دل باید خورد!
در برنامه نویسی ساختار یافته شما این متغیرها را درون یک ساختار (struct) قرار می دهید:

struct player
{
int Age;
int Height;
int Power;
int Skills;
int Technic;
string Name;
}

و بعد برای هر یک از بازیکنان کافی است بنویسید:

player ronaldinho;
player carlos;
player kaka;
player dida;
player kafou;
.....
.....

در حافظه ی رم، حافظه ای برای ساختار ronaldinho حافظه ای برای carlos و ... در نظر گرفته می شود.
برای دسترسی به خصیصه های Age , Skills , ... هم کافیست که از علامت . استفاده کنیم و بنویسیم: dida.Age=33
می بینید که کارمان خیلی راحت شد!

با اینکه استفاده از ساختارها کار برنامه نویسان را راحت کرد ولی استفاده از کلاس به جای struct مزایایی بیشتر دارد(البته struct منسوخ نشده)
1) Structها مقداری و کلاسها ارجاعی هستند
2) کلاسها می توانند از کلاسی دیگر، ویژگیهایی را به ارث ببرند ولی ساختارها چنین قابلیتی را ندارند.
ارث بری:
یک کلاس به نام Person درست می کنیم و خصوصیات ابتدایی که هر بازیکن داراست را در آن مشخص می کنیم. مثلا: سن، قد و .... اما این کلاس می تواند دو زیرکلاس هم داشته باشد، مثلا زیرکلاسهای Players و goalkeeper، آنگاه خصوصیات یک دروازه بان را در کلاس خودش مشخص می کنیم مثلا گرفتن توپ با دست و ...
دوستمون این موارد رو ذکر کردن که هرکدام داستان خودش رو داره: (http://barnamenevis.org/showthread.php?219424-%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D9%85%D9%81%D9%87%D9%88%D9%85-Class-%D9%88-Struct)

کلاس و Struct شباهت زیادی با هم دارند ولی چند تفاوت مهم بین آنها وجود دارد که بشرح زیر است

در ساختار
1- نوع مقداری
2- نمونه سازی در حافظه Stack
3- سازنده پیش فرض برای آن نمیتوانید تعریف کنید
4- اگر سازنده مربوط به خودتان برای ساختار تعریف کنید کامپایلر سازنده پیش فرض تولید خواهد کرد
6- اگر یک فیلد رو در سازنده مربوط به خودتان مقداردهی نکردید کامپایلر بطور اتوماتیک آنرا مقدارهی اولیه نخواهد کرد
7- در لحظه تعریف فیلدها نمیتوانید آنها را مقداردهی کنید
8- تفاوت اصلی این دو در بحث وراثت است یک کلاس میتواند از کلاس پایه ارث ببرد ولی یک ساختار نمیتواند


در کلاس
1- نوع ارجاعی
2- نمونه سازی در حافظه Heap
3- سازنده پیش فرض برای آن میتوانید تعریف کنید
4- اگر سازنده مربوط به خودتان برای ساختار تعریف کنید کامپایلر سازنده پیش فرض تولید نخواهد کرد
6- اگر یک فیلد رو در سازنده مربوط به خودتان مقداردهی نکردید کامپایلر بطور اتوماتیک آنرا مقدارهی اولیه میکند
7- در لحظه تعریف فیلدها در کلاس میتوانید آنها را مقداردهی کنید

موفق باشید

one hacker alone
جمعه 15 اردیبهشت 1391, 02:08 صبح
دوست عزیز شما یکم دارید کم لطفی میکنید
آیا بهتر نبود بعد از جستجو و خوندن تعاریف و مثال های مختلف از Class ابهامات رو اینجا بیان میکردید؟

برای افراد مبتدی تعریف کلاس یه طرف قضیه هست و دلیل و زمان و مکان استفاده از اون هم طرف دیگه

در عین اینکه تعریف ساده ای داره اما توضیحش برای فرد مبتدی یکم سخته ولی در کل:

شما توی برنامه هاتون همیشه متغیر تعریف کردی تابع تعریف کردی و بعد ها در نهایت انعطاف زبان سی اومدی Struct تعریف کردی ولی این ساختمان شما فقط متغیر میتونستی توش تعریف کنی مثلا ساختمانی به اسم استاد تعریف کردی که وزن داشت اسم داشت سطح مدرک داشت واین خیلی زیبا بود چون تونسته بودی یکم ادم رو شبیه سازی کنی وزن و قد و رنگ چشم و...... اما هیچ وقت نتونستی با احساس باهاش برخورد کنی (بی احساس..........................شوخی کردم برادر) مثلا نشد یه بار اون استاد از دست شاگرداش پیر بشه و وزن کم کنه البته چرا شاید میتونستی یه cin میکردی و وزن جدید رو وارد میکردی تا در قسمت وزن استاد ذخیره بشه اما....
اما
اما
یک سال بعد....

استادی که طراحی کردی الان میتونه در مقابل برخی حالات واکنش نشون بده مثلا میتونه گریه کنه و سلام کنه و.... یعنی اینکه الان میتونی توی اون ساختمان در کنار تعریف متغیر های وزن و قد یه رفتار (تابع) رو تعریف کنی

و من مطمئن هستم که تو برای برخورد احساسی نسبت به استادت از کلاس ها استفاده کردی چون توی ساختار نمیتونی رفتار رو شبیه سازی کنی؟


یه نمونه کلاس همین textbox که حالات مختلفی داره مثل رنگش مثل رفتاری که درمقابل عبور ماوس از روش اتفاق میافته مثل فونت و رنگ متن و... اینها همش یعنی جون دادن به یه چیزی حالا هرچی
اینها یعنی کلاس

hafez1
جمعه 15 اردیبهشت 1391, 11:23 صبح
خیلی با حال توضیح دادید.
واسم مثال می زنید؟؟؟؟؟؟؟

سوداگر
جمعه 15 اردیبهشت 1391, 18:53 عصر
خیلی با حال توضیح دادید.
واسم مثال می زنید؟؟؟؟؟؟؟
اگه جلوتر بریم باید 450 صفحه ی کتاب شیءگرایی در 21 روز رو همینجا تایپ کنیم!
دانلود کتاب مقدمه ای بر برنامه نویسی شی گرا (1.09Mb) (http://www.parsbook.org/1390/06/object-oriented-programming.html)