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

خواص برنامه نویسی شی گرا

برنامه نویسی شیء گرا(OOP:Object Oriented Programming)  شیوه ای از برنامه نویسی است که در آن از ویژگی ساخت‌یافته همراه با چند ویژگی قوی جدید استفاده می شود. برنامه نویسی در زبان های C++،C#،جاوا و … بصورت OOP امکان پذیر است. تمام زبانهای برنامه نویسی شی گرا دارای سه خصوصیت مشترک زیر می باشند:

الف- محصورسازی(encapsulation)

مکانیزمی است که کد و داده را به هم وصل نموده و هر دوی آنها را از مزاحمت های خارجی یا استفاده های غیرمجاز مصون نگه می دارد. استفاده از خاصیت محصورسازی امکان ایجاد شیء را می دهد که شیء مجموعه ای از داده ها بعلاوه کد (چند متد ) برای دستکاری آن داده ها و ارتباط با محیط بیرون از شیء می باشد. امکان تعریف داده ها یا متدها بصورت خصوصی (private) وجود دارد که در این صورت از محیط بیرون از شیء دسترسی به آنها امکان نخواهد داشت.

ب- چندریختی (polymorphism)

چندریختی مشخصه ای است که به یک وسیله یا شیء امکان می دهد با تعدادی از سیستم ها یا برنامه ها مورد استفاده قرار گیرد. مثل ترموستات که بدون توجه به نوع دستگاه گرم کننده می تواند در آن استفاده شود. در برنامه نویسی می توان بعنوان مثال از یک شیء Shape نام برد که دارای خصوصیاتی مثل رنگ کادر، رنگ پس زمینه و … متدهایی برای جابجایی، تغییر رنگ پس زمینه است که می تواند در ساخت هر نوع شکلی مثل مربع، مستطیل، مثلت یا دایره بکار رود.

ج- ارث بری (inheritance)

ارث بری فرآیندی است که بوسیله آن شیء می تواند خاصیت های شیء دیگری را بدست آورد. بعنوان مثال شیء دانشجو (Student)می تواند خواص و متدهای مربوط به شیء شخص (Person) از جمله نام، نام خانوادگی، آدرس و تلفن را به ارث برد. یا بعنوان مثال کلاس صندلی چرخ دار و کلاس صندلی ثابت می توانند انواع خاصی از کلاس کلی تر صندلی  باشند.

تعریف کلاس و شی

کلاس (Class ) و شیء (Object) دو مفهوم اساسی در برنامه نویسی شیءگرا هستند، در هر محیط عملیاتی با مجموعه ای از موجودیت ها و روابط بین آنها سروکار داریم. موجودیت ها را می توان بر اساس خصوصیات و رفتارشان در آن محیط دسته بندی (رده بندی) کرد. به عنوان مثال در محیط دانشگاه، موجودیت ها را بصورت زیر دسته بندی می کنیم.

  • کارکنان
  • دانشجویان
  • دروس
  • رشته ها
  • فضاهای آموزشی

هر دسته (Class ) از موجودیت ها دارای یک مجموعه ویژگی ها بوده و رفتار معینی را انجام می دهند.

به عنوان مثال کلاس دانشجو دارای ویژگی های شماره دانشجویی، نام و نام خانوادگی، رشته تحصیلی، معدل و … است. در ضمن رفتار دانشجو عبارت است از : ثبت نام در دانشگاه، انتخاب واحد کردن، آزمون دادن، فارغ التحصیل شدن و …

در حالی که کلاس های دیگر ویژگی ها و رفتار دیگری خواهند داشت که وجه تمایز بین کلاس ها، خصوصیات و رفتارآنها می باشد.

هر کدام از نمونه (Instance) های یک کلاس را شیء (Object) می گویند. بعنوان مثال هر کدام از دانشجویان یک دانشگاه، اشیای کلاس دانشجو می باشند. و یا هر کدام از ساختمان های دانشگاه، یک شیء از کلاس فضاهای آموزشی می باشند. پس معلوم شد که کلاس یک مفهوم ذهنی و انتزاعی از موجودیت های محیط عملیاتی است در حالی که اشیاء ، نمونه های عینی و واقعی از موجودیت ها هستند. وجه تمایز بین اشیای یک کلاس مقادیر نسبت داده شده به ویژگی های آنها می باشد. بعنوان مثال هر کدام از اشیای کلاس دانشجو دارای شماره دانشجویی، نام و نام خانوادگی و … متمایز هستند. اگر چه بعضی خصوصیات چند نمونه ممکن است مقادیر یکسان داشته باشند مثل وجود دو دانشجو با نام و نام خانوادگی یکسان، ولی مجموعه مقادیر مربوط به همه ویژگی های آنها بصورت منحصر بفرد و متمایز از دیگران خواهد بود.

