کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آبجکت و کلاس در جاوا

 

 

جاوا یک زبان آبجکت محور می باشد. به عنوان یک زبان که دارای ویژگی آبجکت محوری می باشد، جاوا مفاهیم اصلی زیر را پشتیبانی می کند:

·         Polymorphism

·         Inheritance

·         Encapsulation

·         Abstraction

·         Classes

·         Objects

·         Instance

·         Method

·         Message Parsing

در این فصل مفاهیم آبجکت (Objects) و گروه (Classes) را مورد بررسی قرار می دهیم.

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

·         گروه: یک گروه می تواند به عنوان یک الگو یا بلوپرینت تعریف شود که رفتار و وضعیت هایی را توصیف می کند که آبجکت هم نوع آن پشتیبانی می کند.

آبجکت ها در جاوا:

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

اگا یک سگ را در نظر بگیریم ویژگی های آن نام، جنسیت، رنگ اوست و رفتار آن پارس کردن، تکان دادن دم ودویدن.

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

آبجکت های نرم افزار نیز دارای ویژگی و رفتار می باشند. ویژگی یک آبجکت نرم افزار در فیلدها ذخیره شده و رفتار آن از طریق متودها نشان داده می شود.

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

گروه ها در جاوا:

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

یک نمونه از یک گروه در زیر ارائه شده است:

public class Dog{

   String breed;

   int age;

   String color;

 

   void barking(){

   }

  

   void hungry(){

   }

  

   void sleeping(){

   }

}

یک گروه می تواند حاوی هرکدام از انواع متغیرهای زیر باشد:

·         متغیرهای داخلی (Local variables): متغیرهای تعریف شده در داخل متودها، سازنده ها و یا بلوک ها در واقع متغیرهای داخلی (local) نامیده می شوند. متغیر در داخل متغیر اعلام و آغاز خواهد شد و وقتی متود کامل می شود، متغیر از بین می رود.

·         متغیرهای نمونه (Instance variables): متغیرهای نمونه متغیرهایی هستند در داخل یک گروه، اما بیرون متودها. هنگامی که گروه بارگذاری می شود، این متغیرها نمونه گذاری می شوند. متغیرهای نمونه در داخل هر متود، سازنده و یا بلوکی از آن گروه خاص در دسترس می باشند.

·         متغیرهای گروه (Class variables): متغیرهای گروه متغیرهایی هستند که در داخل یک گروه و خارج متودها با کلمات کلیدی استاتیک اعلام می شوند.

یک گروه برای دسترسی به مقدار انواع مختلف متودها، دارای تعداد متودهای مختلفی است. در بالا مثال های barking(), hungry()  و  sleeping()  متود می باشند.

در زیر موضوعات مهمی ذکر می شوند که هنگامی که گروه های زبان جاوا را مورد بررسی قرار می دهیم، باید مورد بحث قرار بگیرند.

سازنده ها (Constructors):

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

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

مثالی از یک سازنده در زیر ارائه شده است:

public class Puppy{

   public Puppy(){

   }

 

   public Puppy(String name){

      // This constructor has one parameter, name.

   }

}

وقتی که شما قادر به ایجاد تنها یک نمونه از گروه باشید، جاوا Singleton Classes  را نیز پشتیبانی می کند.

ایجاد یک آبجکت:

همانطور که قبلا ذکر شد، یک گروه یک بلوپرینت برای آبجکت ها ارائه می دهد. بنابراین اساسا یک آبجکت از یک گروه نشات می گیرد. در جاوا لغت کلیدی جدید برای ایجاد آبجکت های جدید استفاده می شود.

در هنگام ایجاد یک آبجکت از یک گروه، سه مرحله وجود دارد:

·         اعلام (Declaration): اعلام یک متغیر با نام یک متغیر با نوع یک آبجکت.

·         نمونه سازی (Instantiation): لغت کلیدی new با یک فراخوانی به یک سازنده دنبال می شود. این فراخوانی آبجکت جدید را آغاز می کند.

مثالی از ایجاد یک آبجکت در زیر ارائه شده است:

public class Puppy{

 

   public Puppy(String name){

      // This constructor has one parameter, name.

      System.out.println("Passed Name is :" + name );

   }

   public static void main(String []args){

      // Following statement would create an object myPuppy

      Puppy myPuppy = new Puppy( "tommy" );

   }

}

اگر برنامه بالا را کامپایل کرده و اجرا کنیم، نتیجه ی زیر تولید خواهد شد:

Passed Name is :tommy

 

دسترسی به متغیرهای نمونه و متودها:

متغیرهای نمونه و متودها از طریق ایجاد آبجکت ها در دسترس می باشند. برای دسترسی به یک متغیر نمونه مسیر مناسب باید مانند زیر باشد:

/* First create an object */

ObjectReference = new Constructor();

/* Now call a variable as follows */

ObjectReference.variableName;

/* Now you can call a class method as follows */

ObjectReference.MethodName();

 

مثال:

این مثال چگونگی دسترسی به متغیرهای نمونه و متودهای یک گروه را نمایش می دهد.

public class Puppy{

  

   int puppyAge;

 

   public Puppy(String name){

      // This constructor has one parameter, name.

      System.out.println("Passed Name is :" + name );

   }

   public void setAge( int age ){

       puppyAge = age;

   }

 

   public int getAge( ){

       System.out.println("Puppy's age is :" + puppyAge );

       return puppyAge;

   }

