آموزش برنامه نویسی جاوا |‌ اشیا در جاوا بخش چهارم

جاوا یک زبان شی گرا میباشد که بعنوان یک زبان شی گرا مفاهیم بنیادی زیر را پشتیبانی میکند :

  • چند ریختی
  • وراثت
  • پنهان سازی یا کپسوله کردن
  • ابستره
  • کلاسها
  • اشیا
  • نمونه ها
  • متد
  • انتقال پیغام و تفسیر آن

 

شی‌ء‌ها در جاوا:

اکنون نگاه عمیق‌تری به آنچه شی‌ءها هستند می‌اندازیم. اگر ما دنیای واقعی را در نظر بگیریم می‌توانیم شی‌ءهای بسیاری را در اطراف‌مان بیابیم، خودروها، سگ‌ها، انسان‌ها و غیره. تمامی این شی‌ءها دارای وضعیت و رفتار هستند.

اگر ما سگی را در نظر بگیریم دارای وضعیت نام، گونه، رنگ و رفتار پارس کردن، دم تکان دادن و دویدن است.

اگر ما شی‌ء نرم‌افزاری را با یک شی‌ء دنیای واقعی مقایسه کنیم در خصوصیات بسیار به هم شبیه اند.

شی‌ءهای نرم‌افزاری نیز دارای وضعیت و رفتار هستند. یک وضعیت شی‌ء نرم‌افزاری در فیلدها ذخیره شده و رفتار از طریق روش‌ها نشان داده می‌شود.

پس در توسعه نرم‌افزاری، روش‌ها بر وضعیت داخلی یک شی‌ء عمل کرده و ارتباط شی‌ء به شی‌ء از طریق روش‌ها صورت می‌گیرد.

 

کلاس‌ها در جاوا:

یک کلاس یک نقشه ساخت است که از آن شی‌ءهای منفرد ایجاد می‌شوند.

نمونه‌ای از یک کلاس در زیر داده شده است:

public class Dog{
   String breed;
   int age;
   String color;

   void barking(){
   }
   
   void hungry(){
   }
   
   void sleeping(){
   }
}

 

یک کلاس می‌تواند شامل هر کدام از انواع متغیر زیر باشد.

  • متغیرهای محلی: متغیرهای تعریف شده در درون متدها، سازنده‌ها یا بلوک‌ها، متغیرهای محلی نامیده می‌شوند. متغیر در درون متد قابل اظهار و مقداردهی است و متغیر هنگامی که متد کامل شود از بین خواهد رفت.
  • متغیرهای سطح کلاس: متغیرهای کلاس، متغیرهای اظهار شده در یک کلاس، بیرون هر متد، با کلیدواژه ثابت هستند.

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

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

سازنده‌ها:

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

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

مثال یک سازنده در پایین آورده شده است:

 public class Puppy{
   public Puppy(){
   }

   public Puppy(String name){
      // This constructor has one parameter, name.
   }
}

جاوا همچنین از کلاس‌های سینگلتون پشتیبانی می‌کند، جایی که شما قادر خواهید بود فقط یک نمونه از یک کلاس را ایجاد کنید.

ایجاد یک شی‌ء:

همانگونه که پیشتر اشاره شد، یک کلاس نقشه ساختی را برای شی‌ءها فراهم می‌کند. پس بطور اساسی یک شی‌ء از یک کلاس ایجاد می‌شود. در جاوا از کلمه کلیدی جدید برای ایجاد شی‌ءهای جدید استفاده می‌شود.

هنگام ایجاد کردن یک شیء از یک کلاس سه مرحله وجود دارد:

  • اظهار: اظهار یک متغیر با یک نام متغیر با یک نوع شی‌ء.
  • معرفی: کلمه کلیدی «new» برای ایجاد یک شی‌ء مورد استفاده قرار می‌گیرد.
  • مقداردهی: کلیدواژه «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

قواعد اظهار فایل منبع(سورس):

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

  • فقط تنها یک کلاس عمومی به ازای فایل منبع می‌تواند وجود داشته باشد.
  • یک فایل منبع می‌تواند دارای چندین کلاس غیر عمومی باشد.
  • نام کلاس عمومی باید نام فایل منبع نیز باشد که باید در انتهای آن .java قرار بگیرد. برای مثال: نام کلاس . public class Employee{} است پس فایل منبع باید Employee.java. باشد.
  • اگر کلاس درون یک بسته تعریف شود، عبارت بسته باید اولین عبارت در فایل منبع باشد.
  • اگر عبارات ورود حاضر باشند باید میان عبارت بسته و کلاس اظهار نوشته شوند. اگر هیچ عبارات بسته‌ای وجود نداشته باشد عبارت ورود باید اولین خط در فایل منبع باشد.
  • عبارات ورود و بسته به تمامی کلاس‌های موجود در فایل منبع اعمال می‌شوند. اظهار عبارات ورود و / یا بسته به کلاس‌های متفاوت در فایل منبع ممکن نیست.

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

جدای از انواع کلاس ذکر شده در بالا، جاوا همچنین دارای کلاس‌های خاص چندی به نام کلاس‌های داخلی و کلاس‌های بی‌نام هستند.

پکیج ها در جاوا:

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

استفاده از دیگر کلاسها:

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

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

import java.io.*;

یک بررسی موردی ساده:

برای بررسی موردی ما دو کلاس را ایجاد خواهیم کرد. این کلاس‌ها Employee و EmployeeTest هستند.

نخست نوت‌پد را باز کرده و کد زیر را اضافه کنید. به خاطر داشته باشید که این کلاس 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

پاسخ دهید