چگونه از یک کلاس در جاوا نمونه ایجاد کنم

 

زمانی که شما کلاسی در جاوا تعریف می کنید، در واقع شی ایی را تعریف کرده اید. زبان های برنامه نویسی که از شی گرایی پشتیبانی می کنند تمام اشیای دنیای واقعی را به صورت کلاس مدل سازی می کنند. برای مثال یک برنامه مدیریت دانش آموز را در نظر بگیرید.

در این برنامه شما اطلاعات دانش آموز های کلاس خودتان را می خواهید ذخیره کنید. در واقع شما به عنوان برنامه نویس دانش آموز را یک شی از دنیای واقعی می بینید و برای پیاده سازی آن در نرم افزار، آن را به صورت یک کلاس طراحی خواهید کرد.

نحوه اعلان یک کلاس و اینکه یک کلاس می تواند چه متد ها و متغییر هایی را شامل باشد و نوع دستیابی آن را در قسمت قبل مرور کردیم.

حالا پس از آن که شما کلاسی برای دانش آموز طراحی کردید چگونه می توانید از آن در برنامه خود استفاده کنید؟

شما در آموزش های قبل آموختید که دو نوع متغییر در جاوا امکان پذیر است. نوع داده اولیه یا Primitive Data Type و متغییر های مرجع یا Reference variables.

یاد آوری : متغییر های نوع داده اولیه، متغییر هایی بودند که زبان برنامه نویسی آن را می شناسد. مانند int، double و... و متغییر های مرجع در واقع متغییر هایی بودند که از یک کلاس تعریف می شوند.

بنابراین به متغییر های نوع داده اولیه ، متغییر های نوع داده اولیه و به متغییر هایی که از یک کلاس تعریف می شوند، متغییر های مرجع گفته می شود.

برای استفاده از یک کلاس که آن را تعریف کرده ایم باید یک متغییر مرجع ایجاد کنیم.

اعلان کلاس در جاوا، اشیای واقعی را ایجاد نمی کند. همانطور که نقشه یک ساختمان، ساختمان واقعی را به وجود نمی آورد. کلاس توصیف انتزاعی از یک شی است. قدم بعدی برای مدل سازی اشیای دنیای واقعی، نمونه سازی یا instantiation از یک کلاس است تا شی ایی از آن کلاس به وجود آورد. نمونه سازی از یک کلاس را اعلان شی نیز می گویند.

در مثال ما که دانش آموز را به عنوان یک شی از دنیای واقعی به صورت کلاس ایجاد کردیم برای استفاده از آن باید نمونه سازی کنیم.

نمونه سازی از کلاس ها در جاوا چگونه است ؟

کلاسی با نام Student به صورت زیر تعریف کرده ایم

 

public class Student {
    
    private String name = "Student name";
    private int age = 24;
    private String field = "Information Technology";

    public String getName() {
        return name;
    }

    public String getField() {
        return field;
    }

    public int getAge() {
        return age;
    }

    public void setName(String n) {
        name = n;
    }

    public void setField(String f) {
        field = f;
    }

    public void setAge(int a) {
        age = a;
    }

}

 

کلاسی به نام Student ایجاد کردیم و سه متغییر نوع داده اولیه از نوع رشته و عدد صحیح با نوع دسترسی private تعریف کردیم. متغییر ها را مقدار دهی اولیه نیز کرده ایم.

متد های getter و setter برای متغییر ها تعریف کردیم.

درواقع متد های getter و setter در کلاس ها برای دستکاری متغییر های درون کلاسی و برگرداندن مقدار متغییر ها استفاده می شود. متد getter برای متغییر age را نگاه کنید. نام متد با get آغاز می شود و نام متغییر به آن وصل داده می شود و نام متد getAge خواهد شد. این متد مقدار متغییر age که در کلاس Student به صورت private تعریف شده است را بر میگرداند. این ویژگی به سایر کلاس ها این امکان را می دهد که در صورت نمونه سازی از کلاس Student بتواند از طریق متد getAge به مقدار متغییر age در کلاس Student دسترسی داشته باشند.

نکته : نام انتخابی برای متد های getter و  setter حتما نباید به این صورت باشد. شما می توانید نام های دلخواه برای متد ها انتخاب کنید. مثلا برای متد getter متغییر age به صورت زیر عمل کنید :

 

public int studentAge() {
    return age;
}

 

اما با نام گذاری متد به صورت getAge کد نویسی شما به صورت استاندارد خواهد بود و در زمان کد نویسی راحت تر خواهید فهمید که این متد برای چیست!

اما در رابطه با متد های setter نوع داده ایی که متد به عنوان پارامتر در ورودی می گیرد باید با نوع داده ایی که برای آن، متد setter می نویسیم یکسان باشد. برای متغییر age باید پارامتر ورودی به صورت int باشد که برای هر متد بسته به متغییرش نوع داده ایی مناسب را تعریف کرده ایم.

 

