PDA

View Full Version : سوال: مفهوم شي گرا و كلاس در .NET



codeplus
جمعه 29 شهریور 1387, 00:01 صبح
سلام

چندين بار در سايت در مورد مفهوم شي گرائي و كلاس جستجو كردم ولي به توضيح جامع و كاملي كه پاسخ گو باشه نرسيدم.حتي در كتابهاي آموزشي C# هم دراين مورد به طورخلاصه صبحت شده و به در حقيقت براي كسي نوشته شده كه پيش از اين مفهوم اين دو را درك كرده باشد.

به طور كلي:


يك كلاس چيست؟
چه وظايفي دارد؟
ارث بري و كپسوله سازي به چه معناست؟
اين كه گفته ميشود هر چيزي در سي شارپ يك شي است يعني چه؟اين مفاهيم تا چه اندازه كار برنامه نويس را اسان ميكند؟

mohammad272005
جمعه 29 شهریور 1387, 14:02 عصر
1. يك كلاس چيست؟ کلاس (http://msdn.microsoft.com/en-us/library/0b0thckt.aspx) مجموعه‏ای از اعضا است که بطور منطقی و/یا فیزیکی به هم مربوط می شوند. کلاس توسط کلمه کلیدی class تعریف می شوند. بطور مثال:
class TestClass
{
// Methods, properties, fields, events, delegates
// and nested classes go here.
}بر خلاف ++C در #C فقط تک-ارث‏بری ممکن است. به عبارت دیگر یک کلاس فقط می تواند یک را با عنوان والد خود داشته‏باشد. با این وجود یک کلاس می‏تواند تعداد نامحدودی interface (http://msdn.microsoft.com/en-us/library/ms173156.aspx) را پیاده‏سازی نماید.
اطلاعات بیشتر در MSDN (http://msdn.microsoft.com/en-us/library/0b0thckt.aspx)

2. چه وظايفي دارد؟وظیفه اصلی یه کلاس منطقی کردن و طبیعی کردن است. شاید بتوان تمام امکاناتی که یه کلاس می دهد را بدون نیاز به خود کلاس پیاده‏سازی کرد. ولی با با کلاس، کد به نظر سازمان‏یافته‏تر و قابل فهم‏تر می نماید. به نحوی که بطور مثال نام کلاس می تواند گویای انجام عملی یا اعمالی باشد که انجام میدهد. مانند:


public static class Math
{
public static int Sum(int a, int b)
{
return a + b;
}
}
به وضوح مشخص است که این کلاس قادر به انجام (حداقل تعدادی از) اعمال ریاضی می باشد.

3. ارث بري و كپسوله سازي به چه معناست؟ارث‏بری (inheritance (http://msdn.microsoft.com/en-us/library/ms173149.aspx)) یعنی داشتن تمام اعضائی که والد کلاس دارد. برای مثال


class A
{
int a;
}
class B : A
{
int b;
}
کلاس B هم حاوی فیلد a است هم b.
نکته: برخی تصور می‏کنند که اعضاء private (http://msdn.microsoft.com/en-us/library/st6sy9xe.aspx) توسط کلاس فرزند به ارث برده نمی شوند. این تصور غلط است. طبق تعریف تمام اعضا به ارث برده می شوند. در این حالت دسترسی کلاس فرزند به اعضاء private محدود می شود. کما اینکه با reflect (http://msdn.microsoft.com/en-us/library/ms173183.aspx) یک کلاس می تواند به اعضاء private یه کلاس نیز دسترسی داشت.
كپسوله سازي (encapsulation (http://msdn.microsoft.com/en-us/library/aa244215.aspx)) به معنی مخفی کردن اعضائیست که از بیرون نیازی به آنها نیست و یا نباید دیده شوند. كپسوله سازي از پیچیدگی یک class می کاهد. برای مثال اینکه یه کلاس چگونه به بانک اطلاعاتی متصل می شود پس از ایجاد کلاس اهمیتی ندارد پس کلاس می تواند بنا به منطق برنامه شیء connection خود را مخفی سازد. كپسوله سازي در سطح خود کلاس معنا ندارد. كپسوله سازي در دو سطح می تواند انجام گیرد: در سطح خصوصی و محفظت شده. اعضاء خصوصی (private) در حالت عادی به هیچ عنوان قابل دسترس نیستند. ولی اعضاء محافظت شده (protected) فقط در سطح کلاسهای فرزند می توانند استفاده شوند.


4. اين كه گفته ميشود هر چيزي در سي شارپ يك شي است يعني چه؟اين مفاهيم تا چه اندازه كار برنامه نويس را اسان ميكند؟
یعنی در صورتیکه نام والد کلاسی مستقیما برده نشود آن کلاس تلویحا در کلاس Object ارث برده می شود. و چون تمام کلاسها در پایان به کلاس به والدی ختم می شوند که ظاهرا والد ندارد پس تمام کلاسهای #C، شیء هستند. این خصوصیت، موارد کار برد فراوانی دارد. من باب مثال زمانی که برای یک متد نوع پارامتر ورودی اهمیتی ندارد،برای اینکه این متد برای همه قابل استفاده شود باید پارامتر آن را object تعریف نمود.


public static string ToString(object obj)
{
return obj.ToString();
}

teshnehab
جمعه 10 آبان 1387, 17:42 عصر
سلام
جناب mohammad272005 مطالب مفيدي را ارائه داديد،ممنون.
اگر ميشه در مورد برنامه نويسي سي شارپ با رعايت اصول شي گراي اموزش دهيد.
يا اگر سايت يا منبع ديگري را مي شناسيد معرفي كنيد.
با تشكر

Majid-FBI
چهارشنبه 19 مهر 1391, 13:57 عصر
مفاهیم شیء گرایی

1- Abstraction تجرید (مجرد سازی): اولین مفهوم شیء گرایی است و به این معنا می‏باشد که هر آنچه در غالب یک شیء یا عملیات بیان می‏شود، به تنهایی دقیق و کامل است.
2- Encapsulation کپسوله سازی (بسته بندی): بدین معناست که دستورات و بخشهای مختلف یک برنامه از دید کاربر پنهان می‏گردد. با کپسوله سازی، دخل و تصرف در برنامه‏ها کاهش می‏یابد. مثال: جمع آوری کلاس‏ها در یک فایل DLL.
3- Inheritance وراثت (ارث بری): وراثت اجازه می‏دهد تا مفاهیم جدید بر اساس مفاهیم موجود تولید گردد. بزرگترین مزیت آن جلوگیری از تکرار است. مثال: دانشجو، استاد و کارمند همگی نمونه‏ای از انسان هستند، بنابر این می‏توانند خصوصیات انسان را به ارث ببرند.
4- Polymorphism چند ریختی (چند شکلی بودن): بیان چند عمل یا چند ریخت مختلف از یک شیء به یک زبان است. مثال: رسم شکل، می‏تواند شامل رسم مربع، رسم مستطیل و رسم مثلث باشد. این عملیات را می‏توان به صورت چند ریختی بیان کرد، یعنی با تعداد و نوع پارامترها و تغییر آنها رسم یکی از اشکال را اجرا کرد.

مفاهیم اولیه شیء گرایی





1- Object (شیء): انسان، جسم، اشیاء و هر آنچه که سیستم می‏خواهد در مورد آن اطلاعاتی داشته باشد.
2- Class (کلاس): مجموعه‏ای از اشیاء که با هم در ارتباطند.
3- Attribute (خصوصیات): مشخصاتی از یک شیء که آن را از یک شیء دیگر مجزا می‏کند.
4- Relation (ارتباط): می‏تواند میان اجزای مختلف یک سیستم بوجود آید و دارای انواع مختلفی هستند.

tooraj_azizi_1035
دوشنبه 15 آبان 1391, 09:19 صبح
کلاس به معنی رده است. یعنی هر چیزی چه واقعی و چه موهومی می تواند رده بندی شود یعنی دسته بندی شود. دسته بندی از نظر رفتار و از نظر خصوصیت های وجودی.
ارث بری تقریباً واضح است یعنی خواص و رفتار هایی را از کلاسی دیگر به ارث بردن و همزمان خصایص و رفتارهایی خاص خود داشتن.
کپسوله سازی هم به معنی این است که هر چیزی از یک کلاس در معرض جهان خارج قرار نگیرد زیرا می توان وضعیت یک شیء را تخریب کند. قطعات یک موتور اتوموبیل هرگز در معرض استفاده راننده قرار نمی گیرد زیرا اولاً آن قطعات تنها به منظور استفاده توسط خود موتور ساخته شده و ثانیاً اگر راننده به آن قطعات دسترسی داشته باشد می تواند در عملکرد موتور خلل ایجاد کند.
برنامه نویسی که به یک شیء مثل کارمند دسترسی دارد نباید بتواند مقدار منفی به سن کارمند انتساب دهد در این صورت او توانسته شیء کارمند را تخریب کند بلکه باید از طریق Property به نام Age به فیلد محرمانه _age دست پیدا کند.

I will add more...