در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

آموزش جاوا (Java) قسمت 37 : معرفی Abstract

با سلام به همه دوستان و همراهان Itpro. آیا تا به حال به فرایند ارسال یک ایمیل دقت کرده اید. شما یک ایمیل را تایپ می کنید و آدرس گیرنده و موضوع را داخل آن می نویسید. سپس بر روی دکمه send کلیک می کنید. حال چه می شود. پیام شما تبدیل به چه بسته داده هایی می شود؟ پیام شما از چه پورتی ارسال می شود؟ پیام شما به کجا ارسال می شود؟ پیام شما با چه پروتکلی ارسال می شود. چه اعمالی قبل از ارسال بر روی پیام شما صورت می گیرد؟ چه پردازش هایی در mail server بر روی پیام شما انجام می شود؟ پیام شما وقتی توسط گیرنده دریافت شد در کامپیوتر گیرنده چه پردازش هایی بر روی آن انجام خواهد شد؟

شاید شما به هیچ یک از این سوالات فکر نکرده باشید. شما فقط پیام خود را به آن صورتی که می خواهید تایپ می کنید و بر روی دکمه ارسال کلیک می کنید و با جزئیات ارسال مانند همانچه که گفته شد کاری ندارید. البته نیازی هم نیست که با آن کاری داشته باشید. شما فقط همین را بدانی که چگونه باید ایمیل را ارسال کنید کافی است. به این مفهوم انتزاع یا abstraction می گویند. Abstraction به این معنی است که شما با ایده ها کار کنید نه رخدادها. در برنامه نویسی شئ گرا ما بسیار از abstraction استفاده می کنیم. زیرا که باید در طراحی نرم افزار بسیاری از جزئیات نرم افزار را از دید کاربران مخفی نگه داشت و فقط کاربران باید با نحوه کارایی یک برنامه آشنا باشند. به عبارت دیگر کاربران باید اطلاعاتی در مورد این که هرشئ چه کاری انجام می دهد داشته باشند ولی نیازی نیست که بدانند هر شئ چگونه یک عمل را انجام می دهد. در زبان برنامه نویسی جاوا مفهوم abstraction را می توان با استفاده از کلاس های abstract و interface ها مورد استفاده قرار داد. در ادامه به بررسی این قسمت های جاوا خواهیم پرداخت.

کلاس های Abstract

کلاسی که با کلمه کلیدی abstract تعریف می شود کلاس abstract نامیده می شود. کلاس های abstract دارای خصوصیاتی هستند که این خصوصیات عبارتند از:

  • کلاس های abstract ممکن است که در درون خود متد abstract داشته باشند و یا نداشته باشند. متد abtract متدی است که فقط تعریف شده است و هیچ بدنه ای ندارد( در ادامه همین مطلب توضیح می دهیم)
  • اگر یک کلاس بخواهد متد abstract داشته باشد باید خود آن کلاس حتما abstract باشد.
  • از کلاسی که به شکل abstract تعریف شده باشد نمی توان هیچ شیئی ساخت.
  • برای این که از یک کلاس abstract استفاده کنیم شما باید از آن به یک کلاس دیگر ارث بری کنید و متدهای abstract آن را در درون کلاس فرزند پیاده سازی نمایید.
  • اگر از کلاس abstract ارث بری نماییم باید همه ی متدهای abstract آن را پیاده سازی نماییم.

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

/* File name : Employee.java */
public abstract class Employee
{
   private String name;
   private String address;
   private int number;
   public Employee(String name, String address, int number)
   {
      System.out.println("Constructing an Employee");
      this.name = name;
      this.address = address;
      this.number = number;
   }
   public double computePay()
   {
     System.out.println("Inside Employee computePay");
     return 0.0;
   }
   public void mailCheck()
   {
      System.out.println("Mailing a check to " + this.name
       + " " + this.address);
   }
   public String toString()
   {
      return name + " " + address + " " + number;
   }
   public String getName()
   {
      return name;
   }
   public String getAddress()
   {
      return address;
   }
   public void setAddress(String newAddress)
   {
      address = newAddress;
   }
   public int getNumber()
   {
     return number;
   }
}

در کد بالا مشاهده می کنید که به غیر از متدهای abstract کلاس Employee مانند بقیه کلاس ها در جاوا می باشد. این کلاس یک کلاس abstract است ولی همین کلاس 3 فیلد و 7 متد و یک constructor دارد. حال اگر از این کلاس بخواهید با کلمه کلیدی new یک شئ بسازید و به شکل زیر از آن استفاده کنید :

/* File name : AbstractDemo.java */
public class AbstractDemo
{
   public static void main(String [] args)
   {
      /* Following is not allowed and would raise error */
      Employee e = new Employee("George W.", "Houston, TX", 43);

      System.out.println("\n Call mailCheck using Employee reference--");
      e.mailCheck();
    }
}

اگر این کار را انجام دهید و برنامه را اجرا کنید برنامه خطای زیر را به شما خواهد داد:

Employee.java:46: Employee is abstract; cannot be instantiated
      Employee e = new Employee("George W.", "Houston, TX", 43);
                   ^
1 error

این بدین معنی است که از کلاسی که abstract است نمی توان هیچ شیئی ساخت. در ادامه نحوه استفاده از این کلاس ها را توضیح داده ایم.

وراثت از کلاس های Abstract

ما می توانیم خصوصیات کلاس Employee را مانند کلاس های دیگر به ارث ببریم. این کار را در کد زیر انجام داده ایم.

/* File name : Salary.java */
public class Salary extends Employee
{
   private double salary; //Annual salary
   public Salary(String name, String address, int number, double
      salary)
   {
       super(name, address, number);
       setSalary(salary);
   }
   public void mailCheck()
   {
       System.out.println("Within mailCheck of Salary class ");
       System.out.println("Mailing check to " + getName()
       + " with salary " + salary);
   }
   public double getSalary()
   {
       return salary;
   }
   public void setSalary(double newSalary)
   {
       if(newSalary >= 0.0)
       {
          salary = newSalary;
       }
   }
   public double computePay()
   {
      System.out.println("Computing salary pay for " + getName());
      return salary/52;
   }
}

در این برنامه شما نمی توانید از کلاس Employee شیئی بسازید اما می توانید از کلاس Salary شئ بسازید و از تمامی فیلد ها و متدهای کلاس Employee مانند کد زیر استفاده کنید.

/* File name : AbstractDemo.java */
public class AbstractDemo
{
   public static void main(String [] args)
   {
      Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00);
      Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00);

      System.out.println("Call mailCheck using Salary reference --");
      s.mailCheck();

      System.out.println("\n Call mailCheck using Employee reference--");
      e.mailCheck();
    }
}

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

Constructing an Employee
Constructing an Employee
Call mailCheck using  Salary reference --
Within mailCheck of Salary class
ailing check to Mohd Mohtashim with salary 3600.0

Call mailCheck using Employee reference--
Within mailCheck of Salary class
ailing check to John Adams with salary 2400.

متدهای Abstract

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

  • برای تعریف این متد ها از کلمه کلیدی abstract آورده می شود.
  • شما هنگام تعریف متد abstract باید کلمه کلیدی abstract را قبل از نام متد قرار دهید.
  • یک متد abstract فقط قسمت تعریف متد را دارد ولی این متد هیچ بدنه ای ندارد.
  • در یک متد abstract به جای علامت شروع و پایان یک بلوک و نوشتن بدنه برای متد از علامت سمی کولن یا ; استفاده می شود.

در کد زیر یک مثال از متد abstract آورده شده است.

public abstract class Employee
{
   private String name;
   private String address;
   private int number;
   
   public abstract double computePay();
   
   //Remainder of class definition
}

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

/* File name : Salary.java */
public class Salary extends Employee
{
   private double salary; // Annual salary
  
   public double computePay()
   {
      System.out.println("Computing salary pay for " + getName());
      return salary/52;
   }

   //Remainder of class definition
}

*Itpro باشید.

نویسنده: مهدی عادلی فر

منبع: جزیره برنامه نویسی و توسعه نرم افزار وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد.

