شی گرایی یکی از مهم ترین و کاربردی ترین مباحث در برنامه نویسی پیشرفته و ساخت یافته می باشد .
در حقیقت شی گرایی نوعی طرز تفکر خاص در پیاده سازی برنامه هاست ، به عبارتی برنامه نویس با بخش های مختلف برنامه به همان صورتی که با اشیا در دنیای واقعی رفتار می کند ، ارتباط برقرار می نماید .کلاس ها مهم ترین جزء شی گرایی هستند و در حقیقت کلاس ، تولید کننده یک شی محسوب می شود .حالا باید پرسید که شی چیست ؟
یک شی می تواند یک موجودیت فیزیکی باشد ، مانند یک کتاب ، یک صندلی. شما می توانید یک کتاب را توصیف کنید ، آنرا بخوانید و آنرا بخرید. یک شی می تواند یک موجودیت غیر فیزیکی و غیر قابل لمس (intangible) باشد ، مانند یک کار یا زمان. با اینکه یک کار چیزی است که شما بصورت فیزیکی نمی توانید آنرا لمس کنید اما می توانید آنرا توصیف کنید ، روی آن بحث کنید ، آنرا انجام بدهید و تکمیل کنید. هر چیزی که بتوانید آنرا توصیف کنید می تواند به عنوان یک شی در نظر گرفته شود.
یک کتاب ، یک صندلی ، یک کار و هر شی در دنیا واقعی بوسیله دو گروه از خصوصیات مشخصی می شوند :
- صفات(attributes) : صفات ویژگیهای یک شی را بیان می کند. در واقع یک صفت یک ویژگی از یک شی است مانند صفت نام برای یک فرد. صفات توصیف کننده یک شی هستند و با استفاده از مقادیر صفات می توان وضعیت فعلی یک شی را بدست آورد. برای مثال یک فرد می تواند دارای صفت تاهل باشد که با استفاده از مقدار این صفت می توان وضعیت تاهل آن فرد را در شرایط فعلی بدست آورد.
- رفتار(behaviors): یک رفتار عملی است که یک شی توانایی انجام دادن آن را دارد. برای مثال یک شخص می تواند راه برود ، بدود ، بنشیند و هزاران کار دیگری که قادر به انجام دادن آن است که هر کدام از این کارها برای آن شخص یک رفتار محسوب می شود. یک سوال یک کتاب می تواند چه رفتاری داشته باشد. آیا یک کتاب قادر به انجام دادن کاری است تا به عنوان یک رفتار برای آن شی به حساب آید ؟ شی کتاب در حقیقت قادر به انجام هیچ کاری نیست. یک ناشر برای انتشار یک کتاب کارهای مانند ویرایش کتاب ، چاپ کتاب ، توزیع کتاب و در آخر فروش کتاب را انجام می دهد. این کارها توسط یک نفر بر روی کتاب انجام می گیرد. متدلوژی شی گرا به ما می گوید که این رفتارها را به جای فردی که این کارها را انجام می دهد را به شی کتاب تخصیص بدهیم.
- البته متغییر ها هم هست.
هر سه بخش فوق می توانند Public , Private یا Protected باشد .((البته INTERNAL هم هست)).حالا با نوشتن یک کلاس به نوع دسترسی ها می پردازم .کلاس((CLASS))کلاس ها همان نوع داده تجریدی یا انتزاعی (Abstract) هستند. به عبارتی یک نوع داده هستند که توسط برنامه نویس برای کار با داده ها و توابع و رویدادهای مختلفی تعریف می شوند. برای تعریف کلاس از الگوی زیر پیروی می کنیم :
1. class className
2. {
3. // Define private variables & functions
4. public:
5. // Define public variables & functions
6. private:
7. // Define private variables & functions
8. protected:
9. // Define protected variables & functions
10. } objectsame; // Declare Objects
همانطور که در بالا آمد، برای تعریف یک کلاس از کلمه کلیدی class استفاده می کنیم و نامی را در ادامه برای آن تعیین می کنیم .
متغیرها و توابع مربوط به class در درون بلوک آکولاد قرار خواهند گرفت. فرض بر این است که دسترسی داده ها و توابع private است مگر اینکه نوع دسترسی صراحتا اعلام شود .
داده ها و توابعی که طبق سطر 3 تعریف شوند بطور پیش فرض از سطح دسترسی private برخوردار خواهند بود زیرا چیزی برای آنها تعریف نشده است کما اینکه در سطر 6 این سطح دسترسی کاملا بیان شده است .
سطح دسترسی private به این معناست که که داده ها و توابع تعریفی در این سطح، فقط در این class شناخته می شوند و در خارج از کلاس هیچگونه دسترسی به آنها وجود ندارد و تمامی عملیات روی آنها فقط باید در همان class تعریف شوند که همان مفهوم Encapsulation یا محرمانگی و بسته بندی را پیاده سازی می کنند .((در مورد دسته بندی ، جندریختی و ارث بری)) بعد توضیح خواهم داد.
در سطر 4 می توان داده ها و توابعی را که دارای سطح دسترسی public یا عمومی هستند را تعریف نمود و این بدین معناست که داده ها و توابع با این سطح دسترسی هم در داخل و هم در خارج از class قابل دسترسی هستند .
در سطر 8 نیز نوع دسترسی protected ذکر شده، یعنی کلاس هایی که از این کلاس به ارث برده می شنود می توانند به این قسم از داده ها و توابع دسترسی داشته باشند .
در سطر 10 و در خارج از محدوده کلاس نیز باید اشیائی را برای دسترسی به اعضای class خود ایجاد نماییم که به ذکر نام یا نام هایی که با کاما از هم جدا می شوند بسنده می کنیم. دقت داشته باشید که ایجاد شی از کلاس را می توان در درون تابع main نیز انجام داد .
در ساختمان داده طرز ساخت یک شی را یاد گرفتیم اما در پست های بعدی طرز ساخت یک شی و مقدار دهی به ان را توضیح خواهم داد.