   public static void main(String []args){

      /* Object creation */

      Puppy myPuppy = new Puppy( "tommy" );

 

      /* Call class method to set puppy's age */

      myPuppy.setAge( 2 );

 

     /* Call another class method to get puppy's age */

      myPuppy.getAge( );

 

      /* You can access instance variable as follows as well */

      System.out.println("Variable Value :" + myPuppy.puppyAge );

   }

}

اگر برنامه ی بالا را کامپایل کرده و اجرا کنیم، نتیجه ی زیر تولید خواهد شد:

Passed Name is :tommy

Puppy's age is :2

Variable Value :2

 

قوانین اعلام فایل منبع:

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

·         برای هر فایل منبع تنها یک گروه عمومی می تواند وجود داشته باشد.

·         یک فایل منبع می تواند چند گروه غیر عمومی داشته باشد.

·         نام یک گروه عمومی باید نام فایل منبع باشد، به علاوه که باید با .java  در انتهای آن ضمیمه شود. به عنوان مثال نام گروه  . public class Employee{}  می باشد، پس نام فایل منبع باید  Employee.java  باشد.

·         اگر گروه در داخل یک پوشه تعریف شده باشد، عبارت پوشه باید اولین عبارت در فایل منبع باشد.

·         اگر عبارات import موجود می باشند، باید بین عبارت package و اعلام گروه (class declaration) نوشته شوند. اگر هیچ عبارت مربوط به package وجود ندارد، عبارت import باید در اولین خط در فایل منبع نوشته شود.

·         عبارت های import و package برای همه ی گروه ها در فایل منبع وجود دارند. امکان ندارد که عبارت های import یا package متفاوت برای گروه های مختلف در فایل منبع ارائه داد.

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

علاوه بر انواع گروه های ذکر شده در بالا، جاوا دارای گروه های خاصی به نام گروه های داخلی (Inner classes) و گروه های بدون نام (Anonymous classes) می باشد.

پوشه ی جاوا (Java Package):

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

عبارات Import:

در جاوا اگر یک نام کاملا مناسب که حاوی پوشه و نام گروه می باشد، ارائه شود، سپس کامپایلر به راحتی می تواند source code و گروه ها را قرار دهد. عبارت import روشی برای ارائه ی یک موقعیت مناسب برای کامپایلر می باشد تا آن گروه خاص را پیدا کند.

به عنوان مثال، خط زیر از کامپایلر می خواهد تا همه ی گروه های موجود را در مسیر java_installation/java/io بارگذاری کند:

import java.io.*;

 

یک مورد ساده برای مطالعه:

برای مورد مطالع ی خود، دو گروه ایجاد خواهیم کرد که عبارتند از Employee  و EmployeeTest .

ابتدا notepad را باز کرده و کد زیر را به آن اضافه کنید. به یاد داشته باشید که این گروه Employee می باشد که یک گروه عمومی است. اکنون فایل منبع را با نام Employee.java  ذخیره کنید.

گروه Employee دارای چهار متغیر نمونه می باشد که عبارتند از نام، سال، تخصص و حقوق. گروه دارای یک سازنده ی تعریف شده می باشد که یک پارامتر می گیرد.

import java.io.*;

public class Employee{

   String name;

   int age;

   String designation;

   double salary;

           

   // This is the constructor of the class Employee

   public Employee(String name){

      this.name = name;

   }

   // Assign the age of the Employee  to the variable age.

   public void empAge(int empAge){

      age =  empAge;

   }

   /* Assign the designation to the variable designation.*/

   public void empDesignation(String empDesig){

      designation = empDesig;

   }

   /* Assign the salary to the variable       salary.*/

   public void empSalary(double empSalary){

      salary = empSalary;

   }

   /* Print the Employee details */

   public void printEmployee(){

      System.out.println("Name:"+ name );

      System.out.println("Age:" + age );

      System.out.println("Designation:" + designation );

      System.out.println("Salary:" + salary);

   }

}

همانطور که قبلا در این آموزش ذکر شد، پردازش از متود اصلی آغاز می شود. بنابراین برای ما که این گروه Employee را اجرا کنیم، باید یک متود اصلی وجود داشته باشد و آبجکت هایی نیز ایجاد شوند. ما یک گروه مجزا برای این عملکردها ایجاد خواهیم کرد.

همانطور که در گروه EmployeeTest  ارائه شده است، دو نمونه از گروه Employee   را ایجاد می کند و متودهایی برای هر آبجکت فرا می خواند تا به هر متغیر مقادیری را اختصاص دهد.

کد زیر را در فایل  EmployeeTest.java ذخیره کنید.

import java.io.*;

public class EmployeeTest{

 

   public static void main(String args[]){

      /* Create two objects using constructor */

      Employee empOne = new Employee("James Smith");

      Employee empTwo = new Employee("Mary Anne");

 

      // Invoking methods for each object created

      empOne.empAge(26);

      empOne.empDesignation("Senior Software Engineer");

      empOne.empSalary(1000);

      empOne.printEmployee();

 

      empTwo.empAge(21);

      empTwo.empDesignation("Software Engineer");

      empTwo.empSalary(500);

      empTwo.printEmployee();

   }

}

اکنون هر دو گروه را کامپایل کرده و EmployeeTest   را اجرا کنید تا نتایج زیر را مشاهده کنید.

C :> javac Employee.java

C :> vi EmployeeTest.java

C :> javac  EmployeeTest.java

C :> java EmployeeTest

Name:James Smith

Age:26

Designation:Senior Software Engineer

Salary:1000.0

Name:Mary Anne

Age:21

Designation:Software Engineer

Salary:500.0

در بخش های بعدی:

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

1394/07/27 9362 0
نظرات شما

نظرات خود را ثبت کنید...