مثال۱: دانشجو

کلاس دانشجو

خواص: شماره دانشجویی- کدملی- نام – نام خانوادگی – رشته تحصیلی – معدل

رفتار: ثبت نام کردن – فارغ التحصیل شدن – شرکت در آزمون – انتخاب واحد – اخراج شدن

اشیای دانشجو:

شی ۱ : دانشجویی بنام علی

شماره دانشجویی : ۱۰۰   کد ملی: ۲۰۲۰۰   نام: علی          نام خانوادگی: علوی      رشته تحصیلی: کامپیوتر معدل:۱۸

شی ۲ : دانشجویی بنام سارا

شماره دانشجویی : ۲۰۰   کد ملی: ۳۰۳۰۰   نام: سارا          نام خانوادگی: حسنی      رشته تحصیلی: حسابداری           معدل:۱۷

همه اشیای از نوع کلاس دانشجو می توانند رفتارهای کلاس دانشجو را داشته باشند.

مثال۲:  زمان

کلاس زمان :

خواص : ساعت – دقیقه – ثانیه

رفتار : تنظیم زمان – نمایش زمان

شیء یک : ساعت ۱۱:۲۴:۴۵

شیء دو: ساعت ۲۱:۸:۲۴

ایجاد برنامه های شی گرا

در OOP بطورکلی سعی می شود کلاس ها و اشیای دنیای واقعی حتی الامکان به همان شکلی هستند، در برنامه تعریف و پیاده سازی شوند. بنابراین برنامه نویسی شیءگرا یعنی شبیه سازی کلاس ها و اشیای دنیای واقعی برنامه و پیاده سازی رفتار آنها با استفاده از توابع و فراخوانی آنها.

برنامه نویشی شی گرا، در اکثر زبانهای برنامه نویسی شی گرا به شیوه تقریباً مشابهی انجام شده و مفاهیم یکسانی دارد و تنها تفاوت در نحوه نوشتن و گرامر زبان، برای تعریف و پیاده سازی کلاس ها، ایجاد اشیای کلاس و فراخوانی رفتارها و روابط بین اشیاء می باشد است . در ادامه با ذکر مثال هایی به تشریح این گرامر می پردازیم.

مثال : پیاده سازی کلاس زمان

خواص عبارتند از:

ساعت :hour             دقیقه : min                 ثانیه : sec

رفتار (متدها) عبارتند از:

تنظیم ساعت : setTime                              نمایش ساعت : showTime

تعریف کلاس :

public class  Time {
privateint  hour ,min,sec;
public void setTime( int h, int m , int s ){
hour = h ;
min  = m ;
sec  = s ;
}public void  showTime(){
System.out.println(hour+”:”+min+”:”+sec) ;
}
}

برای ایجاد اشیای زمان واستفاده از متدهای آن ها، کلاس اصلی برنامه را بصورت زیر می نویسیم:

public class Program {
public static void main(String[] args) {
Time t1 = new Time();
Time t2 = new Time();
t1.setTime(10,23,45);
t2.setTime(21,35,56);
t1.showTime();
t2.showTime();
}
}

در مثال فوق، در تابع اصلی از کلاس برنامه، ابتدا دو متغیر بنام t1 و t2 از نوع کلاس Time تعریف شده و به آنها حافظه تخصیص داده شده است که اصطلاحاً به آنها شیء گفته می شود. سپس متدهای مربوط به کلاس Time به همراه هر کدام فراخوانی شده است. فراخوانی متد با هر شیء روی خصوصیات همان شیء عمل می کند. در نتیجه هر شیء بصورت جداگانه، خصوصیات خودش را مقداردهی کرده و زمان را با فرمت مناسب نمایش می دهد.

 

کلمه privateقبل از تعریف متغیرها (hour،min  و sec) به این معنی است که این متغیرها بصورت خصوصی تعریف شوند و  از محیط بیرون از کلاس Time ،(مثلاً در داخل کلاس Program ) نتوان به آنها دسترسی داشته یعنی آنها را تغییر داده یا استفاده کنیم.

کلمه public قبل از تعریف توابع یا متغیرها، به این معنی است که از محیط بیرون از کلاس بتوان به داده ها دسترسی داشت یا متدها را فراخوانی کرد.

نمایش قابل چاپ