Object ها بدون وجود Class (کلاس) بیمعنی هستند. واقعیت امر این است که در برنامه نویسی شیء گرایی آنچه مهم است درک مفهوم کلاس است چرا که بدون وجود کلاس ها، هیچ آبجکتی وجود خارجی نخواهد داشت. به عبارت دیگر، ما با استفاده از کلاسها خواهیم توانست به هر تعداد که بخواهیم آبجکت ایجاد کنیم.
یک کلاس مشخص خواهد کرد که شیء مد نظر ما چگونه شیئ خواهد بود اما توجه داشته باشیم که کلاس با آبجکت متفاوت است. کلاس همچون پلان یک ساختمان است. زمانی که ما بخواهیم یک خانه بسازیم، ابتدا می بایست پلان آن را مشخص کنیم. پلان مد نظر شامل کلیه ی جزئیاتی است که مشخص میکنند خانه ی ساخته شده چه شکلی خواهد بود اما توجه داشته باشیم که این پلان خود خانه نیست بلکه نقشه ای انتزاعی از خانه ی واقعی است که آن را مورد استفاده قرار داده تا از روی آن، یک خانه ی واقعی بسازیم.
در دنیای زبانهای برنامه نویسی شیء گرا نیز قضیه دقیقاً به همین صورت است. ما ابتدا یکسری کلاس تعریف میکنیم که همچون نقشه ی یک خانه، دربرگیرنده ی خصوصیات و عملکردهای مد نظر ما است سپس از روی آن کلاس، اقدام به ساخت آبجکت میکنیم. در واقع، آبجکت ها در اینجا نقشی همچون خانه ی واقعی را دارند. همانطور که ما از روی نقشه ی یک خانه خواهیم توانست به تعداد بی نهایت خانه ی واقعی بسازیم، از روی کلاسها نیز میتوانیم به هر تعداد که بخواهیم شیء تعریف کنیم و آنها را در برنامههای خود مورد استفاده قرار دهیم.
در برنامه نویسی شیء گرا، کلاسها دارای نامی منحصر به فرد هستند که نشان دهنده ی ماهیت شان می باشد. علاوه بر این، همانطور هم که قبلاً اشاره شد کلاسها دارای Attribute ها و Bahavior هایی هستند که نشان دهنده ی ماهیت شان می باشند. توجه داشته باشیم که در مبحث کلاس ها، عملکردهایی که یک کلاس میتواند داشته باشد را در قالب Method (متد) ها بیان می کنیم. به عبارت دیگر، متدها بلوک های کدی هستند که داخل کلاسها قرار داشته، کاری را انجام میدهند و در نهایت نتیجهای را در اختیار برنامه نویس قرار می دهند. برای روشنتر شدن این مسأله مثالی می زنیم:
فرض کنیم که قرار است یک نرمافزار بانکی بنویسیم که در آن کلاسی داریم تحت عنوان BankAccount. این کلاس داری یکسری خصوصیات است که از آن جمله میتوان به accountNumber و accountType اشاره کرد که به ترتیب به معنی «شماره حساب» و «نوع حساب» می باشند. این کلاس قادر به انجام یکسری کارها است که از آن جمله میتوان به متدهای ()open و ()close و ()deposit اشاره کرد که به ترتیب به معنی «باز کردن حساب»، «بستن حساب» و «سپرده گذاشتن» می باشند.
این کلاس کاملاً خام است و هیچ کاری نمیتواند انجام دهد تا زمانی که یک آبجکت از روی آن بسازیم. این آبجکت ما مثلاً behzadAccount به معنی «حساب بهزاد» نام خواهد داشت که accountNumber آن 136791 بوده و accountType آن هم savingAccount به معنی «حساب پس انداز» است. بهزاد خواهد توانست تا اقدام به باز کردن حساب، بستن حساب و حتی سپرده گذاری در حسابش کند.
به خاطر داشته باشید |
در برنامه نویسی شیء گرایی، به هر آبجکت ساخته شده از روی یک کلاس اصطلاحاً Instance یا «نمونه» گفته شده و به فرایند ساخت این نمونهها از روی کلاسهای مختلف اصطلاحاً Instantiation یا «نمونه سازی» گفته می شود. |
پیش از این هم گفتیم که از روی یک کلاس میتوانیم به تعداد بی نهایت شیء مختلف بسازیم. برای مثال، ما میتوانیم از روی کلاس BankAccount یک نمونه یا آبجکت دیگر تحت عنوان aliAccount ساخته که شماره حساب آن برابر با 346581 بوده، نوع آن حساب جاری است و صاحب حساب فقط میتواند حساب را باز کرده و در آن سپرده بگذارد اما بر خلاف حساب بانکی بهزاد، قادر به بستن آن نیست. درست است که هر دو شیء از روی یک کلاس ساخته شدهاند اما این در حالی است که هر کدام از اشیاء مد نظر دارای ویژگیها و عملکرد های مخصوص به خود هستند.
حال ممکن است این سؤال برای شما پیش بیاید که آیا یک برنامه نویس همواره موظف است که کلاسها را خودش ایجاد کند؟ در پاسخ به این سؤال بایستی گفت که خیر! بسیاری از زبانهای برنامه نویسی مطرح دنیا به صورت پیشفرض دارای یکسری کلاسهای آماده هستند که برنامه نویس به سادگی قادر خواهد بود تا به هر تعداد که تمایل داشته باشد از رویش آبجکت بسازد. فریم ورک های زبانهای برنامه نویسی مختلف که پا را از این هم فراتر گذاشته و علاوه بر کلاسهای از پیش نوشته شده در خود زبان برنامه نویسی، یکسری کلاسهای دیگر هم به منظور افزایش قابلیتها به آن زبان اضافه می کنند. به طور مثال، از جمله کلاسهای از پیش تعریف شده در زبانهای برنامه نویسی میتوان به کلاسهای مرتبط با تاریخ، استرینگ ها و … اشاره کرد.
به مجموعه کلاسهای از پیش نوشته شده در یک زبان برنامه نویسی اصطلاحاً Library (لایبرری یا کتابخانه) گفته می شود. برای مثال، در لایبرری زبان برنامه نویسی جاوا چیزی در حدود 4000 کلاس از پیش نوشته شده وجود دارد که روز به روز هم در نسخه های جدید زبان جاوا به این تعداد افزوده می شود.
اما به هر حال، زمان هایی در توسعه ی برنامهها پیش میآید که کلاسهای از پیش نوشته شده نیاز برنامه نویس را برآورده نکرده و این خود برنامه نویس است که می بایست اقدام به ایجاد یک کلاس کند که در آموزش بعد، با این چالش برنامه نویسان بیشتر آشنا خواهیم شد.