#برنامه_نویسی_شی_گرا #برنامه_نویسی_جاوا #کلاس_abstract_در_جاوا #آموزش_برنامه_نویسی_جاوا #شی_گرایی #آموزش_جاوا #آموزش_گام_به_گام_جاوا #متد_abstract_در_جاوا #دوره_آموزشی_جاوا #abstract_در_جاوا
عنوان
1 آموزش جاوا (Java) قسمت 1 : معرفی ، خصوصیات و شروع به کار رایگان
2 آموزش جاوا (Java) قسمت 2 : شی گرایی قسمت یک رایگان
3 آموزش جاوا (Java) قسمت 3: شی گرایی قسمت دو رایگان
4 آموزش جاوا (Java) قسمت 4 : شی گرایی قسمت سه رایگان
5 آموزش جاوا (Java) قسمت 5 : انواع داده رایگان
6 آموزش جاوا (Java) قسمت 6 : انواع متغیر رایگان
7 آموزش جاوا (Java) قسمت 7 : Modifier ها رایگان
8 آموزش جاوا (Java) قسمت 8 : عملگرها قسمت یک رایگان
9 آموزش جاوا (Java) قسمت 9 : عملگرها قسمت دو رایگان
10 آموزش جاوا (Java) قسمت 10 : حلقه های تکرار رایگان
11 آموزش جاوا (Java) قسمت 11 : عبارات شرطی رایگان
12 آموزش جاوا (Java) قسمت 12 : کلاس Wrapper اعداد رایگان
13 آموزش جاوا (Java) قسمت 12 : کلاس Wrapper اعداد رایگان
14 آموزش جاوا (Java) قسمت 14: کلاس Wrapper کاراکترها رایگان
15 آموزش جاوا (Java) قسمت 15 : کلاس String و کار با رشته قسمت یک رایگان
16 آموزش جاوا (Java) قسمت 16 : کلاس String و کار با رشته قسمت دو رایگان
17 آموزش جاوا (Java) قسمت 17 : کلاس String و کار با رشته قسمت سه رایگان
18 آموزش جاوا (Java) قسمت 18 : کلاس String و کار با رشته قسمت چهار رایگان
19 آموزش جاوا (Java) قسمت 19 : StringBuilder و StringBuffer رایگان
20 آموزش جاوا (Java) قسمت 20 : استفاده از آرایه ها رایگان
21 آموزش جاوا (Java) قسمت 21 : آموزش کار با تاریخ رایگان
22 آموزش جاوا (Java) قسمت 22 : عبارات منظم (Regular Expression) رایگان
23 آموزش جاوا (Java) قسمت 23 : تعریف و استفاده از متدها قسمت یک رایگان
24 آموزش جاوا (Java) قسمت 24 : تعریف و استفاده از متدها قسمت دو رایگان
25 آموزش جاوا (Java) قسمت 25 : کار با استریم ها و فایل ها رایگان
26 آموزش جاوا (Java) قسمت 26 : کار با دایرکتوری ها رایگان
27 آموزش جاوا (Java) قسمت 27 : کلاس ByteArrayInputStream رایگان
28 آموزش جاوا (Java) قسمت 28 : معرفی کلاس File و متدها رایگان
29 آموزش جاوا (Java) قسمت 29 : معرفی و شرح Exception ها قسمت 1 رایگان
30 آموزش جاوا (Java) قسمت 30 : معرفی و شرح Exception ها قسمت 2 رایگان
31 آموزش جاوا (Java) قسمت 31 : معرفی و شرح Exception ها قسمت 3 رایگان
32 آموزش جاوا (Java) قسمت 32 : استفاده از انوع کلاس های داخلی رایگان
33 آموزش جاوا (Java) قسمت 33 : وراثت کلاس ها و انواع آن رایگان
34 آموزش جاوا (Java) قسمت 34 : Override کردن متد ها رایگان
35 آموزش جاوا (Java) قسمت 35 : چند ریختی (Polymorphism) رایگان
36 آموزش جاوا (Java) قسمت 36 : Enum و ویژگی های آن رایگان
37 آموزش جاوا (Java) قسمت 37 : معرفی Abstract رایگان
38 آموزش جاوا (Java) قسمت 38 : استفاده از کپسول بندی (Encapsulation) رایگان
39 آموزش جاوا (Java) قسمت 39 : استفاده از اینترفیس ها رایگان
40 آموزش جاوا (Java) قسمت 40 : پکیج(Package) و نحوه استفاده رایگان
41 آموزش جاوا (Java) قسمت 41 : معرفی داده ساختارها Enumeration رایگان
42 آموزش جاوا (Java) قسمت 42 : داده ساختار BitSet رایگان
43 آموزش جاوا (Java) قسمت 43 : داده ساختار Vector رایگان
44 آموزش جاوا (Java) قسمت 44 : داده ساختار Stack (پشته) رایگان
45 آموزش جاوا (Java) قسمت 45 : داده ساختار Dictionary رایگان
46 آموزش جاوا (Java) قسمت 46 : داده ساختار Hashtable رایگان
47 آموزش جاوا (Java) قسمت 47 : داده ساختار Properites رایگان
48 آموزش جاوا (Java) قسمت 48 : معرفی و آموزش جنریک (Generic) رایگان
49 آموزش جاوا (Java) قسمت 49 : برنامه نویسی سوکت و شبکه قسمت 1 رایگان
50 آموزش جاوا (Java) قسمت 50 : برنامه نویسی سوکت و شبکه قسمت 2 رایگان
51 آموزش جاوا (Java) قسمت 51 : استفاده از Lambda Expression رایگان
52 آموزش جاوا (Java) قسمت 52 : Thread و Multi-Threading رایگان
53 آموزش جاوا (Java) قسمت 53 : Runnable در Thread و Multi-Threading رایگان
54 آموزش جاوا (Java) قسمت 54 : کلاس Thread و متدها رایگان
زمان و قیمت کل 0″ 0
1 نظر
soheil One

عالی. چقدر ساده و شیرین تعریف کردید.تشکر

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

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