Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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.

Slide 4

Slide 4 text

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.

Slide 5

Slide 5 text

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)

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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 } }

Slide 8

Slide 8 text

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())

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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");} }

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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)

Slide 14

Slide 14 text

Encerramento ▶ Resumo: polimorfismo permite tratar diferentes tipos por um mesmo contrato; ▶ Perguntas finais.