جاوا

جلسه ۳۹: کلاس ها و متدهای انتزاعی در جاوا

abstract class ClassName {
  
  // Implementation here
  
}

پیاده سازی

انتزاع در جلسه قبل بحث شد. کلاسهای انتزاعی برای دستیابی به انتزاع در جاوا استفاده می شوند. یک سلسله مراتب از حیوانات را با استفاده از جاوا می توان به صورت زیر ایجاد کنید:
  • یک کلاس انتزاعی پایه به نام Animal (حیوان)
  • کلاس مشتق شده ای به نام Dog
  • کلاس مشتق شده ای به نام Cat
  • کلاس مشتق شده ای به نام Sheep

همه این حیوانات صداهای مختلفی ایجاد می کنند:

در مثال بالا ، می توان مشاهده کرد که در کلاس Animal ، تمام صفات مشترک حیوانات باید پیاده سازی شود. سایر صفات اختصاصی مربوط به یک حیوان خاص باید در کلاس مشتق شده مربوطه پیاده سازی شود. کلاسهای انتزاعی عملکرد دقیقاً مشابهی را در اختیار برنامه نویس قرار می دهند. این مثال را در زیر پیاده سازی می کنیم:
abstract class Animal {

  public abstract void makeSound();

  public void move() {
    System.out.println(getClass().getSimpleName()+" is moving");
    //getClass().getSimpleName() is an inbuilt functionality of Java
    //to get the class name from which the method is being called
  }
  
}

class Dog extends Animal {

    @Override
    public void makeSound() {
    System.out.println("Woof Woof...");
  }
  
}

class Cat extends Animal {

    @Override
    public void makeSound() {
    System.out.println("Meow Meow...");
  }
  
}

class Sheep extends Animal {

    @Override
    public void makeSound() {
    System.out.println("Baa Baa..");
  }
  
}

class Main {
  
  public static void main(String args[]) {
    // Creating the objects
    Animal dog = new Dog();  
    Animal cat = new Cat();
    Animal sheep = new Sheep();

    dog.makeSound();    // Calling methods from Dog
    dog.move();

    cat.makeSound();    // Calling methods from Cat
    cat.move();

    sheep.makeSound();  // Calling methods from Sheep
    sheep.move();
  }
  
}
از مثال بالا می توان فهمید که یک کلاس انتزاعی چقدر می تواند مفید باشد:
  • همه حیوانات می توانند حرکت کنند و این یک ویژگی مشترک است بنابراین متد ()move در کلاس Animal پیاده سازی می شود و همه کلاس های مشتق شده می توانند بدون هیچ گونه پیاده سازی در درون خود از این متد استفاده کنند.
  • حیوانات صداهای مختلفی تولید می کنند و به همین دلیل یک متد انتزاعی در کلاس Animal اعلام می شود ، بنابراین همه کلاس های مشتق شده باید این متد را به روش های خاص خود Override@ کنند.
این مقدار توضیحات برای کلاسهای انتزاعی و متدهای انتزاعی تقریباً کافی است در جلسه بعدی ، با اینترفیس ها آشنا خواهید شد.
public abstract void methodName(parameter(s));
اعلامیه متد انتزاعی دارای موارد زیر است:
  1. سطح دسترسی
  2. کلمه کلیدی abstract
  3. نوع برگشتی
  4. نام متد
  5. پارامتر (ها) که باید به متد ارسال شوند
  6. یک نقطه ویرگول (;) برای پایان دادن به اعلامیه متد
در این مرحله ، ممکن است سوالی در مورد پیاده سازی یا بدنه یک متد انتزاعی مطرح شود یعنی “بدنه یک متد انتزاعی را کجا پیاده سازی کنیم؟” در ادامه سوال فوق را پاسخ خواهیم داد.

کلاس انتزاعی

کلاس انتزاعی ، کلاسی است که با استفاده از کلمه کلیدی abstract اعلام می شود.

قوانینی که باید رعایت شود

  • یک کلاس انتزاعی قابل نمونه سازی نیست یعنی نمی توان یک شی از کلاس انتزاعی ایجاد کرد.
  • یک کلاس انتزاعی می تواند دارای اعلامیه متد (های) انتزاعی باشد اما داشتن آن هیچ اجباری نیست.
  • متدهای غیر انتزاعی یا عادی را می توان در یک کلاس انتزاعی پیاده سازی کرد.
  • برای استفاده از یک کلاس انتزاعی باید کلاس غیر انتزاعی مشتق شده ای از آن داشته باشیم.
  • کلاسی (غیر انتزاعی) که از کلاس انتزاعی مشتق شده است باید تمام متدهای انتزاعی اعلام شده در کلاس انتزاعی والد را پیاده سازی کند.
  • یک کلاس انتزاعی می تواند هر چیزی را همانند یک کلاس معمولی جاوا داشته باشد ، مثلاً سازنده ، متغیرهای استاتیک و متدها و… علاوه بر آنها می تواند متدهای انتزاعی نیز داشته باشد.

