جاوا

جلسه ۳۳: چندریختی در برنامه نویسی شی گرا در جاوا

// A Circle is a Shape with a specific radius
class Circle extends Shape {
  
  // Private data member
  private double radius;

  // Constructor
  public Circle(double radius) {
    this.radius = radius; 
  }
  
  // Public method to calculate Area
  public double getArea() {
    return 3.14 * radius * radius; 
  }
  
}

برنامه کامل

اکنون ، با ادغام تمام کلاس ها و فراخوانی متد ()getArea ، ببینید چه اتفاقی می افتد:
// A sample class Shape which provides a method to get the Shape's area

class Shape {

  public double getArea() {
    return 0;
  }
  
}

// A Rectangle is a Shape with a specific width and height
class Rectangle extends Shape {   // extended form the Shape class

  private double width;
  private double height;

  public Rectangle(double width, double heigh) {
    this.width = width;
    this.height = heigh;
  }

  public double getArea() {
    return width * height; 
  }
  
}

// A Circle is a Shape with a specific radius
class Circle extends Shape {
  private double radius;

  public Circle(double radius) {
    this.radius = radius; 
  }
  public double getArea() {
    return 3.14 * radius * radius; 
  }
  
}


class driver {

  public static void main(String args[]) {
    Shape[] shape = new Shape[2]; // Creating shape array of size 2

    shape[0] = new Circle(2); // creating circle object at index 0
    shape[1] = new Rectangle(2, 2); // creating rectangle object at index 1

    System.out.println("Area of the Circle: " + shape[0].getArea());
    System.out.println("Area of the Rectangle: " + shape[1].getArea());
  }

}

اجرای برنامه

در تابع main ، ما یک آرایه از کلاس Shape با اندازه ۲ اعلام کرده ایم و اشیای کلاس Rectangle و Circle را به ترتیب در مکان های ۰ و ۱ قرار داده ایم. حال متد ()getArea مساحت شکل مربوطه را برمی گرداند. این چندریختی است. در درس بعدی ، ما در مورد فرآیند جایگزینی یا بازنویسی متد (override) یاد خواهیم گرفت.
// A Rectangle is a Shape with a specific width and height
class Rectangle extends Shape {   // derived form Shape class
  
  // Private data members
  private double width;
  private double height;

  // Constructor
  public Rectangle(double width, double height) {
    this.width = width;
    this.height = height;
  }
  
  // Public method to calculate Area
  public double getArea() {
    return width * height; 
  }
  
}

کلاس دایره – Circle

اکنون کلاس Circle را که از کلاس Shape مشتق شده است در نظر بگیرید. این کلاس فقط یک عضو داده دارد ، یعنی radius (شعاع) و با استفاده از متد ()getArea مساحت دایره را برمی گرداند. در زیر پیاده سازی کلاس Circle را می بینید:
// A Circle is a Shape with a specific radius
class Circle extends Shape {
  
  // Private data member
  private double radius;

  // Constructor
  public Circle(double radius) {
    this.radius = radius; 
  }
  
  // Public method to calculate Area
  public double getArea() {
    return 3.14 * radius * radius; 
  }
  
}

برنامه کامل

اکنون ، با ادغام تمام کلاس ها و فراخوانی متد ()getArea ، ببینید چه اتفاقی می افتد:
// A sample class Shape which provides a method to get the Shape's area

class Shape {

  public double getArea() {
    return 0;
  }
  
}

// A Rectangle is a Shape with a specific width and height
class Rectangle extends Shape {   // extended form the Shape class

  private double width;
  private double height;

  public Rectangle(double width, double heigh) {
    this.width = width;
    this.height = heigh;
  }

  public double getArea() {
    return width * height; 
  }
  
}

// A Circle is a Shape with a specific radius
class Circle extends Shape {
  private double radius;

  public Circle(double radius) {
    this.radius = radius; 
  }
  public double getArea() {
    return 3.14 * radius * radius; 
  }
  
}


class driver {

  public static void main(String args[]) {
    Shape[] shape = new Shape[2]; // Creating shape array of size 2

    shape[0] = new Circle(2); // creating circle object at index 0
    shape[1] = new Rectangle(2, 2); // creating rectangle object at index 1

    System.out.println("Area of the Circle: " + shape[0].getArea());
    System.out.println("Area of the Rectangle: " + shape[1].getArea());
  }

}

اجرای برنامه

در تابع main ، ما یک آرایه از کلاس Shape با اندازه ۲ اعلام کرده ایم و اشیای کلاس Rectangle و Circle را به ترتیب در مکان های ۰ و ۱ قرار داده ایم. حال متد ()getArea مساحت شکل مربوطه را برمی گرداند. این چندریختی است. در درس بعدی ، ما در مورد فرآیند جایگزینی یا بازنویسی متد (override) یاد خواهیم گرفت.
// A simple Shape which provides a method to get the Shape's area
class Shape {
  
  public double getArea(){}
  
}

مستطیل کلاس – Rectangle

اکنون کلاس Rectangle را در نظر بگیرید که از کلاس Shape مشتق شده است. این کلاس دو عضو داده ای دارد ، width (عرض) و height (ارتفاع) و با استفاده از متد ()getArea مساحت مستطیل را برمی گرداند. در زیر پیاده سازی کلاس Rectangle را می بینید:
// A Rectangle is a Shape with a specific width and height
class Rectangle extends Shape {   // derived form Shape class
  
  // Private data members
  private double width;
  private double height;

  // Constructor
  public Rectangle(double width, double height) {
    this.width = width;
    this.height = height;
  }
  
  // Public method to calculate Area
  public double getArea() {
    return width * height; 
  }
  
}

کلاس دایره – Circle

اکنون کلاس Circle را که از کلاس Shape مشتق شده است در نظر بگیرید. این کلاس فقط یک عضو داده دارد ، یعنی radius (شعاع) و با استفاده از متد ()getArea مساحت دایره را برمی گرداند. در زیر پیاده سازی کلاس Circle را می بینید:
// A Circle is a Shape with a specific radius
class Circle extends Shape {
  
  // Private data member
  private double radius;

  // Constructor
  public Circle(double radius) {
    this.radius = radius; 
  }
  
  // Public method to calculate Area
  public double getArea() {
    return 3.14 * radius * radius; 
  }
  
}

برنامه کامل

اکنون ، با ادغام تمام کلاس ها و فراخوانی متد ()getArea ، ببینید چه اتفاقی می افتد:
// A sample class Shape which provides a method to get the Shape's area

class Shape {

  public double getArea() {
    return 0;
  }
  
}

// A Rectangle is a Shape with a specific width and height
class Rectangle extends Shape {   // extended form the Shape class

  private double width;
  private double height;

  public Rectangle(double width, double heigh) {
    this.width = width;
    this.height = heigh;
  }

  public double getArea() {
    return width * height; 
  }
  
}

// A Circle is a Shape with a specific radius
class Circle extends Shape {
  private double radius;

  public Circle(double radius) {
    this.radius = radius; 
  }
  public double getArea() {
    return 3.14 * radius * radius; 
  }
  
}


class driver {

  public static void main(String args[]) {
    Shape[] shape = new Shape[2]; // Creating shape array of size 2

    shape[0] = new Circle(2); // creating circle object at index 0
    shape[1] = new Rectangle(2, 2); // creating rectangle object at index 1

    System.out.println("Area of the Circle: " + shape[0].getArea());
    System.out.println("Area of the Rectangle: " + shape[1].getArea());
  }

}

اجرای برنامه

در تابع main ، ما یک آرایه از کلاس Shape با اندازه ۲ اعلام کرده ایم و اشیای کلاس Rectangle و Circle را به ترتیب در مکان های ۰ و ۱ قرار داده ایم. حال متد ()getArea مساحت شکل مربوطه را برمی گرداند. این چندریختی است. در درس بعدی ، ما در مورد فرآیند جایگزینی یا بازنویسی متد (override) یاد خواهیم گرفت.در این جلسه، چند ریختی را با استفاده از مفاهیم برنامه نویسی شی گرا (OOP) پیاده سازی خواهیم کرد. موارد زیر را بیان خواهیم کرد:
  • مثال
  • پیاده سازی
    • کلاس شکل – Shape
    • کلاس مستطیل – Rectangle
    • کلاس دایره – Circle
    • برنامه کامل
  • اجرای برنامه