حالا به موضوع اصلی برمی گردیم. نحوه ایجاد نمونه یا آبجکت در جاوا به صورت زیر است

ابتدا کلاسی به نام دلخواهتان ایجاد کنید. ما کلاسی به نام MyProgram را در فایلی به نام MyProgram.java ایجاد می کنیم

 

public class MyProgram {
    
}

 

چون این کلاس باید کلاس اجرایی برنامه ما باشد. بنابراین متد main باید در آن پیاده سازی شود

 

public class MyProgram {
    
    public static void main(String[] args) {
        // create object from Student class here
    }

}

 

حالا با دستور زیر یک شی یا object از کلاس Student ایجاد خواهیم کرد

 

public class MyProgram {
    
    public static void main(String[] args) {
        Student obj;
    }

}

 

حالا متغییر مرجعی از کلاس Student با نام obj ایجاد کرده ایم. اما این متغییر به جایی اشاره نمی کند و حافظه ایی برای آن تخصیص داده نشده.

زمانی که شما متغییر صحیح با نام intVal تعریف می کنید به کامپایلر می گویید که حافظه ایی به آن تخصیص بدهد. در متغیر های مرجع شما برای تخصیص حافظه به متغییری که ایجاد کرده اید، باید از عملگر new استفاده کنید.

بنابر این توجه داشته باشید در تعریف متغییر های مرجع باید از عملگر new برای تخصیص حافظه استفاده کنید. در غیر اینصورت اگر صرفا متغییری از کلاس بدون تخصیص حافظه مورد استفاده قرار گیرد با خطا در زمان کامپایل مواجه می شود.

 

public class MyProgram {
    
    public static void main(String[] args) {
        Student obj;
        obj = new Student();
    }

}

 

حالا با استفاده از دستور new فضایی از حافظه را به شی obj اختصاص دادیم. در واقع این کار را کامپایلر انجام می دهد!

دقت کنید که در دستور new در کد بالا، ما نام کلاس Student + ()  را قرار دادیم. درواقع کلاس را با استفاده از کانستراکتور یا سازنده آن new کرده ایم. در بخش های آینده در رابطه با Constructor ها یا سازنده های کلاس در جاوا صحبت خواهیم کرد.

سوال: با استفاده از آبجکت obj که ایجاد کردم به کدام عناصر کلاس Student دسترسی دارم؟

شما فقط به متد های کلاس دسترسی دارید.

با استفاده از نام آبجکت + نقطه + نام متد یا متغییر مورد نظر می توانید فراخوانی مورد نظرتان را انجام دهید.

حالا بعد از نمونه سازی از کلاس می خواهیم متد getAge را به خروجی ببریم و مقدار آن را چاپ کنیم

 

public class MyProgram {
    
    public static void main(String[] args) {
        Student obj;
        obj = new Student();
        System.out.print("Student Age value From Student Class " + obj.getAge());
    }

}

 

متد getAge مقداری را return می کند. مطمئنا خروجی برنامه به صورت زیر است

 

Student Age value From Student Class 24

 

زیرا مقدار پیش فرض متغییر age در کلاس Student عدد 24 است.

حالا میخواهیم مقادیر پیش فرض متغییر های کلاس را تغییر دهیم و آن ها را به خروجی ببریم. با استفاده از متد های setter این کار را انجام می دهیم

 

public class MyProgram {
    
    public static void main(String[] args) {
        Student obj;
        obj = new Student();
        obj.setName("Reza");
        obj.setAge(25);
        obj.setField("Software");

        System.out.print("Student Name: " + obj.getName() + " , ");
        System.out.print("Age: " + obj.getAge() + " , ");
        System.out.print("Field: " + obj.getField());

    }

}

 

و خروجی زیر را خواهیم دید

 

Student Name: Reza , Age: 25 , Field: SW

 

برای کامپایل سورس کد ها به نکات زیر توجه کنید

به دلیل اینکه مباحث مربوط به پکیج بندی گفته نشده دو فایل Student.java و MyProgram.java باید در یک دایرکتوری قرار داشته باشند. به صورت زیر

 

../
* java |
       |-> MyProgram.java
       |-> Student.java

 

فایل های سورس کد جاوا در پوشه ایی یکسان به نام java قرار دارد. در غیر اینصورت در زمان کامپایل با خطا مواجه خواهید شد.

 

 

می توانید انتشار قسمت ها جدید آموزش برنامه نویسی و به روز رسانی های جدید سایت را از کانال تلگرام ما دنبال کنید  و یا از قسمت انتهایی سایت ، آدرس it3du را در سایر شبکه های اجتماعی پیدا کنید

 

منبع: it3du