در دنیای برنامه نویسی شیوه های مختلفی برای نوشتن برنامه وجود دارد. یکی از این شیوه های پرکاربرد برنامه نویسی شی گرا (Object Oriented Programming) است. که ساختار و بلوک اصلی در آن شی (Object) است.
در دنیای واقعی مغز اطلاعاتش را به روش شی گرایی از محیط می گیرد و آن ها را پردازش می کند و همین موضوع بن مایه ی بوجود آمدن زبان های شی گرا شد.

برنامه های نوشته شده با این پارادایم، برنامه های ساختار یافته ای هستند که فواید زیر را دارند:
  • خوانایی بالا
  • تست و اصلاح ساده تر
  • سرعت تولید بیشتر
  • پیچیدگی کمتر
  • اعمال ساده تر تغییر
  • دارا بودن قابلیت استفاده مجدد
هر شی، مطابق دنیای واقعی دارای ویژگی (Property یا Attribute) و رفتار (Behavior) است. برای مثال اگر یک اتومبیل را به عنوان شی در نظر بگیریم شامل یکسری ویژگی مانند رنگ، تعداد در، سال ساخت و ... است همچنین یک اتومبیل یکسری رفتارها از خود نشان می دهد مانند: گاز دادن، ترمز کردن و ...
در برنامه نویسی برای داشتن یک شی نیازمند class هستیم و در کلاس مورد نظر معادل ویژگی variable، و معادل رفتار method را داریم.

مفاهیم مهم در شی گرایی:

وراثت(Inheritance):
همانطور که از نام آن مشخص است، به این معناست که یک شی می تواند ویژگی ها و رفتار شی دیگر را به ارث ببرد.

inheritance

به عنوان مثال در یک ماشین یک سری صفات و رفتار ها مشترک است مانند رنگ و رانندگی. می توانیم این صفات را به عنوان یک کلاس پدر تعریف کرده و انواع اتومبیل های دیگر از ان ارث ببرند.

مخفی سازی (Encapsulation)
به این معناست که یکسری از پیچیدگی ها و جزییات را از دید دیگران پنهان کرد.

مخفی سازی

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

چند ریختی (Polymorphism):
به طور ساده می توان چند ریختی را اینگونه تعبیر کرد: یک شی بتواند شکل های مختلفی به خود بگیرد. به طور دقیقتر اینکه یک متد رفتار های مختلفی از خود نشان دهد.

چند ریختی در شی گرایی

همانطور که در شکل پیداست متد speak می تواند به شکل های مختلف اجرا شود.