Polimorfism

 

Polimorfisumul este un concept fundamental īn cadrul limbajelor orientate pe obiecte.

 

Pentru exemplificarea acestui concept se consideră o aplicaţie care gestionează migrarea păsărilor.

 

package isp.polimorfism.migratie;

class Bird {

            public void move(){

                        System.out.println("The bird is moving.");

            }

}

 

class Penguin extends Bird{

            public void move(){

                        System.out.println("The PENGUIN is swiming.");

            }

}

 

class Goose extends Bird{

            public void move(){

                        System.out.println("The GOOSE is flying.");

            }

}

 

public class BirdController{

            Bird[] birds = new Bird[3];

            BirdController(){

                        birds[0] = createBird();

                        birds[1] = createBird();

                        birds[2] = createBird();

            }

            public void relocateBirds(){

                        for(int i=0;i<birds.length;i++)

                                    birds[i].move();

            }

           

            private Bird createBird(){

                        int i = (int)(Math.random()*10);

                        if(i<5)

                                    return new Penguin();

                        else

                                    return new Goose();

            }

           

            public static void main(String [] args){

                        BirdController bc = new BirdController();

                        bc.relocateBirds();

            }          

}

 

Īn aplicaţia anterioară se construieşte o ierarhie de clase avānd clasa de bază Bird. Fiecare dintre clasele derivate extinde această clasă şi suprascrie metoda move pentru a implementa metoda de deplasare specifica fiecărei păsări. Clasa BirdController controlează un grup de păsări care sunt memorate īn cadrul unui vector de tip Bird.

 

In momentul īn care este apelată metoda relocate() din BirdControler, aceasta va parcurge lista de obiecte din cadrul vectorului birds şi va invoca metod move() corespunzătoare tipului de obiect (Penguin sau Goose). Rezultatul este ca pinguinul va īnota iar gasca va zbura pentru a realiza migrarea, chiar daca clasa BirdControler pastreaza referinte doar spre clasa Bird. De observar faptul că īn momentul compilării aplicaţiei nu se poate cunoaşte care metodă move din cadrul cărei clase va fi apelată pentru fiecare obiect din cadrul vectorului birds.

 

Acest comportament de descoperire dinamică īn timpul rulării a tipului concret al unui obiect din cadrul unei ierarhii de tipuri se numeşte polimorfism. Polimorfismul şi moştenirea ne permit să manipulăm īn mod unitar colecţii de obiecte ce īmpart caracteristici comune definite prin intermediul unui tip de bază (clase de bază).

 

EXERCITIU: Construiţi un proiect Eclipse şi adăugaţi īn cadrul lui aplicaţia de mai sus. Testaţi aplicaţia. Adăugaţi īn cadrul aplicaţie o nouă specie de pasări şi testaţi din nou.