آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

آموزش آبجکت و کلاس در Java

دوره های مرتبط با این مقاله

آموزش Java – آبجکت و کلاس در Java

در آموزش حاضر، درباره ی آبجکت و کلاس بحث خواهیم کرد. در تکنیک برنامه نویسی شی گرا، توسعه دهنده ی نرم افزار اپلیکیشن خود را به وسیله ی مجموعه ای از آبجکت ها و کلاس ها طراحی و پیاده سازی می کند.

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

تشریح مفهوم آبجکت در Java

آموزش Java

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

یک آبجکت می تواند سه ویژگی داشته باشد:

  • state (اطلاعات مربوط به وضعیت): منظور اطلاعات و داده های مربوطه وضعیت جاری آّبجکت می باشد.
  • behavior (رفتار و قابلیت): نشانگر قابلیت و کارهای مختلفی است که یک آبجکت می تواند انجام دهد همچون وایز/برداشت کردن پول و غیره ... .
  • identity (اسم یا شناسه): اسمی که به عنوان شناسه ی یکتا به آبجکت تخصیص می یابد. مقدار ID یا شناسه ی یکتا برای کاربر قابل مشاهده بوده و کارایی ندارد ولی در داخل JVM به واسطه ی آن هر آبجکت را به طور منحصر بفرد شناسایی می کند.

به عنوان مثال خودکار یک آبجکت است. این خودکار دارای اسمی به نام Reynolds بوده که شناسه ی منحصر بفرد/ID آن می باشد. رنگش سفید است که state و اطلاعات مربوط به وضع حال آن است. این آبجکت برای نوشتن بکار می رود، بنابراین behavior یا رفتار آن نوشتن است.

آبجکت یک نمونه است که از روی کلاس ساخته می شود. کلاس الگو یا نقشه ای است که آبجکت از روی آن ساخته می شود. با توجه به توضیحات ارائه شده، نتیجه می گیریم که آبجکت یک نمونه از کلاس می باشد.

شرح جزئی و ویژگی های آبجکت:

  1. آبجکت یک موجودیت واقعی است.
  2. آبجکت یک موجودیت در زمان اجرای برنامه است.
  3. آبجکت یک موجودیت است که دارای اطلاعات و قابلیت های خاصی می باشد.
  4. آبجکت یک نمونه از کلاس است.

تشریح مفهوم کلاس در Java

در شرح آن می توان گفت که کلاس یک گروه از آبجکت ها است که دارای ویژگی ها (property های) مشترک می باشند. کلاس یک الگو یا نقشه است که آبجکت ها از روی آن ساخته می شوند. همان طور که در بالا گفته شد، یک موجودیت منطقی یا انتزاعی است و نمی تواند فیزیکی/ملموس باشد.

کلاس در جاوا می تواند دربرگیرنده ی اعضای زیر باشد:

  • فیلدها (متغیرها یا property ها)
  • متدها یا توابع
  • توابع سازنده یا constructor
  • قطعه کد یا block
  • کلاس های درونی و تودرتو (nested class)
  • interface (الگوی پیاده سازی متدها)

دستور اعلان (تعریف) کلاس:

class {  
    field;  
    method;  
}  

متغیر متعلق به نمونه ی کلاس (Instance variable)

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

شرح مفهوم متد در جاوا

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

مزایای متد

  • قابلیت استفاده ی مجدد از کد یکسان در جاهای مختلف (Code Reusability)
  • بهینه سازی کد

کلیدواژه ی new در Java

کلیدواژه ی new برای تخصیص حافظه به آبجکت (جهت نگهداری اطلاعات آن) در زمان اجرای برنامه بکار می رود. لازم به ذکر است که برنامه در بخش heap به آبجکت ها فضای لازم از حافظه را اختصاص می دهد.

مثال کاربردی از آبجکت و کلاس: متد main داخل کلاس مورد نظر

در این مثال، یک کلاس به نام Student ایجاد می کنیم که دو عضو داده ای (متغیر) به نام های id و name دارد. سپس با استفاده از کلیدواژه ی new یک آبجکت از روی کلاس Student ایجاد نموده و مقادیر دو متغیر عضو را در خروجی چاپ می کنیم.

در زیر متد ()main که نقطه شروع اجرای برنامه می باشد را داخل کلاس ایجاد می کنیم.

فایل: Student.java

class Student{  
 int id;//field or data member or instance variable  
 String name;  
 public static void main(String args[]){  
  Student s1=new Student();//creating an object of Student  
  System.out.println(s1.id);//accessing member through reference variable  
  System.out.println(s1.name);  
 }  
}  

خروجی:

0 
null

مثال کاربردی از آبجکت و کلاس: متد main داخل کلاسی مجزا

به هنگام برنامه نویسی و توسعه ی یک پروژه ی واقعی، ما کلاس ها را ایجاد کرده سپس کلاس مورد نظر را داخل کلاس دیگری فراخوانی می کنیم. این تکنیک نسبت به روش قبلی کارایی بیشتری را ارائه می دهد. در مثال زیر می بینید که متد main() را داخل کلاس دیگری می کنیم.

