JavaRush /Blog Java /Random-ES /Práctica de uso del polimorfismo.

Práctica de uso del polimorfismo.

Publicado en el grupo Random-ES
¡Hola! Hoy terminamos una serie de conferencias sobre los principios de la programación orientada a objetos . En esta lección hablaremos sobre polimorfismo. Práctica del uso del polimorfismo - 1El polimorfismo es la capacidad de tratar múltiples tipos como si fueran del mismo tipo. En este caso, el comportamiento de los objetos será diferente según a qué tipo pertenezcan. Veamos esta afirmación con más detalle. Comencemos con la primera parte: "la capacidad de trabajar con varios tipos como si fueran del mismo tipo". ¿Cómo pueden ser diferentes tipos uno y el mismo? Suena un poco extraño :/ En realidad es simple. Por ejemplo, esta situación surge con el uso normal de la herencia. Vamos a ver cómo funciona. Digamos que tenemos una clase principal simple Catcon un único método run(): "ejecutar":
public class Cat {

   public void run() {
       System.out.println("Бег!");
   }
}
Ahora creemos tres clases que hereden de Cat: y Lion, que denotan león, tigre y guepardo. TigerCheetah
public class Lion extends Cat {

   @Override
   public void run() {
       System.out.println("Лев бежит со velocidadю 80 км/ч");
   }
}

public class Tiger extends Cat {

   @Override
   public void run() {
       System.out.println("Тигр бежит со velocidadю 60 км/ч");
   }
}

public class Cheetah extends Cat {

   @Override
   public void run() {
       System.out.println("Гепард бежит со velocidadю до 120 км/ч");
   }
}
Entonces tenemos 3 clases. Simulemos una situación en la que podamos trabajar con ellos como si fueran de la misma clase. Imaginemos que uno de nuestros gatos está enfermo y necesita la ayuda del Dr. Aibolit. Intentemos crear una clase Aibolitque pueda tratar leones, tigres y guepardos.
public class Aibolit {

   public void healLion(Lion lion) {

       System.out.println("Лев здоров!");
   }

   public void healTiger(Tiger tiger) {

       System.out.println("Тигр здоров!");
   }

   public void healCheetah(Cheetah cheetah) {

       System.out.println("Гепард здоров!");
   }
}
Parecería que el problema está resuelto: la clase está escrita y lista para usar. Pero ¿qué haremos si queremos ampliar nuestro programa? Ahora sólo tenemos tres especies: leones, tigres y guepardos. Pero existen más de 40 especies de gatos en el mundo. Imagínese lo que sucederá si agregamos al programa clases separadas para gatos de Pallas, jaguares, Maine Coons, gatos domésticos y todos los demás. Práctica del uso del polimorfismo - 2El programa en sí, por supuesto, funcionará, pero la clase Aibolittendrá que agregar constantemente nuevos métodos para tratar cada tipo de gato y, como resultado, crecerá a tamaños sin precedentes. Aquí es donde entra en juego la propiedad del polimorfismo: "la capacidad de trabajar con varios tipos como si fueran del mismo tipo". No necesitamos crear innumerables métodos que hagan lo mismo: tratar al gato. Un método será suficiente para todos los casos a la vez:
public class Aibolit {

   public void healCat(Cat cat) {

       System.out.println("Пациент здоров!");
   }
}
healCat()Podemos pasar tanto objetos Lioncomo Tigerobjetos al método Cheetah; todos son Cat:
public class Main {

   public static void main(String[] args) {

       Aibolit aibolit = new Aibolit();

       Lion simba = new Lion();
       Tiger sherekhan = new Tiger();
       Cheetah chester = new Cheetah();

       aibolit.healCat(simba);
       aibolit.healCat(sherekhan);
       aibolit.healCat(chester);
   }
}
Salida de consola:

Пациент здоров!
Пациент здоров!
Пациент здоров!
Es así como nuestra clase Айболитpuede trabajar con diferentes tipos como si fueran del mismo tipo. Pasemos ahora a la segunda parte: "en este caso, el comportamiento de los objetos será diferente según el tipo al que pertenezcan". Aquí también todo es sencillo. En la naturaleza, todos los gatos corren de manera diferente. Como mínimo, su velocidad de carrera difiere. Entre nuestras tres mascotas, el guepardo es el más rápido, mientras que el tigre y el león corren más lento. Es decir, su comportamiento es diferente. El polimorfismo no sólo nos da la posibilidad de utilizar diferentes tipos como uno solo. Al mismo tiempo, nos permite no olvidarnos de sus diferencias y preserva el comportamiento específico de cada uno de ellos. Esto se puede entender con este ejemplo. Digamos que después de una recuperación exitosa, nuestros gatos decidieron correr un poco para celebrarlo. Agreguemos esto a nuestra clase Aibolit:
public class Aibolit {

   public void healCat(Cat cat) {

       System.out.println("Пациент здоров!");
       cat.run();
   }
}
Intentemos ejecutar el mismo código para tratar tres animales:
public static void main(String[] args) {

   Aibolit aibolit = new Aibolit();

   Lion simba = new Lion();
   Tiger sherekhan = new Tiger();
   Cheetah chester = new Cheetah();

   aibolit.healCat(simba);
   aibolit.healCat(sherekhan);
   aibolit.healCat(chester);
}
Y así es como se verá el resultado:

Пациент здоров!
Лев бежит со velocidadю 80 км/ч
Пациент здоров!
Тигр бежит со velocidadю 60 км/ч
Пациент здоров!
Гепард бежит со velocidadю до 120 км/ч
Aquí vemos claramente que se conservó el comportamiento específico de nuestros objetos, aunque pasamos los tres animales a un método, "generalizando" cada uno de ellos a Cat. Gracias al polimorfismo, Java recuerda perfectamente que no se trata solo de tres gatos, sino de un león, un tigre y un guepardo, que corren de manera diferente. Ésta es la principal ventaja de utilizar polimorfismo-flexibilidad . Cuando necesitamos crear alguna funcionalidad común a muchos tipos, los leones, tigres y guepardos simplemente se convierten en “gatos”. Todos los animales son diferentes, pero en algunas situaciones, un gato es un gato, sin importar a qué especie pertenezca :) Aquí hay una confirmación en video.
Cuando no se requiere esta “generalización”, y por el contrario necesitamos que el comportamiento de las especies sea diferente, cada tipo se comporta de manera diferente. Gracias al polimorfismo, crea una única interfaz (conjunto de métodos) para una amplia gama de clases. Debido a esto, se reduce la complejidad de los programas. Incluso si expandiéramos el programa a 40 tipos de gatos, todavía tendríamos la interfaz más simple posible: un método run()para los 40 gatos.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION