Class در #C

mamad.noise

کاربر فعال انجمن فتوشاپ
با سلام
دوستان در #C بیشتر مواقع با کلاس ها برخورد میکنیم!
اما معنیش رو متوجه نمیشم با توجه به این که خیلی از آموزش ها رو زیر و رو کردم!
دوستان لطف کنن معنی و کارایی Class رو بفرماین
پیشاپیش ممنون:rose:
 

the_king

مدیرکل انجمن
با سلام
دوستان در #C بیشتر مواقع با کلاس ها برخورد میکنیم!
اما معنیش رو متوجه نمیشم با توجه به این که خیلی از آموزش ها رو زیر و رو کردم!
دوستان لطف کنن معنی و کارایی Class رو بفرماین
پیشاپیش ممنون:rose:

زبان #C یک زبان ذاتا شی گرا است و هر کدی هم که به زبان #C نوشته باشه الزاما مبتنی بر شی گرایی است.
یک Class شامل تعریف و پیاده سازی یک نوع شیء ئه. اگر بخوانید یک شیء از نوع جدیدی تعریف کنید یک Class برای اون نوع شیء تعریف می کنید.
 

mamad.noise

کاربر فعال انجمن فتوشاپ
یعنی وقتی توی حالت عادی کدی رو در #C مینویسیم
در یک Class کلی هست؟
منظور از یک شیء از نوع جدید چی هست؟
 

the_king

مدیرکل انجمن
یعنی وقتی توی حالت عادی کدی رو در #C مینویسیم
در یک Class کلی هست؟
بله، دقیقا همینطوره.

منظور از یک شیء از نوع جدید چی هست؟
هر شیء ای از یک نوع ای ئه، نوع شیء رو کلاس مشخص می کنه، کلاس X و کلاس Y هر کدوم نوع مخصوص به خودشون رو دارند، هر چند تا شیء که از
کلاس X بسازید نوع شون یکسانه و از نوع X هستند.

فرضا در NET. برای پنجره های ویندوز یک کلاسی تعریف شده به نام Form و پنجره ای که این کلاس می سازه خالیه و چیزی روی فرم اش نیست.
اگر این فرم های خالی برای شما کفایت می کند نیازی به ساختن کلاس جدیدی برای فرم ندارید، هر چند تا شیء که خواستید از کلاس Form ایجاد می کنید
و نمایش می دهید.

نوع تمامی اشیاء ای که از این کلاس Form می سازید یکی ئه، ممکنه رنگ و شکل و اندازه شون رو تغییر بدهید، اما همه شما یک نوع اند، Form اند.
اما فرضا شما نیاز به فرمی دارید که نام کاربری و رمز عبور دریافت کنه. این دیگه یک فرم خالی نیست و برای همچین فرمی خود کلاس Form کافی نیست.
اینجا شما یک کلاس جدید تعریف می کنید، مثلا کلاس FormLogin و هر چیزی که برای همچین فرمی لازمه داخلش اضافه می کنید.
بعد از تعریف کردن این کلاس FormLogin می نوانید ازش شیء بسازید و نمایش دهید، هر چند تا که خواستید و نوع تمامی شون FormLogin ئه و با Form فرق داره.
 

mamad.noise

کاربر فعال انجمن فتوشاپ
یعنی در اصل Classاستایل فرم رو مشخص میکنه درسته؟
که مثلا رنگش چجوری باشه!
اندازش و...
میتونیم شئ هت رو هم داخل Class بگونجونیم؟
یعنی مثلا برای صفحه لوگین 2تاText boxو 2تاLable درست میکنیم و بایک Button
بعد در جایی که خواستیم فرم لاگین رو داشته باشیم این کلاس رو فراخوانی میکنی
درسته؟
ممنون که با صبر و حوصله جواب میدید
 

the_king

مدیرکل انجمن
میتونیم شئ هت رو هم داخل Class بگونجونیم؟
یعنی مثلا برای صفحه لوگین 2تاText boxو 2تاLable درست میکنیم و بایک Button
بعد در جایی که خواستیم فرم لاگین رو داشته باشیم این کلاس رو فراخوانی میکنی
درسته؟
ممنون که با صبر و حوصله جواب میدید
دقیقا همینطوره، اون دو تا TextBox ای که داخل کلاس فرم تون قرار می دهید، دو تا شیء از کلاس TextBox اند
که داخل کلاس فرم تعریف می شوند. هر جا هم که اون کلاس رو فراخوانی کنید (البته مستقیما خود کلاس رو نه،
اول از کلاس اش شیء می سازید و بعد شیء رو نمایش می دهید) اون TextBox ها بصورت خودکار داخل فرم ایجاد شده و
آماده استفاده هستند. کاربرد کلاس جدید برای فرم مشابه همان مثالی است که خودتان زدید.

یعنی در اصل Classاستایل فرم رو مشخص میکنه درسته؟
که مثلا رنگش چجوری باشه!
اندازش و...
عوض کردن رنگ و ابعاد قطعا از عهده کلاس بر میاد اما برای اینها چون فقط مقدار دهی مشخصه های فرم اند
(رنگ و ابعاد مشخصه های فرم اند, می توانید برای هر شیء ای مستقیما عوض شان کنید) لازم نیست
برای صرفا مقدار دهی رنگ و ابعاد یک کلاس جدید تعریف بشه. یعنی کار اضافه است، مثلا فرم رنگ داره،
اینکه قرمز باشه یا سبز نوع اش رو تغییر نمیده، به هر حال فرم ئه.

