جاوا یا Java زبانی است شی گرا و توسط فردی به نام جیمز گاسلینگ در سال 1995 به عنوان بخشی از سکوی جاوا منتشر شد.
قبل از هر توضیح دیگری باید بدانیم شی گرایی چیست و دیدگاه شی گرایی برای توسعه نرم افزار چیست.
شی گرایی انقلابی در توسعه نرم افزار ایجاد کرد در حالی که جاوا بر پایه شی گرایی ایجاد شده و این موضوع بیان گر آن است که شی گرایی سابقه ایی طولانی تر از جاوا دارد.
هدف شی گرایی طراحی اشیای دنیای واقعی با استفاده از کلاس است.برای مثال برنامه ای مینویسیم تا بر روی چوبی به اندازه 2 متر با فاصله 10cm میخ بکوبد. با در نظر گرفتن اصول شی گرایی در این برنامه می توان میخ ٰ- چوب – چکش را یک شی در نظر گرفت.با این دیدگاه هر کدام از این اشیا را به کلاس تبدیل می کنیم (مدل سازی می کنیم).
ابتدا از کلاس چوب و چکش نمونه ایی ایجاد می کنیم. سپس از کلاس میخ نمونه ای ایجاد می کنیم و با استفاده از نمونه های ایجاد شده ی قبلی از چکش و چوب میخ ها را به فاصله 10cm از یکدیگر می کوبیم.
مزیت بزرگ شی گرایی Object-oriented programming یا به اختصار OOP این است که برنامه با سازماندهی بالا تر طراحی می شود و در مقابل تغییرات انعطاف پذیر است.همچنین میزان کد تولیدی برنامه را به طرز چشم گیری کاهش می دهد و خوانایی برنامه را بالا می برد.از از کلاس های ایجاد شده می توان در برنامه های دیگر با ایجاد تغییر یا بدون ایجاد تغییر استفاده کرد.
شی گرایی در جاوا به 3 طریق است :
1- Encapsulation یا اصل نهان سازی
2- Inheritance یا ارث بری
3- Polymorphism یا چند ریختی
باید در نظر داشت که زبان جاوا بسیاری از گرامر (syntax) خود را از زبان c و c++ گرفته و در مواردی بعضی از امکانات موجود در این زبان ها را به کار نبرده است.
مثلا در شی گرایی C++ از وراثت چندگانه پشتیبانی می کنند یعنی یک کلاس C++ میتواند از چندین کلاس دیگر ارث بری کند و خواص آنها را در خود اضافه کند (که این امر اگر با بی دقتی انجام شود ممکن است اشکالاتی را به وجود بیارد) که در جاوا وراثت چندگانه یا multi inheritance پشتیبانی نمیشود و یک کلاس در جاوا تنها می تواند از یک کلاس ارث بری کند اما به جای وراثت چندگانه جاوا واسط ها را معرفی کرد که هر کلاس میتواند از یک کلاس ارث بری و چند واسط (interface) را پیاده سازی کند.
در C و C++ اشاره گرها وجود دارند که در جاوا به کار نبرده است که همانند وراثت چندگانه با بی دقتی باعث بروز مشکل میشود.پس تا اینجا هدف جاوا را می توان ساده سازی و بالا بردن امنیت برنامه دانست زیرا با استفاده از اشاره گر ها (pointer) و وراثت چندگانه پیچیدگی برنامه بالا می رود.البته تمام هدف جاوا همین نبوده و کار های دیگری هم صورت گرفته است.
**اهداف جاوا:...