در آموزش مقدمهای بر مفهوم شیئگرایی در زبان برنامهنویسی جاوا گفتیم که هر کلاس در زبان برنامهنویسی جاوا دارای یکسری 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
را به همراه استرینگهای مربوطه در کنسول چاپ مینماید.