www.doronamir.com

 

 

 

מה זה פולימורפיזם ?  -  Polymorphism

 

פולימורפיזם : התייחסות לאובייקטים שונים באופן קבוע ואחיד .

 

נניח שיש לנו שלושה אובייקטים מטיפוסים שונים אובייקט A מסוג משולש אובייקט B מסוג ריבוע ואבייקט C מסוג מעגל

 

נניח כי לכל אובייקט קיימת שיטה לחישוב שטח בשם Area

 

האם השיטה Area היא בעלת מימוש זהה בכל אחד משלושת האובייקטים ?

 

התשובה : לא .

 

לכל אובייקט שיטת חישוב השטח שונה ולכן בקריאה לשיטה Area אנו מצפים שכל אובייקט יממש אחרת את השיטה ע"פ סוג האובייקט .

אם האובייקט מסוג ריבוע השיטה תבצע חישוב של צלע בריבוע ,עבור אובייקט מסוג משולש השיטה תבצע הכפלת הגובה במחצית הבסיס

ועבור אובייקט מסוג מעגל השיטה Area תבצע חישוב של פאי כפול רדיוס בריבוע .

 

כאשר אנו פונים לאובייקט ומבקשים ממנו לבצע חישוב שטח אנו מצפים כי האובייקט יחשב את השטח ע"פ סוג האובייקט למרות שאנו

פונים באופן אחיד לאותה שיטה כלפי כל סוגי האובייקים .

 

 

דוגמה : תיאורטית

Shapes  RrfObject = A

RrfObject.Area

RrfObject = B

RrfObject.Area

 RrfObject = C

RrfObject.Area

 

 

בעזרת מצביע כללי מסוג מחלקה מופשטת

או ממשק ניתן לפנות באופן אחיד לכל האובייקטים ולהפעיל את השיטות ללא התחשבות בסוג האובייקט , האובייקט יפעיל את השיטה ע"י סוגו בהתאמה מלאה.

 
 

 

 

 

 

 

 

 


דוגמה : קוד מלא

 

 using System;

class Shape

{

    public virtual void Area()

    {

        Console.WriteLine(" Area=");

    }

}

 

class Square:Shape

{

    private double Side;

    public  Square(double Side)

    {

    this.Side=Side;

    }

 

    public override void Area()

    {

    Console.WriteLine("Square Area={0}", Side*Side);

    }

}

 

class Circle:Shape

{

    private double Radius;

    public  Circle(double Radius)

    {

        this.Radius=Radius;

    }

 

    public override void Area()

    {

        Console.WriteLine("Circle Area={0}", Radius * Radius * Math.PI);

    }

}

 

class Triangle:Shape

{

    private double High;

    private double Base;

    public Triangle(double High,double Base)

    {

        this.High=High;

        this.Base=Base;

    }

 

    public override void Area()

    {

        Console.WriteLine("Triangle Area={0}", 0.5*Base*High);

    }

}

 

class classMain

{

    static void Main()

    {

    Square Sq1 = new Square(10);

    Circle Cir1 = new Circle(10);

    Triangle tri1 = new Triangle(30,10);

 

    Shape[] shapes = new Shape[3];

    shapes[0]=Sq1;

    shapes[1]=Cir1;

    shapes[2]=tri1;

 

 

        foreach(Shape obj in shapes)

        {

            obj.Area();

        }

Console.ReadLine();

   

    }

 

}

 

 

תוצאה:

Square Area=100

Circle Area=314.159265358979

Triangle Area=150