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...
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.