آموزش اصول برنامه نویسی شی گرا : کلاس ها

این مطلب بخشی از آموزش اصول برنامه نویسی شی گرا هست.اشیا بطور خودکار در برنامه ها ظاهر نمیشن. ما باید اونها را بسازیم و این کار را بوسیله کلاس ها انجام میدیم. یک کلاس شامل توضیحات مفصل، تعریف و قالب یک شی می باشد ولی خودش یک شی نیست. هنگامی که ما یک کلاس را نوشتیم و تعریف کردیم ، می توانیم از آن برای ایجاد اشیا بر اساس کلاس نوشته شده استفاده کنیم.از یک کلاس می توانیم برای تولید چندین شی استفاده کنیمکلاسهای مختلف به ما این امکان را می دهند که انواع مختلفی از اشیا را ایجاد کنیم. کلاس ها مانند مجموعه قالب های برش کلوچه ما هستند. یک قالب برش خاص دایره ای می تواند کلاس ایجاد کننده کلوچه های دایره ای باشد. این قالب مشخص می کند که کلوچه چگونه باید باشد. اما قالب برش یک کلوچه به خودی خود یک کلوچه نیست. ما به این قالب برش نیاز داریم تا یک سینی پر از کلوچه های گرد را ایجاد کنیم.به یاد داشته باشید که همیشه اول باید کلاس داشته باشیم تا بتوانیم یک شی ایجاد کنیم. شما نمی توانید کلوچه های گرد را بدون قالب برش گرد درست کنید.قالب های مختلف کلوچه همانند کلاس های مختلف عمل میکنندکلاس : قالب کلوچه گرد | شی : کلوچه گردسه مؤلفه وجود دارد که یک کلاس را در برنامه نویسی شی گرا تشکیل می دهند. هر کلاس یک اسم (Name) دارد، به عنوان مثال، کلوچه گرد(roundCookie). یک کلاس می تواند دارای خصوصیاتی (Attributes) برای توصیف شی باشد، از جمله وزن، رنگ و اینکه آیا روی کلوچه شکر دارد یا خیر! همچنین می تواند رفتارهایی (Behavior) نیز داشته باشد، کارهایی که شی می تواند انجام دهد ، مانند تزئین شدن یا خورده شدن.همچنین ممکن است با اصطلاحات دیگری (تا حدودی قابل تعویض)، برای این کلمات نیز روبرو شوید. به جای نام، ممکن است نوع (Type) را ببینید، زیرا هر کلاس، اشیایی از یک نوع خاص را ایجاد می کند. و همانطور که قبلاً در مورد آن صحبت کردیم، ممکن است خصوصیات (Attributes) را به عنوان Properties یا به طور عمومی تر به عنوان Data نیز مشاهده کنید، و از رفتارها (Behaviors) نیز به عنوان Operations یاد شود.هنگامی که این رفتارها را به عنوان کد می نویسیم، معمولاً به آنها متد (Method) گفته می شود. متد، قطعه کد یا رویه ای است که می توان برای انجام برخی کارها فراخوانی کرد و همچنین ممکن است مقداری را برگرداند.سوالی که اینجا مطرح میشه اینه که تفاوت بین متد (Method) و تابع (Function) چیه؟ خب متدها در اصل تابع هستند ولی با این تفاوت کلیدی که متدها همیشه به عنوان بخشی از یک کلاس تعریف میشن، بنابراین اونها در هر شی ساخته شده از کلاس وجود دارن و از اونجایی که متدها به عنوان بخشی از شی هستن فقط به دیتای موجود در اون شی دسترسی دارن.این مفاهیم کلاس و شی ممکنه در ابتدا کمی گیج کننده باشه، بنابراین بیاید نگاهی به کلاس کلوچه گرد بکنیم. غالبا نمودارهایی (diagram) که برای طراحی یک کلاس استفاده میشه چیزی مشابه شکل زیر هستن، نام در بالا، خصوصیات در وسط و رفتارهای در انتها میاد. بعدا جزییات بیشتری از این نمودار رو بررسی خواهیم کرد.گرچه کلاس به ما میگه که هر کلوچه گرد،اندازه، رنگ و icing داره، اما مقادیر واقعی برای اندازه، رنگ و icing را مشخص نمی کند و فقط تعریف آنها را بیان میکند. اما بعد از تعریف کلاس، می تونیم از طریق فرآیندی به نام نمونه سازی (Instantiation)، اشیا را بر اساس کلاس ایجاد کنیم. در واقع هر شی یک نمونه (Instance) از کلاس خود است. ما دو شی نمونه (Instance) از این کلاس ساختیم، ولی در واقع هیچ محدودیتی برای ساخت نمونه ها وجود نداره. حالا، هر یک از نمونه ها، شی مستقل از سایر اشیاست و هویت خاص خودش رو داره، همچنین داده های خودش رو نیز دارد. کلاس کلوچه گرد (roundCookie) به ما میگه که هر کلوچه گرد یک رنگ دارد، اما اشیا ساخته شده از این کلاس می تونن مشخصات خاص خودشون رو داشته باشن، مثلا کلوچه اول (barronCookie) میتونه رنگ قرمز و کلوچه دوم (oliviaCookie) میتونه رنگ قهوه ای داشته باشه. دقت کنید که این دو کلوچه شی محسوب می شوند.توجه داشته باشید با تغییر در خصوصیات یک کلوچه (مانند اندازه، رنگ و icing)، خصوصیات کلوچه های دیگر تغییر نخواهد کرد. همچنین برای ایجاد اشیا، همیشه ابتدا به کلاس نیاز داریم.خوشبختانه ، اکثر زبانهای شی گرا با مجموعه ای از کلاس های از پیش تعریف شده ارائه می شوند. بنابراین می توانید بلافاصله اقدام به ایجاد اشیا کنید. چیزهای مقدماتی مانند رشته ها (strings)، تاریخ ها (dates) و آرایه ها (arrays) معمولا مشمول کلاس های ارائه شده میشن، بنابراین نیازی نیست که هر برنامه را با تعریف دوباره کلاسهای مشترک (مانند رشته ها، تاریخ ها و آرایه ها) شروع کنید. تمام این کلاس ها از قبل تعریف شده اند و سپس در چهارچوب ها (Frameworks) یا کتابخانه ها (Libraries) جمع شده اند. در زبان Java شما Java Class Library رو دارید که نزدیک به 6,000 کلاس آماده داره، همچنین NET Framework. برای زبان #C و VB.Net از این هم بیشتر کلاس داره. برای ++C نیز C++ Standard Library وجود داره، همینطور برای Ruby و Python نیز کتابخانه هایی وجود داره.امیداوارم تونسته باشم تعریف خوبی از کلاس و تفاوت اون با اشیا رو براتون توضیح داده باشم. اگر سوالی درباره این مقاله داشتید لطفا در نظرات بپرسید.قسمت قبلی : آموزش اصول برنامه نویسی شی گرا : اشیاءقسمت بعدی : آموزش اصول برنامه نویسی شی گرا : انتزاع (Abstraction)