Պոլիմորֆիզմ (ծրագրավորում)

Ծրագրավորման լեզուներում և տիպերի տեսությունում պոլիմորֆիզմ(Հունարեն πολύς, պոլիս, "շատ" և μορφή, մորֆ, "ձև") կոչվում է տարբեր տեսակի տվյալները կարգավորելու ունակությունը։ Գոյություն ունեն մի քանի տեսակի պոլիմորֆիզմներ։ Երկու ամենատարբեր տեսակի պոլիմորֆիզմները 1967 թ.-ին նկարագրվել են Քրիսթոֆեր Սթրեչիի կողմից։ Մեկը հատուկ պոլիմորֆիզմն է (կամ ad hoc պոլիմորֆիզմ), մյուսը՝ պարամետրիկ պոլիմորֆիզմը։ Հակիրճ՝ հատուկ պոլիմորֆիզմը նկարագրվում է «նման ինտերֆեյսով շատ իրագործումներ» սկզբունքով, իսկ պարամետրիկը՝ «մեկ իրագործում ընդհանրացված ինտերֆեյսով» պրինցիպով։

Այլ կերպ որպես պոլիմորֆիզմի օրինակներ կարող ենք բերել գերբեռնումը (overloading) և վերարժեքավորումը (overriding

Մեթոդի գերբեռնում

խմբագրել

Մեթոդի գերբեռնման ժամանակ ստեղծվում են նույն անվանումով և վերադարձվող տիպով, սակայն տարբեր պարամետրերով մեթոդներ։

static void compare(int a, int b){
        if(a > b){
            System.out.printf("%d is greater than %d.", a, b);
        }
        else if(a < b){
            System.out.printf("%d is greater than %d.", b, a);
        }
        else {
            System.out.println("The numbers are equal.");
        }
    }

Սա երկու թվերի համեմատման մեթոդ է

static void compare(int a, int b, int c){
        if(a > b && a > c){
            System.out.printf("%d is greater than %d and %d.", a, b, c);
        }
        else if(b > a && b > c){
            System.out.printf("%d is greater than %d and %d.", b, a, c);
        }
        else if (c > a && c > b){
            System.out.printf("%d is greater than %d and %d.", c, a, b);
        }
    }

Սա էլ նույն մեթոդը, բայց արդեն երեք թվերի համար

Մեթոդի վերարժեքավորում

խմբագրել

Մեթոդը կարող ենք վերարժեքավորել, երբ որևէ դասից ժառանգված ենթադասում օգտագործում ենք մայր դասի մեթոդը՝ փոխելով նրա պարունակությունը։

public class Person {
    void sayGetting (){
        System.out.println("Hello, I'm a person!");
    }
}

Այստեղ Person դասն ունի մեթոդ, որն արտածում է "Բարև, ես մարդ եմ" հաղորդագրությունը։

class Student extends Person{

    @Override
    void sayGetting() {
        System.out.println("Hello, I'm a student!");
    }
}

Իսկ այստեղ Student դասը ժառանգելով Person դասը և նրա sayGetting մեթոդը արտածում է "Բարև, ես ուսանող եմ" հաղորդագրությունը։