ایجاد متدها در برنامه نویسی جاوا
یک متد(method) درواقع جزئی از یک برنامه است که در داخل آن تعدادی دستور وجود دارند؛ هر متد، وظیفه ی خاصی را انجام می دهد. اگر به خاطر داشته باشید، اپلیکیشن های جاوا، حاوی یک متد به نام ()main هستند. خود متد ()main نیز قادر است تا متدهای دیگری را اجرا کند. به منظور اجرا شدن یک متد، باید آن متد را فراخوانی کرد و یا به عبارت دیگر، باید نام آن را صدا زد. در داخل هر کلاس، می توان بی نهایت متد تعریف نمود و هر متد را نیز می توان به طور بی نهایت مورد فراخوانی قرار داد.
به عکس 3.1 توجه کنید. در این عکس کلاس ساده ای به نام First وجود دارد که شما در فصل 1، آن را مشاهده نمودید. فرض کنید که می خواهیم سه متن را در خروجی این اپلیکیشن چاپ کنیم. برای انجام این کار، به سادگی می توانیم از سه دستور ()println استفاده کنیم؛ اما یک راه دیگر نیز برای انجام این کار وجود دارد. ما می توانیم یک متد مجزا بنویسیم تا این سه خط را برای ما به نمایش بگذارد.
نکته: در دیگر زبان های برنامه نویسی، به متدها نام های دیگری مثل procedure یا function یا subroutine اطلاق می گردد.
برای ایجاد یک متد مجزا که سه مقدار متنی را نمایش دهد، دو دلیل عمده وجود دارد. اول اینکه با انجام این کار، متد ()main خلوت می شود. علت خلوت شدن متد ()main این است که تنها یک متد در داخل آن فراخوانی می شود. و دیگر لازم نیست که سه دستور مجزای ()println را در داخل آن قرار دهیم.
دلیل دوم این است که با انجام این کار، می توان این متد را مورد استفاده ی مجدد قرار داد. مثلا پس از ایجاد این متد، می توانیم آن را در هر اپلیکیشنی مورد استفاده قرار دهیم. به عبارت دیگر شما یک بار آن را ایجاد می کنید، و سپس می توانید بارها آن را مورد استفاده قرار دهید.
یک متد باید شامل موارد زیر باشد:
1. عنوان متد: اطلاعاتی را در مورد نحوه ی تعامل دیگر متدها با این متد را دربر دارد. ( به، عنوان یک متد، تعریف متد نیز گفته می شود).
2. بدنه ی متد: بدنه، در داخل یک جفت آکولاد قرار می گیرد. بدنه ی متد حاوی دستوراتی است که آن متد انجام می دهد.
عنوان متد، درواقع اولین خط از متد مورد نظر را تشکیل می دهد. و شامل موارد زیر است:
1. تعیین سطح دسترسی (اختیاری)
سطح دسترسی در یک متد جاوا می تواند یکی از موارد زیر باشد:
- public
- private
- protected
- package ( در صورتی که سطح دسترسی نامشخص باشد)
در اکثر مواقع، سطح دسترسی متدها روی public تنظیم می شود. در صورتی که به یک متد، سطح دسترسی public بدهیم، هر کلاسی قادر خواهد بود تا آن را مورد استفاده قرار دهد. همچنین اگر بخواهیم یک متد را، بدون اینکه از آن نمونه گیری(instantiating) کنیم و شیء بسازیم، مورد استفاده قرار دهیم، باید از اصلاحگر static استفاده کنیم.
2. تعیین نوع برگشتی: این امکان وجود دارد تا نوع داده ی برگشتی یک متد را تعیین کنیم. اگر یک متد، چیزی را برگشت ندهد، باید نوع برگشتی این متد را برابر با void قرار دهیم.
3. نام متد: پس از نوع برگشتی، نام متد قرار می گیرد.
4. یک جفت پرانتز: پس از نام متد، یک جفت پرانتز قرار می گیرند. آرگومان های ورودی را می توانید در داخل این پرانتزها قرار دهید.
نکته: کلاس ها می توانند حاوی دو نوع متد باشند. این دو نوع متد عبارتند از:
- متدهایی که نیاز به نمونه گیری دارند(Instance methods): به متدهایی گفته می شود که برای استفاده از آنها، ابتدا باید از آنها یک شیء ایجاد کرد، و از کلید واژه ی static استفاده نمی کنند.
- متدهایی که نیاز به نمونه گیری ندارند(Class methods): به متدهایی گفته می شود که برای استفاده از آنها نیازی به ایجاد یک شیء نیست، و از کلید واژه ی static استفاده می کنند.
بعدا در این فصل، با هردوی این متدها آشنا خواهید شد.
بعنوان مثال به متد ()nameAndAddress در عکس 3.2 توجه کنید. همان طور که مشاهده می کنید، متد مذکور از سطح دسترسی public و از اصلاحگر static استفاده می کند، و به این معنی است که هر کلاسی می تواند آن را مورد استفاده قرار دهد و برای استفاده از آن نیاز به ایجاد شیء نمی باشد. درست مانند متد ()main که آن را در اپلیکیشن های جاوا، مورد استفاده قرار دادیم، متد ()nameAndAddress نیز چیزی را برنمی گرداند و نوع برگشتی آن، void است. همچنین این متد چیزی را دریافت نمی کند، بنابراین در بین پرانتزهای آن هیچ آرگومانی قرار ندارد. بدنه ی این متد، حاوی سه دستور ()println است که بین آکولادها قرار گرفته اند.
شماره 1: تعریف متد.
شماره 2: سطح دسترسی و اصلاحگر.
شماره 3: نوع برگشتی.
شماره 4: نام متد.
شما می توانید یک متد را در داخل یک کلاس قرار دهید، اما نمی توانید آن را در داخل یک متد دیگر قرار دهید. در عکس 3.3 در داخل کلاس First، دو مکان به رنگ آبی مشاهده می کنید. در هر یک از این مکان ها، می توانید متدهای دیگری را قرار دهید. اما نمی توانید در داخل آن متد تعریف شده در کلاس First، متد دیگری را قرار دهید.
ترتیب قرار گیری تعریف متدها در داخل یک کلاس، بر ترتیب فراخوانی آنها هیچ تاثیری ندارد. و هر متد در داخل یک فایل، قادر است تا به هر ترتیبی، یک متد دیگر را فراخوانی کند.
نکته: متد ()main در اپلیکیشن ها، بدون توجه به اینکه در کجای کلاس مورد نظر قرار گرفته باشد، همواره نخستین متدی است که اجرا می شود. به خاطر داشته باشید که، هر اپلیکیشن جاوا حتما باید حاوی یک متد ()main باشد. اما این ضروری نیست که هر کلاس جاوا، حاوی این متد باشد.
اگر می خواهید متد ()main که در کلاس First قرار دارد، متد ()nameAndAddress را مورد فراخوانی قرار دهد، به سادگی می توانید عبارت دستوری ()nameAndAddress را در داخل بدنه ی متد ()main قرار دهید. عکس 3.4 این موضوع را در قالب یک اپلیکیشن کامل، به ما نشان می دهد.
در این مثال، متد ()main دو وظیفه را انجام می دهد. ابتدا متد ()nameAndAddress را فراخوانی می کند و سپس عبارت First Java application را به نمایش می گذارد.
عکس 3.5 خروجی کلاس First را به ما نشان می دهد. به دلیل اینکه متد ()main ابتدا متد ()nameAndAddress را اجرا می کند، ابتدا اطلاعات این متد نمایش می یابند و سپس عبارت First Java application در خروجی نمایش می یابد.
نام کامل متد ()nameAndAddress به صورت ()First.nameAndAddress می باشد و همان طور که مشاهده می کنید، در این عبارت، ابتدا نام کلاس و سپس یک علامت نقطه، و سپس نام متد قرار گرفته است. به دلیل اینکه متد ()nameAndAddress یک متد static است، نیازی نیست تا ابتدا از آن یک شیء ایجاد کنیم.
هنگامی که می خواهیم متد ()nameAndAddress یا هر متد دیگری را در داخل کلاس خودش مورد استفاده قرار دهیم، نیازی نیست نام کامل آن را مورد استفاده قرار دهیم و تنها نام خود متد کفایت می کند(اما انجام دادن این کار نیز مشکلی ایجاد نمی کند). اما اگر بخواهیم متد ()nameAndAddress را در داخل یک کلاس دیگر مورد استفاده قرار دهیم، باید از نام کامل آن استفاده کنیم؛ زیرا در غیر این صورت، کامپایلر نمی تواند آن را تشخیص دهد. بعنوان مثال، اگر به خاطر داشته باشید، هنگام استفاده از متد ()showMessageDialog آن را بصورت ()JOptionPane.showMessageDialog مورد استفاده قرار دادیم.
فرض کنید که دو کلاس متفاوت داشته باشیم؛ هر یک از این کلاس ها می توانند حاوی یک متد به نام ()nameAndAddress باشند. اما هرکدام از آنها با یکدیگر متمایز هستند. اگر بخواهید آنها را در داخل یک کلاس دیگر مورد استفاده قرار دهید، باید نام کامل آنها را ذکر کنید. به یاد داشته باشید که دو کلاس که در داخل یک اپلیکیشن قرار دارند، نمی توانند دارای نام یکسانی باشند.
- نوشته شده توسط احسان عباسی
- بازدید: 7260
دیدگاهها
در صورتی که به یک متد، سطح دسترسی piblic بدهیم، هر کلاسی قادر خواهد بود تا آن را مورد استفاده قرار دهد.
با تشکر بابت آموزش بسیار خوبتون. بررسی کنید Public اشتباه تایپ شده.
با تشکر از شما، اصلاح شد.