Sobrecarga

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa

Sobrecarga de método permite a existência de vários métodos de mesmo nome, porém com assinaturas levemente diferentes ou seja variando no número , tipo de argumentos , no valor de retorno e até variáveis diferentes. Ficará a cargo do compilador escolher de acordo com as listas de argumentos os procedimentos ou métodos a serem executados.

Exemplo[editar | editar código-fonte]

Suponha a seguinte classe escrita em Java:

public class Soma {

  public int soma(int x, int y) {
    return x+y;
  } 
  
  public String soma(String x, String y) {
    return x+y;
  } 
  
  public double soma(double x, double y) {
    return x+y;
  } 

}

O método que será executado depende estritamente do tipo do parâmetro passado e esta decisão será feita pelo compilador.

Exemplo da sobrecarga no diagrama UML

Uml exemplo sobrecarga.svg

Benefícios[editar | editar código-fonte]

A importância de permitir a sobrecarga de métodos não reside em uma mera conveniência para evitar que se tenha que escolher e usar nomes novos para cada definição, ou para evitar conflitos entre nomes existentes em um determinado escopo e, assim, evitar a "poluição" do espaço de nomes usados em programas.

A sobrecarga de métodos tem, outrossim, a propriedade fundamental de permitir que expressões e nomes definidos por meio do uso de símbolos sobrecarregados possam ser usados em contextos que requerem valores de tipos distintos, permitindo assim que sejam definidas novas abstrações polimórficas.

Como um exemplo bastante simples, considere que o símbolo + é sobrecarregado para adição de inteiros e números de ponto flutuante. Nesse caso, podemos ter uma única definição para computar a soma dos inteiros em uma lista, seja ela uma lista de inteiros ou uma lista de números de ponto flutuante.

Em outras palavras, podemos fazer uma única definição, polimórfica, da mesma forma como ocorre no caso, tão justamente louvado, do polimorfismo paramétrico.

Ver também[editar | editar código-fonte]