$30 off During Our Annual Pro Sale. View Details »

Orientação a Objetos — Polimorfismo Conceito, e...

Orientação a Objetos — Polimorfismo Conceito, exemplos práticos e exercı́cio

▶ Entender o que é polimorfismo em OO
▶ Diferenciar polimorfismo em tempo de compilação e execução
▶ Demonstrar binding dinâmico com exemplos (Java e Python)
▶ Aplicar polimorfismo para resolver exercı́cio rápido

Avatar for Herez.com.br

Herez.com.br

November 24, 2025
Tweet

More Decks by Herez.com.br

Other Decks in Programming

Transcript

  1. Orienta¸ c˜ ao a Objetos — Polimorfismo Conceito, exemplos pr´

    aticos e exerc´ ıcio LinkedIn.com/in/Herez Herez.com.br [email protected] Herez Moise Kattan 25 de Novembro, 2025
  2. Objetivos da aula ▶ Entender o que ´ e polimorfismo

    em OO ▶ Diferenciar polimorfismo em tempo de compila¸ c˜ ao e execu¸ c˜ ao ▶ Demonstrar binding dinˆ amico com exemplos (Java e Python) ▶ Aplicar polimorfismo para resolver exerc´ ıcio r´ apido
  3. Contexto r´ apido de Orienta¸ c˜ ao a Objetos ▶

    Encapsulamento, Heran¸ ca, Abstra¸ c˜ ao, Polimorfismo ▶ Papel do polimorfismo: tratar objetos de tipos diferentes por um mesmo contrato; reduzir acoplamento; aumentar extensi- bilidade ▶ Polimorfismo reduz o acoplamento entre as classes; previne que novos c´ odigos resultem em modifica¸ c˜ oes em diversos lugares.
  4. Defini¸ c˜ ao e benef´ ıcio ▶ Polimorfismo: capacidade de

    objetos de diferentes classes re- sponderem ` a mesma chamada de m´ etodo de forma espec´ ıfica ao seu tipo concreto ▶ Benef´ ıcios: flexibilidade, extensibilidade, reuso e facilita a leitura do c´ odigo.
  5. Tipos de polimorfismo ▶ Est´ atico / compile-time: overloading (mesmo

    nome, assinat- uras diferentes) — resolvido em compila¸ c˜ ao ▶ Dinˆ amico / runtime: overriding (subclasse substitui imple- menta¸ c˜ ao da superclasse) Foco da aula: polimorfismo dinˆ amico (overriding) e uso com interfaces/abstra¸ c˜ oes)
  6. Diagrama conceitual (lousa) ▶ Animal ← Mam´ ıfero ← Cachorro

    ▶ Outra ramifica¸ c˜ ao: Animal ← P´ assaro ← Andorinha ▶ Vari´ avel do tipo Animal pode referenciar Cachorro ou Andorinha; animal.comunicar() usa a implementa¸ c˜ ao do objeto concreto
  7. Exemplo em Java (overriding) class Animal { void comunicar() {System.out.println("Som

    gen´ erico");}} class Cachorro extends Animal { @Override void comunicar() {System.out.println("Au au"); }} class Gato extends Animal { @Override void comunicar() { System.out.println("Miau"); }} public class Teste { public static void main(String[] args) { Animal a1 = new Cachorro(); Animal a2 = new Gato(); a1.comunicar(); // Au au a2.comunicar(); // Miau } }
  8. Exemplo em Python (duck typing) //Python permite polimorfismo no qual

    //Herdar n~ ao ´ e obrigat´ orio para funcionar class cachorro: def comunicar (self): print("au au") class gato: def comunicar (self): print("miau") def comunicando (animal): animal.comunicar() comunicando(cachorro()) comunicando(gato())
  9. Dicas ▶ N˜ ao confundir overloading com overriding ▶ Evitar

    hierarquias muito profundas, pois podem dificultar a manuten¸ c˜ ao e depura¸ c˜ ao ▶ Documentar m´ etodos polim´ orficos
  10. Exerc´ ıcio proposto (para a avalia¸ c˜ ao) Enunciado: ▶

    Implementar hierarquia Vehicle com subtipos Car, Bike, Truck ▶ Cada classe implementa mover() com comportamento difer- ente: ▶ Car: ”dirigindo” ▶ Bike: ”pedalando” ▶ Truck: ”transportando carga” ▶ Escrever uma fun¸ c˜ ao que recebe uma lista de Vehicle e in- voque mover() em cada elemento Crit´ erios r´ apidos de corre¸ c˜ ao: compila/executa e imprime com- portamentos diferentes; uso de abstra¸ c˜ ao; c´ odigo limpo
  11. Solu¸ c˜ ao sugerida (Java) — implementa¸ c˜ ao I

    interface Vehicle { void mover(); } class Car implements Vehicle { public void mover() { System.out.println("Car: dirigindo"); } } class Bike implements Vehicle { public void mover() { System.out.println("Bike: pedalando"); } } class Truck implements Vehicle { public void mover() { System.out.println("Truck: transportando carga");} }
  12. Solu¸ c˜ ao sugerida (Java) — implementa¸ c˜ ao II

    public class TestVehicles { public static void moverTodos(java.util.List<Vehicle> vs) { for (Vehicle v : vs) v.mover(); } public static void main(String[] args) { java.util.List<Vehicle> lista = new java.util.ArrayList<>(); lista.add(new Car()); lista.add(new Bike()); lista.add(new Truck()); moverTodos(lista); } }
  13. Solu¸ c˜ ao sugerida (Python) — implementa¸ c˜ ao e

    execu¸ c˜ ao class Vehicle: def mover(self): raise NotImplementedError class Car(Vehicle): def mover(self): print("Car: dirigindo") class Bike(Vehicle): def mover(self): print("Bike: pedalando") class Truck(Vehicle): def mover(self): print("Truck: transportando carga") def mover_todos(lista): for v in lista: v.mover() if __name__ == "__main__": lista = [Car(), Bike(), Truck()] mover_todos(lista)