JavaRush /Blogue Java /Random-PT /Prática de uso de polimorfismo

Prática de uso de polimorfismo

Publicado no grupo Random-PT
Olá! Hoje estamos finalizando uma série de palestras sobre os princípios da OOP . Nesta lição falaremos sobre polimorfismo. Prática de uso de polimorfismo - 1Polimorfismo é a capacidade de tratar vários tipos como se fossem do mesmo tipo. Neste caso, o comportamento dos objetos será diferente dependendo do tipo a que pertencem. Vejamos esta afirmação com mais detalhes. Vamos começar com a primeira parte: “a capacidade de trabalhar com vários tipos como se fossem do mesmo tipo”. Como podem diferentes tipos ser um e o mesmo? Parece um pouco estranho:/ Na verdade é simples. Por exemplo, esta situação surge com o uso normal da herança. Vamos ver como isso funciona. Digamos que temos uma classe pai simples Catcom um único método run()- “run”:
public class Cat {

   public void run() {
       System.out.println("Бег!");
   }
}
Agora vamos criar três classes que herdam de Cat: Lion, Tigere Cheetah, denotando leão, tigre e chita.
public class Lion extends Cat {

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

public class Tiger extends Cat {

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

public class Cheetah extends Cat {

   @Override
   public void run() {
       System.out.println("Гепард бежит со speedю до 120 км/ч");
   }
}
Então temos 3 aulas. Vamos simular uma situação onde podemos trabalhar com eles como se fossem da mesma classe. Imaginemos que um dos nossos gatos está doente e precisa da ajuda do Dr. Aibolit. Vamos tentar criar uma classe Aibolitque seja capaz de tratar leões, tigres e chitas.
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("Гепард здоров!");
   }
}
Parece que o problema está resolvido - a classe está escrita e pronta para uso. Mas o que faremos se quisermos expandir nosso programa? Agora temos apenas 3 espécies: leões, tigres e chitas. Mas existem mais de 40 espécies de gatos no mundo. Imagine o que acontecerá se adicionarmos ao programa aulas separadas para gatos de Pallas, onças, Maine Coons, gatos domésticos e todos os outros. Prática de uso de polimorfismo - 2O programa em si, é claro, funcionará, mas a classe Aibolitterá que adicionar constantemente novos métodos para tratar cada tipo de gato e, como resultado, crescerá para tamanhos sem precedentes. É aqui que entra em jogo a propriedade do polimorfismo - “a capacidade de trabalhar com vários tipos como se fossem do mesmo tipo”. Não precisamos criar inúmeros métodos que farão a mesma coisa – tratar o gato. Um método será suficiente para todos os casos ao mesmo tempo:
public class Aibolit {

   public void healCat(Cat cat) {

       System.out.println("Пациент здоров!");
   }
}
healCat()Podemos passar objetos Lione Tigerobjetos para o método Cheetah- eles são todos 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);
   }
}
Saída do console:

Пациент здоров!
Пациент здоров!
Пациент здоров!
É assim que nossa classe Айболитpode trabalhar com tipos diferentes como se fossem do mesmo tipo. Agora vamos tratar da segunda parte: “neste caso, o comportamento dos objetos será diferente dependendo do tipo a que pertencem”. Tudo é simples aqui também. Na natureza, todos os gatos funcionam de maneira diferente. No mínimo, a velocidade de corrida é diferente. Entre os nossos três animais de estimação, a chita é a mais rápida, enquanto o tigre e o leão correm mais devagar. Ou seja, o comportamento deles é diferente. O polimorfismo não nos dá apenas a capacidade de usar diferentes tipos como um só. Ao mesmo tempo, permite-nos não esquecer as suas diferenças e preserva o comportamento específico de cada um deles. Isso pode ser entendido com este exemplo. Digamos que após uma recuperação bem-sucedida, nossos gatos decidiram correr um pouco para comemorar. Vamos adicionar isso à nossa classe Aibolit:
public class Aibolit {

   public void healCat(Cat cat) {

       System.out.println("Пациент здоров!");
       cat.run();
   }
}
Vamos tentar executar o mesmo código para tratar três animais:
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);
}
E o resultado será assim:

Пациент здоров!
Лев бежит со speedю 80 км/ч
Пациент здоров!
Тигр бежит со speedю 60 км/ч
Пациент здоров!
Гепард бежит со speedю до 120 км/ч
Aqui vemos claramente que o comportamento específico dos nossos objetos foi preservado, embora tenhamos passado todos os três animais para um método, “generalizando” cada um deles para Cat. Graças ao polimorfismo, Java lembra perfeitamente que não se trata apenas de três gatos, mas sim de um leão, um tigre e uma chita, que correm de maneira diferente. Esta é a principal vantagem do uso da flexibilidade do polimorfismo . Quando precisamos criar alguma funcionalidade comum a vários tipos, leões, tigres e chitas simplesmente se transformam em “gatos”. Todos os animais são diferentes, mas em algumas situações - um gato é um gato, não importa a que espécie pertença :) Aqui está uma confirmação em vídeo para você.
Quando esta “generalização” não é necessária, e pelo contrário necessitamos que o comportamento das espécies seja diferente, cada tipo comporta-se de forma diferente. Graças ao polimorfismo, você cria uma interface única (conjunto de métodos) para uma ampla variedade de classes. Devido a isso, a complexidade dos programas é reduzida. Mesmo que expandíssemos o programa para 40 tipos de gatos, ainda teríamos a interface mais simples possível – um método run()para todos os 40 gatos.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION