شیء گرایی در زبان برنامه نویسی جاوا


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

در حقیقت اگر یک برنامه نوشته شده در جاوا را به منزله تعدادی Object در نظر بگیریم که در کنار یکدیگر قرار گرفته اند تا یک Object بزرگ تر از خود را -که کار خاصی را می تواند انجام دهد- بسازد (به عبارتی یک برنامه)، به سهولت خواهیم توانست Object ها را در یک زبان برنامه نوسی شیء گرا درک کنیم. در حقیقت با ساخت یک شیء در برنامه خود، خواهیم توانست آن شیء را به هر تعداد دفعه که بخواهیم مورد استفاده قرار دهیم و یا حتی چنانچه نیاز به تغییری در یکی از Attribute ها یا همان خصوصیات شیء خاص داشته باشیم، صرفاً با اعمال تغییر در آن شیء به خصوص، تغییر اعمال شده در کل برنامه لحاظ خواهد شد.

از سوی دیگر با ایجاد Object ها در یک کدنویسی، امکان Debug کردن یا مشکل یابی نیز برای ما راحت تر خواهد شد چرا که به جای درگیر کردن خود با کل پروژه، صرفاً می توانیم Object یی که به آن مشکوک هستیم را Debug کنیم. برای آشنایی بیشتر با فرایند دیباگ کردن، می توانید به آموزش فرایند دیباگ کردن در برنامه نویسی به چه معنا است؟ از دوره ی آموزش اصول برنامه نویسی در سکان آکادمی مراجعه نمایید.

در حقیقت یک شیء در زبان های برنامه نویسی شیء گرا دارای دو چیز تحت عنوان Attribute و Behavior می باشد. به طور خلاصه Attribute ها عبارتند از ویژگی هایی که یک شیء را از شیء دیگری در برنامه متفاوت می سازند. منظور از Behavior ها همان کارهایی است که یک Object می تواند انجام دهد. در زبان برنامه نویسی جاوا، Object ها با استفاده از یک Class ایجاد می شوند. در حقیقت یک Class در برگیرنده کلیه Attribute ها و Behavior هایی است که یک Object می تواند داشته باشد.

اکنون نیاز است پروژه ای تحت عنوان OOP به معنی "برنامه نویسی شیء گرایی" ایجاد می کنیم سپس کلاسی به نام MyClass در آن می سازیم. در این مرحله کد ما می بایست به شکل زیر باشد:

public class MyClass {
}

نام این کلاس MyClass به معنی "کلاس من" می باشد. حال اگر یک Object از روی این کلاس ایجاد کنیم، آن Object هیچ کاری برای ما نخواهد کرد زیرا که دارای هیچ گونه Attribute و یا Behavior یی نمی باشد. معنی لغوی واژه public معادل است با "عمومی" و یا "همگانی" و در زبان برنامه نویسی جاوا نیز معنی این کلید واژه چیزی مرتبط با همین معانی است. با قرار دادن کلید واژه public قبل از نام یک کلاس -و یا حتی یک متد- این دستور را به کامپایلر می دهیم که این کلاس یا متد قابل دسترسی توسط دیگر بخش های برنامه نیز خواهد بود (در آموزش های آتی، با دیگر سطوح کنترل همچون private و protected نیز آشنا خواهیم شد.) حال نیاز داریم تا یک Attribute برای شیء خود تعریف کنیم. این کار را می توان از طریق انواع متغیرها که پیش از این مورد بررسی قرار گرفتند انجام داد. از این رو، یک متغیر از جنس int در کلاس خود به اسم number به معنی "شماره" ایجاد کرده و مقدار اختصاص داده شده به آن را معادل با 1 در نظر می گیریم. حال نوبت به ایجاد یک Behavior برای کلاس خود می رسد. برای همین منظور از یک Method استفاده خواهیم کرد. به طور خلاصه وظیفه متدها انجام یکسری کارها است که به آن ها محول می شود و در این برنامه وظیفه متدی که ما می سازیم این است که در پنجره ی کنسول، جمله ای را به نمایش در آورد. متد ما به شکل زیر خواهد بود:

public void showSomething() {
}

