سازنده (constructor) چیست ؟
به عنوان یک اصطلاح برنامه نویسی شی گرا مبتنی بر کلاس، یک سازنده متدی منحصر به فرد است که برای مقداردهی اولیه یک شی (class) که جدید ایجاد می شود، استفاده می شود.
قبل از اینکه ادامه دهیم، بیایید ببینیم یک کلاس در جاوا چگونه است:
public class Student { String firstName; String lastName; int age; }
کد بالا کلاسی به نام Student را با سه ویژگی lastName ،firstName و age نشان می دهد. فرض می کنیم کلاس قرار است مدلی برای ثبت نام دانش آموزان باشد. به یاد داشته باشید که این سه ویژگی هیچ مقداری ندارند بنابراین هیچ یک از اطلاعات هاردکد (hard code) نشده اند.
اکنون از سازنده ها برای ایجاد یک نمونه جدید از شی Student خود استفاده می کنیم. به این صورت :
public class Student { String firstName; String lastName; int age; //Student constructor public Student(){ firstName = "َAshkan" lastName = "Khaleghi" age = 40; } public static void main(String args[]) { Student myStudent = new Student(); System.out.println(myStudent.age); // 40 } }
ما یک سازنده ایجاد کردیم که از آن برای مقداردهی اولیه ویژگی های تعریف شده در شی Student استفاده می کنیم. کد بالا نمونه ای از سازنده بدون آرگومان (no-argument) است. اکنون بیایید مثال متفاوتی ببینیم :
public class Student { String firstName; String lastName; int age; //constructor public Student(String firstName, String lastName, int age){ this.firstName = firstName; this.lastName = lastName; this.age = age; } public static void main(String args[]) { Student myStudent = new Student("Ashkan", "Khaleghi", 40); System.out.println(myStudent.age); } }
اکنون یک سازنده پارامتری (parameterized constructor) ایجاد کرده ایم. سازنده پارامتری، سازنده ای است که با آرگومان ها/پارامترها ایجاد می شود.بیایید آن را تجزیه کنیم.
public Student(String firstName, String lastName, int age){ }
ما یک سازنده جدید ایجاد کردیم که سه آرگومان - دو رشته و یک عدد صحیح را می گیرد.
this.firstName = firstName; this.lastName = lastName; this.age = age;
سپس این آرگومان ها را به ویژگی هایی که در زمان ایجاد کلاس خود تعریف کرده بودیم پیوند دادیم. اکنون شی Student را با استفاده از سازنده مقداردهی اولیه کرده ایم.
public static void main(String args[]) { Student myStudent = new Student("Ashkan", "Khaleghi", 40); System.out.println(myStudent.age); }
در نهایت، ما یک نمونه جدید از شی Student ایجاد کردیم و به آن آرگومان های خود را پاس دادیم. ما توانستیم این آرگومان ها را پاس کنیم بخاطر اینکه قبلاً آنها را در سازنده تعریف کرده بودیم.
من یک سازنده با سه آرگومان ایجاد کردم، اما شما می توانید سازنده های جداگانه برای مقداردهی اولیه هر ویژگی ایجاد کنید.
اکنون که می دانید سازنده در جاوا چیست و چگونه از آن استفاده کنید، بیایید اکنون سازنده های پیش فرض (default constructor) را بررسی کنیم.
سازنده پیشفرض سازندهای است که توسط کامپایلر ایجاد میشود، اگر هیچ سازنده(هایی) برای یک کلاس تعریف نکنیم.
public class Student { String firstName; String lastName; int age; public static void main(String args[]) { Student myStudent = new Student(); myStudent.firstName = "Ashkan" myStudent.lastName = "Khaleghi" myStudent.age = 40; System.out.println(myStudent.age);//40 System.out.println(myStudent.firstName);//Ashkan } }
آیا می توانید تفاوت بین این و دو مثال قبلی را تشخیص دهید؟
توجه داشته باشید که قبل از ایجاد myStudent هیچ سازنده ای برای مقداردهی اولیه ویژگی های ایجاد شده در کلاس تعریف نکردیم.
این خطایی را برای ما ایجاد نمی کند. در عوض، کامپایلر یک سازنده خالی ایجاد می کند، اما شما این سازنده را در هیچ کجای کد نمی بینید.
زمانی که کامپایلر کار خود را شروع می کند، کد بالا به این صورت خواهد بود:
public class Student { String firstName; String lastName; int age; /* empty constructor created by compiler. This constructor will not be seen in your code */ Student() { } public static void main(String args[]) { Student myStudent = new Student(); myStudent.firstName = "Ashkan" myStudent.lastName = "Khaleghi" myStudent.age = 40; System.out.println(myStudent.age); //100 System.out.println(myStudent.firstName); //Ihechikara } }
بسیاری از افراد سازنده پیش فرض را با سازنده بدون آرگومان اشتباه می گیرند، اما در جاوا یکسان نیستند. هر سازنده ای که توسط برنامه نویس ایجاد شود به عنوان سازنده پیش فرض در جاوا در نظر گرفته نمی شود.
در این مقاله، ما یاد گرفتیم که سازنده چیست و چگونه می توانیم آنها را برای مقداردهی اولیه اشیاء خود ایجاد و استفاده کنیم.
همچنین در مورد سازنده های پیش فرض و تفاوت آنها با سازنده های بدون آرگومان صحبت کردیم.
کدنویسی مبارک !