Skip to content

Commit

Permalink
Merge pull request #57 from Guadanhim/upstream/polimorfismo
Browse files Browse the repository at this point in the history
#2 Explicação do pilar de Polimorfismo
  • Loading branch information
gleiceellen authored Oct 16, 2023
2 parents f1713f0 + 6b25d66 commit 8d5c3b4
Show file tree
Hide file tree
Showing 3 changed files with 111 additions and 0 deletions.
44 changes: 44 additions & 0 deletions POO/Polimorfismo/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Polimorfismo

## Um dos pilares da programação orientada a objetos (POO)

Morfologicamente falando ao separar a palava temos _Poli_ que significa muitos, vários e _morfismo_ que está relacionado à forma.
Sendo assim _Polimorfismo_ que dizer "várias formas".

O polimorfismo permite que objetos de classes diferentes respondam à mesma mensagem ou método de maneiras diferentes. Isso é possível porque objetos de tipos diferentes podem ter métodos com o mesmo nome, mas comportamentos diferentes.

Portanto, o polimorfismo é uma característica importante da POO, pois torna o código mais versátil e flexível. Isso significa que você pode escrever código que funcione para objetos de várias classes diferentes, desde que essas classes implementem métodos com assinatura igual esperada.

Podemos pontuar também o fato dele ser complementado pela _herança_ (um outro pilar da POO).

E por se dividir em dois tipos principais:
- _Sobrecarga_.
- _Sobrescrita_.

### Sobrecarga

A sobrecarga é a capacidade de uma classe ter dois ou mais métodos com o mesmo nome, mas com assinaturas diferentes. A assinatura de um método é composta pelo seu nome, tipo de retorno e lista de parâmetros.

### Sobrescrita

A sobrescrita é a capacidade de uma subclasse substituir o comportamento de um método herdado da superclasse. A sobrescrita requer que o método na subclasse tenha a mesma assinatura do método na superclasse.

#### Diferenças entre os tipos:
| Característica | Sobrecarga | Sobrescrita |
|---|---|---|
| Definição | Capacidade de uma classe ter dois ou mais métodos com o mesmo nome, mas com assinaturas diferentes | Capacidade de uma subclasse substituir o comportamento de um método herdado da superclasse |
| Assinatura | Diferente | Igual |
| Tipo de retorno | Pode ser diferente | Deve ser o mesmo |
| Lista de parâmetros | Pode ser diferente | Deve ser a mesma |
| Modificadores | Qualquer | Não pode ser `final` ou `static` |


## Referências

- [Java - Oracle ](https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html)

- [UFSC - Prof Frank Siqueira ](http://www.inf.ufsc.br/~frank.siqueira/INE5605/10.Polimorfismo.pdf)

- [UNESP - Prof Daniel Cardozo Mourao ](https://www.feg.unesp.br/Home/PaginasPessoais/profadanielacardozomourao/polimorfismo.pdf)

- [UFSM - Flash utilizando Orientação a Objetos e a linguagem XML. ](http://www-usr.inf.ufsm.br/~rose/curso3/cafe/cap4_Polimorfismo.pdf)
33 changes: 33 additions & 0 deletions POO/Polimorfismo/exemplos/PolimorfismoSobrecarga.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
public class PolimorfismoSobrecarga {

// Método que aceita dois inteiros como argumentos
public int somar(int a, int b) {
return a + b;
}

// Método que aceita três inteiros como argumentos
public int somar(int a, int b, int c) {
return a + b + c;
}

// Método que aceita dois números de ponto flutuante como argumentos
public double somar(double a, double b) {
return a + b;
}

public static void main(String[] args) {
PolimorfismoSobrecarga calculadora = new PolimorfismoSobrecarga();

// Chamando o método de soma com dois inteiros
int resultado1 = calculadora.somar(5, 10);
System.out.println("Soma de inteiros: " + resultado1);

// Chamando o método de soma com três inteiros
int resultado2 = calculadora.somar(5, 10, 15);
System.out.println("Soma de três inteiros: " + resultado2);

// Chamando o método de soma com dois números de ponto flutuante
double resultado3 = calculadora.somar(3.5, 2.5);
System.out.println("Soma de números de ponto flutuante: " + resultado3);
}
}
34 changes: 34 additions & 0 deletions POO/Polimorfismo/exemplos/PolimorfismoSobrescrita.Java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// Classe pai (superclasse)
class Animal {
public void fazerSom() {
System.out.println("Animal faz algum som");
}
}

// Classe filha (subclasse)
class Cachorro extends Animal {
@Override
public void fazerSom() {
System.out.println("Cachorro late");
}
}

// Outra classe filha (subclasse)
class Gato extends Animal {
@Override
public void fazerSom() {
System.out.println("Gato mia");
}
}

public class PolimorfismoSobrescrita {
public static void main(String[] args) {
Animal meuAnimal;

meuAnimal = new Cachorro();
meuAnimal.fazerSom(); // Chama o método sobrescrito da classe Cachorro

meuAnimal = new Gato();
meuAnimal.fazerSom(); // Chama o método sobrescrito da classe Gato
}
}

0 comments on commit 8d5c3b4

Please sign in to comment.