در آموزش مقدمهای بر مفهوم شیئگرایی در زبان برنامهنویسی جاوا گفتیم که هر کلاس در زبان برنامهنویسی جاوا دارای یکسری Attribute و Behavior میباشد که با ساخت آبجکت از روی آن میتوانیم به اتریبیوتها و متدهای مورد نظر خود دسترسی پیدا کنیم. به طور مثال، فرض کنیم که در کلاسی با استفاده از دیتا تایپ int متغیری تعریف کرده و مقداری از جنس عدد صحیح را بدان منتسب کردهایم. در واقع، اين متغير به منزلۀ یک اتریبیوت برای کلاس مذکور بوده و با ساخت آبجکت از روی این کلاس میتوان بدان دسترسی داشت. از سوی دیگر، متدهای موجود در کلاس به منزلۀ Behavior یا «عملکرد» کلاس مذکور بوده و هر یک بخشی از عملکرد تعریفشده برای آن کلاس را شامل میشوند.
در این آموزش قصد داریم تا به بررسی نحوۀ تعریف متدها پرداخته و ببینیم که چگونه میتوان با ساخت آبجکت از روی کلاس مد نظر، به متدهای تعریفشده در آن دسترسی داشته و آنها را فراخوانی نمود (البته تا به این بخش از آموزشها بارها و بارها متدهایی را مورد استفاده قرار داده و آنها را فراخوانی کردهایم که از آن جمله میتوان متد ()print را نام برد که این وظیفه را دارا است تا هر آنچه که به عنوان آرگومان ورودی دریافت میکند را در بخش کنسول نمایش دهد.)
به طور کلی، نحوۀ تعریف یک متد در زبان جاوا تا حدودی مشابه تعریف کلاسها است به طوری که برای هر دو میتوان یک Modifier یا «سطح دسترسی» تعریف کرد که این سطح دسترسیها عبارتند از public ،private و غیره که در آموزش آشنایی با انواع سطوح دسترسی در زبان برنامهنویسی جاوا با جزئیات بیشتری به بررسی کاربرد هر یک پرداختهایم. به علاوه، از جمله دیگر مشابهتهای تعریف کلاس و متد میتوان به نحوۀ تعریف بلوک مربوط به هر یک اشاره کرد به طوری که در هنگام تعریف بدنۀ مربوط به هر دو میباید از علائم { } استفاده نماییم که در داخل این علائم نیز وظیفۀ مورد انتظار از متد مربوطه را مینویسیم تا در هنگام فراخوانی، تَسک محوله را انجام داده و داده یا مقداری را در خروجی ریترن کند که این مقدار در نتیجۀ فراخوانی یک متد میتواند مقادیری همچون دادهای با دیتا تایپ int ،double و غیره یا آبجکتی از یک کلاس باشد (توجه داشته باشیم که تمامی متدها لزوماً مقداری را در خروجی ریترن نمیکنند و ممکن است صرفاً عملیاتی را انجام دهند که چنین متدهایی اصطلاحاً از نوع void میباشند.)
حال برای درک بهتر نحوۀ تعریف و فراخوانی یک متد، پروژۀ جدیدی تحت عنوان Methods ساخته و یک کلاس به نام MainClass در آن ایجاد میکنیم و در ابتدا کدی به صورت زیر خواهیم داشت:
public class MainClass {
}
در ادامه، با استفاده از دیتا تایپ int متغیری تحت عنوان price با مقدار اولیۀ 20000000 ایجاد کرده و همچنین آبجکتی از روی کلاس String به نام laptopName تعریف کرده و استرینگ «Laptop Name Is Lenovo» را بدان اختصاص میدهیم به طوری که داریم:
public class MainClass {
int price = 20000000;
String laptopName = "Laptop Name Is Lenovo";
}
حال متدی تعریف میکنیم تا در صورت فراخوانی، مقادیر اختصاصیافته به متغیرهای فوق را در پنجرۀ کنسول نمایش دهد که برای این منظور کد فوق را به صورت زیر تکمیل میکنیم:
public class MainClass {
int price = 20000000;
String laptopName = "Laptop Name Is Lenovo";
public void showData() {
System.out.println(laptopName + " and its price is " + price);
}
}
در واقع، هر متد از دو بخش تشکیل شده است که عبارتند از Signature و Body که در مثال فوق بخش Signature با کلیدواژۀ public شروع شده است بدین معنی که متد مذکور از تمامی نقاط برنامه در دسترس است سپس کلیدواژۀ void را نوشتهایم و بدین معنی است که متد ()showData در صورت فراخوانی دیتایی را در خروجی ریترن نمیکند بلکه صرفاً دستوری مبنی بر نمایش یک استرینگ را اجرا مینماید.
در ادامه نام متد را showData تعریف کردهایم و همانطور که در آموزشهای پیشین توضیح دادیم، نحوۀ نامگذاری متدها بدین شکل است که کلمۀ اول در نام متد میباید یک فعل باشد چرا که متدها وظیفۀ انجام کاری را بر عهده دارند و از همین روی بهتر است تا در نامگذاری آنها نامی را انتخاب نماییم که با وظیفۀ محولشده به متد مذکور همخوانی داشته باشد سپس دو پرانتز به صورت ( ) مقابل نام متد قرار داده که به منظور فراهم کردن قابلیت تعریف پارامتر ورودی برای متد مربوطه مورد استفاده قرار میگیرند. در واقع، تعریف پارامتر ورودی برای یک متد منجر بدین میشود تا در هنگام فراخوانی متد مذکور و در صورت لزوم بتوانیم دیتای مورد نظر را به عنوان ورودی به آن پاس دهیم (در آموزش نحوۀ تعریف متدهایی با پارامتر ورودی در زبان برنامهنویسی جاوا مفهوم پارامتر ورودی و همچنین نحوۀ پاس دادن آرگومان ورودی به یک متد را تشریح نمودهایم.)
به علاوه، در این آموزش و در حین فراخوانی متد ()showData قرار نیست تا دادهای را به عنوان ورودی به آن پاس دهیم و از همین روی در تعریف متد مذکور داخل علائم ( ) چیزی را به عنوان پارامتر ورودی تعریف نمیکنیم.
در ادامه، بلوک مربوط به بدنۀ متد را با علائم { } تعریف کرده و داخل آن دستوراتی را تعریف میکنیم که قصد داریم تا در صورت فراخوانی این متد اجرا شوند. همانطور که در کد فوق ملاحظه میکنیم، بدنۀ متد ()showData حاوی یک دستور مبنی بر چاپ مقادیر منتسب به متغیرهای laptopName و price به همراه استرینگهای مربوطه میباشد.
در این مرحله میتوان گفت که موفق شدهایم تا متدی تعریف نماییم که در صورت فراخوانی، استرینگی را در پنجرۀ کنسول نمایش میدهد. حال جهت فراخوانی این متد نیاز است تا در ابتدا آبجکتی از روی کلاس مربوطه ساخته و بدین ترتیب متد ()showData را روی آن فراخوانی کنیم و برای این منظور میباید یک کلاس جدید تحت عنوان ActionClass ایجاد کرده و آن را نقطۀ شروع برنامۀ خود قرار دهیم و همانطور که در آموزشهای پیشین اشاره کردیم، این کار با زدن تیک گزینه public static void main در حین ساخت کلاس مد نظر امکانپذیر میباشد به طوری که در ابتدا کدی به صورت زیر خواهیم داشت:
public class ActionClass {
public static void main(String[] args) {
}
}
در ادامه، به روش زیر آبجکتی از روی کلاس MainClass داخل کلاس ActionClass میسازیم:
public class ActionClass {
public static void main(String[] args) {
MainClass myObject = new MainClass();
}
}
در کد فوق، برای ساخت آبجکت از روی کلاس MainClass ابتدا نام کلاس را نوشته سپس نامی برای آبجکت مورد نظر انتخاب میکنیم و در ادامه کیورد new را نوشته و مجدداً نام کلاس MainClass را مینویسیم و در نهایت علائم ;() را قرار میدهیم. بدین ترتیب به کامپایلر جاوا دستور میدهیم تا آبجکتی از روی کلاس MainClass ساخته و با استفاده از عملگر = آن را به myObject منتسب نماید.
همانطور که پیشتر اشاره کردیم، با ساخت آبجکت از روی یک کلاس میتوانیم متدهای تعریفشده در آن را روی آبجکت مذکور فراخوانی نماییم و از همین روی میتوانیم متد ()showData را روی آبجکت myObject فراخوانی کنیم که برای این منظور کد فوق را به صورت زیر تکمیل مینماییم:
public class ActionClass {
public static void main(String[] args) {
MainClass myObject = new MainClass();
myObject.showData();
}
}
همانطور که مشاهده میکنیم، برای فراخوانی متد ()showData ابتدا نام آبجکت جدید ساختهشده از روی کلاس را نوشته سپس یک . قرار داده و در ادامه نام متد تعریفشده در کلاس مذکور را مینویسیم سپس علامتهای ;() را در انتهای نام متد قرار میدهیم که با اجرای برنامۀ فوق در خروجی خواهیم داشت:
Laptop Name Is Lenovo and its price is 20000000همانطور که میبینیم، با اجرای برنامه متد ()showData فراخوانی شده و مقادیر منتسب به متغیرهای تعریفشده در کلاس MainClass را به همراه استرینگهای مربوطه در کنسول چاپ مینماید.