اگر فقط لازمه رنگ و ابعاد فرم مشخص بشه کافیه یک شیء از کلاس اصلی Form ایجاد کنید
و مقدار مشخصه هایش را تغییر دهید، می توانید کلاس بسازید، مشکلی نیست، اما برای اینجور موارد ساده که
قابلیتی تغییر نکرده کلاس تعریف می کنند. وقتی برای چیزی که هست کلاس جدید تعریف می کنند که
بخواهند مفهوم یا قابلیتی اضافه بشه یا تغییر کنه. مثلا فرم Login دکمه و TextBox هایی می خواد که در Form نیست.

Style فقط یکسری مقدار دهی ئه، مقدار دهی می تونه در کلاس نوشته بشه اما میشه Style پیشفرض.
مثلا وقتی شما یک فرم جدید می سازید هم یک ابعاد و هم یک رنگ مشخصی داره که پیشفرض ئه.
این رنگ و ابعاد پیشفرض در کلاس فرم تعریف شده.
 

mamad.noise

کاربر فعال انجمن فتوشاپ
من اینجور متوجه شدم که Class برای استفاده از در مواقعی هست که امکاناتی فراتر از یک فرم احتیاج داریم استفاده میشه و برای اینکه وقت تلف نشه آماده میکنیم تا موقعی که لازم داشته باشیم استفاده میکنیم
حالا چجوری باید فراخوانیش کنیم؟
باید توی ریشه برناممون باشه تا آدرس دهی کنیم؟
 

the_king

مدیرکل انجمن
من اینجور متوجه شدم که Class برای استفاده از در مواقعی هست که امکاناتی فراتر از یک فرم احتیاج داریم استفاده میشه و برای اینکه وقت تلف نشه آماده میکنیم تا موقعی که لازم داشته باشیم استفاده میکنیم
حالا چجوری باید فراخوانیش کنیم؟
باید توی ریشه برناممون باشه تا آدرس دهی کنیم؟

مثالی که می زنید در مورد فرم و کاربردش درسته، اما کلاس و کاربرد کلاس رو به فرم و فرم سازی محدود نکنید. اگر بخواهید مفهوم کلاس رو به مفهوم فرم ارتباط بدید کلا از موضوع
دور می شوید.

ما یک مفهومی به نام شیء داریم و یک مفهومی به نام تعریف-ساختار شیء که در کل همون کلاس ئه. پس دو مفهوم داریم، شیء و کلاس.
مثلا شما یک کلاس طراحی می کنید به نام انسان، آدمیزاد یا همون Person. این کلاس انسان ای که شما می سازید اونقدر قابلیت و مشخصات داره که شما در تعریف
و کد نویسی کلاس تون مشخص کنید، مثلا انسان اسم نداره، مگر اینکه برایش یک مشخصه Name در نظر بگیرید. اگر برایش مشخصه Name نسازید
می توانید 100 تا آدم بسازید اما هیچکدوم اسمی برای خودشان نخواهند داشت. کلاس انسان ای که شما می سازید وزن نداره، مگر اینکه شما برایش
مشخصه ای به نام Weight در نظر بگیرید. برای سن هم همینطور. یک مشخصه ای به نام Age می خواد. حالا تاریخ تولدش هم ثبت بشه که بهتر.
نمی تونه حرف بزنه، مگر اینکه برایش متدی به نام Speak طراحی کنید. نمی تونه درد رو احساس کنه، مگر اینکه برایش رخدادی به نام OnPain بنویسید.
تو آتش نمی سوزه مگر اینکه برایش متدی به نام Burn بنویسید. اگر دردش بیاد هیچ حرفی نمی زنه، یعنی می سوزه اما صداش در نمیاد، مگر اینکه تو
رخداد OnPain اش یک عمل Speak اضافه کنید. سن اش می تونه به هزار سال برسه و نمیره مگر اینکه خودتون مفهومی به نام مردن و رخدادی برای زمان مردن
طراحی کنید. یعنی این کلاس همونقدر وجود داره که شما در کلاس اش برایش کد بنویسید.

حالا فرضا شما این کلاس انسان رو کد نویسی کردید. حالا می توانید به هر تعدادی که می خواهید آدم بسازید، محدودیت خاصی نداره،
می توانید برایشان اسم و وزن متفاوت در نظر بگیرید، وزن شون رو به مرور زمان بالا ببرید و چاق اش کنید، یا برعکس کم کنید و لاغر اش کنید.
می توانید سه شیء انسان بسازید و کنار هم قرار بدید که حرف بزنند، 10 شیء انسان رو با هم بسوزانید که فریاد بکشند.

تا اینجا شد کلاس انسان که همه اشیاء این انسان قابلیت های یکسانی دارند. اما واکنش ها و خصوصیات مرد ها و زن ها باید فرق کنه،
پس دو تا کلاس Male و Female می نویسید برای انسان مذکر و مونث. هر دو کلاس از انسان ارث بری می کنند، یعنی هر دو شون
ذاتا انسان اند، با همه قابلیت های انسان، مگر اینکه چیزی در کلاس شون تغییر بدهید.

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

این همون مفهوم کلاس ئه. رضا و مریم و بابک شیء ای از کلاس انسان اند، نوع شون انسان ئه، اما هر کدوم مقادیر متفاوتی برای مشخصه هاشون دارند،
فرضا مقدار مشخصه های اسم و وزن و جنسیت شون فرق می کنه. مفهومی به نام رنگ پوست ندارند، چرا؟ چون برای کلاس شون همچین مشخصه ای
اضافه نکرده اید، این مشخصه رنگ پوست باید در کلاس انسان کد نویسی بشه.

کلاس می تونه هر قسمت و جایی تعریف و پیاده سازی بشه، اگر در کد تون محدود اش نکنید، شیء اش هم می تونه هر جایی ایجاد بشه،
محدودیت مهمی مثل بحث ریشه برنامه نداره.
 

جدیدترین ارسال ها

بالا