می توان هر یک از کلاس ها را داخل فایل های مجزا ذخیره کرد یا تمامی کلاس ها را در یک فایل واحد نگهداری کرد. در صورت استفاده از روش دوم، توصیه می کنیم که اسم کلاس میزبان متد main() را داخل اسم فایل قید نمایید.

فایل: TestStudent1.java

class Student{  
 int id;  
 String name;  
}  
class TestStudent1{  
 public static void main(String args[]){  
  Student s1=new Student();  
  System.out.println(s1.id);  
  System.out.println(s1.name);  
 }  
}  

خروجی:

0 
null

3 روش مختلف مقداردهی اولیه ی آبجکت

سه روش برای مقداردهی اولیه (initialize) آبجکت وجود دارد که در زیر به آن ها اشاره می کنیم:

  1. از طریق متغیر
  2. از طریق متد
  3. از طریق متد سازنده یا Constructor

روش اول: مقداردهی اولیه و پر کردن آبجکت با داده از طریق متغیر و ارجاع

initialize یا مقداردهی اولیه ی آبجکت صرفا به این معنا است که آبجکت را با داده ها و اطلاعاتی پر کرده و متغیرهای آبجکت را مقداردهی کنید. در زیر آبجکت را از طریق متغیر با داده پرمی کنیم.

فایل TestStudent2.java:

class Student{  
 int id;  
 String name;  
}  
class TestStudent2{  
 public static void main(String args[]){  
  Student s1=new Student();  
  s1.id=101;  
  s1.name="Sonoo";  
  System.out.println(s1.id+" "+s1.name);//printing members with a white space  
 }  
}  

خروجی:

101 Sonoo

می توان چندین آبجکت از روی کلاس ساخته، سپس اطلاعات مورد نظر را از طریق متغیر در آبجکت مذکور ذخیره نمود.

فایل: TestStudent3.java

class Student{  
 int id;  
 String name;  
}  
class TestStudent3{  
 public static void main(String args[]){  
  //Creating objects  
  Student s1=new Student();  
  Student s2=new Student();  
  //Initializing objects  
  s1.id=101;  
  s1.name="Sonoo";  
  s2.id=102;  
  s2.name="Amit";  
  //Printing data  
  System.out.println(s1.id+" "+s1.name);  
  System.out.println(s2.id+" "+s2.name);  
 }  
}  

خروجی:

101 Sonoo
102 Amit

مثال کاربردی از کلاس و آبجکت: مقداردهی اولیه ی آبجکت از طریق متد

در این مثال، دو آبجکت از روی کلاس Student ساخته و با فراخوانی متد insertRecord() مقادیر مورد نظر را در آبجکت ذخیره می کنیم. سپس داده های مربوط به وضعیت (state) آبجکت های مورد نظر را با صدا زدن متد displayInformation() برای کاربر به نمایش می گذاریم.

فایل: TestStudent4.java

class Student{  
 int rollno;  
 String name;  
 void insertRecord(int r, String n){  
  rollno=r;  
  name=n;  
 }  
 void displayInformation(){System.out.println(rollno+" "+name);}  
}  
class TestStudent4{  
 public static void main(String args[]){  
  Student s1=new Student();  
  Student s2=new Student();  
  s1.insertRecord(111,"Karan");  
  s2.insertRecord(222,"Aryan");  
  s1.displayInformation();  
  s2.displayInformation();  
 }  
}  

خروجی:

111 Karan
222 Aryan
آموزش Java

همان طور که در تصویر بالا مشاهده می کنید، آبجکت فضای مورد نیاز جهت نگداری اطلاعات خود را در بخش heap از حافظه رایانه برمی گزیند. متغیر ارجاعی به آبجکتی اشاره می کند که مقدار حافظه ی لازم در بخش حافظه ی heap را اشغال می کند. در مثال حاضر، دو متغیر s1 و s2 متغیرهای ارجاعی (اسم هایی که به آبجکت های ساخته شده از روی کلاس تخصیص یافته) هستند که به آبجکت های ذخیره شده در بخش heap اشاره می کنند.

مثال کاربردی از کلاس و آبجکت: مقداردهی آبجکت از طریق متد سازنده (Constructor)

در مباحث آتی با مفهوم Constructor آشنا خواهید شد.

مثال کاربردی از ذخیره اطلاعات کارکنان

در زیر مثالی را مشاهده می کنید که اطلاعات کارکنان در قالب سطرهایی نگهداری می شوند.

فایل: TestEmployee.java

class Employee{  
    int id;  
    String name;  
    float salary;  
    void insert(int i, String n, float s) {  
        id=i;  
        name=n;  
        salary=s;  
    }  
    void display(){System.out.println(id+" "+name+" "+salary);}  
}  
public class TestEmployee {  
public static void main(String[] args) {  
    Employee e1=new Employee();  
    Employee e2=new Employee();  
    Employee e3=new Employee();  
    e1.insert(101,"ajeet",45000);  
    e2.insert(102,"irfan",25000);  
    e3.insert(103,"nakul",55000);  
    e1.display();  
    e2.display();  
    e3.display();  
}  
}  

خروجی:

101 ajeet 45000.0
102 irfan 25000.0
103 nakul 55000.0

روش های مختلف ساخت آبجکت در زبان Java

روش های مختلف ایجاد آبجکت در Java به شرح زیر می باشند:

  • توسط کلیدواژه ی new
  • توسط متد newInstance()
  • توسط متد clone()
  • توسط deserialization
  • توسط متد factory

در سری آموزشی جاری روش های مختلف ساخت آبجکت در Java را خواهید آموخت.

آبجکت فاقد نام (Anonymous object)

واژه ی Anonymous در برنامه نویسی صرفا به معنای فاقد اسم می باشد. یک آبجکت که هیچ اشاره گر و اسمی به عنوان متغیر به آن اختصاص نیافته در اصطلاح Anonymous نامیده می شود. این روش تنها در زمان ایجاد آبجکت قابل استفاده می باشد.

در شرایطی که احتیاج دارید از آبجکتی فقط یکبار استفاده کنید، anonymous object می تواند پاسخگوی نیاز شما باشد. مثال:

new Calculation();//anonymous object  

فراخوانی متد از طریق reference یا اسمی که به آبجکت ساخته شده از روی کلاس اشاره دارد:

Calculation c=new Calculation();  
c.fact(5);  

فراخوانی متد از طریق آبجکت فاقد نام (anonymous object):

new Calculation().fact(5);  

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

class Calculation{  
 void fact(int  n){  
  int fact=1;  
  for(int i=1;i<=n;i++){  
   fact=fact*i;  
  }  
 System.out.println("factorial is "+fact);  
}  
public static void main(String args[]){  
 new Calculation().fact(5);//calling method with anonymous object  
}  
}  

خروجی:

Factorial is 120

ایجاد چندین آبجکت از جنس یک کلاس

می توان از جنس یک کلاس چندین آبجکت پشت سرهم در یک خط ایجاد کرد، مانند زمانی که چند متغیر از یک نوع داده ای اولیه ایجاد می کنید.

مقداردهی اولیه چند متغیر از یک نوع داده ای واحد:

int a=10, b=20;  

مقداردهی اولیه ی دو آبجکت (دارای اسم که متغیر ارجاعی نیز نامیده می شود) از جنس یک کلاس واحد:

Rectangle r1=new Rectangle(), r2=new Rectangle();//creating two objects  

مثال:

class Rectangle{  
 int length;  
 int width;  
 void insert(int l,int w){  
  length=l;  
  width=w;  
 }  
 void calculateArea(){System.out.println(length*width);}  
}  
class TestRectangle2{  
 public static void main(String args[]){  
  Rectangle r1=new Rectangle(),r2=new Rectangle();//creating two objects  
  r1.insert(11,5);  
  r2.insert(3,15);  
  r1.calculateArea();  
  r2.calculateArea();  
}  
}  

خروجی:

55 
45     

یک مثال کاربردی کامل از تمامی مفاهیم آموخته: کلاس Account

فایل: TestAccount.java

class Account{  
int acc_no;  
String name;  
float amount;  
void insert(int a,String n,float amt){  
acc_no=a;  
name=n;  
amount=amt;  
}  
void deposit(float amt){  
amount=amount+amt;  
System.out.println(amt+" deposited");  
}  
void withdraw(float amt){  
if(amount< amt){ System.out.println("Insufficient Balance");
                }else{
                amount=amount-amt;
                System.out.println(amt+" withdrawn");
                }
                }
                void checkBalance(){System.out.println("Balance is "+amount);}
void display(){System.out.println(acc_no+" "+name+" "+amount);}
}
class TestAccount{
public static void main(String[] args){
Account a1=new Account();
a1.insert(832345," Ankit",1000);
                a1.display();
                a1.checkBalance();
                a1.deposit(40000);
                a1.checkBalance();
                a1.withdraw(15000);
                a1.checkBalance();
                }
                }

خروجی:

832345 Ankit 1000.0
Balance is: 1000.0
40000.0 deposited
Balance is: 41000.0
15000.0 withdrawn
Balance is: 26000.0
  • 10357
  •    1408
  • تاریخ ارسال :   1396/07/03

دانلود PDF دانشجویان گرامی اگر این مطلب برای شما مفید بود لطفا ما را در GooglePlus محبوب کنید
رمز عبور: tahlildadeh.com یا www.tahlildadeh.com
ارسال دیدگاه نظرات کاربران
شماره موبایل دیدگاه
عنوان پست الکترونیک

ارسال

آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

تمامی حقوق این سایت متعلق به آموزشگاه تحلیل داده می باشد .