خانه » آموزش » برنامه نویسی » شئی گرایی و اصول اولیه آن به زبان ساده

شئی گرایی و اصول اولیه آن به زبان ساده

بسمه تعالی

شئی گرای یک طرز تفکر در مورد ساختن برنامه و نوشتن کد است. قبل از ایجاد شئی گرایی کدها بصورت یکپارچه و شت سر هم نوشته می شدند(مانند اسمبلی و c ) و وقتی کد به این صورت نوشته می شود تست و خطایابی آن، همچنین تغیر مد بسایر سخت و دشوار می شود. شئی گرایی می گوید کد را به بخش های مختلفی تقسیم کن که هرکدام داده و رفتار خود را دارند و ارتباط اینها باهم کل برنامه مان را می سازد.

چند اصطلاح مهم داریم:

  1. کلاس (class): کلاس در واقع یک تعریف و یا یک نقشه است. یک کلاس می تواند داده داشته باشد که به آن Attribute می گوییم و همچنین می تواند تعدادی رفتار و یا منطق داشته باشد که به آن Method اطلاق می شود.
  2. آبجکت (Object): یک نمونه واقعی ساخته شده از class است.

در جاوا کلاس را بصورت زیر می سازیم:

کلاس بالا نه attribute داشت و نه method. حالا برای کلاس “انسان” attribute های سن ، قد و وزن در نظر می گیرم.

پس اگر کلاس را به عنوان یک تعریف  یا ایده در نظر بگیریم، نمونه واقعی ساخته از آن آبجکت است که تمام مشخصات کلاس را دارد.

بسیار خوب تا اینجا با مفهوم کلی آشنا شدیم. استفاده از اصول شئی گرایی باعث راحت تر شدن برنامه نویسی می شود. شئی گرایی چهار اصل اصلی دارد که قصد داریم به آنها بپردازیم. این اصل ها را زبان های برنامه نویسی به طرق تقریباً شبیه هم پیاده سازی کرده اند و در تمام آنها وجود دارد. زبان برنامه نویسی در این مقاله java می باشد. این اصول عبارتند از:

  1. انتزاع (Abstraction)
  2. کپسوله سازی (Encapsulation)
  3. وراثت (Inheritance):
  4. چند ریختگی (Polymorphic)

 

انتزاع چه می گوید؟

وقتی در ذهنتان چیزی را تصور می کنید انتزاع اتفاق می افتد. وقتی من می گویم به سیب فکر کنید یک سیب انتزاعی در ذهنتان ساخته می شود که جزئیات آن واقعاً مهم نیست. ممکن است شخصی به یک سیب سبز فکر کند و شخصی دیگر به یک سیب قرمز. این اصل می گوید تا جای ممکن بصورت انتزاعی و Generic به کلاس ها فکر کنیم و اجازه بدهیم جزئیات در مراحل دیگر شکل بگیرند. مثلا کلاسی داریم به نام هواپیما که دارای خاصیت وزن است. این کلاس دارای رفتاری به نام “پرواز کردن” است. طبق انتزاع به جزئیات و چطوری پرواز کردن کاری نخواهیم داشت و یک رفتار انتزاعی به همان نام برایش تعریف می کنیم. حال شیئی که از هواپیما مشتق می شود باید خودش “پرواز کردن” را پیاده سازی کند. یا در کلاس “انسان” صحبت کردن را به عنوان یک انتزاع بصورت زیر در نظر می گیرم که در خود کلاس اصلی پیاده سازی برای آن وجود ندارد، فقط می دانیم انتزاعی دارد به نام “صحبت کردن” و به چطورش کاری نداریم :

بخش abstraction  می گوید که کلاس انسان یک دستورالعملی بصورت انتزاعی به نامه “صحبت کردن” دارد و کلاسی که از آن ارث می برد برای آن را پیاده سازی کند.

وراثت

توسط این اصل کلاس ها می توانند از کلاس های دیگر ارث بری کنند و خواص و مشخصات آن را برای خود کنند. در جاوا با دستور extends وراثت اتفاق می افتد.

کلاس PersianPeople از Human ارث بری کرده و تمام مشخصات Human را دارد. یعنی age و height و weight. اما همانطور که گفتم چون صحبت کردن را بصورت انتزاعی تعریف کرده بودیم کلاس مشتق شده باید آن را پیاده سازی کند. برای پیاده سازی انتزاع از واژه Override استفاده می شود. البته اگر خود PersianPeople هم انتزاعی بود می توانست پیاده سازی را بسپارد به کلاس مشتق شونده نهایی از خودش.

چند ریختی

چند ریختگی کاملاً به تعریف انتزاع بر می گردد که کلاس های مشتق شده هرکدام بخش انتزاعی را بصورت دلخواه پیاده سازی می کنند. به کلاس های زیر توجه کنید که همگی از Human مشتق شده اند:

کپسوله سازی

خاصیت های کلاس برای همان کلاس محفوظ می ماند و این امکان را به برنامه نویس می دهد تا از دسترسی کلاس ها به داده یکدیگر جلو گیری کند.  معمولاً برای کپسوله کردن از عنوان هایی همچون public , protected و private استفاده می شود. به این صورت داده هایی که از جنس public هستند برای همه کلاس های دیگر قابل دسترسی خواهند بود. داده هایی که بصورت protected هستند برای خود کلاس و فرزندهایش قابل دسترسی خواهد بود. private هم فقط و فقط برای خود کلاس قابل دسترسی خواهد بود. در همان مثال های ما خود کلاس Human بصورت public است تا بقیه کد به آن دسترسی داشته باشند. حال می خواهیم برای  attribute ها سطح دسترسی تعریف کنیم:

age فقط برای Human خواهد بود و هیچ یک از کلاس های مشتق این خصلت را ندارند. height در کلاس های مشتق هم وجود خواهد داشت و به آن دسترسی دارند. اما از بیرون کلاس کسی آن را نمی بیند. weight برای همه کلاس های دیگر قابل دسترسی خواهد بود. شما می توانید نتیجه را آزمایش کنید.

آموزش برنامه نویسی اندروید

درباره مهدی تاجیک

مهندس نرم افزار و مدیر پروژه. از سال 82 برنامه نویسی رو بصورت جدی شروع کردم و از سال 90 برنامه نویسی اندروید می کنم. علاقه زیادی به یادگرفتن و یاد دادن دارم.

دیدگاهتان را ثبت کنید

آدرس ایمیل شما منتشر نخواهد شدعلامتدارها لازمند *

*

bigtheme
x

شاید بپسندید

چگونه در ویندوز عددفارسی را دقیقاً فارسی تایپ کنیم؟

کاربرد این قضیه وقتی است که مثلا می خواهید عددفارسی ...

تفاوت های بین Encoding, Encryption, Hashing و Obfuscation

احتمالا همگی این عبارات را شنیده اید و با بعضی ...

مفاهیم مهندسی رابط کاربر

در این مقاله قصد دارم تا شما را با مفاهیم ...