خانه اندروید

800 ساعت آموزش اختصاصی

بیش از 30 هزار دانشجو

آموزش های پروژه محور

مطالب پیشنهادی حتما مشاهده کنید :

انتزاعی مخفی کردن نحوه پیاده سازی (Abstraction) در جاوا

انتزاعی مخفی کردن نحوه پیاده سازی (Abstraction) در جاوا

انتزاعی مخفی کردن نحوه پیاده سازی (Abstraction) در جاوا

نحوه پیاده سازی (Abstraction)

Abstraction ، سلام کاربران محترم سایت خانه اندروید در خدمت شما هستیم با مفهومی با نام Abstract ، همانطور که در دیکشنری آمده است، Abstraction تعریفی است، که به جای رویداد ها و رخداد ها با ایده ها سر و کار دارد. به عنوان مثال در مورد ایمیل، پروتکلی که سرور ایمیل شما استفاده میکند از کاربر پنهان است، از این رو برای ارسال یک ایمیل کاربر تنها نیاز به تایپ content، address و کلیک برو روی ارسال (send) خواهد داشت. بدین معنی که کاربر ایمیل خود را ارسال می کند اما از نحوه پیاده سازی و نحوه ارسال کردن ایمیل چیزی نمی داند.

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

اما بریم سراغ نحوه پیاده سازی کلاس Abstract :

در اندروید استودیو هر کلاس دارای کلمه کلیدی Abstract  باشد را به عنوان کلاس Abstract تشخیص داده می شود.

نحوه پیاده سازی (Abstraction)

خصوصیات کلاس Abstract

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

public abstract class Email {
   private String name;
   private String address;
   private int number;
   public Email (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;
   }
}

توضیحات کلاس بالا :

instantiate به معنی نمونه .

نکته : کلاس  که abstract باشد نمی توانید از آن نمونه بسازید.

مثالی از نمونه سازی از یک کلاس غیر abstract  ، فقط برای اینکه متوجه شوین نمونه چیست !

Email em=new Email();

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

ارث بری کردن از کلاس Abstract
همانطور که در کد زیر مشاهده می کنید، می توان خصوصیات کلاس childsend را درست مانند یک کلاس معمولی ارث بری کرد:

public class childsend extends Email{
   private double salary;
   public childsend (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 getchildsend () {
       return salary;
   }
   public void setchildsend (double newSalary) {
       if(newSalary >= 0.0) {
          salary = newSalary;
       }
   }
   public double computePay() {
      System.out.println("Computing salary pay for "   getName());
      return salary/52;
   }
}

در اینجا، شما نمی توانید کلاس Email را instantiate کنید، ولی می توانید کلاس childsend  را instantiate کنید، و با استفاده از این instance، همانطور که در کد زیر مشاهده میکنید، می توانید به تمامی سه فیلد و هفت تابع کلاس Email دسترسی پیدا کنید.

مثال زیر را ببنید :

public class Abstractdemo{
   public static void main(String [] args) {
      childsend ch = new childsend ("javad", "mohammadi", 3, 3600.00);
      Email e = new childsend ("javad", "mohammadi, MA", 2, 2400.00);

      System.out.println("Call mailCheck using childsend reference --");
      ch.mailCheck();

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

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

کلمه کلیدی abstract برای تعریف تابع به صورت abstract استفاده میشود.
کلمه کلیدی abstract در تعریف تابع باید قبل از نام آن استفاده شود.
یک تابع abstract تنها حاوی تعریف تابع است، و هیچ بدنه ای ندارد، بدین معنی که تابع abstract در زمان تعریف پیاده سازی نمی شود.
تابع abstract به جای آکولاد یک سمی کالن (;) در انتهای تعریف خود دارد.
در زیر یک مثال از تابع abstract آورده شده است.

public abstract class Email {
   private String name;
   private String address;
   private int number;
   
   public abstract double computePay();
   
  دستورات
}

تعریف یک تابع به صورت abstract نتایج زیر را باعث میشود:

کلاسی که دارای این تابع است باید به صورت abstract تعریف شود.
هر کلاسی که از این کلاس ارث بری کند، یا باید تابع abstract را override کند، یا خودش به صورت abstract تعریف شود.
نکته: نتیجه آنکه، کلاس مشتق شده از کلاس abstract باید تابع abstract را پیاده سازی کند؛ مگر آنکه بخواهید سلسله مراتبی از کلاس های abstract داشته باشید که نمی توانند instantiate شوند.

فرض کنید کلاس childsend از کلاس Email ارث بری کرده است، در این صورت کلاس Salary باید تابع ()computePay را همانند زیر پیاده سازی کند:

public class cheildsend extends Email{
   private double salary;
  
   public double computePay() {
      System.out.println("Computing salary pay for "   getName());
      return salary/52;
   }

}

موفق باشین.

درباره نویسنده

جواد محمدی هستم بنیان‌گذار سایت خانه اندروید در خدمتون هستیم با آموزش و مفاهیم برنامه نویسی اندروید-نزدیک به 10 سال هست در حوزه برنامه نویسی فعالیت می کنم. مسلط به kotlin,java,flutter,php هستم . در خانه اندروید دانستی های خودم را در اختیار تمامی علاقمندان به برنامه نویسی قرار میدم.تشکر از اینکه خانه اندرورید رو دنبال می کنید.

قبل از ارسال دیدگاه

  • قبل از ارسال دیدگاه: لطفا دیدگاه خودتون رو فقط در مورد این مطلب بنویسید.سپاسگزارم.

    دیدگاه های طولانی نادیده گرفته می شوند لذا دیدگاه خودتان را در دو خط خلاصه کنید.

    دیدگاه های که شامل توهین یا متن توهین آمیز اصلا تایید نمی شود.

    به دیدگاه های بی نام و نشان که ایمیل فیک و نام فیک وارد می کنند پاسخ داده نمی شود

بدون دیدگاه