1 Sobrecarga

Propaganda
Algoritmos e Programação II
Aula 3 – Sobrecarga
*Adaptado do material do Prof. Júlio Machado
Sobrecarga
Em várias linguagens é comum
encontrarmos rotinas que fazem basicamente
a mesma coisa, porém, com nomes distintos
porque se diferenciam nos tipos dos
parâmetros.
Ex.: classe Acumulador
Dois métodos adicionaDouble e adicionaInt.
Ambos somam o valor recebido como
parâmetro ao atributo de instância.
public class Acumulador {
private double valor;
public Acumulador() {
valor = 0;
}
public double getValor() {
return(valor);
}
public void adicionaDouble(double n) {
valor = valor + n;
}
public void adicionaInt(int n) {
valor = valor + n;
}
}
1
Em Java, podemos criar os dois métodos com o mesmo nome!
A condição é que tenham uma lista de parâmetros
diferentes.
public class Acumulador {
...
public void adiciona(double n) {
valor = valor + n;
}
public void adiciona(int n) {
valor = valor + n;
}
}
2
Chama-se de sobrecarga de métodos
(overloading) o ato de criar diversos métodos
com o mesmo nome que se diferenciam pela
lista de argumentos (parâmetros).
Métodos são identificados pela sua
assinatura: nome do método + lista de
parâmetros.
Métodos com mesmo nome, mas com tipo,
quantidade ou ordenação de parâmetros
diferentes, são considerados métodos
diferentes.
Cuidado!!!
Esses métodos possuem uma definição correta para
sobrecarga?
public void soma(int n, double d)
public void soma(double d, int n)
?
public void soma(int n)
public void soma(int v)
?
public void soma(int n)
public double soma(int n)
?
Na API de Java, diversas classes utilizam a
sobrecarga de métodos, por exemplo:
Classe String
valueOf (boolean b)
valueOf (char c)
valueOf (double d)
valueOf (float f)
valueOf (int i)
valueOf (long l)
retorna a representação em String do argumento
recebido.
3
Classe Vector
• add(int indice, Object elemento)
insere o elemento na posição indicada do vetor
• add(Object elemento)
insere o elemento no final do vetor
• remove(int indice)
remove o elemento da posição indicada do vetor
• remove(Object elemento)
busca e remove a primeira ocorrência do
elemento encontrada no vetor
Sobrecarga de Construtores
Usualmente é útil para uma classe possuir
mais de um construtor a fim de oferecer
diversas maneiras para instanciar e inicializar
os objetos dessa classe.
Um construtor também pode sofrer o
processo de sobrecarga.
Exemplo: classe Circulo
Deseja-se ter a
capacidade de inicializar
os atributos de um novo
objeto de duas formas:
através de um construtor
sem parâmetros, que
cria um círculo padrão
de centro (0,0) e raio 1,
e através de um
construtor que recebe as
informações de centro e
raio para criar o círculo
4
public class Circulo {
private int centrox;
private int centroy;
private int raio;
public Circulo(int x, int y, int r){
if (x >= 0) centrox = x;
else centrox = 0;
if (y >= 0) centroy = y;
else centroy = 0;
if (r > 0) raio = r;
else raio = 1;
}
public Circulo() {
centrox = 0;
centroy = 0;
raio = 1;
}
...
}
Testando a classe:
public class TesteCirculo {
public static void main (String args[]) {
Circulo circ1 = new Circulo();
Circulo circ2 = new Circulo(1,2,4);
System.out.println("Area circ1= " + circ1.area());
System.out.println("Area circ2= " + circ2.area());
}
}
Estudo de Caso
Classe Professor
Definir construtores para:
Inicializar um professor
informando um nome, número
de matrícula e carga horária;
Inicializar um professor
informando o nome e número
de matrícula, com carga
horária padrão de 12 horas
semanais.
5
Estudo de Caso – Construtores 1
public class Professor {
...
public Professor(String n, int m, int c) {
setNome(n);
setMatricula(m);
setCargaHoraria(c);
}
}
public Professor(String n, int m) {
setNome(n);
setMatricula(m);
setCargaHoraria(12);
}
...
Observando mais de perto a implementação
dos dois construtores da classe Professor:
Nota-se que o segundo construtor (o
construtor com dois parâmetros) possui o
mesmo código de inicialização do primeiro
construtor (o construtor com três parâmetros).
Repetir desnecessariamente código não é
uma boa prática de programação.
Java permite compartilhar código entre os
diversos construtores!!!
Palavra-chave this().
Estudo de Caso – Construtores 2
public class Professor {
...
public Professor(String n, int m, int c) {
setNome(n);
setMatricula(m);
setCargaHoraria(c);
}
}
public Professor(String n, int m) {
this(n,m,12);
}
Um construtor pode chamar outro
construtor da mesma classe utilizando
...
a chamada this( ).
Deve obrigatoriamente ser o primeiro
comando do corpo de definição do
construtor sobrecarregado.
6
Exercícios
1. Altere a classe Ponto apresentada
abaixo para apresentar três
construtores:
Um sem parâmetros, que cria um
ponto nas coordenadas (0,0);
Um que recebe dois parâmetros de
coordenadas X e Y;
Um que inicializa o ponto através
das coordenadas de um outro ponto
recebido como argumento.
2) Utilizando a classe Ponto, altere e introduza
novos métodos na classe Circulo, através da
sobrecarga, para realizar as seguintes
funções:
armazenar as coordenadas do centro em um
objeto Ponto;
construir novos círculos através da informação
de um ponto central e raio;
mover um círculo para um novo ponto central
qualquer.
3) Desenvolva um programa em Java para testar
todos
os novos métodos desenvolvidos no exercício
anterior para a classe Circulo.
4) Crie uma classe CadastroDePontos que
armazena
um conjunto de pontos em um ArrayList, e contenha
um método para incluir novos pontos no cadastro e
um método para imprimir as coordenadas de todos
os pontos.
7
4) Acrescente à classe Ponto, desenvolvida
anteriormente, a capacidade de calcular a distância entre
dois pontos. Para tal, é desejado o seguinte
comportamento:
calcular a distância entre a instância do ponto e um
outro objeto ponto qualquer;
calcular a distância entre a instância do ponto e um
outro ponto dado pelas coordenadas X e Y;
calcular a distância entre dois pontos dadas as
coordenadas X1, Y1 e X2, Y2.
Obs: A distância entre dois pontos é calculada por:
5) Você está desenvolvendo um sistema de cálculos
matemáticos e se depara com um problema: a
necessidade de utilização de números complexos.
Solicitando ajuda de um matemático, você obtém as
seguintes informações:
...
...
Números complexos possuem a forma
parte real + parte imaginária * i
como por exemplo 1+3i.
i representa a raiz quadrada de -1.
O número complexo resultante da soma é aquele cuja
parte real é a soma das partes reais dos operandos, e
a parte imaginária é a soma das partes imaginárias
dos operandos.
O número complexo resultante da subtração é aquele
cuja parte real é a diferença das partes reais dos
operandos, e a parte imaginária é a diferença das
partes imaginárias dos operandos.
Números complexos podem ser representados por
extensão, como 1+3i, ou por uma forma resumida pelo
par (parte real, parte imaginária), como (1,3).
Um número real a qualquer, é representado pelo
número complexo (a,0).
Modele e implemente as estruturas necessárias para a
utilização de números complexos em um programa
Java.
8
Download