CodeGym /وبلاگ جاوا /Random-FA /روش و کلاس های چکیده جاوا
John Squirrels
مرحله
San Francisco

روش و کلاس های چکیده جاوا

در گروه منتشر شد
متدهای انتزاعی ابزار قدرتمند جاوا هستند و به این زبان شی گرا قابلیت های بیشتری در مورد چندشکلی می دهند. یک روش انتزاعی جاوا می تواند برای ایجاد یک چارچوب اساسی برای کل برنامه استفاده شود و شما را قادر می سازد تا در صورت نیاز تنظیم کنید.روش چکیده جاوا و شما - 1

روش انتزاعی چیست؟

روش انتزاعی روشی است که اجرا ندارد. یعنی فقط یک اعلان دارد، بنابراین شما نام، نوع بازگشت و متغیرهایی را که می‌پذیرد می‌دانید. در اینجا مثالی از یک روش انتزاعی اساسی آورده شده است:
public abstract int example(int a1, int a2);
وقتی به این متد نگاه می کنید، می توانید بگویید که یک عدد صحیح برمی گرداند و دو عدد صحیح را به عنوان آرگومان خود می پذیرد. چیزی که نمی توانید بگویید این است که چگونه این روش پیاده سازی می شود. دلیلش این است که برای اجرای آن، باید آن را نادیده بگیرید. هنگام ایجاد یک متد انتزاعی در جاوا، باید چند دستورالعمل را رعایت کنید وگرنه برنامه شما به درستی کامپایل نمی شود. یاد آوردن:
  • متدهای انتزاعی جاوا پیاده سازی ندارند. یعنی هرگز نباید بریس های فرفری و بدنه ای که نحوه استفاده از روش را بیان می کند دنبال شوند. فقط با نقطه ویرگول به پایان می رسد.

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

  • وقتی یک کلاس انضمامی یک کلاس انتزاعی را گسترش می‌دهد، باید تمام متدهای انتزاعی کلاس والد را نیز پیاده‌سازی کند وگرنه نمی‌تواند ملموس باشد و باید انتزاعی اعلام شود.

این دو مورد آخر ممکن است کمی گیج کننده باشند، بنابراین بیایید فوراً آن را روشن کنیم.

گسترش کلاس های انتزاعی جاوا

فرض کنید می خواهیم برنامه ای در مورد اشکال پایه بنویسیم که محیط و مساحت را برمی گرداند. بنابراین یک کلاس انتزاعی والد ایجاد می کنیم. اما از آنجایی که هر شکلی قوانین خاص خود را دارد، هر کدام باید متفاوت محاسبه شوند، بنابراین کلاس Shape انتزاعی را به این صورت می نویسیم :
abstract class Shape {
  		String shapeName = " ";
  		Shape(String name) {
    			this.shapeName = name;
  		}

abstract double area();
  		abstract double perimeter();
}
حال اگر بخواهیم واقعاً از این متدهای انتزاعی استفاده کنیم، باید کلاس والد انتزاعی Shape را گسترش دهیم و سپس متدها را نمونه سازی کنیم. بنابراین هر کلاس بتنی باید روش های انتزاعی مساحت و محیط را پیاده سازی کند.
class Quadrilateral extends Shape
{
    double length, width;

    Quadrilateral(double l, double w, String name)
    {
        super(name);
        this.length = l;
        this.width = w;
    }

    @Override
    public double perimeter()
    {
        return ((2*length)+(2*width));
    }

    @Override
    public double area()
    {
        return (length*width);
    }
}

Implementing the Quadrilateral class would then look like this
class Main
{
    public static void main (String[] args)
    {

        // creating a Quadrilateral object using Shape as reference
        Shape rectangle = new Quadrilateral(3,4, "Rectangle");
        System.out.println("Area of rectangle is " + rectangle.area());
        System.out.println("Perimeter of rectangle is " + rectangle.perimeter());

    }
}
خروجی کنسول به شکل زیر است:

Area of rectangle is 12.0
Perimeter of rectangle is 14.0
توجه داشته باشید که کلاس Quadrilateral نباید سازنده Shape (String name) را از کلاس والد Shape نمونه سازی کند . دلیلش این است که روشی انتزاعی نیست. با این حال، اگر فقط یک ناحیه یا محیط را در یک کلاس پیاده‌سازی کنید، کلاس جدید باید انتزاعی باشد زیرا هر دو را شامل نمی‌شود. همچنین می توانید از متدهای انتزاعی در Interfaces استفاده کنید.

روش های انتزاعی جاوا با رابط ها

بیایید به سرعت مرور کنیم که یک رابط چیست و چه تفاوتی با یک کلاس انتزاعی دارد. در یک رابط، هر متغیری که در یک رابط اعلام شده است عمومی، ایستا و نهایی است. از طرف دیگر کلاس های انتزاعی فقط دارای متغیرهای غیر نهایی هستند. همه چیز در یک رابط به طور پیش فرض عمومی است. یک کلاس انتزاعی می تواند خصوصی، محافظت شده، عمومی و غیره داشته باشد. در نهایت، یک کلاس یک رابط را گسترش نمی دهد، بلکه آن را پیاده سازی می کند. قبل از JDK 8، یک رابط نمی توانست چیزی جز روش های انتزاعی داشته باشد. حال، یک رابط می تواند متدهای پیش فرض و استاتیک داشته باشد. به همین دلیل، بهترین شیوه ها از استفاده از روش های انتزاعی به عنوان قالب های قابل توسعه دور شده و بر روی رابط ها و پیاده سازی آنها تمرکز کرده اند. بنابراین اگر بخواهید Shape را به عنوان یک رابط ایجاد کنید و سپس آن را به صورت Quadrilateral پیاده سازی کنید ، چه شکلی خواهد بود؟ ابتدا باید سازنده Shape (نام رشته) را حذف کنید . فقط با دو روش انتزاعی به این شکل خواهد بود:
interface Shape {

  abstract double area();
  abstract double perimeter();
}


So the Quadrilateral class would then look like this:
class Quadrilateral implements Shape {

  double length, width;

    	  Quadrilateral(double l, double w) {

    	    this.length = l;
    	    this.width = w;
    	  }

    	  @Override
    	  public double perimeter() {

    	    return ((2*length)+(2*width));
    	  }

    	  @Override
    	  public double area() {

   	    return (length*width);
    	  }
}
در نهایت، استفاده از Quadrilateral جدید برای پیاده سازی رابط Shape تقریباً یکسان خواهد بود:
class Main
{
    public static void main (String[] args)
    {

        // creating a Quadrilateral object using Shape as reference
        Shape rectangle = new Quadrilateral(3,4);
        System.out.println("Area of rectangle is " + rectangle.area());
        System.out.println("Perimeter of rectangle is " + rectangle.perimeter());

    }
}
و نسخه چاپی کنسول به این صورت خواهد بود:

Area of rectangle is 12.0
Perimeter of rectangle is 14.0
اگر می‌خواهید درباره تفاوت‌های بین رابط‌ها و کلاس‌های انتزاعی بیشتر کاوش کنید، می‌توانید اطلاعات بیشتری را در اینجا بیابید.

اما چرا از روش های انتزاعی جاوا استفاده کنیم؟

دلایل زیادی وجود دارد که چرا از روش های انتزاعی در جاوا استفاده می شود و چرا باید با استفاده از آنها راحت باشید. در اینجا سه ​​دلیل سریع وجود دارد که چرا باید در زمان مناسب از آنها استفاده کنید.
  1. از تکرار تلاش‌ها اجتناب کنید - به کدنویسی مثال ما نگاه کنید. تصور کنید که شما و تیمتان نیاز به ایجاد کلاس هایی برای اشکالی غیر از مستطیل دارید. چند راه مختلف برای طراحی آن کلاس وجود دارد؟ ده؟ پانزده؟ و این یک مشکل ساده است. چیزی بسیار پیچیده تر را تصور کنید. شما و تیمتان می‌توانید صد راه پیدا کنید. سپس با کار دلهره آور ترکیب کردن آنها در یک برنامه منسجم روبرو خواهید شد. این ما را به نکته بعدی می رساند: تعریف پیاده سازی.

  2. روش‌های انتزاعی در جاوا امکان تعریف استفاده و پیاده‌سازی را فراهم می‌کنند – وقتی از یک کلاس یا رابط انتزاعی استفاده می‌کنید و با طراحی، متدهای انتزاعی، نحوه تعامل افراد دیگر با رابط شما را تعریف می‌کنید. این به آنها اجازه می دهد تا بدانند از چه متغیرهایی باید استفاده کنند و چه نوع بازدهی را می توانند انتظار داشته باشند.
    در حالی که آنها می توانند آنها را نادیده بگیرند و کلاس های مشخصی ایجاد کنند که رابط شما را به روش های منحصر به فرد پیاده سازی می کند، شما هنوز هم استفاده اصلی را برای کد خود تعیین می کنید. اگر کسی بخواهد Shape را پیاده سازی کند، باید هم محیط و هم مساحت را نادیده بگیرد یا پیاده کند.

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

نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION