روش ها در جاوا – با مثال های کد توضیح داده شده است
روش ها برای سازماندهی پروژه های جاوا، تشویق استفاده مجدد از کد و بهبود ساختار کلی کد ضروری هستند.
در این مقاله به تحلیل روشهای جاوا و نحوه عملکرد آنها میپردازیم که شامل نحو، انواع و مثالهای آنها میشود.
در اینجا چیزی است که ما پوشش خواهیم داد:
انواع مشخص کننده های دسترسی در جاوا
– عمومی ( public
)
– خصوصی ( private
)
- محافظت شده ( protected
)
– پیش فرض ( Package-Private
)
انواع روش ها
– از پیش تعریف شده در مقابل تعریف شده توسط کاربر
- بر اساس عملکرد
روش های جاوا چیست؟
در جاوا متد مجموعه ای از دستورات است که عمل خاصی را انجام می دهند و در یک کلاس اعلان می شوند.
در اینجا سینتکس اساسی برای یک متد جاوا آمده است:
acessSpecifier returnType methodName(parameterType1 parameterName1, parameterType2 parameterName2, ...) { // Method body - statements to perform a specific task // Return statement (if applicable) }
بیایید اجزا را تجزیه کنیم:
accessSpecifier
: قابلیت مشاهده یا دسترسی به کلاس ها، متدها و فیلدها را در یک برنامه تعریف می کند.
returnType
: نوع داده مقداری که متد برمی گرداند. اگر متد هیچ مقداری را برنگرداند، از کلمه کلیدی void
استفاده می شود.
methodName
: نام متد، به دنبال قراردادهای نامگذاری جاوا.
parameter
: مقدار ورودی که روش می پذیرد. اینها اختیاری هستند و یک روش می تواند صفر یا چند پارامتر داشته باشد. هر پارامتر با نوع داده و یک نام اعلام می شود.
متد بدن : مجموعه ای از عبارات محصور در پرانتزهای مجعد {}
که وظیفه ای را که متد انجام می دهد را مشخص می کند.
عبارت return : اگر متد دارای یک نوع بازگشتی به غیر از void
باشد، باید یک عبارت return
و به دنبال آن مقداری که باید برگردانده شود، باشد.
در اینجا مثالی از یک روش ساده جاوا آورده شده است:
در این مثال، متد addNumbers
دو عدد صحیح را به عنوان پارامتر ( a
و b
) می گیرد، مجموع آنها را محاسبه می کند و نتیجه را برمی گرداند. سپس متد main
این متد را فراخوانی می کند و نتیجه را چاپ می کند.
کد جاوا را با استفاده از ترمینال با استفاده از دستور javac
کامپایل کنید:
روش ها قابلیت استفاده مجدد کد را با کپسوله کردن عملکرد در یک بلوک تسهیل می کنند. می توانید آن بلوک را از قسمت های مختلف برنامه خود فراخوانی کنید، از تکرار کد جلوگیری کنید و قابلیت نگهداری را ارتقا دهید.
انواع مشخص کننده های دسترسی در جاوا
مشخصکنندههای دسترسی، دید و دسترسی اعضای کلاس (فیلدها، متدها و کلاسهای تودرتو) را کنترل میکنند.
معمولاً چهار نوع اصلی مشخص کننده دسترسی وجود دارد: عمومی، خصوصی، محافظت شده و پیش فرض. آنها دیکته میکنند که کجا و چگونه میتوان به این اعضا دسترسی داشت، و در نتیجه کپسولهسازی و مدولار بودن را ترویج میکنند.
عمومی ( public
)
این امکان دسترسی به عضو را از هر نقطه در برنامه شما، صرف نظر از بسته یا کلاس، فراهم می کند. برای اجزای پرکاربرد مانند توابع ابزار یا ثابت ها مناسب است.
بیشتر بخوانید
بررسی نمایشگرهای هدست اپل ویژن پرو از تراکم پیکسلی شگفتانگیز آنها خبر میدهد [تماشا کنید]
نحو:
public class MyClass { public int publicField; public void publicMethod() { // method implementation } }
مثال:
// File: MyClass.java // A class with public access specifier public class MyClass { // Public field public int publicField = 10; // Public method public void publicMethod() { System.out.println("This is a public method."); } // Main method to run the program public static void main(String[] args) { // Creating an object of MyClass MyClass myObject = new MyClass(); // Accessing the public field System.out.println("Public Field: " + myObject.publicField); // Calling the public method myObject.publicMethod(); } }
در این مثال:
کلاس MyClass
با اصلاح کننده public
اعلام می شود و از هر کلاس دیگری قابل دسترسی است.
publicField
یک فیلد عمومی است که از خارج از کلاس قابل دسترسی است.
publicMethod()
یک متد عمومی است که می تواند از خارج از کلاس فراخوانی شود.
روش main
، نقطه ورود برنامه است، جایی که یک شی از MyClass
ایجاد می شود و به فیلد و متد عمومی دسترسی پیدا می کند.
Public Field: 10 This is a public method.
خصوصی ( private
)
این دسترسی را به عضوی در کلاسی که در آن اعلام شده است محدود می کند. از داده های حساس محافظت می کند و کپسوله سازی را اعمال می کند.
نحو:
public class MyClass { private int privateField; private void privateMethod() { // method implementation } }
مثال:
// File: MyClass.java // A class with private access specifier public class MyClass { // Private field private int privateField = 10; // Private method private void privateMethod() { System.out.println("This is a private method."); } // Public method to access private members public void accessPrivateMembers() { // Accessing the private field System.out.println("Private Field: " + privateField); // Calling the private method privateMethod(); } // Main method to run the program public static void main(String[] args) { // Creating an object of MyClass MyClass myObject = new MyClass(); // Accessing private members through a public method myObject.accessPrivateMembers(); } }
در این مثال:
کلاس MyClass
دارای یک privateField
و یک privateMethod
است که هر دو با اصلاح کننده private
مشخص شده اند.
متد accessPrivateMembers()
یک متد عمومی است که می تواند از خارج از کلاس فراخوانی شود. دسترسی به فیلد خصوصی را فراهم می کند و روش خصوصی را فراخوانی می کند.
Private Field: 10 This is a private method.
محافظت شده ( protected
)
مشخصکننده دسترسی protected
برای دسترسی اعضا (فیلدها و روشها) در همان بسته یا توسط زیر کلاسها، بدون توجه به بسته استفاده میشود. آنها از کلاس های غیر مرتبط قابل دسترسی نیستند. وراثت را در عین کنترل دسترسی به اعضای خاص در زیر کلاس ها تسهیل می کند.
نحو:
public class MyClass { protected int protectedField; protected void protectedMethod() { // method implementation } }
مثال:
// File: Animal.java // A class with protected access specifier public class Animal { // Protected field protected String species = "Unknown"; // Initialize with a default value // Protected method protected void makeSound() { System.out.println("Some generic animal sound"); } }
// File: Dog.java // A subclass of Animal public class Dog extends Animal { // Public method to access protected members public void displayInfo() { // Accessing the protected field from the superclass System.out.println("Species: " + species); // Calling the protected method from the superclass makeSound(); } }
// File: Main.java // Main class to run the program public class Main { public static void main(String[] args) { // Creating an object of Dog Dog myDog = new Dog(); // Accessing protected members through a public method myDog.displayInfo(); } }
در این مثال:
کلاس Animal
دارای یک فیلد protected
( species
) و یک روش protected
( makeSound
) است.
کلاس Dog
یک زیر کلاس از Animal
است و می تواند به اعضای protected
از سوپرکلاس دسترسی داشته باشد.
متد displayInfo()
در کلاس Dog
به فیلد محافظت شده دسترسی دارد و متد محافظت شده را فراخوانی می کند.
با مشخصکننده دسترسی protected
، اعضا در یک بسته و توسط زیر کلاسها قابل دسترسی هستند و سطح مشخصی از دید و وراثت را ارتقا میدهند و در عین حال کپسولهسازی را حفظ میکنند.
پیشفرض ( Package-Private
)
اگر از مشخص کننده دسترسی استفاده نشود، سطح دسترسی پیشفرض package-private
است. اعضای با دسترسی پیش فرض در یک بسته قابل دسترسی هستند، اما خارج از آن نیستند. اغلب برای کلاس های ابزار یا روش های کمکی در یک ماژول خاص استفاده می شود.
نحو:
class MyClass { int defaultField; void defaultMethod() { // method implementation } }
مثال:
// File: Animal.java // A class with default (package-private) access specifier class Animal { String species = "Unknown"; void makeSound() { System.out.println("Some generic animal sound"); } }
// File: Main.java // Main class to run the program public class Main { public static void main(String[] args) { // Creating an object of Dog Dog myDog = new Dog(); // Accessing default (package-private) members through a public method myDog.displayInfo(); } }
// File: Dog.java // Another class in the same package public class Dog { Animal myAnimal = new Animal(); void displayInfo() { // Accessing the default (package-private) field and method System.out.println("Species: " + myAnimal.species); myAnimal.makeSound(); } }
در این مثال:
کلاس Animal
هیچ اصلاح کننده دسترسی مشخصی ندارد و آن را پیشفرض میکند (package-private). این دارای species
میدان بسته-خصوصی و روش بسته-خصوصی makeSound
است.
کلاس Dog
در همان بسته Animal
است، پس می تواند به اعضای پیش فرض (package-private) کلاس Animal
دسترسی داشته باشد.
کلاس Main
برنامه را با ایجاد یک شی از Dog
و فراخوانی متد displayInfo
آن اجرا می کند.
وقتی این برنامه را اجرا می کنید باید گونه و صدای حیوان را خروجی دهد.
نحوه انتخاب مشخص کننده دسترسی مناسب
Public: برای کامپوننتها، رابطها و کلاسهای پایه استفاده میشود.
خصوصی: برای جزئیات پیاده سازی داخلی و حفاظت از داده های حساس استفاده کنید.
پیشفرض: برای روشهای کمکی یا اجزای خاص یک بسته استفاده کنید.
محافظت شده: برای عملکرد مشترک بین زیر کلاس ها استفاده می شود، در حالی که دسترسی از خارج از سلسله مراتب وراثت را محدود می کند.
انواع روش ها
در جاوا، متدها را می توان به دو صورت عمده دسته بندی کرد:
1. از پیش تعریف شده در مقابل تعریف شده توسط کاربر:
متدهای از پیش تعریف شده: این متدها قبلاً در کتابخانه کلاس جاوا تعریف شدهاند و میتوانند مستقیماً بدون هیچ گونه اعلان استفاده شوند.
به عنوان مثال می توان به System.out.println()
برای چاپ در کنسول و Math.max()
برای یافتن حداکثر دو عدد اشاره کرد.
روشهای تعریفشده توسط کاربر: روشهایی هستند که خودتان برای انجام وظایف خاص در برنامه خود مینویسید. آنها در کلاس ها تعریف می شوند و معمولاً برای کپسوله کردن عملکرد و بهبود قابلیت استفاده مجدد کد استفاده می شوند.
در این مثال:
add
یک روش تعریف شده توسط کاربر است زیرا توسط کاربر (برنامه نویس) ایجاد شده است.
متد دو پارامتر ( num1
و num2
) می گیرد و مجموع آنها را برمی گرداند.
روش main
، متد add
را با مقادیر خاص فراخوانی میکند و عملکرد سفارشیسازیشده ارائه شده توسط کاربر را نشان میدهد.
2. بر اساس عملکرد:
در روش های تعریف شده توسط کاربر، چندین طبقه بندی دیگر بر اساس ویژگی های آنها وجود دارد:
روش های نمونه:
مرتبط با یک نمونه از یک کلاس. آنها می توانند به متغیرهای نمونه دسترسی داشته باشند و روی یک شی از کلاس فراخوانی می شوند.
در اینجا برخی از ویژگی های کلیدی روش های نمونه آورده شده است:
دسترسی به متغیرهای نمونه:
متدهای نمونه به متغیرهای نمونه (همچنین به عنوان فیلدها یا خواص) کلاس دسترسی دارند.
آنها می توانند وضعیت جسمی را که به آن تعلق دارند دستکاری کنند.
استفاده از this
کلمه کلیدی:
در داخل یک متد نمونه، کلمه کلیدی this
به نمونه فعلی کلاس اشاره دارد. اغلب برای تمایز بین متغیرهای نمونه و پارامترهایی با نام یکسان استفاده می شود.
زمینه غیر ایستا:
متدهای نمونه در زمینه یک شیء فراخوانی می شوند. آنها را نمی توان بدون ایجاد نمونه ای از کلاس فراخوانی کرد.
اعلامیه و فراخوان:
روش های نمونه بدون کلمه کلیدی static
اعلام می شوند.
آنها در نمونه ای از کلاس با استفاده از علامت نقطه ( .
) فراخوانی می شوند.
در اینجا یک مثال ساده در جاوا برای نشان دادن روش های نمونه آورده شده است:
مثال:
public class Dog { // Instance variables String name; int age; // Constructor to initialize the instance variables public Dog(String name, int age) { this.name = name; this.age = age; } // Instance method to bark public void bark() { System.out.println(name + " says Woof!"); } // Instance method to age the dog public void ageOneYear() { age++; System.out.println(name + " is now " + age + " years old."); } public static void main(String[] args) { // Creating instances of the Dog class Dog myDog = new Dog("Buddy", 3); Dog anotherDog = new Dog("Max", 2); // Calling instance methods on objects myDog.bark(); myDog.ageOneYear(); anotherDog.bark(); anotherDog.ageOneYear(); } }
در این مثال:
bark
و ageOneYear
متدهای نمونه کلاس Dog
هستند.
آنها در نمونه هایی از کلاس Dog
( myDog
و anotherDog
) فراخوانی می شوند.
این متدها می توانند به متغیرهای نمونه ( name
و age
) اشیاء مربوطه دسترسی پیدا کرده و آنها را دستکاری کنند.
متدهای نمونه قدرتمند هستند زیرا به شما این امکان را می دهند که رفتار مربوط به وضعیت یک شی را کپسوله کنید و راهی برای تعامل و تغییر آن حالت ارائه دهید.
روش های استاتیک:
یک متد استاتیک به جای یک نمونه از کلاس به کلاس تعلق دارد. این بدان معناست که شما می توانید یک متد استاتیک را بدون ایجاد یک نمونه (ابجکت) از کلاس فراخوانی کنید. با استفاده از کلمه کلیدی static
اعلام شده است.
روشهای استاتیک معمولاً برای توابع ابزاری استفاده میشوند که به وضعیت یک شی بستگی ندارند. به عنوان مثال، روش هایی برای محاسبات ریاضی، دستکاری رشته ها و غیره.
مثال:
public class MathOperations { // Static method public static int add(int a, int b) { return a + b; } // Static method public static int multiply(int a, int b) { return a * b; } }
روش های چکیده:
این متدها اعلام می شوند اما در یک کلاس پیاده سازی نمی شوند. آنها قرار است توسط زیر کلاسها نادیده گرفته شوند و طرحی برای عملکردهای خاص ارائه کنند که باید در هر زیر کلاس پیادهسازی شود.
روشهای انتزاعی زمانی مفید هستند که میخواهید یک الگو را در یک کلاس پایه یا رابط تعریف کنید و اجرای خاص را به زیر کلاسها واگذار کنید. روش های انتزاعی قراردادی را تعریف می کنند که زیر کلاس ها باید از آن پیروی کنند.
مثال:
public abstract class Shape { // Abstract method abstract double calculateArea(); }
انواع روش های دیگر: علاوه بر این، انواع کمتر رایجی مانند سازنده هایی وجود دارد که برای مقداردهی اولیه شی، روش های دسترسی (گیرنده ها) برای بازیابی داده های شی، و روش های جهش دهنده (تنظیم کننده ها) برای اصلاح داده های شی استفاده می شوند.
نتیجه
روش ها برای سازماندهی پروژه های جاوا، تشویق استفاده مجدد از کد و بهبود ساختار کلی کد ضروری هستند.
در این مقاله به تحلیل روشهای جاوا، از جمله نحو، انواع و روشهای توصیه شده میپردازیم.
کد نویسی مبارک!
ارسال نظر