نحوه اعلام

از لحاظ نحوی (syntax) ، اعلام کلاس انتزاعی در جاوا به شرح زیر است:
abstract class ClassName {
  
  // Implementation here
  
}

پیاده سازی

انتزاع در جلسه قبل بحث شد. کلاسهای انتزاعی برای دستیابی به انتزاع در جاوا استفاده می شوند. یک سلسله مراتب از حیوانات را با استفاده از جاوا می توان به صورت زیر ایجاد کنید:
  • یک کلاس انتزاعی پایه به نام Animal (حیوان)
  • کلاس مشتق شده ای به نام Dog
  • کلاس مشتق شده ای به نام Cat
  • کلاس مشتق شده ای به نام Sheep

همه این حیوانات صداهای مختلفی ایجاد می کنند:

در مثال بالا ، می توان مشاهده کرد که در کلاس Animal ، تمام صفات مشترک حیوانات باید پیاده سازی شود. سایر صفات اختصاصی مربوط به یک حیوان خاص باید در کلاس مشتق شده مربوطه پیاده سازی شود. کلاسهای انتزاعی عملکرد دقیقاً مشابهی را در اختیار برنامه نویس قرار می دهند. این مثال را در زیر پیاده سازی می کنیم:
abstract class Animal {

  public abstract void makeSound();

  public void move() {
    System.out.println(getClass().getSimpleName()+" is moving");
    //getClass().getSimpleName() is an inbuilt functionality of Java
    //to get the class name from which the method is being called
  }
  
}

class Dog extends Animal {

    @Override
    public void makeSound() {
    System.out.println("Woof Woof...");
  }
  
}

class Cat extends Animal {

    @Override
    public void makeSound() {
    System.out.println("Meow Meow...");
  }
  
}

class Sheep extends Animal {

    @Override
    public void makeSound() {
    System.out.println("Baa Baa..");
  }
  
}

class Main {
  
  public static void main(String args[]) {
    // Creating the objects
    Animal dog = new Dog();  
    Animal cat = new Cat();
    Animal sheep = new Sheep();

    dog.makeSound();    // Calling methods from Dog
    dog.move();

    cat.makeSound();    // Calling methods from Cat
    cat.move();

    sheep.makeSound();  // Calling methods from Sheep
    sheep.move();
  }
  
}
از مثال بالا می توان فهمید که یک کلاس انتزاعی چقدر می تواند مفید باشد:
  • همه حیوانات می توانند حرکت کنند و این یک ویژگی مشترک است بنابراین متد ()move در کلاس Animal پیاده سازی می شود و همه کلاس های مشتق شده می توانند بدون هیچ گونه پیاده سازی در درون خود از این متد استفاده کنند.
  • حیوانات صداهای مختلفی تولید می کنند و به همین دلیل یک متد انتزاعی در کلاس Animal اعلام می شود ، بنابراین همه کلاس های مشتق شده باید این متد را به روش های خاص خود Override@ کنند.
این مقدار توضیحات برای کلاسهای انتزاعی و متدهای انتزاعی تقریباً کافی است در جلسه بعدی ، با اینترفیس ها آشنا خواهید شد.در این جلسه، با کلاسها و متدهای انتزاعی آشنا خواهید شد. موارد زیر را بیان خواهیم کرد:
    • متدهای انتزاعی
      • قوانینی که باید رعایت شوند
      • نحوه اعلام
    • کلاس انتزاعی
      • قوانینی که باید رعایت شوند
      • نحوه اعلام
      • پیاده سازی

متدهای انتزاعی

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

قوانینی که باید رعایت شود

  • بر خلاف متدهای معمولی در جاوا ، یک متد انتزاعی دارای بدنه نیست ، یعنی فقط دارای یک تعریف یا امضای متد در داخل یک کلاس انتزاعی یا یک اینترفیس است (در این موارد بعداً بیشتر توضیح می دهیم).
  • یک متد انتزاعی فقط می تواند در داخل یک کلاس انتزاعی یا یک اینترفیس اعلام شود.
  • به عبارت دیگر ، هر کلاسی که متد انتزاعی دارد باید به صورت کلاس انتزاعی تعریف شود چون کلاس های غیر انتزاعی نمی توانند متد انتزاعی داشته باشند.
  • یک متد انتزاعی را نمی توان با دسترسی خصوصی (private) اعلام کرد زیرا باید در کلاس دیگری پیاده سازی شود.

نحوه اعلام

حال به بخش نحو (syntax) می رویم ، از لحاظ نحوی شکل کلی اعلامیه یک متد انتزاعی به شرح زیر است:
public abstract void methodName(parameter(s));
اعلامیه متد انتزاعی دارای موارد زیر است:
  1. سطح دسترسی
  2. کلمه کلیدی abstract
  3. نوع برگشتی
  4. نام متد
  5. پارامتر (ها) که باید به متد ارسال شوند
  6. یک نقطه ویرگول (;) برای پایان دادن به اعلامیه متد