در واقع با قرار دادن کلید واژه public قبل از نام متد این دستور را به کامپایلر می دهیم که این متد از هر کجای برنامه قابل دسترس خواهد بود. کلید واژه void به این معنی است که این متد از یک سو قرار است دستوری انجام دهد و از سوی دیگر این متد قرار نیست که هیچ گونه Data یا داده ای را بازگرداند. به عبارت دیگر این متد چیزی را return نخواهد کرد (در آموزش های آتی با مبحث return به طور مفصل آشنا خواهیم شد.) سپس نام متد تحت عنوان showSomething به معنی "چیزی را نشان بده" قرار می دهیم.

نکته
چیزی که برنامه نویسان کل دنیا در نام گذاری متدها همواره مد نظر دارند این است که این نام گذاری می بایست با یک فعل شروع شود چرا که وظیفه اصلی متد های انجام یکسری کار است پس بهتر است که نحوه نامگذاری آن ها هم به نحوی باشد که گویای وظیفه شان باشد. در این مثال از آنجا که این متد قرار است متنی را روی صفحه مانیتور به نمایش در آورد، پس نام آن را نیز با واژه show به معنی "نشان دادن" آغاز می کنیم.

پس از نام متد علامت () را قرار داده سپس علامت های { } را قرار می دهیم (هر کاری که متدها قرار است انجام دهند می بایست مابین دو علامت { } قرا گیرند و چنانچه نیاز است متد دارای Attribute های اضافی باشد می بایست داخل ( ) قرار گیرند که تحت عنوان پارامترها یا آرگومان های آن متد شناخته می شوند.) حال داخل دو علامت { } دستوری را می نویسیم که جمله "این اولین متد ساخت من است" را داخل کنسول به نمایش در آورد. در این مرحله کد ما به شکل زیر تکمیل خواهد شد:

public class MyClass {
    int number = 1;
    public void showSomething() {
        System.out.println("This is my method " + number + " created by me.");
    }
}

در واقع دستوری که داخل ;()System.out.println قرار گرفته است در وهله ی اول عبارت This is my method را چاپ کرده سپس مقدار متغیر برنامه تحت عنوان number را به آن اضافه کرده و در نهایت عبارت .created by me را به آخر استرینگ اضافه می کند. در محیط برنامه نویسی اکلیپس دکمه ی Run را برای اجرای برنامه می زنیم و خروجی برنامه همانند تصویر زیر خواهد بود:

ظاهراً برنامه ما با مشکلی مواجه می باشد چرا که اکلیپس از اجرای برنامه خودداری کرده و از برنامه ما خطا می گیرد. عبارتی که در تصویر بالا مشاهده می شود حاکی از آن است که "کلاس ما دارای یک نقطه شروع نمی باشد". همان طورکه قبلا هم توضیح داده شد، یک برنامه جاوا برای آن بتواند اجرا شود نیاز به یک متد از جنس main دارد که در قسمت زیر قابل مشاهده است:

public static void main(String[] args) {
}

در واقع، هر آنچه که در این متد قرار گیرد، به محض اجرای برنامه فرا خوانده خواهد شد. تا این جای کار ما یک کلاس ایجاد کرده ایم که می توانیم از روی آن یک Object یا شیء ایجاد کنیم. برای این منظور نیاز داریم تا یک کلاس جدید ایجاد کرده که به منزله نقطه آغازین برنامه ما خواهد بود و در کلاس جدید خود از روی کلاس MyClass یک شیء جدید ایجاد کرده و مورد استفاده قرار دهیم. برای ایجاد یک کلاس جدید همانند تصویر زیر عمل می کنیم:

در این تصویر فلش قرمز رنگ نشان دهنده نام پروژه ای است که در ابتدای هر آموزش ایجاد می کنیم که در این آموزش نام OOP در نظر گرفته شده است. فلش سبز رنگ نشانگر پکیجی است که در حین ایجاد یک کلاس جدید می توانیم ایجاد کنیم. به خاطر داشته باشیم که وظیفه هر پکیج این است که به ما کمک کند تا کلاس هایی را که نیاز است تا در یک گروه باشند را در کنار یکدیگر قرار دهیم. حال اگر در حین ساخت یک کلاس نام پکیجی در نظر گرفته نشود، اکلیپس به طور خودکار این کار را تحت عنوان default package به معنی "پکیج پیش فرض" انجام خواهد داد. در این مرحله روی نام پیکج کلیک راست کرده و از پنجره ای که باز می شود گزینه New را انتخاب کرده و از پنجره دوم گزینه Class را انتخاب می کنیم که در تصویر فوق با فلش آبی رنگ نشان داده شده است (به منظور ساخت یک کلاس جدید از منوی File می توان گزینه New سپس گزینه Class را انتخاب کرد.) در ادامه، نامی که برای کلاس خود در نظر می گیریم می تواند MySecondClass به معنی "کلاس دوم من" باشد. سپس پیش از زدن دکمه Finish گزینه (public static void main(String[] args را تیک می زنیم. فایده این کار این است که دیگر نیازی نیست تا متد main را به طور دستی وارد کلاس جدید خود کنیم. پس از ایجاد کلاس جدید، کلاس به طور خودکار در پنجره ای جدید باز شده کد داخل آن به شکل زیر خواهد بود:

public class MySecondClass {
    /**
    * @param args
    */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
    }
}

همان طور که قبلا توضیح داده شده است، کلیه ی کامنت ها از داخل کد قابل حذف بوده و هیچ تاثیری در فرایند اجرای برنامه نخواهند داشت. این کلاس جدیدی که ایجاد کردیم بر خلاف کلاس اول، این قابلیت را دارا است که هر آنچه در آن قرار گیرد را اجرا کند چرا که داخل آن متد main گنجانده شده است. حال می خواهیم تا یک Object از روی کلاس قبلی خود در این کلاس ایجاد کنیم. برای این منظور کد خود را به شکل زیر تکمیل می کنیم:

public class MySecondClass {
    public static void main(String[] args) {
        MyClass newObject = new MyClass();
    }
}

برای این کار نام کلاس قبلی خود را نوشته سپس برای این Object یی که می خواهیم بسازیم یک نام می بایست در نظر بگیریم. نامی که در اینجا می توان در نظر گرفت newObject به معنی "شیء جدید " می باشد (لازم به ذکر است که هر نامی برای این شیء می توان در نظر گرفت.) سپس یک علامت مساوی قرار داده و از آنجا که قرار است یک شیء جدید ایجاد کنیم، از کلید واژه ی new استفاده خواهیم کرد و در نهایت مجدداً نام کلاسی که می خواهیم از روی آن یک شیء درست کنیم را نوشته و یک علامت ;() هم در انتهای آن قرار می دهیم. برای آن که این شیء ساخته شده را بتوانیم مورد استفاده قرار دهیم، می بایست نام Object یی که ساخته ایم را نوشته سپس بعد از آن یک نقطه قرار داده و در نهایت نام متدی که در کلاس قبلی ایجاد کرده بودیم را بنویسیم که در این صورت کد ما به شکل زیر در خواهد آمد (به عبارت دیگر، این متد قرار گرفته داخل کلاس است که می توان کاری مثل نمایش یک متن را عملی سازد که بدون فرا خواندن این متد، شیء ما هیچ کاری نخواد کرد):

public class MySecondClass {
    public static void main(String[] args) {
        MyClass newObject = new MyClass();
        newObject.showSomething();
    }
}

تا اینجای کار ما توانسته ایم با موفقیت یک شیء جدید بسازیم که کلیه Attribute ها و Behavior های خود را از کلاس MyClass به ارث خواهد برد. در این آموزش ما توانستیم یک Object جدید ایجاد کرده که در صورت اجرای برنامه، خروجی آن به شکل زیر خواهد بود:

حال اگر به Class اول خود بازگردیم و تغییری در متد آن ایجاد کنیم، این تغییر بلافاصله در Object یی که از روی آن کلاس ایجاد کردیم اعمال خواهد شد. به طور مثال عبارت داخل دستور ;()System.out.println که در کلاس MyClass قرار دارد را به عبارت !This is a change به معنی"این یک تغییر است!" تبدیل می کنیم. پس از Save کردن این تغییر اعمال شده، مجدداً به Class دوم رفته و برنامه را اجرا می کنیم:

public class MyClass {
    int number = 1;
    public void showSomething() {
        System.out.println("This is a change!");
    }
}

خروجی برنامه به شکل زیر خواهد بود:

مشاهده می کنیم که به چه راحتی می توان در زبان برنامه نویسی جاوا یک Object ایجاد کرده و Attribute ها و Behavior های مرتبط با آن را در لحظه تغییر داد و تغییرات لحاظ شده را در کل برنامه خود دید.

دانلود فایل‌های تمرین
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
کاربر میهمان
کاربر میهمان
۱۳۹۶/۱۰/۲۴
آقای مرادی ممنونممممممم
AmirAemi
AmirAemi
۱۳۹۵/۱۱/۱۰
با سلام
و عرض خسته نباشید به تک تک اعضای این سایت فوق العاده
میخواستم بدونم معادل دستور system("cls") که در CPP استفاده می شود ، در جاوا چیست؟
کاربر میهمان
کاربر میهمان
۱۳۹۵/۰۶/۲۵
سلام.من در کلاس دوم وقتی فراخوانی ابجکت ایجاد شده رو کامنت میکنم بازم برنامه خروجی داره...علتش چیه؟
Hamid
Hamid
۱۳۹۵/۰۶/۲۲
آقا سلام خسته نباشید ،من قصد دارم برنامه نویسی اندروید شروع کنم ،میخاستم بدونم این آموزش ها لازمه؟
ادمین سایت
ادمین سایت
۱۳۹۵/۰۶/۲۲
با سلام خدمت شما کاربر گرامی
احتراما به استحضار می رساند که دانش جاوا برای شروع کدنویسی اپ های اندرویدی لازم و ضروری است.

با تشکر از توجه شما
ارادتمند
گروه سکان آکادمی

در پاسخ به

کاربر میهمان
کاربر میهمان
۱۳۹۴/۱۰/۰۷
سلام ، میخام دوتا آرایه رو که نوعش مشخص نیست رو با هم جمع کنم ، این آرایه هارو هم قراره که بعدا از کاربر بگیرم
حالا برنامه رو نوشتم و ورودی رو هم دو تا آرایه قرار دادم (Object array1,Object array2) که دوتاشون ، نوعشون رو Object قرار دادم . اما وقتی مینویسم array1+array2 خطا میده که دوتا object رو نمیشه با هم جمع کرد.چکار کنم ؟
Sina Deuxshiri
Sina Deuxshiri
۱۳۹۴/۱۰/۰۸
سلام
برای همچین برنامه هایی با از مبحث جنریک ها استفاده کنید. مطالعه کنید یاد می گیرید.

در پاسخ به

کاربر میهمان
کاربر میهمان
۱۳۹۴/۰۹/۲۰
واقعا عالی بود لذت بردم انشا الله خدا هر چی میخواین بهتون بده
محمد عقبائی فرهنگ
محمد عقبائی فرهنگ
۱۳۹۴/۰۸/۱۷
سلام و خسته نباشید. ببخشید چرا من وقتی تو کلاس MyClass کلمه کلیدی public رو ور میدارم بازم هیچ تغیری نمیکنه و برنامه کار میکنه؟ یعنی منظورم اینه بازم کلاس اصلی برنامه به کلاس MyClass کیتونه دسترسی داشته باشه
Sina Deuxshiri
Sina Deuxshiri
۱۳۹۴/۰۸/۱۷
سلام
دوست عزیز متاسفانه من دقیق یادم نیست. اما فک کنم اگه تعریف نکنید، به صورت خودکار یا protected تعریف میشه یا public. حالا یه نگاه می کنم مطمئن شدم دوباره می گم.

در پاسخ به

محمد عقبائی فرهنگ
محمد عقبائی فرهنگ
۱۳۹۴/۰۸/۱۷
ممنون دوست عزیز . با آموزش های بعدیتون فهمیدم چرا. خیلی ممنون

در پاسخ به

کاربر میهمان
کاربر میهمان
۱۳۹۴/۰۸/۱۷
در جواب AliJCVD باید گفت هر برنامه باید یک متد Main برای استارت داشته باشد، در نتیجه شما در کلاس MyClass اگر متد Main را تعریف کنید، برنامه برای شروع کارش سردرگم میشه، چون یکبار دیگه هم توی کلاس MySecondClass به برنامه گفتیم از این نقظه برنامه رو شروع کن.
AliJCVD
AliJCVD
۱۳۹۴/۰۸/۰۳
سلام و عرض خسته نباشید
میخواستم بدونم علت اینکه تو کلاس اول یعنی MyClass قسمت (public static void main(String[] args رو وارد نکردیم ؟ من خودم وارد کردم تو برنامه و از public void showsomthing ایراد گرفت موقع کامپایل کردن!!
لطفا توضیح بدید چرا اینجوریه! ممنون میشم
Sina Deuxshiri
Sina Deuxshiri
۱۳۹۴/۰۸/۱۷
سلام
هر برنامه فقط یه متد main داره. در این برنامه کلاس MyClass تعریف شده و آبجکت این کلاس در کلاس اصلی (که شامل متد main است) ایجاد شده.

در پاسخ به