تا کنون ، یاد گرفتیم که می توانیم داده ها و متدهای جدید را از طریق وراثت به یک کلاس اضافه کنیم. اما اگر بخواهیم کلاس مشتق شده ما متدی را از کلاس پایه به ارث ببرد ولی پیاده سازی متفاوتی برای آن داشته باشد ، چه می کنیم؟ این زمانی است که چندریختی ، یک مفهوم پایه ای در الگوی OOP ، وارد عمل می شود.

مثال

در اینجا ما نمونه ای از کلاس Shape را در نظر می گیریم ، که کلاس پایه است در حالی که بسیاری از اشکال مانند مستطیل (Rectangle) و دایره (Circle) که کلاس پایه را گسترش می دهند ، کلاس های مشتق شده هستند. این کلاسها شامل متد ()getArea هستند که مساحت شکل مربوطه را محاسبه می کند.

پیاده سازی

ما به ترتیب کلاس های پایه و مشتق شده را پیاده سازی خواهیم کرد.

کلاس شکل – Shape

کلاس Shape فقط یک متد عمومی به نام ()getArea دارد. پیاده سازی کلاس Shape را در زیر می بینید:
// A simple Shape which provides a method to get the Shape's area
class Shape {
  
  public double getArea(){}
  
}

مستطیل کلاس – Rectangle

اکنون کلاس Rectangle را در نظر بگیرید که از کلاس Shape مشتق شده است. این کلاس دو عضو داده ای دارد ، width (عرض) و height (ارتفاع) و با استفاده از متد ()getArea مساحت مستطیل را برمی گرداند. در زیر پیاده سازی کلاس Rectangle را می بینید:
// A Rectangle is a Shape with a specific width and height
class Rectangle extends Shape {   // derived form Shape class
  
  // Private data members
  private double width;
  private double height;

  // Constructor
  public Rectangle(double width, double height) {
    this.width = width;
    this.height = height;
  }
  
  // Public method to calculate Area
  public double getArea() {
    return width * height; 
  }
  
}

کلاس دایره – Circle

اکنون کلاس Circle را که از کلاس Shape مشتق شده است در نظر بگیرید. این کلاس فقط یک عضو داده دارد ، یعنی radius (شعاع) و با استفاده از متد ()getArea مساحت دایره را برمی گرداند. در زیر پیاده سازی کلاس Circle را می بینید:
// A Circle is a Shape with a specific radius
class Circle extends Shape {
  
  // Private data member
  private double radius;

  // Constructor
  public Circle(double radius) {
    this.radius = radius; 
  }
  
  // Public method to calculate Area
  public double getArea() {
    return 3.14 * radius * radius; 
  }
  
}

برنامه کامل

اکنون ، با ادغام تمام کلاس ها و فراخوانی متد ()getArea ، ببینید چه اتفاقی می افتد:
// A sample class Shape which provides a method to get the Shape's area

class Shape {

  public double getArea() {
    return 0;
  }
  
}

// A Rectangle is a Shape with a specific width and height
class Rectangle extends Shape {   // extended form the Shape class

  private double width;
  private double height;

  public Rectangle(double width, double heigh) {
    this.width = width;
    this.height = heigh;
  }

  public double getArea() {
    return width * height; 
  }
  
}

// A Circle is a Shape with a specific radius
class Circle extends Shape {
  private double radius;

  public Circle(double radius) {
    this.radius = radius; 
  }
  public double getArea() {
    return 3.14 * radius * radius; 
  }
  
}


class driver {

  public static void main(String args[]) {
    Shape[] shape = new Shape[2]; // Creating shape array of size 2

    shape[0] = new Circle(2); // creating circle object at index 0
    shape[1] = new Rectangle(2, 2); // creating rectangle object at index 1

    System.out.println("Area of the Circle: " + shape[0].getArea());
    System.out.println("Area of the Rectangle: " + shape[1].getArea());
  }

}

اجرای برنامه

در تابع main ، ما یک آرایه از کلاس Shape با اندازه ۲ اعلام کرده ایم و اشیای کلاس Rectangle و Circle را به ترتیب در مکان های ۰ و ۱ قرار داده ایم. حال متد ()getArea مساحت شکل مربوطه را برمی گرداند. این چندریختی است. در درس بعدی ، ما در مورد فرآیند جایگزینی یا بازنویسی متد (override) یاد خواهیم گرفت.

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

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

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

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