در این مرحله ، ممکن است سوالی در مورد پیاده سازی یا بدنه یک متد انتزاعی مطرح شود یعنی “بدنه یک متد انتزاعی را کجا پیاده سازی کنیم؟” در ادامه سوال فوق را پاسخ خواهیم داد.

کلاس انتزاعی

کلاس انتزاعی ، کلاسی است که با استفاده از کلمه کلیدی abstract اعلام می شود.

قوانینی که باید رعایت شود

  • یک کلاس انتزاعی قابل نمونه سازی نیست یعنی نمی توان یک شی از کلاس انتزاعی ایجاد کرد.
  • یک کلاس انتزاعی می تواند دارای اعلامیه متد (های) انتزاعی باشد اما داشتن آن هیچ اجباری نیست.
  • متدهای غیر انتزاعی یا عادی را می توان در یک کلاس انتزاعی پیاده سازی کرد.
  • برای استفاده از یک کلاس انتزاعی باید کلاس غیر انتزاعی مشتق شده ای از آن داشته باشیم.
  • کلاسی (غیر انتزاعی) که از کلاس انتزاعی مشتق شده است باید تمام متدهای انتزاعی اعلام شده در کلاس انتزاعی والد را پیاده سازی کند.
  • یک کلاس انتزاعی می تواند هر چیزی را همانند یک کلاس معمولی جاوا داشته باشد ، مثلاً سازنده ، متغیرهای استاتیک و متدها و… علاوه بر آنها می تواند متدهای انتزاعی نیز داشته باشد.

نحوه اعلام

از لحاظ نحوی (syntax) ، اعلام کلاس انتزاعی در جاوا به شرح زیر است:
abstract class ClassName {
  
  // Implementation here
  
}

پیاده سازی

انتزاع در جلسه قبل بحث شد. کلاسهای انتزاعی برای دستیابی به انتزاع در جاوا استفاده می شوند. یک سلسله مراتب از حیوانات را با استفاده از جاوا می توان به صورت زیر ایجاد کنید:
  • یک کلاس انتزاعی پایه به نام Animal (حیوان)
  • کلاس مشتق شده ای به نام Dog
  • کلاس مشتق شده ای به نام Cat
  • کلاس مشتق شده ای به نام Sheep

همه این حیوانات صداهای مختلفی ایجاد می کنند:

در مثال بالا ، می توان مشاهده کرد که در کلاس Animal ، تمام صفات مشترک حیوانات باید پیاده سازی شود. سایر صفات اختصاصی مربوط به یک حیوان خاص باید در کلاس مشتق شده مربوطه پیاده سازی شود. کلاسهای انتزاعی عملکرد دقیقاً مشابهی را در اختیار برنامه نویس قرار می دهند. این مثال را در زیر پیاده سازی می کنیم:
abstract class Animal {

  public abstract void makeSound();

  public void move() {
    System.out.println(getClass().getSimpleName()+" is moving");
    //getClass().getSimpleName() is an inbuilt functionality of Java
    //to get the class name from which the method is being called
  }
  
}

class Dog extends Animal {

    @Override
    public void makeSound() {
    System.out.println("Woof Woof...");
  }
  
}

class Cat extends Animal {

    @Override
    public void makeSound() {
    System.out.println("Meow Meow...");
  }
  
}

class Sheep extends Animal {

    @Override
    public void makeSound() {
    System.out.println("Baa Baa..");
  }
  
}

class Main {
  
  public static void main(String args[]) {
    // Creating the objects
    Animal dog = new Dog();  
    Animal cat = new Cat();
    Animal sheep = new Sheep();

    dog.makeSound();    // Calling methods from Dog
    dog.move();

    cat.makeSound();    // Calling methods from Cat
    cat.move();

    sheep.makeSound();  // Calling methods from Sheep
    sheep.move();
  }
  
}
از مثال بالا می توان فهمید که یک کلاس انتزاعی چقدر می تواند مفید باشد:
  • همه حیوانات می توانند حرکت کنند و این یک ویژگی مشترک است بنابراین متد ()move در کلاس Animal پیاده سازی می شود و همه کلاس های مشتق شده می توانند بدون هیچ گونه پیاده سازی در درون خود از این متد استفاده کنند.
  • حیوانات صداهای مختلفی تولید می کنند و به همین دلیل یک متد انتزاعی در کلاس Animal اعلام می شود ، بنابراین همه کلاس های مشتق شده باید این متد را به روش های خاص خود Override@ کنند.
این مقدار توضیحات برای کلاسهای انتزاعی و متدهای انتزاعی تقریباً کافی است در جلسه بعدی ، با اینترفیس ها آشنا خواهید شد.

نوشته های مشابه

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا